Test Failed
Push — main ( b09f12...0abb31 )
by chief
05:29
created

web/public/yt/jsbin/www-core-vfl1pq97W.js   F

Complexity

Total Complexity 3067
Complexity/F 1.94

Size

Lines of Code 12872
Function Count 1577

Duplication

Duplicated Lines 163
Ratio 1.27 %

Importance

Changes 0
Metric Value
eloc 10236
c 0
b 0
f 0
dl 163
loc 12872
rs 0.8
wmc 3067
mnd 1490
bc 1490
fnc 1577
bpm 0.9448
cpm 1.9448
noi 118

690 Functions

Rating   Name   Duplication   Size   Complexity  
A www-core-vfl1pq97W.js ➔ Td 0 5 1
D www-core-vfl1pq97W.js ➔ X 0 51 13
A www-core-vfl1pq97W.js ➔ Rh 0 4 2
A www-core-vfl1pq97W.js ➔ Yj 0 5 2
A www-core-vfl1pq97W.js ➔ Pc 0 5 1
A www-core-vfl1pq97W.js ➔ af 0 3 1
A www-core-vfl1pq97W.js ➔ Ke 0 3 1
A www-core-vfl1pq97W.js ➔ gc 0 3 1
A www-core-vfl1pq97W.js ➔ Qh 0 4 2
B www-core-vfl1pq97W.js ➔ Sc 16 16 8
B www-core-vfl1pq97W.js ➔ ag 0 27 7
A www-core-vfl1pq97W.js ➔ yr 0 3 1
A www-core-vfl1pq97W.js ➔ yk 0 7 2
F www-core-vfl1pq97W.js ➔ ph 0 6 22
D www-core-vfl1pq97W.js ➔ Jm 0 3 13
A www-core-vfl1pq97W.js ➔ Wo 0 16 4
A www-core-vfl1pq97W.js ➔ lg 0 8 1
A www-core-vfl1pq97W.js ➔ Pl 0 4 1
F www-core-vfl1pq97W.js ➔ cj 0 48 15
B www-core-vfl1pq97W.js ➔ Pm 0 4 7
B www-core-vfl1pq97W.js ➔ uh 0 27 7
C www-core-vfl1pq97W.js ➔ J 23 23 9
A www-core-vfl1pq97W.js ➔ yf 0 4 2
A www-core-vfl1pq97W.js ➔ rd 0 4 2
A www-core-vfl1pq97W.js ➔ Li 0 11 3
A www-core-vfl1pq97W.js ➔ Km 0 15 3
A www-core-vfl1pq97W.js ➔ Gp 0 12 2
A www-core-vfl1pq97W.js ➔ Cr 0 4 2
B www-core-vfl1pq97W.js ➔ Xh 0 17 8
A www-core-vfl1pq97W.js ➔ Hf 0 12 5
A www-core-vfl1pq97W.js ➔ Sp 0 4 2
B www-core-vfl1pq97W.js ➔ yq 0 3 7
A www-core-vfl1pq97W.js ➔ Jl 0 25 4
A www-core-vfl1pq97W.js ➔ Rc 0 3 1
A www-core-vfl1pq97W.js ➔ Fj 0 16 3
A www-core-vfl1pq97W.js ➔ Ln 0 5 1
A www-core-vfl1pq97W.js ➔ C 0 3 2
A www-core-vfl1pq97W.js ➔ ek 0 9 4
C www-core-vfl1pq97W.js ➔ Yh 0 5 11
A www-core-vfl1pq97W.js ➔ dn 0 18 3
A www-core-vfl1pq97W.js ➔ ff 0 6 2
A www-core-vfl1pq97W.js ➔ zl 0 3 4
A www-core-vfl1pq97W.js ➔ gf 0 5 1
A www-core-vfl1pq97W.js ➔ Yf 0 3 2
A www-core-vfl1pq97W.js ➔ cd 0 9 3
A www-core-vfl1pq97W.js ➔ ob 0 7 2
A www-core-vfl1pq97W.js ➔ se 0 14 4
C www-core-vfl1pq97W.js ➔ yo 0 3 11
F www-core-vfl1pq97W.js ➔ Em 0 3 15
A www-core-vfl1pq97W.js ➔ I 0 4 3
A www-core-vfl1pq97W.js ➔ F 0 3 2
C www-core-vfl1pq97W.js ➔ qh 0 21 10
A www-core-vfl1pq97W.js ➔ Gn 0 21 4
F www-core-vfl1pq97W.js ➔ sd 0 48 15
B www-core-vfl1pq97W.js ➔ pm 0 4 7
A www-core-vfl1pq97W.js ➔ fp 0 3 2
C www-core-vfl1pq97W.js ➔ kk 0 27 10
A www-core-vfl1pq97W.js ➔ Gc 0 1 3
A www-core-vfl1pq97W.js ➔ na 0 3 1
A www-core-vfl1pq97W.js ➔ Cf 0 4 2
F www-core-vfl1pq97W.js ➔ ai 0 27 14
A www-core-vfl1pq97W.js ➔ N 0 5 1
F www-core-vfl1pq97W.js ➔ Fk 0 4 35
C www-core-vfl1pq97W.js ➔ Kg 0 26 11
A www-core-vfl1pq97W.js ➔ Dr 0 4 2
A www-core-vfl1pq97W.js ➔ fr 0 3 1
A www-core-vfl1pq97W.js ➔ Ip 0 9 5
A www-core-vfl1pq97W.js ➔ Dc 0 3 5
A www-core-vfl1pq97W.js ➔ Jk 0 1 1
B www-core-vfl1pq97W.js ➔ dd 0 3 7
A www-core-vfl1pq97W.js ➔ Ih 0 3 1
B www-core-vfl1pq97W.js ➔ Pf 0 3 6
A www-core-vfl1pq97W.js ➔ Ne 0 3 1
A www-core-vfl1pq97W.js ➔ cm 0 5 1
A www-core-vfl1pq97W.js ➔ qf 0 3 1
A www-core-vfl1pq97W.js ➔ Rl 0 4 2
A www-core-vfl1pq97W.js ➔ zr 0 4 1
A www-core-vfl1pq97W.js ➔ Mp 0 3 2
A www-core-vfl1pq97W.js ➔ hh 0 15 3
F www-core-vfl1pq97W.js ➔ dh 20 36 26
A www-core-vfl1pq97W.js ➔ kf 0 5 3
A www-core-vfl1pq97W.js ➔ Ik 0 4 2
A www-core-vfl1pq97W.js ➔ Se 0 3 5
B www-core-vfl1pq97W.js ➔ fl 0 25 5
A www-core-vfl1pq97W.js ➔ Vi 0 3 4
A www-core-vfl1pq97W.js ➔ cb 0 3 3
A www-core-vfl1pq97W.js ➔ mo 0 7 1
A www-core-vfl1pq97W.js ➔ Tn 0 5 3
A www-core-vfl1pq97W.js ➔ cn 0 3 2
A www-core-vfl1pq97W.js ➔ qr 0 11 2
A www-core-vfl1pq97W.js ➔ Cm 0 1 1
B www-core-vfl1pq97W.js ➔ al 0 26 6
A www-core-vfl1pq97W.js ➔ Lh 0 3 1
A www-core-vfl1pq97W.js ➔ im 0 25 1
A www-core-vfl1pq97W.js ➔ Oj 0 4 1
A www-core-vfl1pq97W.js ➔ He 0 9 3
A www-core-vfl1pq97W.js ➔ qb 0 6 2
A www-core-vfl1pq97W.js ➔ bb 0 3 2
A www-core-vfl1pq97W.js ➔ da 0 3 1
A www-core-vfl1pq97W.js ➔ Ic 0 14 5
A www-core-vfl1pq97W.js ➔ am 0 5 2
A www-core-vfl1pq97W.js ➔ ge 0 5 1
B www-core-vfl1pq97W.js ➔ vj 0 7 7
A www-core-vfl1pq97W.js ➔ hm 0 7 1
A www-core-vfl1pq97W.js ➔ Mc 0 8 3
A www-core-vfl1pq97W.js ➔ aa 0 1 1
A www-core-vfl1pq97W.js ➔ Kn 0 7 1
A www-core-vfl1pq97W.js ➔ qe 0 5 4
A www-core-vfl1pq97W.js ➔ hk 0 6 2
B www-core-vfl1pq97W.js ➔ wi 0 3 7
D www-core-vfl1pq97W.js ➔ md 0 3 12
A www-core-vfl1pq97W.js ➔ fc 0 5 2
B www-core-vfl1pq97W.js ➔ Ei 0 3 8
A www-core-vfl1pq97W.js ➔ Yo 0 8 3
A www-core-vfl1pq97W.js ➔ dp 0 3 1
B www-core-vfl1pq97W.js ➔ zi 0 3 8
A www-core-vfl1pq97W.js ➔ Th 0 3 1
A www-core-vfl1pq97W.js ➔ ak 0 6 3
A www-core-vfl1pq97W.js ➔ eq 0 4 1
A www-core-vfl1pq97W.js ➔ Ab 0 3 1
F www-core-vfl1pq97W.js ➔ kj 0 4 23
A www-core-vfl1pq97W.js ➔ so 0 3 1
A www-core-vfl1pq97W.js ➔ Sl 0 11 4
A www-core-vfl1pq97W.js ➔ hf 0 11 2
A www-core-vfl1pq97W.js ➔ jc 0 8 4
A www-core-vfl1pq97W.js ➔ pj 0 4 5
A www-core-vfl1pq97W.js ➔ fk 0 15 5
A www-core-vfl1pq97W.js ➔ Jp 0 7 2
B www-core-vfl1pq97W.js ➔ Yd 0 18 6
A www-core-vfl1pq97W.js ➔ rg 0 3 2
C www-core-vfl1pq97W.js ➔ ti 0 39 10
A www-core-vfl1pq97W.js ➔ $a 0 10 5
A www-core-vfl1pq97W.js ➔ Be 0 5 5
B www-core-vfl1pq97W.js ➔ Eo 0 4 6
A www-core-vfl1pq97W.js ➔ pb 0 4 3
A www-core-vfl1pq97W.js ➔ Q 0 3 2
A www-core-vfl1pq97W.js ➔ gh 0 4 1
A www-core-vfl1pq97W.js ➔ Qp 0 7 3
A www-core-vfl1pq97W.js ➔ Y 0 3 3
A www-core-vfl1pq97W.js ➔ Nc 0 5 5
A www-core-vfl1pq97W.js ➔ an 0 7 2
A www-core-vfl1pq97W.js ➔ ga 0 3 1
A www-core-vfl1pq97W.js ➔ Fq 0 6 1
B www-core-vfl1pq97W.js ➔ nj 0 16 6
D www-core-vfl1pq97W.js ➔ Cl 0 3 12
A www-core-vfl1pq97W.js ➔ ah 0 5 1
A www-core-vfl1pq97W.js ➔ gn 0 5 2
A www-core-vfl1pq97W.js ➔ yg 0 3 1
A www-core-vfl1pq97W.js ➔ nc 0 3 2
A www-core-vfl1pq97W.js ➔ A 0 6 3
A www-core-vfl1pq97W.js ➔ Of 0 3 3
A www-core-vfl1pq97W.js ➔ Me 0 6 5
A www-core-vfl1pq97W.js ➔ Ch 0 14 4
A www-core-vfl1pq97W.js ➔ lr 0 20 1
A www-core-vfl1pq97W.js ➔ Dq 0 5 2
A www-core-vfl1pq97W.js ➔ uo 0 3 2
A www-core-vfl1pq97W.js ➔ hn 0 4 1
A www-core-vfl1pq97W.js ➔ ra 0 7 3
A www-core-vfl1pq97W.js ➔ dm 0 5 5
A www-core-vfl1pq97W.js ➔ Rg 0 8 1
B www-core-vfl1pq97W.js ➔ zk 0 44 6
B www-core-vfl1pq97W.js ➔ kn 0 34 5
A www-core-vfl1pq97W.js ➔ s 0 6 3
A www-core-vfl1pq97W.js ➔ Vg 0 9 4
A www-core-vfl1pq97W.js ➔ Eh 0 5 1
A www-core-vfl1pq97W.js ➔ Jn 0 19 1
A www-core-vfl1pq97W.js ➔ Tq 0 4 1
A www-core-vfl1pq97W.js ➔ zh 0 4 1
A www-core-vfl1pq97W.js ➔ wd 0 5 1
A www-core-vfl1pq97W.js ➔ lm 0 18 2
A www-core-vfl1pq97W.js ➔ aq 0 4 1
A www-core-vfl1pq97W.js ➔ Bi 0 3 2
A www-core-vfl1pq97W.js ➔ uk 0 29 4
A www-core-vfl1pq97W.js ➔ Ue 0 4 2
A www-core-vfl1pq97W.js ➔ Lo 0 3 1
A www-core-vfl1pq97W.js ➔ Ub 0 3 1
A www-core-vfl1pq97W.js ➔ yc 0 13 2
A www-core-vfl1pq97W.js ➔ Vh 0 6 2
F www-core-vfl1pq97W.js ➔ Ej 0 12 30
F www-core-vfl1pq97W.js ➔ Qj 0 26 23
C www-core-vfl1pq97W.js ➔ ug 0 6 9
A www-core-vfl1pq97W.js ➔ Sg 0 8 2
A www-core-vfl1pq97W.js ➔ nb 0 3 2
A www-core-vfl1pq97W.js ➔ jp 0 6 2
A www-core-vfl1pq97W.js ➔ Fi 0 4 1
A www-core-vfl1pq97W.js ➔ vi 0 1 1
F www-core-vfl1pq97W.js ➔ gl 0 7 19
A www-core-vfl1pq97W.js ➔ jj 0 1 1
C www-core-vfl1pq97W.js ➔ Ag 0 38 9
A www-core-vfl1pq97W.js ➔ Qe 0 6 2
A www-core-vfl1pq97W.js ➔ th 0 6 2
C www-core-vfl1pq97W.js ➔ xk 0 5 11
A www-core-vfl1pq97W.js ➔ Z 0 6 2
A www-core-vfl1pq97W.js ➔ xg 0 3 1
A www-core-vfl1pq97W.js ➔ ce 0 5 1
B www-core-vfl1pq97W.js ➔ gi 0 4 8
A www-core-vfl1pq97W.js ➔ zb 0 3 2
A www-core-vfl1pq97W.js ➔ uc 0 8 4
A www-core-vfl1pq97W.js ➔ bi 0 3 1
A www-core-vfl1pq97W.js ➔ Hk 0 19 4
A www-core-vfl1pq97W.js ➔ Bq 0 3 1
A www-core-vfl1pq97W.js ➔ Rq 0 3 4
A www-core-vfl1pq97W.js ➔ Zb 0 3 2
A www-core-vfl1pq97W.js ➔ rr 0 3 1
A www-core-vfl1pq97W.js ➔ jn 0 6 1
A www-core-vfl1pq97W.js ➔ id 0 5 1
A www-core-vfl1pq97W.js ➔ Hl 0 8 2
A www-core-vfl1pq97W.js ➔ oo 0 9 4
A www-core-vfl1pq97W.js ➔ Bn 0 34 4
C www-core-vfl1pq97W.js ➔ wm 0 50 11
B www-core-vfl1pq97W.js ➔ $h 0 35 5
A www-core-vfl1pq97W.js ➔ Ar 0 5 1
A www-core-vfl1pq97W.js ➔ fb 0 3 2
A www-core-vfl1pq97W.js ➔ Zl 0 13 2
A www-core-vfl1pq97W.js ➔ rk 0 5 2
A www-core-vfl1pq97W.js ➔ er 0 10 4
A www-core-vfl1pq97W.js ➔ Sm 0 5 4
A www-core-vfl1pq97W.js ➔ Ao 0 6 1
A www-core-vfl1pq97W.js ➔ of 0 3 3
A www-core-vfl1pq97W.js ➔ wg 0 7 4
A www-core-vfl1pq97W.js ➔ Dl 0 3 5
A www-core-vfl1pq97W.js ➔ Vf 0 4 4
A www-core-vfl1pq97W.js ➔ Bm 0 35 3
A www-core-vfl1pq97W.js ➔ Pe 0 6 2
A www-core-vfl1pq97W.js ➔ cg 0 8 2
A www-core-vfl1pq97W.js ➔ To 0 3 1
A www-core-vfl1pq97W.js ➔ Ql 0 10 4
A www-core-vfl1pq97W.js ➔ Ro 0 6 1
A www-core-vfl1pq97W.js ➔ Fh 0 24 4
F www-core-vfl1pq97W.js ➔ Ma 0 16 14
A www-core-vfl1pq97W.js ➔ mq 0 4 2
A www-core-vfl1pq97W.js ➔ Pd 0 3 5
A www-core-vfl1pq97W.js ➔ sm 0 17 3
A www-core-vfl1pq97W.js ➔ Dn 0 12 2
A www-core-vfl1pq97W.js ➔ L 0 3 2
A www-core-vfl1pq97W.js ➔ tc 0 7 4
A www-core-vfl1pq97W.js ➔ jb 0 4 3
A www-core-vfl1pq97W.js ➔ Lg 0 5 3
A www-core-vfl1pq97W.js ➔ on 0 7 2
F www-core-vfl1pq97W.js ➔ Fn 0 6 17
B www-core-vfl1pq97W.js ➔ xl 0 3 8
B www-core-vfl1pq97W.js ➔ mp 0 22 7
A www-core-vfl1pq97W.js ➔ Rf 0 15 1
A www-core-vfl1pq97W.js ➔ Yg 0 13 3
A www-core-vfl1pq97W.js ➔ en 0 17 3
A www-core-vfl1pq97W.js ➔ ea 0 3 1
C www-core-vfl1pq97W.js ➔ Hh 36 36 9
A www-core-vfl1pq97W.js ➔ Yl 0 3 2
A www-core-vfl1pq97W.js ➔ yj 0 3 3
A www-core-vfl1pq97W.js ➔ Ck 0 9 3
F www-core-vfl1pq97W.js ➔ $k 0 18 17
A www-core-vfl1pq97W.js ➔ Xa 0 4 1
C www-core-vfl1pq97W.js ➔ Tj 0 17 9
A www-core-vfl1pq97W.js ➔ Ui 0 4 1
A www-core-vfl1pq97W.js ➔ tm 0 3 3
A www-core-vfl1pq97W.js ➔ W 0 4 2
A www-core-vfl1pq97W.js ➔ ba 0 5 3
A www-core-vfl1pq97W.js ➔ wa 0 5 3
A www-core-vfl1pq97W.js ➔ Ac 0 7 4
A www-core-vfl1pq97W.js ➔ Um 0 25 4
F www-core-vfl1pq97W.js ➔ Mh 0 5 15
C www-core-vfl1pq97W.js ➔ bf 0 26 10
A www-core-vfl1pq97W.js ➔ Tg 0 7 2
C www-core-vfl1pq97W.js ➔ og 0 5 10
A www-core-vfl1pq97W.js ➔ ym 0 3 1
A www-core-vfl1pq97W.js ➔ Cq 0 25 3
C www-core-vfl1pq97W.js ➔ ca 14 14 9
A www-core-vfl1pq97W.js ➔ Er 0 4 1
B www-core-vfl1pq97W.js ➔ bl 0 16 6
B www-core-vfl1pq97W.js ➔ Ci 0 3 6
A www-core-vfl1pq97W.js ➔ Ri 0 4 1
A www-core-vfl1pq97W.js ➔ pd 0 4 3
A www-core-vfl1pq97W.js ➔ Qn 0 1 1
A www-core-vfl1pq97W.js ➔ cc 0 5 2
A www-core-vfl1pq97W.js ➔ qk 0 5 2
F www-core-vfl1pq97W.js ➔ Gj 0 3 15
A www-core-vfl1pq97W.js ➔ Jg 0 12 2
F www-core-vfl1pq97W.js ➔ Aq 0 3 14
A www-core-vfl1pq97W.js ➔ Om 0 5 1
C www-core-vfl1pq97W.js ➔ pl 0 4 10
A www-core-vfl1pq97W.js ➔ Jo 0 5 1
A www-core-vfl1pq97W.js ➔ Vj 0 5 1
A www-core-vfl1pq97W.js ➔ xj 0 3 2
A www-core-vfl1pq97W.js ➔ eb 0 4 1
C www-core-vfl1pq97W.js ➔ Hc 0 17 9
A www-core-vfl1pq97W.js ➔ ae 0 3 3
A www-core-vfl1pq97W.js ➔ fe 0 7 5
C www-core-vfl1pq97W.js ➔ Uh 0 7 9
A www-core-vfl1pq97W.js ➔ Kh 0 4 1
B www-core-vfl1pq97W.js ➔ Jh 0 29 8
A www-core-vfl1pq97W.js ➔ qq 0 5 1
B www-core-vfl1pq97W.js ➔ wj 0 3 6
A www-core-vfl1pq97W.js ➔ wh 0 3 1
A www-core-vfl1pq97W.js ➔ So 0 4 3
A www-core-vfl1pq97W.js ➔ El 0 4 3
A www-core-vfl1pq97W.js ➔ jr 0 7 2
A www-core-vfl1pq97W.js ➔ lk 0 9 3
A www-core-vfl1pq97W.js ➔ v 0 6 2
B www-core-vfl1pq97W.js ➔ zn 0 8 8
A www-core-vfl1pq97W.js ➔ pp 0 4 2
A www-core-vfl1pq97W.js ➔ qc 0 6 4
A www-core-vfl1pq97W.js ➔ Jf 0 3 3
A www-core-vfl1pq97W.js ➔ pn 0 4 1
B www-core-vfl1pq97W.js ➔ Oo 0 4 8
A www-core-vfl1pq97W.js ➔ qj 0 14 3
B www-core-vfl1pq97W.js ➔ oh 0 10 8
A www-core-vfl1pq97W.js ➔ $o 0 14 2
A www-core-vfl1pq97W.js ➔ io 0 7 2
A www-core-vfl1pq97W.js ➔ P 0 3 2
A www-core-vfl1pq97W.js ➔ Na 0 4 2
A www-core-vfl1pq97W.js ➔ Kp 0 12 5
F www-core-vfl1pq97W.js ➔ Dj 0 14 27
A www-core-vfl1pq97W.js ➔ vr 0 6 1
A www-core-vfl1pq97W.js ➔ kh 0 5 1
A www-core-vfl1pq97W.js ➔ uj 0 3 4
A www-core-vfl1pq97W.js ➔ Le 0 4 3
A www-core-vfl1pq97W.js ➔ hj 0 18 5
A www-core-vfl1pq97W.js ➔ kb 0 3 2
F www-core-vfl1pq97W.js ➔ bj 0 51 19
B www-core-vfl1pq97W.js ➔ yn 0 10 7
A www-core-vfl1pq97W.js ➔ ya 0 3 1
A www-core-vfl1pq97W.js ➔ Gh 0 3 1
B www-core-vfl1pq97W.js ➔ Bg 0 9 6
A www-core-vfl1pq97W.js ➔ Ud 0 3 1
B www-core-vfl1pq97W.js ➔ iq 0 19 6
A www-core-vfl1pq97W.js ➔ V 0 5 2
A www-core-vfl1pq97W.js ➔ kr 0 6 4
A www-core-vfl1pq97W.js ➔ $b 0 3 1
A www-core-vfl1pq97W.js ➔ Hp 0 5 1
A www-core-vfl1pq97W.js ➔ ar 0 4 2
A www-core-vfl1pq97W.js ➔ jq 0 6 1
B www-core-vfl1pq97W.js ➔ Fg 0 11 6
A www-core-vfl1pq97W.js ➔ nk 0 3 1
A www-core-vfl1pq97W.js ➔ um 0 20 4
F www-core-vfl1pq97W.js ➔ ke 0 32 21
A www-core-vfl1pq97W.js ➔ Yn 0 3 1
B www-core-vfl1pq97W.js ➔ Bk 0 6 8
B www-core-vfl1pq97W.js ➔ xi 0 7 8
C www-core-vfl1pq97W.js ➔ Lc 0 14 10
A www-core-vfl1pq97W.js ➔ z 0 7 1
A www-core-vfl1pq97W.js ➔ sb 0 7 4
C www-core-vfl1pq97W.js ➔ sl 0 34 10
A www-core-vfl1pq97W.js ➔ sa 0 5 4
A www-core-vfl1pq97W.js ➔ Aj 0 4 2
A www-core-vfl1pq97W.js ➔ Kf 0 4 2
A www-core-vfl1pq97W.js ➔ Im 0 4 4
A www-core-vfl1pq97W.js ➔ pk 0 15 3
A www-core-vfl1pq97W.js ➔ qg 0 5 1
A www-core-vfl1pq97W.js ➔ $l 0 4 1
A www-core-vfl1pq97W.js ➔ Qc 0 5 1
A www-core-vfl1pq97W.js ➔ yh 0 4 4
A www-core-vfl1pq97W.js ➔ bh 0 6 1
A www-core-vfl1pq97W.js ➔ br 0 19 2
A www-core-vfl1pq97W.js ➔ Ep 0 3 2
A www-core-vfl1pq97W.js ➔ ei 0 3 3
A www-core-vfl1pq97W.js ➔ Ec 0 3 1
A www-core-vfl1pq97W.js ➔ Xj 0 12 2
A www-core-vfl1pq97W.js ➔ Xm 0 6 2
D www-core-vfl1pq97W.js ➔ Dh 0 5 12
B www-core-vfl1pq97W.js ➔ je 8 8 6
A www-core-vfl1pq97W.js ➔ ie 0 6 3
A www-core-vfl1pq97W.js ➔ vh 0 7 2
A www-core-vfl1pq97W.js ➔ M 0 3 2
A www-core-vfl1pq97W.js ➔ Zo 0 12 2
C www-core-vfl1pq97W.js ➔ ic 0 26 9
A www-core-vfl1pq97W.js ➔ Pi 0 7 2
A www-core-vfl1pq97W.js ➔ pc 0 6 5
A www-core-vfl1pq97W.js ➔ $j 0 8 2
A www-core-vfl1pq97W.js ➔ fa 0 4 1
A www-core-vfl1pq97W.js ➔ Xo 0 8 2
A www-core-vfl1pq97W.js ➔ xe 0 7 2
B www-core-vfl1pq97W.js ➔ zc 0 7 6
F www-core-vfl1pq97W.js ➔ om 0 7 19
A www-core-vfl1pq97W.js ➔ sj 0 4 1
A www-core-vfl1pq97W.js ➔ T 0 5 2
A www-core-vfl1pq97W.js ➔ gk 0 6 2
A www-core-vfl1pq97W.js ➔ In 0 3 1
A www-core-vfl1pq97W.js ➔ tj 0 5 1
F www-core-vfl1pq97W.js ➔ ig 0 9 24
B www-core-vfl1pq97W.js ➔ ec 0 18 7
B www-core-vfl1pq97W.js ➔ Jj 0 42 4
A www-core-vfl1pq97W.js ➔ nm 0 6 1
B www-core-vfl1pq97W.js ➔ Id 0 15 7
A www-core-vfl1pq97W.js ➔ Lj 0 3 4
A www-core-vfl1pq97W.js ➔ Ni 0 3 2
B www-core-vfl1pq97W.js ➔ mb 0 3 7
A www-core-vfl1pq97W.js ➔ xo 0 4 2
A www-core-vfl1pq97W.js ➔ we 0 5 1
A www-core-vfl1pq97W.js ➔ Va 0 5 3
F www-core-vfl1pq97W.js ➔ no 0 96 25
A www-core-vfl1pq97W.js ➔ Af 0 5 4
A www-core-vfl1pq97W.js ➔ ul 0 7 2
A www-core-vfl1pq97W.js ➔ lq 0 16 5
A www-core-vfl1pq97W.js ➔ ha 0 3 1
A www-core-vfl1pq97W.js ➔ tk 0 3 1
A www-core-vfl1pq97W.js ➔ Bo 0 5 1
A www-core-vfl1pq97W.js ➔ ro 0 3 1
A www-core-vfl1pq97W.js ➔ nd 0 4 1
A www-core-vfl1pq97W.js ➔ Sd 0 3 2
A www-core-vfl1pq97W.js ➔ Ph 0 3 1
B www-core-vfl1pq97W.js ➔ Cn 0 7 7
A www-core-vfl1pq97W.js ➔ nq 0 8 2
A www-core-vfl1pq97W.js ➔ nh 0 3 1
A www-core-vfl1pq97W.js ➔ cp 0 3 1
A www-core-vfl1pq97W.js ➔ Sq 0 3 1
A www-core-vfl1pq97W.js ➔ Rm 0 17 2
A www-core-vfl1pq97W.js ➔ km 0 3 2
A www-core-vfl1pq97W.js ➔ to 0 5 1
A www-core-vfl1pq97W.js ➔ mh 0 3 5
A www-core-vfl1pq97W.js ➔ sg 0 6 2
A www-core-vfl1pq97W.js ➔ t 0 4 2
A www-core-vfl1pq97W.js ➔ Ye 0 6 4
A www-core-vfl1pq97W.js ➔ zj 0 3 1
A www-core-vfl1pq97W.js ➔ dq 0 12 1
A www-core-vfl1pq97W.js ➔ Ve 0 3 2
F www-core-vfl1pq97W.js ➔ ch 0 46 17
F www-core-vfl1pq97W.js ➔ zd 0 66 18
A www-core-vfl1pq97W.js ➔ df 0 4 2
A www-core-vfl1pq97W.js ➔ jd 0 3 1
A www-core-vfl1pq97W.js ➔ bo 0 3 1
A www-core-vfl1pq97W.js ➔ Bf 0 5 2
A www-core-vfl1pq97W.js ➔ Bc 0 9 3
A www-core-vfl1pq97W.js ➔ gq 0 6 2
A www-core-vfl1pq97W.js ➔ vp 0 4 5
A www-core-vfl1pq97W.js ➔ Fl 0 3 1
A www-core-vfl1pq97W.js ➔ Og 0 18 4
A www-core-vfl1pq97W.js ➔ he 0 4 2
B www-core-vfl1pq97W.js ➔ An 0 5 8
D www-core-vfl1pq97W.js ➔ rm 0 153 10
A www-core-vfl1pq97W.js ➔ Qm 0 4 5
A www-core-vfl1pq97W.js ➔ lf 0 3 3
A www-core-vfl1pq97W.js ➔ Dk 0 30 4
A www-core-vfl1pq97W.js ➔ ui 0 1 1
A www-core-vfl1pq97W.js ➔ Xn 0 14 4
C www-core-vfl1pq97W.js ➔ Hm 0 3 9
A www-core-vfl1pq97W.js ➔ $d 0 3 2
A www-core-vfl1pq97W.js ➔ mj 0 7 2
A www-core-vfl1pq97W.js ➔ vl 0 7 2
A www-core-vfl1pq97W.js ➔ ep 0 8 3
A www-core-vfl1pq97W.js ➔ Cj 0 3 1
A www-core-vfl1pq97W.js ➔ wf 0 4 1
B www-core-vfl1pq97W.js ➔ ur 0 20 6
F www-core-vfl1pq97W.js ➔ kl 0 3 19
A www-core-vfl1pq97W.js ➔ xr 0 4 1
A www-core-vfl1pq97W.js ➔ Qo 0 6 1
A www-core-vfl1pq97W.js ➔ cq 0 3 1
A www-core-vfl1pq97W.js ➔ Qf 0 4 2
A www-core-vfl1pq97W.js ➔ jm 0 7 1
A www-core-vfl1pq97W.js ➔ wp 0 12 3
A www-core-vfl1pq97W.js ➔ Pj 0 5 1
A www-core-vfl1pq97W.js ➔ Lf 0 3 1
F www-core-vfl1pq97W.js ➔ Ak 0 41 19
A www-core-vfl1pq97W.js ➔ Nj 0 7 2
A www-core-vfl1pq97W.js ➔ dl 0 8 2
A www-core-vfl1pq97W.js ➔ rh 0 4 1
A www-core-vfl1pq97W.js ➔ ci 0 3 2
D www-core-vfl1pq97W.js ➔ R 0 23 12
C www-core-vfl1pq97W.js ➔ hc 0 24 11
A www-core-vfl1pq97W.js ➔ Zg 0 5 2
A www-core-vfl1pq97W.js ➔ yl 0 3 2
A www-core-vfl1pq97W.js ➔ Ef 0 3 2
B www-core-vfl1pq97W.js ➔ Ug 0 30 7
B www-core-vfl1pq97W.js ➔ fg 0 6 7
B www-core-vfl1pq97W.js ➔ Co 0 4 6
A www-core-vfl1pq97W.js ➔ ok 0 3 1
A www-core-vfl1pq97W.js ➔ qd 0 3 2
A www-core-vfl1pq97W.js ➔ el 0 3 5
B www-core-vfl1pq97W.js ➔ Jc 0 19 7
A www-core-vfl1pq97W.js ➔ gp 0 7 1
A www-core-vfl1pq97W.js ➔ Jq 0 5 1
A www-core-vfl1pq97W.js ➔ Xc 0 3 2
A www-core-vfl1pq97W.js ➔ Je 0 3 1
A www-core-vfl1pq97W.js ➔ Dm 0 3 1
A www-core-vfl1pq97W.js ➔ wl 0 3 1
A www-core-vfl1pq97W.js ➔ Df 0 5 1
A www-core-vfl1pq97W.js ➔ mm 0 3 1
A www-core-vfl1pq97W.js ➔ yi 0 4 1
B www-core-vfl1pq97W.js ➔ $f 0 7 6
D www-core-vfl1pq97W.js ➔ fi 0 5 12
A www-core-vfl1pq97W.js ➔ zg 0 5 1
A www-core-vfl1pq97W.js ➔ O 0 8 5
B www-core-vfl1pq97W.js ➔ ih 0 19 8
A www-core-vfl1pq97W.js ➔ Zh 0 18 5
C www-core-vfl1pq97W.js ➔ rl 0 30 9
A www-core-vfl1pq97W.js ➔ si 0 3 2
F www-core-vfl1pq97W.js ➔ ip 0 12 14
A www-core-vfl1pq97W.js ➔ Hn 0 21 3
A www-core-vfl1pq97W.js ➔ Te 0 5 2
B www-core-vfl1pq97W.js ➔ Oc 0 21 7
A www-core-vfl1pq97W.js ➔ ja 0 3 1
A www-core-vfl1pq97W.js ➔ U 0 5 2
A www-core-vfl1pq97W.js ➔ ia 0 4 1
A www-core-vfl1pq97W.js ➔ Vo 0 8 1
A www-core-vfl1pq97W.js ➔ Sn 0 3 1
A www-core-vfl1pq97W.js ➔ hi 0 32 4
F www-core-vfl1pq97W.js ➔ dg 0 40 16
B www-core-vfl1pq97W.js ➔ Ze 0 27 7
A www-core-vfl1pq97W.js ➔ ef 0 15 2
A www-core-vfl1pq97W.js ➔ Ai 0 3 1
A www-core-vfl1pq97W.js ➔ Pp 0 6 2
B www-core-vfl1pq97W.js ➔ dk 0 36 7
A www-core-vfl1pq97W.js ➔ B 0 3 1
C www-core-vfl1pq97W.js ➔ $e 0 32 11
A www-core-vfl1pq97W.js ➔ ib 0 5 1
C www-core-vfl1pq97W.js ➔ vd 0 22 11
A www-core-vfl1pq97W.js ➔ Kq 0 9 3
A www-core-vfl1pq97W.js ➔ vf 0 3 1
A www-core-vfl1pq97W.js ➔ vg 0 3 1
C www-core-vfl1pq97W.js ➔ sn 0 25 10
C www-core-vfl1pq97W.js ➔ Ga 0 40 10
B www-core-vfl1pq97W.js ➔ Wm 0 5 8
A www-core-vfl1pq97W.js ➔ re 0 7 2
A www-core-vfl1pq97W.js ➔ gr 0 23 3
A www-core-vfl1pq97W.js ➔ ir 0 9 3
A www-core-vfl1pq97W.js ➔ Do 0 4 5
A www-core-vfl1pq97W.js ➔ di 0 3 2
A www-core-vfl1pq97W.js ➔ Zq 0 12 1
A www-core-vfl1pq97W.js ➔ mc 0 3 2
A www-core-vfl1pq97W.js ➔ Mi 0 3 1
A www-core-vfl1pq97W.js ➔ gb 0 5 2
A www-core-vfl1pq97W.js ➔ xf 0 4 1
A www-core-vfl1pq97W.js ➔ gj 0 8 4
A www-core-vfl1pq97W.js ➔ Po 0 24 4
A www-core-vfl1pq97W.js ➔ Np 0 3 1
A www-core-vfl1pq97W.js ➔ tf 0 11 4
A www-core-vfl1pq97W.js ➔ xm 0 25 4
A www-core-vfl1pq97W.js ➔ oc 0 4 2
A www-core-vfl1pq97W.js ➔ ye 0 3 1
B www-core-vfl1pq97W.js ➔ Al 0 3 6
A www-core-vfl1pq97W.js ➔ Uj 0 16 3
A www-core-vfl1pq97W.js ➔ Mq 0 3 1
A www-core-vfl1pq97W.js ➔ zo 0 20 1
A www-core-vfl1pq97W.js ➔ sk 0 3 1
A www-core-vfl1pq97W.js ➔ rf 0 9 1
B www-core-vfl1pq97W.js ➔ Uo 0 24 5
F www-core-vfl1pq97W.js ➔ Wi 0 1 17
B www-core-vfl1pq97W.js ➔ Fp 0 19 7
A www-core-vfl1pq97W.js ➔ wo 0 14 4
A www-core-vfl1pq97W.js ➔ fq 0 3 1
A www-core-vfl1pq97W.js ➔ u 0 6 4
A www-core-vfl1pq97W.js ➔ mf 0 4 2
B www-core-vfl1pq97W.js ➔ Ij 0 12 8
B www-core-vfl1pq97W.js ➔ fj 0 16 6
C www-core-vfl1pq97W.js ➔ Wh 0 37 9
F www-core-vfl1pq97W.js ➔ Ad 0 93 26
A www-core-vfl1pq97W.js ➔ Rp 0 6 2
C www-core-vfl1pq97W.js ➔ Sb 0 3 11
A www-core-vfl1pq97W.js ➔ x 0 8 1
A www-core-vfl1pq97W.js ➔ Qi 0 6 2
A www-core-vfl1pq97W.js ➔ Vd 0 3 1
B www-core-vfl1pq97W.js ➔ Lm 0 32 5
A www-core-vfl1pq97W.js ➔ Lp 0 3 1
A www-core-vfl1pq97W.js ➔ K 0 5 2
A www-core-vfl1pq97W.js ➔ ao 0 3 2
A www-core-vfl1pq97W.js ➔ $q 0 16 1
A www-core-vfl1pq97W.js ➔ dr 0 4 1
F www-core-vfl1pq97W.js ➔ Wj 0 7 22
A www-core-vfl1pq97W.js ➔ Un 0 9 3
A www-core-vfl1pq97W.js ➔ Xe 0 5 1
A www-core-vfl1pq97W.js ➔ rn 0 7 2
B www-core-vfl1pq97W.js ➔ wk 0 3 6
A www-core-vfl1pq97W.js ➔ tl 0 11 2
A www-core-vfl1pq97W.js ➔ bq 0 12 3
A www-core-vfl1pq97W.js ➔ Ee 0 3 1
B www-core-vfl1pq97W.js ➔ Gf 0 19 6
A www-core-vfl1pq97W.js ➔ Kc 0 4 3
B www-core-vfl1pq97W.js ➔ Qd 0 9 7
A www-core-vfl1pq97W.js ➔ Nf 0 8 2
A www-core-vfl1pq97W.js ➔ op 0 4 1
B www-core-vfl1pq97W.js ➔ ho 0 3 8
A www-core-vfl1pq97W.js ➔ Ge 0 3 1
A www-core-vfl1pq97W.js ➔ Rj 0 9 2
D www-core-vfl1pq97W.js ➔ bn 0 34 12
A www-core-vfl1pq97W.js ➔ zf 10 10 3
A www-core-vfl1pq97W.js ➔ ac 0 3 2
A www-core-vfl1pq97W.js ➔ gg 0 4 1
A www-core-vfl1pq97W.js ➔ pg 0 5 3
A www-core-vfl1pq97W.js ➔ Ah 0 3 2
A www-core-vfl1pq97W.js ➔ Oi 0 7 2
A www-core-vfl1pq97W.js ➔ Fo 0 3 1
A www-core-vfl1pq97W.js ➔ wr 0 4 1
A www-core-vfl1pq97W.js ➔ h 0 3 2
A www-core-vfl1pq97W.js ➔ pa 0 8 2
B www-core-vfl1pq97W.js ➔ Fm 0 4 7
A www-core-vfl1pq97W.js ➔ ue 0 3 1
B www-core-vfl1pq97W.js ➔ bg 0 13 6
B www-core-vfl1pq97W.js ➔ gm 0 32 5
A www-core-vfl1pq97W.js ➔ Bj 0 8 5
A www-core-vfl1pq97W.js ➔ bp 0 8 1
A www-core-vfl1pq97W.js ➔ Tc 0 9 4
A www-core-vfl1pq97W.js ➔ dc 0 3 1
A www-core-vfl1pq97W.js ➔ lc 0 3 2
A www-core-vfl1pq97W.js ➔ nf 0 3 3
A www-core-vfl1pq97W.js ➔ Kj 0 7 2
A www-core-vfl1pq97W.js ➔ Vm 0 14 3
A www-core-vfl1pq97W.js ➔ xd 0 9 3
A www-core-vfl1pq97W.js ➔ xh 0 3 5
F www-core-vfl1pq97W.js ➔ ii 0 104 31
A www-core-vfl1pq97W.js ➔ ql 0 3 1
A www-core-vfl1pq97W.js ➔ ij 0 4 1
A www-core-vfl1pq97W.js ➔ lb 0 4 1
A www-core-vfl1pq97W.js ➔ We 0 3 1
F www-core-vfl1pq97W.js ➔ Wf 16 55 16
A www-core-vfl1pq97W.js ➔ Hg 0 3 4
A www-core-vfl1pq97W.js ➔ Sh 0 16 1
A www-core-vfl1pq97W.js ➔ Iq 0 3 2
B www-core-vfl1pq97W.js ➔ Cd 0 14 7
C www-core-vfl1pq97W.js ➔ Ce 0 7 9
A www-core-vfl1pq97W.js ➔ ej 0 4 2
A www-core-vfl1pq97W.js ➔ mr 0 5 1
A www-core-vfl1pq97W.js ➔ rc 0 5 3
C www-core-vfl1pq97W.js ➔ xn 0 69 11
A www-core-vfl1pq97W.js ➔ sr 0 11 1
A www-core-vfl1pq97W.js ➔ Uq 0 7 3
A www-core-vfl1pq97W.js ➔ jg 0 6 2
A www-core-vfl1pq97W.js ➔ Kl 0 18 5
A www-core-vfl1pq97W.js ➔ eg 0 1 1
A www-core-vfl1pq97W.js ➔ Go 0 3 1
A www-core-vfl1pq97W.js ➔ Mj 0 3 4
A www-core-vfl1pq97W.js ➔ hp 0 8 1
A www-core-vfl1pq97W.js ➔ qo 0 9 4
A www-core-vfl1pq97W.js ➔ tr 0 5 2
A www-core-vfl1pq97W.js ➔ vo 0 9 3
A www-core-vfl1pq97W.js ➔ Ta 0 5 4
A www-core-vfl1pq97W.js ➔ za 0 4 2
A www-core-vfl1pq97W.js ➔ Mm 0 9 1
B www-core-vfl1pq97W.js ➔ Bh 0 39 7
A www-core-vfl1pq97W.js ➔ Oe 0 7 3
A www-core-vfl1pq97W.js ➔ Gk 0 5 1
A www-core-vfl1pq97W.js ➔ Gl 0 8 5
A www-core-vfl1pq97W.js ➔ va 0 3 1
A www-core-vfl1pq97W.js ➔ Fe 0 3 1
A www-core-vfl1pq97W.js ➔ fm 0 6 3
B www-core-vfl1pq97W.js ➔ c 0 3 6
B www-core-vfl1pq97W.js ➔ Gg 14 17 6
A www-core-vfl1pq97W.js ➔ qn 0 5 2
A www-core-vfl1pq97W.js ➔ mk 0 3 1
A www-core-vfl1pq97W.js ➔ cr 0 13 3
A www-core-vfl1pq97W.js ➔ ab 0 3 1
A www-core-vfl1pq97W.js ➔ vm 0 3 1
A www-core-vfl1pq97W.js ➔ Ig 0 7 2
A www-core-vfl1pq97W.js ➔ te 0 9 3
A www-core-vfl1pq97W.js ➔ ap 0 8 2
A www-core-vfl1pq97W.js ➔ Zd 0 5 2
A www-core-vfl1pq97W.js ➔ Gq 0 6 1
A www-core-vfl1pq97W.js ➔ Rd 0 3 1
A www-core-vfl1pq97W.js ➔ np 0 4 4
A www-core-vfl1pq97W.js ➔ $g 0 11 2
A www-core-vfl1pq97W.js ➔ Sj 0 4 3
A www-core-vfl1pq97W.js ➔ Lq 0 10 4
A www-core-vfl1pq97W.js ➔ hb 0 4 2
A www-core-vfl1pq97W.js ➔ Ua 0 3 1
C www-core-vfl1pq97W.js ➔ qp 0 28 9
A www-core-vfl1pq97W.js ➔ hd 0 6 1
A www-core-vfl1pq97W.js ➔ fn 0 4 1
C www-core-vfl1pq97W.js ➔ sh 6 11 10
A www-core-vfl1pq97W.js ➔ oa 0 14 4
A www-core-vfl1pq97W.js ➔ sc 0 6 4
A www-core-vfl1pq97W.js ➔ ta 0 3 1
A www-core-vfl1pq97W.js ➔ Re 0 6 5
A www-core-vfl1pq97W.js ➔ Za 0 8 3
A www-core-vfl1pq97W.js ➔ Ia 0 4 1
B www-core-vfl1pq97W.js ➔ dj 0 10 6
F www-core-vfl1pq97W.js ➔ Sa 0 4 28
A www-core-vfl1pq97W.js ➔ Ol 0 12 4
A www-core-vfl1pq97W.js ➔ vk 0 8 5
A www-core-vfl1pq97W.js ➔ Ya 0 3 1
A www-core-vfl1pq97W.js ➔ lp 0 4 3
A www-core-vfl1pq97W.js ➔ cl 0 5 1
B www-core-vfl1pq97W.js ➔ Nm 0 5 6
B www-core-vfl1pq97W.js ➔ hq 0 26 5
A www-core-vfl1pq97W.js ➔ $m 0 4 3
A www-core-vfl1pq97W.js ➔ lh 0 3 1
A www-core-vfl1pq97W.js ➔ Op 0 3 4
A www-core-vfl1pq97W.js ➔ Cc 0 3 1
A www-core-vfl1pq97W.js ➔ pf 0 10 4
B www-core-vfl1pq97W.js ➔ rp 0 8 8
A www-core-vfl1pq97W.js ➔ Zj 0 7 2
A www-core-vfl1pq97W.js ➔ ve 0 6 1
A www-core-vfl1pq97W.js ➔ hr 0 3 2
A www-core-vfl1pq97W.js ➔ Di 0 5 1
A www-core-vfl1pq97W.js ➔ Ae 0 9 5
A www-core-vfl1pq97W.js ➔ kc 0 3 1
A www-core-vfl1pq97W.js ➔ Zf 0 3 2
A www-core-vfl1pq97W.js ➔ ln 0 6 1
B www-core-vfl1pq97W.js ➔ Tm 0 17 8
B www-core-vfl1pq97W.js ➔ xp 0 19 6
A www-core-vfl1pq97W.js ➔ bm 0 11 4
A www-core-vfl1pq97W.js ➔ Ko 0 3 4
A www-core-vfl1pq97W.js ➔ Xf 0 7 4

How to fix   Duplicated Code    Complexity   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

Complexity

 Tip:   Before tackling complexity, make sure that you eliminate any duplication first. This often can reduce the size of classes significantly.

Complex classes like web/public/yt/jsbin/www-core-vfl1pq97W.js often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
(function () {
2
    function h(a) {
3
        throw a;
4
    }
5
    var j = void 0,
6
        k = !0,
7
        l = null,
8
        m = !1,
9
        p, q = this;
10
11
    function s(a) {
12
        for (var a = a.split("."), b = q, c; c = a.shift();)
13
            if (b[c] != l) b = b[c];
14
            else return l;
15
        return b
16
    }
17
18
    function aa() {}
19
20
    function ba(a) {
21
        a.getInstance = function () {
22
            return a.ke ? a.ke : a.ke = new a
23
        }
24
    }
25
26 View Code Duplication
    function ca(a) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
27
        var b = typeof a;
28
        if ("object" == b)
29
            if (a) {
30
                if (a instanceof Array) return "array";
31
                if (a instanceof Object) return b;
32
                var c = Object.prototype.toString.call(a);
33
                if ("[object Window]" == c) return "object";
34
                if ("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) return "array";
35
                if ("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) return "function"
36
            } else return "null";
37
        else if ("function" == b && "undefined" == typeof a.call) return "object";
38
        return b
39
    }
40
41
    function da(a) {
42
        return a !== j
43
    }
44
45
    function ea(a) {
46
        return "array" == ca(a)
47
    }
48
49
    function fa(a) {
50
        var b = ca(a);
51
        return "array" == b || "object" == b && "number" == typeof a.length
52
    }
53
54
    function ga(a) {
55
        return "string" == typeof a
56
    }
57
58
    function ha(a) {
59
        return "function" == ca(a)
60
    }
61
62
    function ia(a) {
63
        var b = typeof a;
64
        return "object" == b && a != l || "function" == b
65
    }
66
67
    function ja(a) {
68
        return a[la] || (a[la] = ++ma)
69
    }
70
    var la = "closure_uid_" + Math.floor(2147483648 * Math.random()).toString(36),
71
        ma = 0;
72
73
    function na(a, b, c) {
74
        return a.call.apply(a.bind, arguments)
75
    }
76
77
    function oa(a, b, c) {
78
        a || h(Error());
79
        if (2 < arguments.length) {
80
            var d = Array.prototype.slice.call(arguments, 2);
81
            return function () {
82
                var c = Array.prototype.slice.call(arguments);
83
                Array.prototype.unshift.apply(c, d);
84
                return a.apply(b, c)
85
            }
86
        }
87
        return function () {
88
            return a.apply(b, arguments)
89
        }
90
    }
91
92
    function t(a, b, c) {
93
        t = Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? na : oa;
94
        return t.apply(l, arguments)
95
    }
96
97
    function pa(a, b) {
98
        var c = Array.prototype.slice.call(arguments, 1);
99
        return function () {
100
            var b = Array.prototype.slice.call(arguments);
101
            b.unshift.apply(b, c);
102
            return a.apply(this, b)
103
        }
104
    }
105
    var qa = Date.now || function () {
106
        return +new Date
107
    };
108
109
    function ra(a, b) {
110
        var c = b || {},
111
            d;
112
        for (d in c) var e = ("" + c[d]).replace(/\$/g, "$$$$"),
113
            a = a.replace(RegExp("\\{\\$" + d + "\\}", "gi"), e);
114
        return a
115
    }
116
117
    function u(a, b) {
118
        var c = a.split("."),
119
            d = q;
120
        !(c[0] in d) && d.execScript && d.execScript("var " + c[0]);
121
        for (var e; c.length && (e = c.shift());) !c.length && da(b) ? d[e] = b : d = d[e] ? d[e] : d[e] = {}
122
    }
123
124
    function v(a, b) {
125
        function c() {}
126
        c.prototype = b.prototype;
127
        a.J = b.prototype;
128
        a.prototype = new c
129
    }
130
    Function.prototype.bind = Function.prototype.bind || function (a, b) {
131
        if (1 < arguments.length) {
132
            var c = Array.prototype.slice.call(arguments, 1);
133
            c.unshift(this, a);
134
            return t.apply(l, c)
135
        }
136
        return t(this, a)
137
    };
138
139
    function sa(a, b) {
140
        for (var c = 1; c < arguments.length; c++) var d = String(arguments[c]).replace(/\$/g, "$$$$"),
141
            a = a.replace(/\%s/, d);
142
        return a
143
    }
144
145
    function ta(a) {
146
        return /^[\s\xa0]*$/.test(a)
147
    }
148
149
    function va(a) {
150
        return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g, "")
151
    }
152
153
    function wa(a, b) {
154
        var c = String(a).toLowerCase(),
155
            d = String(b).toLowerCase();
156
        return c < d ? -1 : c == d ? 0 : 1
157
    }
158
159
    function ya(a) {
160
        return decodeURIComponent(a.replace(/\+/g, " "))
161
    }
162
163
    function za(a) {
164
        if (!Aa.test(a)) return a; - 1 != a.indexOf("&") && (a = a.replace(Ba, "&amp;")); - 1 != a.indexOf("<") && (a = a.replace(Da, "&lt;")); - 1 != a.indexOf(">") && (a = a.replace(Ea, "&gt;")); - 1 != a.indexOf('"') && (a = a.replace(Fa, "&quot;"));
165
        return a
166
    }
167
    var Ba = /&/g,
168
        Da = /</g,
169
        Ea = />/g,
170
        Fa = /\"/g,
171
        Aa = /[&<>\"]/;
172
173
    function Ga(a) {
174
        if (-1 != a.indexOf("&"))
175
            if ("document" in q) var b = {
176
                    "&amp;": "&",
177
                    "&lt;": "<",
178
                    "&gt;": ">",
179
                    "&quot;": '"'
180
                },
181
                c = document.createElement("div"),
182
                a = a.replace(Ha, function (a, e) {
183
                    var f = b[a];
184
                    if (f) return f;
185
                    if ("#" == e.charAt(0)) {
186
                        var g = Number("0" + e.substr(1));
187
                        isNaN(g) || (f = String.fromCharCode(g))
188
                    }
189
                    f || (c.innerHTML = a + " ", f = c.firstChild.nodeValue.slice(0, -1));
190
                    return b[a] = f
191
                });
192
            else a = a.replace(/&([^;]+);/g, function (a, b) {
193
                switch (b) {
194
                case "amp":
195
                    return "&";
196
                case "lt":
197
                    return "<";
198
                case "gt":
199
                    return ">";
200
                case "quot":
201
                    return '"';
202
                default:
203
                    if ("#" ==
204
                        b.charAt(0)) {
205
                        var c = Number("0" + b.substr(1));
206
                        if (!isNaN(c)) return String.fromCharCode(c)
207
                    }
208
                    return a
209
                }
210
            });
211
        return a
212
    }
213
    var Ha = /&([^;\s<&]+);?/g;
214
215
    function Ia(a, b) {
216
        a.length > b && (a = a.substring(0, b - 3) + "...");
217
        return a
218
    }
219
    var Ja = {
220
            "\x00": "\\0",
221
            "\b": "\\b",
222
            "\f": "\\f",
223
            "\n": "\\n",
224
            "\r": "\\r",
225
            "\t": "\\t",
226
            "\x0B": "\\x0B",
227
            '"': '\\"',
228
            "\\": "\\\\"
229
        },
230
        La = {
231
            "'": "\\'"
232
        };
233
234
    function Ma(a, b) {
235
        for (var c = 0, d = va(String(a)).split("."), e = va(String(b)).split("."), f = Math.max(d.length, e.length), g = 0; 0 == c && g < f; g++) {
0 ignored issues
show
Best Practice introduced by
Comparing 0 to c using the == operator is not safe. Consider using === instead.
Loading history...
236
            var i = d[g] || "",
237
                n = e[g] || "",
238
                r = RegExp("(\\d*)(\\D*)", "g"),
239
                y = RegExp("(\\d*)(\\D*)", "g");
240
            do {
241
                var D = r.exec(i) || ["", "", ""],
242
                    G = y.exec(n) || ["", "", ""];
243
                if (0 == D[0].length && 0 == G[0].length) break;
0 ignored issues
show
Best Practice introduced by
Comparing 0 to G.0.length using the == operator is not safe. Consider using === instead.
Loading history...
Best Practice introduced by
Comparing 0 to D.0.length using the == operator is not safe. Consider using === instead.
Loading history...
244
                c = ((0 == D[1].length ? 0 : parseInt(D[1], 10)) < (0 == G[1].length ? 0 : parseInt(G[1], 10)) ? -1 : (0 == D[1].length ? 0 : parseInt(D[1], 10)) > (0 == G[1].length ? 0 : parseInt(G[1], 10)) ? 1 : 0) || ((0 == D[2].length) < (0 == G[2].length) ?
0 ignored issues
show
Best Practice introduced by
Comparing 0 to D.1.length using the == operator is not safe. Consider using === instead.
Loading history...
Best Practice introduced by
Comparing 0 to G.2.length using the == operator is not safe. Consider using === instead.
Loading history...
Best Practice introduced by
Comparing 0 to D.2.length using the == operator is not safe. Consider using === instead.
Loading history...
Best Practice introduced by
Comparing 0 to G.1.length using the == operator is not safe. Consider using === instead.
Loading history...
245
                    -1 : (0 == D[2].length) > (0 == G[2].length) ? 1 : 0) || (D[2] < G[2] ? -1 : D[2] > G[2] ? 1 : 0)
246
            } while (0 == c)
247
        }
248
        return c
249
    }
250
251
    function Na(a) {
252
        for (var b = 0, c = 0; c < a.length; ++c) b = 31 * b + a.charCodeAt(c), b %= 4294967296;
253
        return b
254
    };
255
    var Oa = Array.prototype,
256
        Pa = Oa.indexOf ? function (a, b, c) {
257
            return Oa.indexOf.call(a, b, c)
258
        } : function (a, b, c) {
259
            c = c == l ? 0 : 0 > c ? Math.max(0, a.length + c) : c;
260
            if (ga(a)) return !ga(b) || 1 != b.length ? -1 : a.indexOf(b, c);
0 ignored issues
show
Best Practice introduced by
Comparing 1 to b.length using the != operator is not safe. Consider using !== instead.
Loading history...
261
            for (; c < a.length; c++)
262
                if (c in a && a[c] === b) return c;
263
            return -1
264
        },
265
        w = Oa.forEach ? function (a, b, c) {
266
            Oa.forEach.call(a, b, c)
267
        } : function (a, b, c) {
268
            for (var d = a.length, e = ga(a) ? a.split("") : a, f = 0; f < d; f++) f in e && b.call(c, e[f], f, a)
269
        },
270
        Qa = Oa.filter ? function (a, b, c) {
271
            return Oa.filter.call(a, b, c)
272
        } : function (a, b, c) {
273
            for (var d = a.length, e = [], f =
274
                    0, g = ga(a) ? a.split("") : a, i = 0; i < d; i++)
275
                if (i in g) {
276
                    var n = g[i];
277
                    b.call(c, n, i, a) && (e[f++] = n)
278
                } return e
279
        },
280
        Ra = Oa.map ? function (a, b, c) {
281
            return Oa.map.call(a, b, c)
282
        } : function (a, b, c) {
283
            for (var d = a.length, e = Array(d), f = ga(a) ? a.split("") : a, g = 0; g < d; g++) g in f && (e[g] = b.call(c, f[g], g, a));
284
            return e
285
        };
286
287
    function Sa(a, b) {
288
        var c = Ta(a, b, j);
289
        return 0 > c ? l : ga(a) ? a.charAt(c) : a[c]
290
    }
291
292
    function Ta(a, b, c) {
293
        for (var d = a.length, e = ga(a) ? a.split("") : a, f = 0; f < d; f++)
294
            if (f in e && b.call(c, e[f], f, a)) return f;
295
        return -1
296
    }
297
298
    function Ua(a, b) {
299
        return 0 <= Pa(a, b)
300
    }
301
302
    function Va(a) {
303
        if (!ea(a))
304
            for (var b = a.length - 1; 0 <= b; b--) delete a[b];
305
        a.length = 0
306
    }
307
308
    function Xa(a, b) {
309
        var c = Pa(a, b);
310
        0 <= c && Ya(a, c)
311
    }
312
313
    function Ya(a, b) {
314
        Oa.splice.call(a, b, 1)
315
    }
316
317
    function Za(a) {
318
        var b = a.length;
319
        if (0 < b) {
320
            for (var c = Array(b), d = 0; d < b; d++) c[d] = a[d];
321
            return c
322
        }
323
        return []
324
    }
325
326
    function $a(a, b) {
327
        for (var c = 1; c < arguments.length; c++) {
328
            var d = arguments[c],
329
                e;
330
            if (ea(d) || (e = fa(d)) && d.hasOwnProperty("callee")) a.push.apply(a, d);
331
            else if (e)
332
                for (var f = a.length, g = d.length, i = 0; i < g; i++) a[f + i] = d[i];
333
            else a.push(d)
334
        }
335
    }
336
337
    function ab(a, b, c, d) {
338
        Oa.splice.apply(a, bb(arguments, 1))
339
    }
340
341
    function bb(a, b, c) {
342
        return 2 >= arguments.length ? Oa.slice.call(a, b) : Oa.slice.call(a, b, c)
343
    }
344
345
    function cb(a, b) {
346
        return a > b ? 1 : a < b ? -1 : 0
347
    };
348
    var db;
349
350
    function eb(a) {
351
        a = a.className;
352
        return ga(a) && a.match(/\S+/g) || []
353
    }
354
355
    function x(a, b) {
356
        var c = eb(a),
357
            d = bb(arguments, 1),
358
            e = c.length + d.length;
359
        fb(c, d);
360
        a.className = c.join(" ");
361
        return c.length == e
362
    }
363
364
    function z(a, b) {
365
        var c = eb(a),
366
            d = bb(arguments, 1),
367
            e = gb(c, d);
368
        a.className = e.join(" ");
369
        return e.length == c.length - d.length
370
    }
371
372
    function fb(a, b) {
373
        for (var c = 0; c < b.length; c++) Ua(a, b[c]) || a.push(b[c])
374
    }
375
376
    function gb(a, b) {
377
        return Qa(a, function (a) {
378
            return !Ua(b, a)
379
        })
380
    }
381
382
    function hb(a, b, c) {
383
        for (var d = eb(a), e = m, f = 0; f < d.length; f++) d[f] == b && (ab(d, f--, 1), e = k);
384
        e && (d.push(c), a.className = d.join(" "))
385
    }
386
387
    function A(a, b, c) {
388
        var d = eb(a);
389
        ga(b) ? Xa(d, b) : ea(b) && (d = gb(d, b));
390
        ga(c) && !Ua(d, c) ? d.push(c) : ea(c) && fb(d, c);
391
        a.className = d.join(" ")
392
    }
393
394
    function B(a, b) {
395
        return Ua(eb(a), b)
396
    }
397
398
    function C(a, b, c) {
399
        c ? x(a, b) : z(a, b)
400
    }
401
402
    function ib(a, b) {
403
        var c = !B(a, b);
404
        C(a, b, c);
405
        return c
406
    };
407
408
    function jb(a, b) {
409
        this.x = da(a) ? a : 0;
410
        this.y = da(b) ? b : 0
411
    }
412
    jb.prototype.ta = function () {
413
        return new jb(this.x, this.y)
414
    };
415
416
    function kb(a, b) {
417
        return new jb(a.x - b.x, a.y - b.y)
418
    };
419
420
    function lb(a, b) {
421
        this.width = a;
422
        this.height = b
423
    }
424
    p = lb.prototype;
425
    p.ta = function () {
426
        return new lb(this.width, this.height)
427
    };
428
    p.ceil = function () {
429
        this.width = Math.ceil(this.width);
430
        this.height = Math.ceil(this.height);
431
        return this
432
    };
433
    p.floor = function () {
434
        this.width = Math.floor(this.width);
435
        this.height = Math.floor(this.height);
436
        return this
437
    };
438
    p.round = function () {
439
        this.width = Math.round(this.width);
440
        this.height = Math.round(this.height);
441
        return this
442
    };
443
    p.scale = function (a) {
444
        this.width *= a;
445
        this.height *= a;
446
        return this
447
    };
448
449
    function mb(a, b) {
450
        for (var c in a) b.call(j, a[c], c, a)
451
    }
452
453
    function nb(a) {
454
        for (var b in a) return a[b]
455
    }
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
456
457
    function ob(a) {
458
        var b = [],
459
            c = 0,
460
            d;
461
        for (d in a) b[c++] = d;
462
        return b
463
    }
464
465
    function pb(a, b, c) {
466
        for (var d in a)
467
            if (b.call(c, a[d], d, a)) return d
468
    }
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
469
470
    function qb(a) {
471
        var b = {},
472
            c;
473
        for (c in a) b[c] = a[c];
474
        return b
475
    }
476
    var rb = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
477
478
    function sb(a, b) {
479
        for (var c, d, e = 1; e < arguments.length; e++) {
480
            d = arguments[e];
481
            for (c in d) a[c] = d[c];
482
            for (var f = 0; f < rb.length; f++) c = rb[f], Object.prototype.hasOwnProperty.call(d, c) && (a[c] = d[c])
483
        }
484
    };
485
    var tb, ub, vb, wb, xb, yb;
486
487
    function zb() {
488
        return q.navigator ? q.navigator.userAgent : l
489
    }
490
491
    function Ab() {
492
        return q.navigator
493
    }
494
    wb = vb = ub = tb = m;
495
    var Bb;
496
    if (Bb = zb()) {
497
        var Cb = Ab();
498
        tb = 0 == Bb.indexOf("Opera");
0 ignored issues
show
Best Practice introduced by
Comparing 0 to Bb.indexOf("Opera") using the == operator is not safe. Consider using === instead.
Loading history...
499
        ub = !tb && -1 != Bb.indexOf("MSIE");
500
        vb = !tb && -1 != Bb.indexOf("WebKit");
501
        wb = !tb && !vb && "Gecko" == Cb.product
502
    }
503
    var Db = tb,
504
        E = ub,
505
        Eb = wb,
506
        Fb = vb,
507
        Gb = Ab(),
508
        Hb = Gb && Gb.platform || "";
509
    xb = -1 != Hb.indexOf("Mac");
510
    yb = -1 != Hb.indexOf("Win");
511
    var Ib = !!Ab() && -1 != (Ab().appVersion || "").indexOf("X11"),
512
        Jb;
513
    a: {
514
        var Kb = "",
515
            Lb;
516
        if (Db && q.opera) var Mb = q.opera.version,
517
            Kb = "function" == typeof Mb ? Mb() : Mb;
518
        else if (Eb ? Lb = /rv\:([^\);]+)(\)|;)/ : E ? Lb = /MSIE\s+([^\);]+)(\)|;)/ : Fb && (Lb = /WebKit\/(\S+)/), Lb) var Nb = Lb.exec(zb()),
519
            Kb = Nb ? Nb[1] : "";
520
        if (E) {
521
            var Ob, Pb = q.document;
522
            Ob = Pb ? Pb.documentMode : j;
523
            if (Ob > parseFloat(Kb)) {
524
                Jb = String(Ob);
525
                break a
526
            }
527
        }
528
        Jb = Kb
529
    }
530
    var Qb = Jb,
531
        Rb = {};
532
533
    function Sb(a) {
534
        return Rb[a] || (Rb[a] = 0 <= Ma(Qb, a))
535
    }
536
    var Tb = {};
537
538
    function Ub(a) {
539
        return Tb[a] || (Tb[a] = E && !!document.documentMode && document.documentMode >= a)
540
    };
541
    var Vb = !E || Ub(9),
542
        Wb = !Eb && !E || E && Ub(9) || Eb && Sb("1.9.1"),
543
        Xb = E && !Sb("9"),
544
        Yb = E || Db || Fb;
545
546
    function Zb(a) {
547
        return a ? new $b(ac(a)) : db || (db = new $b)
548
    }
549
550
    function F(a) {
551
        return ga(a) ? document.getElementById(a) : a
552
    }
553
554
    function I(a, b) {
555
        var c = b || document;
556
        return c.querySelectorAll && c.querySelector ? c.querySelectorAll("." + a) : c.getElementsByClassName ? c.getElementsByClassName(a) : J("*", a, b)
557
    }
558
559
    function K(a, b) {
560
        var c = b || document,
561
            d = l;
562
        return (d = c.querySelectorAll && c.querySelector ? c.querySelector("." + a) : I(a, b)[0]) || l
563
    }
564
565 View Code Duplication
    function J(a, b, c) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
566
        var d = document,
567
            c = c || d,
568
            a = a && "*" != a ? a.toUpperCase() : "";
569
        if (c.querySelectorAll && c.querySelector && (a || b)) return c.querySelectorAll(a + (b ? "." + b : ""));
570
        if (b && c.getElementsByClassName) {
571
            c = c.getElementsByClassName(b);
572
            if (a) {
573
                for (var d = {}, e = 0, f = 0, g; g = c[f]; f++) a == g.nodeName && (d[e++] = g);
574
                d.length = e;
575
                return d
576
            }
577
            return c
578
        }
579
        c = c.getElementsByTagName(a || "*");
580
        if (b) {
581
            d = {};
582
            for (f = e = 0; g = c[f]; f++) a = g.className, "function" == typeof a.split && Ua(a.split(/\s+/), b) && (d[e++] = g);
583
            d.length = e;
584
            return d
585
        }
586
        return c
587
    }
588
    var bc = {
589
        cellpadding: "cellPadding",
590
        cellspacing: "cellSpacing",
591
        colspan: "colSpan",
592
        frameborder: "frameBorder",
593
        height: "height",
594
        maxlength: "maxLength",
595
        role: "role",
596
        rowspan: "rowSpan",
597
        type: "type",
598
        usemap: "useMap",
599
        valign: "vAlign",
600
        width: "width"
601
    };
602
603
    function cc(a) {
604
        a = a.document;
605
        a = dc(a) ? a.documentElement : a.body;
606
        return new lb(a.clientWidth, a.clientHeight)
607
    }
608
609
    function ec() {
610
        var a = window,
611
            b = a.document,
612
            c = 0;
613
        if (b) {
614
            var a = cc(a).height,
615
                c = b.body,
616
                d = b.documentElement;
617
            if (dc(b) && d.scrollHeight) c = d.scrollHeight != a ? d.scrollHeight : d.offsetHeight;
618
            else {
619
                var b = d.scrollHeight,
620
                    e = d.offsetHeight;
621
                d.clientHeight != e && (b = c.scrollHeight, e = c.offsetHeight);
622
                c = b > a ? b > e ? b : e : b < e ? b : e
623
            }
624
        }
625
        return c
626
    }
627
628
    function fc(a) {
629
        var b = !Fb && dc(a) ? a.documentElement : a.body,
630
            a = a.parentWindow || a.defaultView;
631
        return new jb(a.pageXOffset || b.scrollLeft, a.pageYOffset || b.scrollTop)
632
    }
633
634
    function gc(a, b, c) {
635
        return hc(document, arguments)
636
    }
637
638
    function hc(a, b) {
639
        var c = b[0],
640
            d = b[1];
641
        if (!Vb && d && (d.name || d.type)) {
642
            c = ["<", c];
643
            d.name && c.push(' name="', za(d.name), '"');
644
            if (d.type) {
645
                c.push(' type="', za(d.type), '"');
646
                var e = {};
647
                sb(e, d);
648
                delete e.type;
649
                d = e
650
            }
651
            c.push(">");
652
            c = c.join("")
653
        }
654
        var f = a.createElement(c);
655
        d && (ga(d) ? f.className = d : ea(d) ? x.apply(l, [f].concat(d)) : mb(d, function (a, b) {
656
            "style" == b ? f.style.cssText = a : "class" == b ? f.className = a : "for" == b ? f.htmlFor = a : b in bc ? f.setAttribute(bc[b], a) : 0 == b.lastIndexOf("aria-", 0) || 0 == b.lastIndexOf("data-", 0) ? f.setAttribute(b, a) :
0 ignored issues
show
Best Practice introduced by
Comparing 0 to b.lastIndexOf("data-", 0) using the == operator is not safe. Consider using === instead.
Loading history...
Best Practice introduced by
Comparing 0 to b.lastIndexOf("aria-", 0) using the == operator is not safe. Consider using === instead.
Loading history...
657
                f[b] = a
658
        }));
659
        2 < b.length && ic(a, f, b, 2);
660
        return f
661
    }
662
663
    function ic(a, b, c, d) {
664
        function e(c) {
665
            c && b.appendChild(ga(c) ? a.createTextNode(c) : c)
666
        }
667
        for (; d < c.length; d++) {
668
            var f = c[d];
669
            if (fa(f) && !(ia(f) && 0 < f.nodeType)) {
670
                var g = w,
671
                    i;
672
                a: {
673
                    if ((i = f) && "number" == typeof i.length) {
674
                        if (ia(i)) {
675
                            i = "function" == typeof i.item || "string" == typeof i.item;
676
                            break a
677
                        }
678
                        if (ha(i)) {
679
                            i = "function" == typeof i.item;
680
                            break a
681
                        }
682
                    }
683
                    i = m
684
                }
685
                g(i ? Za(f) : f, e)
686
            } else e(f)
687
        }
688
    }
689
690
    function jc(a) {
691
        var b = document,
692
            c = b.createElement("div");
693
        E ? (c.innerHTML = "<br>" + a, c.removeChild(c.firstChild)) : c.innerHTML = a;
694
        if (1 == c.childNodes.length) return c.removeChild(c.firstChild);
0 ignored issues
show
Best Practice introduced by
Comparing 1 to c.childNodes.length using the == operator is not safe. Consider using === instead.
Loading history...
695
        for (a = b.createDocumentFragment(); c.firstChild;) a.appendChild(c.firstChild);
696
        return a
697
    }
698
699
    function dc(a) {
700
        return "CSS1Compat" == a.compatMode
701
    }
702
703
    function kc(a, b) {
704
        ic(ac(a), a, arguments, 1)
705
    }
706
707
    function lc(a) {
708
        for (var b; b = a.firstChild;) a.removeChild(b)
709
    }
710
711
    function mc(a) {
712
        return a && a.parentNode ? a.parentNode.removeChild(a) : l
713
    }
714
715
    function nc(a) {
716
        return a.firstElementChild != j ? a.firstElementChild : oc(a.firstChild)
717
    }
718
719
    function oc(a) {
720
        for (; a && 1 != a.nodeType;) a = a.nextSibling;
0 ignored issues
show
Best Practice introduced by
Comparing 1 to a.nodeType using the != operator is not safe. Consider using !== instead.
Loading history...
721
        return a
722
    }
723
724
    function pc(a) {
725
        if (!a) return l;
726
        if (a.firstChild) return a.firstChild;
727
        for (; a && !a.nextSibling;) a = a.parentNode;
728
        return a ? a.nextSibling : l
729
    }
730
731
    function qc(a) {
732
        if (!a) return l;
733
        if (!a.previousSibling) return a.parentNode;
734
        for (a = a.previousSibling; a && a.lastChild;) a = a.lastChild;
735
        return a
736
    }
737
738
    function rc(a) {
739
        if (Yb) return a.parentElement;
740
        a = a.parentNode;
741
        return ia(a) && 1 == a.nodeType ? a : l
0 ignored issues
show
Best Practice introduced by
Comparing 1 to a.nodeType using the == operator is not safe. Consider using === instead.
Loading history...
742
    }
743
744
    function sc(a, b) {
745
        if (a.contains && 1 == b.nodeType) return a == b || a.contains(b);
0 ignored issues
show
Best Practice introduced by
Comparing 1 to b.nodeType using the == operator is not safe. Consider using === instead.
Loading history...
746
        if ("undefined" != typeof a.compareDocumentPosition) return a == b || Boolean(a.compareDocumentPosition(b) & 16);
747
        for (; b && a != b;) b = b.parentNode;
748
        return b == a
749
    }
750
751
    function ac(a) {
752
        return 9 == a.nodeType ? a : a.ownerDocument || a.document
753
    }
754
755
    function tc(a, b) {
756
        if ("textContent" in a) a.textContent = b;
757
        else if (a.firstChild && 3 == a.firstChild.nodeType) {
758
            for (; a.lastChild != a.firstChild;) a.removeChild(a.lastChild);
759
            a.firstChild.data = b
760
        } else lc(a), a.appendChild(ac(a).createTextNode(b))
761
    }
762
763
    function uc(a, b, c, d) {
764
        if (a != l)
765
            for (a = a.firstChild; a;) {
766
                if (b(a) && (c.push(a), d) || uc(a, b, c, d)) return k;
767
                a = a.nextSibling
768
            }
769
        return m
770
    }
771
    var vc = {
772
            SCRIPT: 1,
773
            STYLE: 1,
774
            HEAD: 1,
775
            IFRAME: 1,
776
            OBJECT: 1
777
        },
778
        xc = {
779
            IMG: " ",
780
            BR: "\n"
781
        };
782
783
    function yc(a) {
784
        if (Xb && "innerText" in a) a = a.innerText.replace(/(\r\n|\r|\n)/g, "\n");
785
        else {
786
            var b = [];
787
            zc(a, b, k);
788
            a = b.join("")
789
        }
790
        a = a.replace(/ \xAD /g, " ").replace(/\xAD/g, "");
791
        a = a.replace(/\u200B/g, "");
792
        Xb || (a = a.replace(/ +/g, " "));
793
        " " != a && (a = a.replace(/^\s*/, ""));
794
        return a
795
    }
796
797
    function zc(a, b, c) {
798
        if (!(a.nodeName in vc))
799
            if (3 == a.nodeType) c ? b.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g, "")) : b.push(a.nodeValue);
800
            else if (a.nodeName in xc) b.push(xc[a.nodeName]);
801
        else
802
            for (a = a.firstChild; a;) zc(a, b, c), a = a.nextSibling
803
    }
804
805
    function Ac(a, b, c) {
806
        if (!b && !c) return l;
807
        var d = b ? b.toUpperCase() : l;
808
        return Bc(a, function (a) {
809
            return (!d || a.nodeName == d) && (!c || B(a, c))
810
        }, k)
811
    }
812
813
    function Cc(a, b) {
814
        return Ac(a, l, b)
815
    }
816
817
    function Bc(a, b, c, d) {
818
        c || (a = a.parentNode);
819
        for (var c = d == l, e = 0; a && (c || e <= d);) {
820
            if (b(a)) return a;
821
            a = a.parentNode;
822
            e++
823
        }
824
        return l
825
    }
826
827
    function $b(a) {
828
        this.b = a || q.document || document
829
    }
830
    p = $b.prototype;
831
    p.A = function (a) {
832
        return ga(a) ? this.b.getElementById(a) : a
833
    };
834
    p.Qd = function (a, b, c) {
835
        return hc(this.b, arguments)
836
    };
837
    p.createElement = function (a) {
838
        return this.b.createElement(a)
839
    };
840
841
    function Dc(a) {
842
        return dc(a.b)
843
    }
844
845
    function Ec(a) {
846
        return fc(a.b)
847
    }
848
    p.appendChild = function (a, b) {
849
        a.appendChild(b)
850
    };
851
    p.contains = sc;
852
    var Fc = "StopIteration" in q ? q.StopIteration : Error("StopIteration");
853
854
    function Gc() {}
855
    Gc.prototype.b = function () {
856
        h(Fc)
857
    };
858
    Gc.prototype.Sa = function () {
859
        return this
860
    };
861
862
    function Hc(a) {
863
        if (a instanceof Gc) return a;
864
        if ("function" == typeof a.Sa) return a.Sa(m);
865
        if (fa(a)) {
866
            var b = 0,
867
                c = new Gc;
868
            c.b = function () {
869
                for (;;) {
870
                    b >= a.length && h(Fc);
871
                    if (b in a) return a[b++];
872
                    b++
873
                }
874
            };
875
            return c
876
        }
877
        h(Error("Not implemented"))
878
    }
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
879
880
    function Ic(a, b) {
881
        if (fa(a)) try {
882
            w(a, b, j)
883
        } catch (c) {
884
            c !== Fc && h(c)
885
        } else {
886
            a = Hc(a);
887
            try {
888
                for (;;) b.call(j, a.b(), j, a)
889
            } catch (d) {
890
                d !== Fc && h(d)
891
            }
892
        }
893
    };
894
895
    function Jc(a, b) {
896
        this.c = {};
897
        this.b = [];
898
        var c = arguments.length;
899
        if (1 < c) {
900
            c % 2 && h(Error("Uneven number of arguments"));
901
            for (var d = 0; d < c; d += 2) Kc(this, arguments[d], arguments[d + 1])
902
        } else if (a) {
903
            if (a instanceof Jc) c = a.pd(), d = a.qd();
904
            else {
905
                var c = ob(a),
906
                    e = [],
907
                    f = 0;
908
                for (d in a) e[f++] = a[d];
909
                d = e
910
            }
911
            for (e = 0; e < c.length; e++) Kc(this, c[e], d[e])
912
        }
913
    }
914
    p = Jc.prototype;
915
    p.Q = 0;
916
    p.Wb = 0;
917
    p.Z = function () {
918
        return this.Q
919
    };
920
    p.qd = function () {
921
        Lc(this);
922
        for (var a = [], b = 0; b < this.b.length; b++) a.push(this.c[this.b[b]]);
923
        return a
924
    };
925
    p.pd = function () {
926
        Lc(this);
927
        return this.b.concat()
928
    };
929
    p.clear = function () {
930
        this.c = {};
931
        this.Wb = this.Q = this.b.length = 0
932
    };
933
934
    function Lc(a) {
935
        if (a.Q != a.b.length) {
936
            for (var b = 0, c = 0; b < a.b.length;) {
937
                var d = a.b[b];
938
                Object.prototype.hasOwnProperty.call(a.c, d) && (a.b[c++] = d);
939
                b++
940
            }
941
            a.b.length = c
942
        }
943
        if (a.Q != a.b.length) {
944
            for (var e = {}, c = b = 0; b < a.b.length;) d = a.b[b], Object.prototype.hasOwnProperty.call(e, d) || (a.b[c++] = d, e[d] = 1), b++;
945
            a.b.length = c
946
        }
947
    }
948
    p.get = function (a, b) {
949
        return Object.prototype.hasOwnProperty.call(this.c, a) ? this.c[a] : b
950
    };
951
952
    function Kc(a, b, c) {
953
        Object.prototype.hasOwnProperty.call(a.c, b) || (a.Q++, a.b.push(b), a.Wb++);
954
        a.c[b] = c
955
    }
956
    p.ta = function () {
957
        return new Jc(this)
958
    };
959
960
    function Mc(a) {
961
        Lc(a);
962
        for (var b = {}, c = 0; c < a.b.length; c++) {
963
            var d = a.b[c];
964
            b[d] = a.c[d]
965
        }
966
        return b
967
    }
968
    p.Sa = function (a) {
969
        Lc(this);
970
        var b = 0,
971
            c = this.b,
972
            d = this.c,
973
            e = this.Wb,
974
            f = this,
975
            g = new Gc;
976
        g.b = function () {
977
            for (;;) {
978
                e != f.Wb && h(Error("The map has changed since the iterator was created"));
979
                b >= c.length && h(Fc);
980
                var g = c[b++];
981
                return a ? g : d[g]
982
            }
983
        };
984
        return g
985
    };
986
987
    function Nc(a) {
988
        var b = new Jc;
989
        Oc(a, b, Pc);
990
        return b
991
    }
992
993
    function Qc(a) {
994
        var b = [];
995
        Oc(a, b, Rc);
996
        return b.join("&")
997
    }
998
999
    function Oc(a, b, c) {
1000
        for (var d = a.elements, e, f = 0; e = d[f]; f++)
1001
            if (!(e.form != a || e.disabled || "fieldset" == e.tagName.toLowerCase())) {
1002
                var g = e.name;
1003
                switch (e.type.toLowerCase()) {
1004
                case "file":
1005
                case "submit":
1006
                case "reset":
1007
                case "button":
1008
                    break;
1009
                case "select-multiple":
1010
                    e = Sc(e);
1011
                    if (e != l)
1012
                        for (var i, n = 0; i = e[n]; n++) c(b, g, i);
1013
                    break;
1014
                default:
1015
                    i = Sc(e), i != l && c(b, g, i)
1016
                }
1017
            } d = a.getElementsByTagName("input");
1018
        for (f = 0; e = d[f]; f++) e.form == a && "image" == e.type.toLowerCase() && (g = e.name, c(b, g, e.value), c(b, g + ".x", "0"), c(b, g + ".y", "0"))
1019
    }
1020
1021
    function Pc(a, b, c) {
1022
        var d = a.get(b);
1023
        d || (d = [], Kc(a, b, d));
1024
        d.push(c)
1025
    }
1026
1027
    function Rc(a, b, c) {
1028
        a.push(encodeURIComponent(b) + "=" + encodeURIComponent(c))
1029
    }
1030
1031 View Code Duplication
    function Sc(a) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
1032
        var b = a.type;
1033
        if (!da(b)) return l;
1034
        switch (b.toLowerCase()) {
1035
        case "checkbox":
1036
        case "radio":
1037
            return a.checked ? a.value : l;
1038
        case "select-one":
1039
            return b = a.selectedIndex, 0 <= b ? a.options[b].value : l;
1040
        case "select-multiple":
1041
            for (var b = [], c, d = 0; c = a.options[d]; d++) c.selected && b.push(c.value);
1042
            return b.length ? b : l;
1043
        default:
1044
            return da(a.value) ? a.value : l
1045
        }
1046
    }
1047
1048
    function Tc(a) {
1049
        a = a.elements.is_private;
1050
        if (a.type) return Sc(a);
1051
        for (var b = 0; b < a.length; b++) {
1052
            var c = Sc(a[b]);
1053
            if (c) return c
1054
        }
1055
        return l
1056
    };
1057
    var Uc = /<[^>]*>|&[^;]+;/g,
1058
        Vc = RegExp("^[^֑-߿יִ-﷿ﹰ-ﻼ]*[A-Za-zÀ-ÖØ-öø-ʸ̀-֐ࠀ-῿Ⰰ-﬜︀-﹯﻽-￿]"),
1059
        Wc = RegExp("^[^A-Za-zÀ-ÖØ-öø-ʸ̀-֐ࠀ-῿Ⰰ-﬜︀-﹯﻽-￿]*[֑-߿יִ-﷿ﹰ-ﻼ]");
1060
1061
    function Xc(a, b) {
1062
        return Wc.test(b ? a.replace(Uc, " ") : a)
1063
    };
1064
    var Yc = {
1065
            "url-identifier": "?spf=1",
1066
            "link-class": "spf-link",
1067
            "request-timeout": 4E3,
1068
            "cache-lifetime": 3E4,
1069
            "navigate-link-clicked-callback": l,
1070
            "navigate-history-changed-callback": l,
1071
            "navigate-requested-callback": l,
1072
            "navigate-processed-callback": l,
1073
            "load-requested-callback": l,
1074
            "load-processed-callback": l,
1075
            "transition-class": "spf-transition",
1076
            "transition-duration": 425,
1077
            "transition-forward-parent-class": "spf-transition-forward",
1078
            "transition-reverse-parent-class": "spf-transition-reverse",
1079
            "transition-current-child-class": "spf-current",
1080
            "transition-forward-child-class": "spf-forward",
1081
            "transition-reverse-child-class": "spf-reverse"
1082
        },
1083
        Zc = {},
1084
        $c = Date.now || function () {
1085
            return +new Date
1086
        },
1087
        ad = 0;
1088
    $c();
1089
    !window.console || eval("false");
1090
    var bd;
1091
1092
    function cd(a) {
1093
        this.c = a;
1094
        this.b = 0;
1095
        this.ha = window.location.href;
1096
        var b = this;
1097
        this.e = function () {
1098
            b.f.apply(b, arguments)
1099
        }
1100
    }
1101
    cd.prototype.f = function (a) {
1102
        var b = window.location.href;
1103
        if (a.state)
1104
            if (a = a.state, b == this.ha) this.b = a["spf-timestamp"], window.history.replaceState(a, "", b);
1105
            else {
1106
                var c = a["spf-timestamp"];
1107
                a["spf-back"] = !!(c < this.b);
1108
                this.b = c;
1109
                this.ha = b;
1110
                this.c(b, a)
1111
            }
1112
    };
1113
    cd.prototype.replace = function (a, b, c) {
1114
        dd(this, k, a, b, c)
1115
    };
1116
1117
    function dd(a, b, c, d, e) {
1118
        if (c || d) c = c || window.location.href, d = d || {}, a.b = $c(), d["spf-timestamp"] = a.b, b ? window.history.replaceState(d, "", c) : window.history.pushState(d, "", c), a.ha = c, e || a.c(c, d)
1119
    };
1120
    var fd = m;
1121
    var gd;
1122
1123
    function hd(a, b) {
1124
        var c = Zc["cache-lifetime"];
1125
        gd || (gd = {});
1126
        c = parseInt(c, 10);
1127
        0 >= c || (gd[a] = new id(b, c))
1128
    }
1129
1130
    function id(a, b) {
1131
        this.data = a;
1132
        this.b = b;
1133
        this.c = $c()
1134
    };
1135
1136
    function jd(a) {
1137
        return a.className && a.className.match(/\S+/g) || []
1138
    }
1139
    var kd = Array.prototype.indexOf ? function (a, b) {
1140
            var c = jd(a);
1141
            return -1 != Array.prototype.indexOf.call(c, b)
1142
        } : function (a, b) {
1143
            for (var c = jd(a), d = 0, e = c.length; d < e; d++)
1144
                if (c[d] == b) return k;
1145
            return m
1146
        },
1147
        ld = Array.prototype.filter ? function (a, b) {
1148
            var c = jd(a),
1149
                c = Array.prototype.filter.call(c, function (a) {
1150
                    return a != b
1151
                });
1152
            a.className = c.join(" ")
1153
        } : function (a, b) {
1154
            for (var c = jd(a), d = [], e = 0, f = c.length; e < f; e++) c[e] != b && d.push(c[e]);
1155
            a.className = d.join(" ")
1156
        };
1157
1158
    function md(a) {
1159
        return a.dataset ? a.dataset.loaded : a.getAttribute("data-" + "loaded".replace(/([A-Z])/g, "-$1").toLowerCase())
1160
    };
1161
1162
    function nd(a, b) {
1163
        a in od || (od[a] = []);
1164
        od[a].push([b, j])
1165
    }
1166
1167
    function pd(a, b) {
1168
        if (a in od)
1169
            for (var c = od[a], d = Array.prototype.slice.call(arguments, 1), e = 0, f = c.length; e < f; e++) c[e] && c[e][0].apply(c[e][1], d)
1170
    }
1171
1172
    function qd(a) {
1173
        a ? a in od && delete od[a] : od = {}
1174
    }
1175
    var od = {};
1176
1177
    function rd(a) {
1178
        for (var b = 0, c = 0, d = a.length; c < d; ++c) b = 31 * b + a.charCodeAt(c), b %= 4294967296;
1179
        return b
1180
    };
1181
1182
    function sd(a, b) {
1183
        if (a) {
1184
            var c = [],
1185
                a = a.replace(/\x3cscript([\s\S]*?)\x3e([\s\S]*?)\x3c\/script\x3e/ig, function (a, b, d) {
1186
                    (a = b.match(/src="([\S]+)"/)) ? c.push([a[1], k]): c.push([d, m]);
1187
                    return ""
1188
                }),
1189
                d = function () {
1190
                    if (0 < c.length) {
1191
                        var a = c.shift(),
1192
                            f = a[0];
1193
                        if (a[1]) {
1194
                            var a = d,
1195
                                g = "spf-js-" + rd(f),
1196
                                i = document.getElementById(g),
1197
                                n = i && md(i),
1198
                                i = i && !n;
1199
                            if (n) a && a();
1200
                            else if (a && nd(g, a), !i) {
1201
                                var r, y = document.createElement("script");
1202
                                y.id = g;
1203
                                y.onload = function () {
1204
                                    if (!md(r)) {
1205
                                        var a = r;
1206
                                        a.dataset ? a.dataset.loaded = "true" : a.setAttribute("data-" + "loaded".replace(/([A-Z])/g,
1207
                                            "-$1").toLowerCase(), "true");
1208
                                        pd(g);
1209
                                        qd(g)
1210
                                    }
1211
                                };
1212
                                y.onreadystatechange = function () {
1213
                                    switch (y.readyState) {
1214
                                    case "loaded":
1215
                                    case "complete":
1216
                                        y.onload()
1217
                                    }
1218
                                };
1219
                                y.src = f;
1220
                                f = document.getElementsByTagName("head")[0];
1221
                                f.insertBefore(y, f.firstChild);
1222
                                r = y
1223
                            }
1224
                        } else a = d, window.execScript ? window.execScript(f, "JavaScript") : (n = document.createElement("script"), n.appendChild(document.createTextNode(f)), f = document.getElementsByTagName("head")[0], f.insertBefore(n, f.firstChild)), a && a()
1225
                    } else b && b()
1226
                };
1227
            d()
1228
        }
1229
    };
1230
    var td;
1231
    td = "XMLHttpRequest" in window ? function () {
1232
        return new XMLHttpRequest
1233
    } : "ActiveXObject" in window ? function () {
1234
        return new ActiveXObject("Microsoft.XMLHTTP")
1235
    } : j;
1236
    var ud;
1237
1238
    function vd(a) {
1239
        if (!a.metaKey && !a.altKey && !a.ctrlKey && !a.shiftKey) {
1240
            var b;
1241
            a: {
1242
                for (b = a.target; b;) {
1243
                    if (kd(b, Zc["link-class"])) break a;
1244
                    b = b.parentNode
1245
                }
1246
                b = l
1247
            }
1248
            if (b) {
1249
                var c = b.href;
1250
                if (c == window.location.href) a.preventDefault();
1251
                else {
1252
                    pd("navigate-link-clicked-callback", b);
1253
                    try {
1254
                        dd(bd, m, c, j, j), a.preventDefault()
1255
                    } catch (d) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
1256
                }
1257
            }
1258
        }
1259
    }
1260
1261
    function wd(a, b) {
1262
        var c = !(!b || !b["spf-back"]);
1263
        pd("navigate-history-changed-callback", a);
1264
        xd(a, c)
1265
    }
1266
1267
    function xd(a, b) {
1268
        yd && (ud && (ud.abort(), ud = l), ud = zd(a, function (a, d) {
1269
            ud = l;
1270
            Ad(d, b, "navigate-processed-callback")
1271
        }, function (a) {
1272
            ud = l;
1273
            window.location.href = a
1274
        }, "navigate-requested-callback"))
1275
    }
1276
1277
    function zd(a, b, c, d) {
1278
        function e(c) {
1279
            try {
1280
                var e = "JSON" in window ? JSON.parse(c.responseText) : eval("(" + c.responseText + ")")
1281
            } catch (g) {
1282
                f();
1283
                return
1284
            }
1285
            hd(a, e);
1286
            d && pd(d, a, e);
1287
            b && b(a, e)
1288
        }
1289
1290
        function f() {
1291
            c && c(a)
1292
        }
1293
        var g = a,
1294
            i = Zc["url-identifier"],
1295
            n;
1296
        if (n = -1 == g.indexOf(i)) n = 0 == i.lastIndexOf("?", 0);
0 ignored issues
show
Best Practice introduced by
Comparing 0 to i.lastIndexOf("?", 0) using the == operator is not safe. Consider using === instead.
Loading history...
1297
        n && (g = -1 != g.indexOf("?") ? g + i.replace("?", "&") : g + i);
1298
        a: {
1299
            if (gd && a in gd) {
1300
                i = gd[a];
1301
                n = $c() - i.c;
1302
                if (isNaN(i.b) || n < i.b) {
1303
                    i = i.data;
1304
                    break a
1305
                }
1306
                gd && a in gd && delete gd[a]
1307
            }
1308
            i = j
1309
        }
1310
        if (i) d && pd(d, a, i), b && b(a, i);
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
1311
        else {
1312
            var i = Zc["request-timeout"],
1313
                r = e || function () {},
1314
                y = f || function () {},
1315
                D = f || function () {},
1316
                G, H = td();
1317
            H.open("GET", g, k);
1318
            var ka = H.abort;
1319
            H.abort = function () {
1320
                clearTimeout(G);
1321
                H.onreadystatechange = l;
1322
                ka.call(H)
1323
            };
1324
            H.onreadystatechange = function () {
1325
                if (4 == H.readyState) switch (clearTimeout(G), H.status) {
1326
                case 200:
1327
                case 204:
1328
                case 304:
1329
                    r(H);
1330
                    break;
1331
                default:
1332
                    y(H)
1333
                }
1334
            };
1335
            0 < i && (G = setTimeout(function () {
1336
                H.abort();
1337
                D(H)
1338
            }, i));
1339
            H.send(l);
1340
            return H
1341
        }
1342
    }
1343
1344
    function Ad(a, b, c) {
1345
        function d() {
1346
            0 == f && (sd(a.js, function () {
0 ignored issues
show
Best Practice introduced by
Comparing 0 to f using the == operator is not safe. Consider using === instead.
Loading history...
1347
                c && pd(c, a)
1348
            }), f--)
1349
        }
1350
        var e = a.css;
1351
        e && (e.replace(/\x3clink([\s\S]*?)\x3e/ig, function (a, b) {
1352
            if (-1 != b.indexOf('rel="stylesheet"')) {
1353
                var c = b.match(/href="([\S]+)"/);
1354
                if (c) {
1355
                    var c = c[1],
1356
                        d = "spf-css-" + rd(c),
1357
                        e = document.getElementById(d);
1358
                    e || (e = document.createElement("link"), e.id = d, e.rel = "stylesheet", e.href = c, document.getElementsByTagName("head")[0].appendChild(e))
1359
                }
1360
            }
1361
        }), e.replace(/\x3cstyle([\s\S]*?)\x3e([\s\S]*?)\x3c\/style/ig, function (a, b, c) {
1362
            c && (a = document.createElement("style"),
1363
                document.getElementsByTagName("head")[0].appendChild(a), "styleSheet" in a ? a.styleSheet.cssText = c : a.appendChild(document.createTextNode(c)))
1364
        }));
1365
        a.title && (document.title = a.title);
1366
        var f = 0,
1367
            e = a.html || {};
1368
        if (Object.keys) f = Object.keys(e).length;
1369
        else
1370
            for (var g in e) f++;
1371
        for (g in e)
1372
            if (e = document.getElementById(g)) {
1373
                var i = e["spf-key"] || (e["spf-key"] = $c() + "-" + ++ad);
1374
                if (!Bd || !kd(e, Zc["transition-class"])) e.innerHTML = a.html[g], sd(a.html[g], function () {
1375
                    f--;
1376
                    d()
1377
                });
1378
                else {
1379
                    Cd(i, k);
1380
                    var n = [],
1381
                        r = {};
1382
                    r.reverse = !!b;
1383
                    r.ib = e;
1384
                    r.sg =
1385
                        Zc["transition-current-child-class"];
1386
                    r.reverse ? (r.Yd = Zc["transition-reverse-child-class"], r.Mc = Zc["transition-reverse-parent-class"]) : (r.Yd = Zc["transition-forward-child-class"], r.Mc = Zc["transition-forward-parent-class"]);
1387
                    n.push([function (b, c) {
1388
                        b.Cb = document.createElement("div");
1389
                        b.Cb.className = b.sg;
1390
                        var d = b.ib,
1391
                            e = b.Cb;
1392
                        if (e) {
1393
                            for (var f; f = d.firstChild;) e.appendChild(f);
1394
                            d.appendChild(e)
1395
                        }
1396
                        b.Db = document.createElement("div");
1397
                        b.Db.className = b.Yd;
1398
                        b.Db.innerHTML = a.html[b.ib.id];
1399
                        b.reverse ? (d = b.Cb, d.parentNode.insertBefore(b.Db,
1400
                            d)) : (d = b.Cb, d.parentNode.insertBefore(b.Db, d.nextSibling));
1401
                        c()
1402
                    }, 0]);
1403
                    n.push([function (a, b) {
1404
                        var c = a.ib,
1405
                            d = a.Mc;
1406
                        kd(c, d) || (c.className += " " + d);
1407
                        b()
1408
                    }, 0]);
1409
                    n.push([function (a, b) {
1410
                        a.ib.removeChild(a.Cb);
1411
                        ld(a.ib, a.Mc);
1412
                        var c = a.Db,
1413
                            d, e = c.parentNode;
1414
                        if (e && 11 != e.nodeType)
1415
                            if (c.removeNode) c.removeNode(m);
1416
                            else {
1417
                                for (; d = c.firstChild;) e.insertBefore(d, c);
1418
                                e.removeChild(c)
1419
                            } b()
1420
                    }, Zc["transition-duration"]]);
1421
                    n.push([function (b, c) {
1422
                        sd(a.html[b.ib.id], function () {
1423
                            f--;
1424
                            d();
1425
                            c()
1426
                        })
1427
                    }, 0]);
1428
                    Dd[i] = {
1429
                        Xd: 0,
1430
                        Wd: n,
1431
                        data: r
1432
                    };
1433
                    Cd(i)
1434
                }
1435
            } d()
1436
    }
1437
1438
    function Cd(a, b) {
1439
        if (a in Dd)
1440
            if (0 < Dd[a].Wd.length) {
1441
                var c = Dd[a].Wd.shift();
1442
                if (b) c[0](Dd[a].data, function () {
1443
                    Cd(a, b)
1444
                });
1445
                else Dd[a].Xd = setTimeout(function () {
1446
                    c[0](Dd[a].data, function () {
1447
                        Cd(a, b)
1448
                    })
1449
                }, c[1])
1450
            } else clearTimeout(Dd[a].Xd), delete Dd[a]
1451
    }
1452
    var yd = m,
1453
        Dd = {},
1454
        Bd;
1455
    a: {
1456
        for (var Ed = document.createElement("div"), Fd = ["Webkit", "Moz", "Ms", "O", "Khtml"], Gd = 0, Hd = Fd.length; Gd < Hd; Gd++)
1457
            if (Fd[Gd] + "Transition" in Ed.style) {
1458
                Bd = k;
1459
                break a
1460
            } Bd = m
1461
    };
1462
1463
    function Id(a) {
1464
        var b = !!window.history.pushState,
1465
            a = a || {},
1466
            c;
1467
        for (c in Yc) {
1468
            var d = c in a ? a[c] : Yc[c];
1469
            Zc[c] = d;
1470
            var e;
1471
            if (e = b)
1472
                if (e = d) e = c.length - 9, e = 0 <= e && c.indexOf("-callback", e) == e;
1473
            e && nd(c, d)
1474
        }
1475
        b && (fd || (bd || (bd = new cd(wd)), c = bd, c.ha = window.location.href, c.replace(c.ha, l, k), window.addEventListener("popstate", c.e, m), fd = k), yd || (document.addEventListener("click", vd, m), yd = k));
1476
        return b
1477
    }
1478
    window.spf = {
1479
        init: Id,
1480
        dispose: function () {
1481
            yd && (document.removeEventListener("click", vd, m), yd = m);
1482
            fd && (window.removeEventListener("popstate", bd.e, m), fd = m);
1483
            qd();
1484
            Zc = {}
1485
        },
1486
        navigate: xd,
1487
        load: function (a, b, c) {
1488
            zd(a, function (a, c) {
1489
                Ad(c, m, "load-processed-callback");
1490
                b && b(a, c)
1491
            }, function (a) {
1492
                c && c(a)
1493
            }, "load-requested-callback")
1494
        }
1495
    };
1496
    var Jd = window.yt && window.yt.config_ || {};
1497
    u("yt.config_", Jd);
1498
    var Kd = window.yt && window.yt.tokens_ || {};
1499
    u("yt.tokens_", Kd);
1500
    var Ld = window.yt && window.yt.globals_ || {};
1501
    u("yt.globals_", Ld);
1502
    var Md = window.yt && window.yt.msgs_ || {};
1503
    u("yt.msgs_", Md);
1504
    var Nd = window.yt && window.yt.timeouts_ || [];
1505
    u("yt.timeouts_", Nd);
1506
    var Od = window.yt && window.yt.intervals_ || [];
1507
    u("yt.intervals_", Od);
1508
1509
    function Pd(a) {
1510
        Qd(Jd, arguments)
1511
    }
1512
1513
    function L(a, b) {
1514
        return a in Jd ? Jd[a] : b
1515
    }
1516
1517
    function Rd(a) {
1518
        Qd(Kd, arguments)
1519
    }
1520
1521
    function M(a) {
1522
        return a in Kd ? Kd[a] : j
1523
    }
1524
1525
    function Sd(a) {
1526
        for (var b = 0, c = arguments.length; b < c; ++b) Ld[arguments[b]] = 1
1527
    }
1528
1529
    function N(a, b) {
1530
        var c = window.setTimeout(a, b);
1531
        Nd.push(c);
1532
        return c
1533
    }
1534
1535
    function Td(a, b) {
1536
        var c = window.setInterval(a, b);
1537
        Od.push(c);
1538
        return c
1539
    }
1540
1541
    function Ud(a) {
1542
        window.clearTimeout(a)
1543
    }
1544
1545
    function Vd(a) {
1546
        window.clearInterval(a)
1547
    }
1548
1549
    function O(a, b, c) {
1550
        var d = b || {};
1551
        if (a = a in Md ? Md[a] : c)
1552
            for (var e in d) a = a.replace(RegExp("\\$" + e, "gi"), function () {
1553
                return d[e]
1554
            });
1555
        return a
1556
    }
1557
    ra = function (a, b) {
1558
        var c = b || {},
1559
            d = a in Md ? Md[a] : a;
1560
        if (d)
1561
            for (var e in c) var f = ("" + c[e]).replace(/\$/g, "$$$$"),
1562
                d = d.replace(RegExp("\\{\\$" + e + "\\}", "gi"), f),
1563
                d = d.replace(RegExp("\\$" + e, "gi"), f);
1564
        return d
1565
    };
1566
1567
    function Qd(a, b) {
1568
        if (1 < b.length) {
1569
            var c = b[0];
1570
            a[c] = b[1]
1571
        } else {
1572
            var d = b[0];
1573
            for (c in d) a[c] = d[c]
1574
        }
1575
    }
1576
    var Wd = "Microsoft Internet Explorer" == navigator.appName;
1577
    var Xd = {};
1578
1579
    function Yd(a, b, c, d) {
1580
        if (L("EVENTS_TRACKER_INSTALLED")) {
1581
            var e = Xd[a];
1582
            if (!e) {
1583
                var f = window._gaq._getAsyncTracker("eventsPageTracker");
1584
                if (!f) return;
1585
                window._gaq.push(function () {
1586
                    e = f._createEventTracker(a);
1587
                    Xd[a] = e
1588
                })
1589
            }
1590
            var g = c || j,
1591
                i = d || j;
1592
            window._gaq.push(function () {
1593
                e._trackEvent(b, g, i)
1594
            })
1595
        }
1596
    };
1597
1598
    function P(a, b, c) {
1599
        a.dataset ? a.dataset[Zd(b)] = c : a.setAttribute("data-" + b, c)
1600
    }
1601
1602
    function Q(a, b) {
1603
        return a.dataset ? a.dataset[Zd(b)] : a.getAttribute("data-" + b)
1604
    }
1605
1606
    function $d(a, b) {
1607
        a.dataset ? delete a.dataset[Zd(b)] : a.removeAttribute("data-" + b)
1608
    }
1609
1610
    function ae(a, b) {
1611
        return a.dataset ? Zd(b) in a.dataset : a.hasAttribute ? !!a.hasAttribute("data-" + b) : !!a.getAttribute("data-" + b)
1612
    }
1613
    var be = {};
1614
1615
    function Zd(a) {
1616
        return be[a] || (be[a] = String(a).replace(/\-([a-z])/g, function (a, c) {
1617
            return c.toUpperCase()
1618
        }))
1619
    };
1620
1621
    function ce(a) {
1622
        var b = a.__yt_uid_key;
1623
        b || (b = de(), a.__yt_uid_key = b);
1624
        return b
1625
    }
1626
    var de = s("yt.dom.getNextId_");
1627
    if (!de) {
1628
        de = function () {
1629
            return ++ee
1630
        };
1631
        u("yt.dom.getNextId_", de);
1632
        var ee = 0
1633
    }
1634
1635
    function fe(a) {
1636
        var b = a.cloneNode(m);
1637
        "TR" == b.tagName || "SELECT" == b.tagName ? w(a.childNodes, function (a) {
1638
            b.appendChild(fe(a))
1639
        }) : b.innerHTML = a.innerHTML;
1640
        return b
1641
    }
1642
1643
    function ge(a) {
1644
        a = fe(F(a));
1645
        a.removeAttribute("id");
1646
        return a
1647
    }
1648
1649
    function he(a, b, c) {
1650
        a = J(a, b, c);
1651
        return a.length ? a[0] : l
1652
    }
1653
1654
    function ie(a, b) {
1655
        "disabled" in a && (a.disabled = !b);
1656
        1 == a.nodeType && C(a, "disabled", !b);
0 ignored issues
show
Best Practice introduced by
Comparing 1 to a.nodeType using the == operator is not safe. Consider using === instead.
Loading history...
1657
        if (a.hasChildNodes())
1658
            for (var c = 0, d; d = a.childNodes[c]; ++c) ie(d, b)
1659
    }
1660
1661 View Code Duplication
    function je() {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
1662
        var a = document;
1663
        if ("fullScreenElement" in a) return a.fullScreenElement;
1664
        if ("mozFullScreenElement" in a) return a.mozFullScreenElement;
1665
        if ("msFullScreenElement" in a) return a.msFullScreenElement;
1666
        if ("oFullScreenElement" in a) return a.oFullScreenElement;
1667
        if ("webkitFullScreenElement" in a) return a.webkitFullScreenElement
0 ignored issues
show
Complexity Best Practice introduced by
There is no return statement if "webkitFullScreenElement" in a is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
1668
    };
1669
1670
    function ke(a) {
1671
        if (a = a || window.event) {
1672
            for (var b in a) b in le || (this[b] = a[b]);
1673
            this.scale = a.scale;
1674
            this.rotation = a.rotation;
1675
            this.Ta = a;
1676
            if ((b = a.target || a.srcElement) && 3 == b.nodeType) b = b.parentNode;
1677
            this.target = b;
1678
            if (b = a.relatedTarget) try {
1679
                b = b.nodeName && b
1680
            } catch (c) {
1681
                b = l
1682
            } else "mouseover" == this.type ? b = a.fromElement : "mouseout" == this.type && (b = a.toElement);
1683
            this.relatedTarget = b;
1684
            this.clientX = a.clientX != j ? a.clientX : a.pageX;
1685
            this.clientY = a.clientY != j ? a.clientY : a.pageY;
1686
            if (document.body && document.documentElement) {
1687
                b = document.body.scrollLeft +
1688
                    document.documentElement.scrollLeft;
1689
                var d = document.body.scrollTop + document.documentElement.scrollTop;
1690
                this.pageX = a.pageX != j ? a.pageX : a.clientX + b;
1691
                this.pageY = a.pageY != j ? a.pageY : a.clientY + d
1692
            }
1693
            this.keyCode = a.keyCode ? a.keyCode : a.which;
1694
            this.charCode = a.charCode || ("keypress" == this.type ? this.keyCode : 0);
1695
            this.altKey = a.altKey;
1696
            this.ctrlKey = a.ctrlKey;
1697
            this.shiftKey = a.shiftKey;
1698
            "MozMousePixelScroll" == this.type ? (this.wheelDeltaX = a.axis == a.HORIZONTAL_AXIS ? a.detail : 0, this.wheelDeltaY = a.axis == a.HORIZONTAL_AXIS ? 0 : a.detail) :
1699
                window.opera ? (this.wheelDeltaX = 0, this.wheelDeltaY = a.detail) : 0 == a.wheelDelta % 120 ? "WebkitTransform" in document.documentElement.style ? window.b && 0 == navigator.platform.indexOf("Mac") ? (this.wheelDeltaX = a.wheelDeltaX / -30, this.wheelDeltaY = a.wheelDeltaY / -30) : (this.wheelDeltaX = a.wheelDeltaX / -1.2, this.wheelDeltaY = a.wheelDeltaY / -1.2) : (this.wheelDeltaX = 0, this.wheelDeltaY = a.wheelDelta / -1.6) : (this.wheelDeltaX = a.wheelDeltaX / -3, this.wheelDeltaY = a.wheelDeltaY / -3)
0 ignored issues
show
Best Practice introduced by
Comparing 0 to navigator.platform.indexOf("Mac") using the == operator is not safe. Consider using === instead.
Loading history...
Best Practice introduced by
Comparing 0 to a.wheelDelta % 120 using the == operator is not safe. Consider using === instead.
Loading history...
1700
        }
1701
    }
1702
    p = ke.prototype;
1703
    p.Ta = l;
1704
    p.type = "";
1705
    p.target = l;
1706
    p.relatedTarget = l;
1707
    p.currentTarget = l;
1708
    p.data = l;
1709
    p.source = l;
1710
    p.state = l;
1711
    p.keyCode = 0;
1712
    p.charCode = 0;
1713
    p.altKey = m;
1714
    p.ctrlKey = m;
1715
    p.shiftKey = m;
1716
    p.clientX = 0;
1717
    p.clientY = 0;
1718
    p.pageX = 0;
1719
    p.pageY = 0;
1720
    p.wheelDeltaX = 0;
1721
    p.wheelDeltaY = 0;
1722
    p.rotation = 0;
1723
    p.scale = 1;
1724
    p.changedTouches = l;
1725
    p.preventDefault = function () {
1726
        this.Ta.returnValue = m;
1727
        this.Ta.preventDefault && this.Ta.preventDefault()
1728
    };
1729
    p.stopPropagation = function () {
1730
        this.Ta.cancelBubble = k;
1731
        this.Ta.stopPropagation && this.Ta.stopPropagation()
1732
    };
1733
    var le = {
1734
        stopPropagation: 1,
1735
        preventMouseEvent: 1,
1736
        preventManipulation: 1,
1737
        preventDefault: 1,
1738
        layerX: 1,
1739
        layerY: 1,
1740
        scale: 1,
1741
        rotation: 1
1742
    };
1743
    var me = s("yt.events.listeners_") || {};
1744
    u("yt.events.listeners_", me);
1745
    var pe = s("yt.events.counter_") || {
1746
        count: 0
1747
    };
1748
    u("yt.events.counter_", pe);
1749
1750
    function qe(a, b, c, d) {
1751
        return pb(me, function (e) {
1752
            return e[0] == a && e[1] == b && e[2] == c && e[4] == !!d
1753
        })
1754
    }
1755
1756
    function R(a, b, c, d) {
1757
        if (!a || !a.addEventListener && !a.attachEvent) return "";
1758
        var d = !!d,
1759
            e = qe(a, b, c, d);
1760
        if (e) return e;
1761
        var e = ++pe.count + "",
1762
            f = !(!("mouseenter" == b || "mouseleave" == b) || !a.addEventListener || "onmouseenter" in document),
1763
            g;
1764
        g = f ? function (d) {
1765
            d = new ke(d);
1766
            if (!Bc(d.relatedTarget, function (b) {
0 ignored issues
show
Complexity Best Practice introduced by
There is no return statement if !Bc(d.relatedTarget, fun... { return b == a; }, k) is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
1767
                    return b == a
1768
                }, k)) return d.currentTarget = a, d.type = b, c.call(a, d)
1769
        } : function (b) {
1770
            b = new ke(b);
1771
            b.currentTarget = a;
1772
            return c.call(a, b)
1773
        };
1774
        me[e] = [a, b, c, g, d];
1775
        a.addEventListener ? "mouseenter" == b && f ? a.addEventListener("mouseover", g, d) :
1776
            "mouseleave" == b && f ? a.addEventListener("mouseout", g, d) : "mousewheel" == b && "MozBoxSizing" in document.documentElement.style ? a.addEventListener("MozMousePixelScroll", g, d) : a.addEventListener(b, g, d) : a.attachEvent("on" + b, g);
1777
        return e
1778
    }
1779
1780
    function re(a, b, c, d) {
1781
        var e;
1782
        e = R(a, b, function () {
1783
            se(e);
1784
            c.apply(a, arguments)
1785
        }, d)
1786
    }
1787
1788
    function T(a, b, c, d) {
1789
        return te(a, b, c, function (a) {
1790
            return B(a, d)
1791
        })
1792
    }
1793
1794
    function te(a, b, c, d) {
1795
        var e = a || document;
1796
        return R(e, b, function (a) {
1797
            var b = Bc(a.target, function (a) {
1798
                return a === e || d(a)
1799
            }, k);
1800
            b && b !== e && (a.currentTarget = b, c.call(b, a))
1801
        })
1802
    }
1803
1804
    function ue(a, b, c, d) {
1805
        (a = qe(a, b, c, !!d)) && se(a)
1806
    }
1807
1808
    function se(a) {
1809
        "string" == typeof a && (a = [a]);
1810
        w(a, function (a) {
1811
            if (a in me) {
1812
                var c = me[a],
1813
                    d = c[0],
1814
                    e = c[1],
1815
                    f = c[3],
1816
                    c = c[4];
1817
                d.removeEventListener ? d.removeEventListener(e, f, c) : d.detachEvent("on" + e, f);
1818
                delete me[a]
1819
            }
1820
        })
1821
    }
1822
1823
    function ve(a) {
1824
        a = a || window.event;
1825
        a = a.target || a.srcElement;
1826
        3 == a.nodeType && (a = a.parentNode);
1827
        return a
1828
    }
1829
1830
    function we(a) {
1831
        a = a || window.event;
1832
        a.cancelBubble = k;
1833
        a.stopPropagation && a.stopPropagation()
1834
    }
1835
1836
    function xe(a) {
1837
        if (document.createEvent) {
1838
            var b = document.createEvent("HTMLEvents");
1839
            b.initEvent("click", k, k);
1840
            a.dispatchEvent(b)
1841
        } else b = document.createEventObject(), a.fireEvent("onclick", b)
1842
    };
1843
1844
    function ye(a) {
1845
        this.b = a
1846
    }
1847
    var ze = /\s*;\s*/;
1848
1849
    function Ae(a, b, c, d, e, f) {
1850
        /[;=\s]/.test(b) && h(Error('Invalid cookie name "' + b + '"'));
1851
        /[;\r\n]/.test(c) && h(Error('Invalid cookie value "' + c + '"'));
1852
        da(d) || (d = -1);
1853
        f = f ? ";domain=" + f : "";
1854
        e = e ? ";path=" + e : "";
1855
        d = 0 > d ? "" : 0 == d ? ";expires=" + (new Date(1970, 1, 1)).toUTCString() : ";expires=" + (new Date(qa() + 1E3 * d)).toUTCString();
0 ignored issues
show
Best Practice introduced by
Comparing 0 to d using the == operator is not safe. Consider using === instead.
Loading history...
1856
        a.b.cookie = b + "=" + c + f + e + d + ""
1857
    }
1858
    p = ye.prototype;
1859
    p.get = function (a, b) {
1860
        for (var c = a + "=", d = (this.b.cookie || "").split(ze), e = 0, f; f = d[e]; e++) {
1861
            if (0 == f.indexOf(c)) return f.substr(c.length);
0 ignored issues
show
Best Practice introduced by
Comparing 0 to f.indexOf(c) using the == operator is not safe. Consider using === instead.
Loading history...
1862
            if (f == a) return ""
1863
        }
1864
        return b
1865
    };
1866
1867
    function Be(a, b, c, d) {
1868
        var e = da(a.get(b));
1869
        Ae(a, b, "", 0, c, d);
1870
        return e
1871
    }
1872
    p.pd = function () {
1873
        return Ce(this).keys
1874
    };
1875
    p.qd = function () {
1876
        return Ce(this).Rf
1877
    };
1878
    p.Z = function () {
1879
        return !this.b.cookie ? 0 : (this.b.cookie || "").split(ze).length
1880
    };
1881
    p.clear = function () {
1882
        for (var a = Ce(this).keys, b = a.length - 1; 0 <= b; b--) Be(this, a[b])
1883
    };
1884
1885
    function Ce(a) {
1886
        for (var a = (a.b.cookie || "").split(ze), b = [], c = [], d, e, f = 0; e = a[f]; f++) d = e.indexOf("="), -1 == d ? (b.push(""), c.push(e)) : (b.push(e.substring(0, d)), c.push(e.substring(d + 1)));
1887
        return {
1888
            keys: b,
1889
            Rf: c
1890
        }
1891
    }
1892
    var De = new ye(document);
1893
    De.c = 3950;
1894
1895
    function Ee(a, b, c, d, e) {
1896
        Ae(De, "" + a, b, c, d || "/", e || "youtube.com")
1897
    }
1898
1899
    function Fe(a, b) {
1900
        return De.get("" + a, b)
1901
    }
1902
1903
    function Ge(a, b, c) {
1904
        return Be(De, "" + a, b || "/", c || "youtube.com")
1905
    };
1906
1907
    function He() {
1908
        var a = Fe("PREF");
1909
        if (a)
1910
            for (var a = unescape(a).split("&"), b = 0; b < a.length; b++) {
1911
                var c = a[b].split("="),
1912
                    d = c[0];
1913
                (c = c[1]) && (Ie[d] = c.toString())
1914
            }
1915
    }
1916
    ba(He);
1917
    var Ie = s("yt.prefs.UserPrefs.prefs_") || {};
1918
    u("yt.prefs.UserPrefs.prefs_", Ie);
1919
1920
    function Je(a) {
1921
        /^f([1-9][0-9]*)$/.test(a) && h("ExpectedRegexMatch: " + a)
1922
    }
1923
1924
    function Ke(a) {
1925
        /^\w+$/.test(a) || h("ExpectedRegexMismatch: " + a)
1926
    }
1927
1928
    function Le(a) {
1929
        a = Ie[a] !== j ? Ie[a].toString() : l;
1930
        return a != l && /^[A-Fa-f0-9]+$/.test(a) ? parseInt(a, 16) : l
1931
    }
1932
    He.prototype.get = function (a, b) {
1933
        Ke(a);
1934
        Je(a);
1935
        var c = Ie[a] !== j ? Ie[a].toString() : l;
1936
        return c != l ? c : b ? b : ""
1937
    };
1938
1939
    function Me(a, b) {
1940
        Ke(a);
1941
        Je(a);
1942
        b == l && h("ExpectedNotNull");
1943
        Ie[a] = b.toString()
1944
    }
1945
1946
    function Ne(a, b) {
1947
        return !!((Le("f" + (Math.floor(b / 31) + 1)) || 0) & 1 << b % 31)
1948
    }
1949
1950
    function Oe(a, b) {
1951
        var c = "f" + (Math.floor(a / 31) + 1),
1952
            d = 1 << a % 31,
1953
            e = Le(c) || 0,
1954
            e = b ? e | d : e & ~d;
1955
        0 == e ? delete Ie[c] : (d = e.toString(16), Ie[c] = d.toString())
0 ignored issues
show
Best Practice introduced by
Comparing 0 to e using the == operator is not safe. Consider using === instead.
Loading history...
1956
    }
1957
1958
    function Pe() {
1959
        var a = [],
1960
            b;
1961
        for (b in Ie) a.push(b + "=" + escape(Ie[b]));
1962
        Ee("PREF", a.join("&"), 31536E4)
1963
    }
1964
    He.prototype.clear = function () {
1965
        Ie = {}
1966
    };
1967
1968
    function Qe(a, b, c, d) {
1969
        this.top = a;
1970
        this.right = b;
1971
        this.bottom = c;
1972
        this.left = d
1973
    }
1974
    Qe.prototype.ta = function () {
1975
        return new Qe(this.top, this.right, this.bottom, this.left)
1976
    };
1977
    Qe.prototype.contains = function (a) {
1978
        return !this || !a ? m : a instanceof Qe ? a.left >= this.left && a.right <= this.right && a.top >= this.top && a.bottom <= this.bottom : a.x >= this.left && a.x <= this.right && a.y >= this.top && a.y <= this.bottom
1979
    };
1980
1981
    function Re(a, b, c, d) {
1982
        this.left = a;
1983
        this.top = b;
1984
        this.width = c;
1985
        this.height = d
1986
    }
1987
    Re.prototype.ta = function () {
1988
        return new Re(this.left, this.top, this.width, this.height)
1989
    };
1990
    Re.prototype.contains = function (a) {
1991
        return a instanceof Re ? this.left <= a.left && this.left + this.width >= a.left + a.width && this.top <= a.top && this.top + this.height >= a.top + a.height : a.x >= this.left && a.x <= this.left + this.width && a.y >= this.top && a.y <= this.top + this.height
1992
    };
1993
1994
    function Se(a, b, c) {
1995
        ga(b) ? Te(a, c, b) : mb(b, pa(Te, a))
1996
    }
1997
1998
    function Te(a, b, c) {
1999
        a.style[String(c).replace(/\-([a-z])/g, function (a, b) {
2000
            return b.toUpperCase()
2001
        })] = b
2002
    }
2003
2004
    function Ue(a, b) {
2005
        var c = ac(a);
2006
        return c.defaultView && c.defaultView.getComputedStyle && (c = c.defaultView.getComputedStyle(a, l)) ? c[b] || c.getPropertyValue(b) || "" : ""
2007
    }
2008
2009
    function Ve(a, b) {
2010
        return a.currentStyle ? a.currentStyle[b] : l
2011
    }
2012
2013
    function We(a, b) {
2014
        return Ue(a, b) || Ve(a, b) || a.style && a.style[b]
2015
    }
2016
2017
    function Xe(a) {
2018
        var b = a.getBoundingClientRect();
2019
        E && (a = a.ownerDocument, b.left -= a.documentElement.clientLeft + a.body.clientLeft, b.top -= a.documentElement.clientTop + a.body.clientTop);
2020
        return b
2021
    }
2022
2023
    function Ye(a) {
2024
        if (E && !Ub(8)) return a.offsetParent;
2025
        for (var b = ac(a), c = We(a, "position"), d = "fixed" == c || "absolute" == c, a = a.parentNode; a && a != b; a = a.parentNode)
2026
            if (c = We(a, "position"), d = d && "static" == c && a != b.documentElement && a != b.body, !d && (a.scrollWidth > a.clientWidth || a.scrollHeight > a.clientHeight || "fixed" == c || "absolute" == c || "relative" == c)) return a;
2027
        return l
2028
    }
2029
2030
    function Ze(a) {
2031
        for (var b = new Qe(0, Infinity, Infinity, 0), c = Zb(a), d = c.b.body, e = c.b.documentElement, f = !Fb && dc(c.b) ? c.b.documentElement : c.b.body; a = Ye(a);)
2032
            if ((!E || 0 != a.clientWidth) && (!Fb || 0 != a.clientHeight || a != d) && a != d && a != e && "visible" != We(a, "overflow")) {
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a.clientHeight using the != operator is not safe. Consider using !== instead.
Loading history...
Best Practice introduced by
Comparing 0 to a.clientWidth using the != operator is not safe. Consider using !== instead.
Loading history...
2033
                var g = $e(a),
2034
                    i;
2035
                i = a;
2036
                if (Eb && !Sb("1.9")) {
2037
                    var n = parseFloat(Ue(i, "borderLeftWidth"));
2038
                    if (af(i)) var r = i.offsetWidth - i.clientWidth - n - parseFloat(Ue(i, "borderRightWidth")),
2039
                        n = n + r;
2040
                    i = new jb(n, parseFloat(Ue(i, "borderTopWidth")))
2041
                } else i = new jb(i.clientLeft, i.clientTop);
2042
                g.x += i.x;
2043
                g.y += i.y;
2044
                b.top = Math.max(b.top, g.y);
2045
                b.right = Math.min(b.right, g.x + a.clientWidth);
2046
                b.bottom = Math.min(b.bottom, g.y + a.clientHeight);
2047
                b.left = Math.max(b.left, g.x)
2048
            } d = f.scrollLeft;
2049
        f = f.scrollTop;
2050
        b.left = Math.max(b.left, d);
2051
        b.top = Math.max(b.top, f);
2052
        c = cc(c.b.parentWindow || c.b.defaultView || window);
2053
        b.right = Math.min(b.right, d + c.width);
2054
        b.bottom = Math.min(b.bottom, f + c.height);
2055
        return 0 <= b.top && 0 <= b.left && b.bottom > b.top && b.right > b.left ? b : l
2056
    }
2057
2058
    function $e(a) {
2059
        var b, c = ac(a),
2060
            d = We(a, "position"),
2061
            e = Eb && c.getBoxObjectFor && !a.getBoundingClientRect && "absolute" == d && (b = c.getBoxObjectFor(a)) && (0 > b.screenX || 0 > b.screenY),
2062
            f = new jb(0, 0),
2063
            g;
2064
        b = c ? ac(c) : document;
2065
        g = E && !Ub(9) && !Dc(Zb(b)) ? b.body : b.documentElement;
2066
        if (a == g) return f;
2067
        if (a.getBoundingClientRect) b = Xe(a), a = Ec(Zb(c)), f.x = b.left + a.x, f.y = b.top + a.y;
2068
        else if (c.getBoxObjectFor && !e) b = c.getBoxObjectFor(a), a = c.getBoxObjectFor(g), f.x = b.screenX - a.screenX, f.y = b.screenY - a.screenY;
2069
        else {
2070
            b = a;
2071
            do {
2072
                f.x += b.offsetLeft;
2073
                f.y +=
2074
                    b.offsetTop;
2075
                b != a && (f.x += b.clientLeft || 0, f.y += b.clientTop || 0);
2076
                if (Fb && "fixed" == We(b, "position")) {
2077
                    f.x += c.body.scrollLeft;
2078
                    f.y += c.body.scrollTop;
2079
                    break
2080
                }
2081
                b = b.offsetParent
2082
            } while (b && b != a);
2083
            if (Db || Fb && "absolute" == d) f.y -= c.body.offsetTop;
2084
            for (b = a;
2085
                (b = Ye(b)) && b != c.body && b != g;)
2086
                if (f.x -= b.scrollLeft, !Db || "TR" != b.tagName) f.y -= b.scrollTop
2087
        }
2088
        return f
2089
    }
2090
2091
    function bf(a) {
2092
        var b = new jb;
2093
        if (1 == a.nodeType) {
0 ignored issues
show
Best Practice introduced by
Comparing 1 to a.nodeType using the == operator is not safe. Consider using === instead.
Loading history...
2094
            if (a.getBoundingClientRect) {
2095
                var c = Xe(a);
2096
                b.x = c.left;
2097
                b.y = c.top
2098
            } else {
2099
                var c = Ec(Zb(a)),
2100
                    d = $e(a);
2101
                b.x = d.x - c.x;
2102
                b.y = d.y - c.y
2103
            }
2104
            if (Eb && !Sb(12)) {
2105
                var e;
2106
                E ? e = "-ms-transform" : Fb ? e = "-webkit-transform" : Db ? e = "-o-transform" : Eb && (e = "-moz-transform");
2107
                var f;
2108
                e && (f = We(a, e));
2109
                f || (f = We(a, "transform"));
2110
                f ? (a = f.match(cf), a = !a ? new jb(0, 0) : new jb(parseFloat(a[1]), parseFloat(a[2]))) : a = new jb(0, 0);
2111
                b = new jb(b.x + a.x, b.y + a.y)
2112
            }
2113
        } else e = ha(a.Hg), f = a, a.targetTouches ? f = a.targetTouches[0] : e && a.Ia.targetTouches &&
2114
            (f = a.Ia.targetTouches[0]), b.x = f.clientX, b.y = f.clientY;
2115
        return b
2116
    }
2117
2118
    function df(a, b) {
2119
        "number" == typeof a && (a = (b ? Math.round(a) : a) + "px");
2120
        return a
2121
    }
2122
2123
    function ef(a) {
2124
        if ("none" != We(a, "display")) return ff(a);
2125
        var b = a.style,
2126
            c = b.display,
2127
            d = b.visibility,
2128
            e = b.position;
2129
        b.visibility = "hidden";
2130
        b.position = "absolute";
2131
        b.display = "inline";
2132
        a = ff(a);
2133
        b.display = c;
2134
        b.position = e;
2135
        b.visibility = d;
2136
        return a
2137
    }
2138
2139
    function ff(a) {
2140
        var b = a.offsetWidth,
2141
            c = a.offsetHeight,
2142
            d = Fb && !b && !c;
2143
        return (!da(b) || d) && a.getBoundingClientRect ? (a = Xe(a), new lb(a.right - a.left, a.bottom - a.top)) : new lb(b, c)
2144
    }
2145
2146
    function gf(a) {
2147
        var b = $e(a),
2148
            a = ef(a);
2149
        return new Re(b.x, b.y, a.width, a.height)
2150
    }
2151
2152
    function af(a) {
2153
        return "rtl" == We(a, "direction")
2154
    }
2155
2156
    function hf(a, b) {
2157
        if (/^\d+px?$/.test(b)) return parseInt(b, 10);
2158
        var c = a.style.left,
2159
            d = a.runtimeStyle.left;
2160
        a.runtimeStyle.left = a.currentStyle.left;
2161
        a.style.left = b;
2162
        var e = a.style.pixelLeft;
2163
        a.style.left = c;
2164
        a.runtimeStyle.left = d;
2165
        return e
2166
    }
2167
    var jf = {
2168
        thin: 2,
2169
        medium: 4,
2170
        thick: 6
2171
    };
2172
2173
    function kf(a, b) {
2174
        if ("none" == Ve(a, b + "Style")) return 0;
2175
        var c = Ve(a, b + "Width");
2176
        return c in jf ? jf[c] : hf(a, c)
2177
    }
2178
    var cf = /matrix\([0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, ([0-9\.\-]+)p?x?, ([0-9\.\-]+)p?x?\)/;
2179
2180
    function lf(a, b) {
2181
        if ((a = F(a)) && a.style) a.style.display = b ? "" : "none", C(a, "hid", !b)
2182
    }
2183
2184
    function mf(a) {
2185
        a = F(a);
2186
        return !a ? m : !("none" == a.style.display || B(a, "hid"))
2187
    }
2188
2189
    function nf(a) {
2190
        if (a = F(a)) mf(a) ? (a.style.display = "none", x(a, "hid")) : (a.style.display = "", z(a, "hid"))
2191
    }
2192
2193
    function of (a, b) {
2194
        if (a = F(a)) a.style.visibility = b ? "visible" : "hidden"
2195
    }
2196
2197
    function pf(a) {
2198
        a = F(a);
2199
        if (!a) return l;
2200
        var b = 0,
2201
            c = 0;
2202
        if (a.offsetParent) {
2203
            do b += a.offsetLeft, c += a.offsetTop; while (a = a.offsetParent)
2204
        }
2205
        return new jb(b, c)
2206
    }
2207
2208
    function U(a) {
2209
        w(arguments, function (a) {
2210
            lf(a, k)
2211
        })
2212
    }
2213
2214
    function V(a) {
2215
        w(arguments, function (a) {
2216
            lf(a, m)
2217
        })
2218
    }
2219
2220
    function qf(a) {
2221
        w(arguments, nf)
2222
    };
2223
2224
    function rf(a, b, c, d, e, f, g) {
2225
        var i = "";
2226
        a && (i += a + ":");
2227
        c && (i += "//", b && (i += b + "@"), i += c, d && (i += ":" + d));
2228
        e && (i += e);
2229
        f && (i += "?" + f);
2230
        g && (i += "#" + g);
2231
        return i
2232
    }
2233
    var sf = RegExp("^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([\\w\\d\\-\\u0100-\\uffff.%]*)(?::([0-9]+))?)?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$");
2234
2235
    function tf(a) {
2236
        if (uf) {
2237
            uf = m;
2238
            var b = q.location;
2239
            if (b) {
2240
                var c = b.href;
2241
                if (c && (c = vf(c)) && c != b.hostname) uf = k, h(Error())
2242
            }
2243
        }
2244
        return a.match(sf)
2245
    }
2246
    var uf = Fb;
2247
2248
    function vf(a) {
2249
        return (a = tf(a)[3] || l) && decodeURIComponent(a)
2250
    }
2251
2252
    function wf() {
2253
        var a = tf(document.location.href);
2254
        return rf(a[1], a[2], a[3], a[4])
2255
    }
2256
2257
    function xf(a) {
2258
        a = tf(a);
2259
        return rf(l, l, l, l, a[5], a[6], a[7])
2260
    }
2261
2262
    function yf(a) {
2263
        var b = a.indexOf("#");
2264
        return 0 > b ? a : a.substr(0, b)
2265
    }
2266
2267 View Code Duplication
    function zf(a) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
2268
        if (a[1]) {
2269
            var b = a[0],
2270
                c = b.indexOf("#");
2271
            0 <= c && (a.push(b.substr(c)), a[0] = b = b.substr(0, c));
2272
            c = b.indexOf("?");
2273
            0 > c ? a[1] = "?" : c == b.length - 1 && (a[1] = j)
2274
        }
2275
        return a.join("")
2276
    }
2277
2278
    function Af(a, b, c) {
2279
        if (ea(b))
2280
            for (var d = 0; d < b.length; d++) Af(a, String(b[d]), c);
2281
        else b != l && c.push("&", a, "" === b ? "" : "=", encodeURIComponent(String(b)))
2282
    }
2283
2284
    function Bf(a, b, c) {
2285
        Math.max(b.length - (c || 0), 0);
2286
        for (c = c || 0; c < b.length; c += 2) Af(b[c], b[c + 1], a);
2287
        return a
2288
    }
2289
2290
    function Cf(a, b) {
2291
        for (var c in b) Af(c, b[c], a);
2292
        return a
2293
    }
2294
2295
    function Df(a) {
2296
        a = Cf([], a);
2297
        a[0] = "";
2298
        return a.join("")
2299
    }
2300
2301
    function Ef(a, b) {
2302
        return zf(2 == arguments.length ? Bf([a], arguments[1], 0) : Bf([a], arguments, 1))
2303
    }
2304
    var Ff = /#|$/;
2305
2306
    function Gf(a, b) {
2307
        var c = a.search(Ff),
2308
            d;
2309
        a: {
2310
            d = 0;
2311
            for (var e = b.length; 0 <= (d = a.indexOf(b, d)) && d < c;) {
2312
                var f = a.charCodeAt(d - 1);
2313
                if (38 == f || 63 == f)
2314
                    if (f = a.charCodeAt(d + e), !f || 61 == f || 38 == f || 35 == f) break a;
2315
                d += e + 1
2316
            }
2317
            d = -1
2318
        }
2319
        if (0 > d) return l;
2320
        e = a.indexOf("&", d);
2321
        if (0 > e || e > c) e = c;
2322
        d += b.length + 1;
2323
        return ya(a.substr(d, e - d))
2324
    };
2325
2326
    function Hf(a) {
2327
        "?" == a.charAt(0) && (a = a.substr(1));
2328
        for (var a = a.split("&"), b = {}, c = 0, d = a.length; c < d; c++) {
2329
            var e = a[c].split("=");
2330
            if (1 == e.length && e[0] || 2 == e.length) {
0 ignored issues
show
Best Practice introduced by
Comparing 1 to e.length using the == operator is not safe. Consider using === instead.
Loading history...
2331
                var f = ya(e[0] || ""),
2332
                    e = ya(e[1] || "");
2333
                f in b ? ea(b[f]) ? $a(b[f], e) : b[f] = [b[f], e] : b[f] = e
2334
            }
2335
        }
2336
        return b
2337
    }
2338
2339
    function Jf(a) {
2340
        return -1 != a.indexOf("?") ? (a = (a || "").split("#")[0], a = a.split("?", 2), Hf(1 < a.length ? a[1] : a[0])) : {}
2341
    }
2342
2343
    function Kf(a) {
2344
        "#" == a.charAt(0) && (a = "!" == a.charAt(1) ? a.substr(2) : a.substr(1));
2345
        return Hf(a)
2346
    }
2347
2348
    function Lf(a, b) {
2349
        return zf(Cf([a], b))
2350
    }
2351
    var Mf = vf;
2352
2353
    function Nf(a, b) {
2354
        var c = a.split("?", 2),
2355
            a = c[0],
2356
            c = Hf(c[1] || ""),
2357
            d;
2358
        for (d in b) c[d] = b[d];
2359
        return Lf(a, c)
2360
    }
2361
2362
    function Of(a) {
2363
        return a === l ? m : "com" == a[0] && a[1].match(/^youtube(?:-nocookie)?$/) ? k : m
2364
    }
2365
2366
    function Pf(a) {
2367
        return a === l ? m : "google" == a[1] ? k : "google" == a[2] ? "au" == a[0] && "com" == a[1] ? k : "uk" == a[0] && "co" == a[1] ? k : m : m
2368
    }
2369
2370
    function Qf(a) {
2371
        a = Mf(a);
2372
        return a === l ? l : a.split(".").reverse()
2373
    };
2374
2375
    function Rf(a) {
2376
        a = a || {};
2377
        this.url = a.url || this.url;
2378
        this.urlV8 = a.url_v8 || this.urlV8;
2379
        this.urlV9As2 = a.url_v9as2 || this.urlV9As2;
2380
        this.minVersion = a.min_version || this.minVersion;
2381
        this.args = a.args || qb(Sf);
2382
        this.assets = a.assets || {};
2383
        this.attrs = a.attrs || qb(Tf);
2384
        this.params = a.params || qb(Uf);
2385
        this.fallback = a.fallback || this.fallback;
2386
        this.fallbackMessage = a.fallbackMessage || this.fallbackMessage;
2387
        this.html5 = a.html5 || this.html5;
2388
        this.disable = a.disable || {}
2389
    }
2390
    var Sf = {
2391
            enablejsapi: 1
2392
        },
2393
        Tf = {
2394
            width: "640",
2395
            height: "385"
2396
        },
2397
        Uf = {
2398
            allowscriptaccess: "always",
2399
            allowfullscreen: "true",
2400
            bgcolor: "#000000"
2401
        };
2402
    p = Rf.prototype;
2403
    p.url = "";
2404
    p.urlV8 = "";
2405
    p.urlV9As2 = "";
2406
    p.minVersion = "8.0.0";
2407
    p.fallback = l;
2408
    p.fallbackMessage = l;
2409
    p.html5 = m;
2410
    p.ta = function () {
2411
        var a = new Rf,
2412
            b;
2413
        for (b in this) {
2414
            var c = this[b];
2415
            a[b] = "object" == ca(c) ? qb(c) : c
2416
        }
2417
        return a
2418
    };
2419
2420
    function Vf() {
2421
        this.b = [];
2422
        Wf(this)
2423
    }
2424
    ba(Vf);
2425
    p = Vf.prototype;
2426
    p.R = 0;
2427
    p.Ha = 0;
2428
    p.hb = 0;
2429
    p.Lc = "";
2430
    p.Da = 0;
2431
    p.load = function (a) {
2432
        3 <= this.Da ? a(this) : this.b.push(a)
2433
    };
2434
2435
    function Xf(a, b, c, d) {
2436
        b = "string" == typeof b ? b.split(".") : [b, c, d];
2437
        b[0] = parseInt(b[0], 10) || 0;
2438
        b[1] = parseInt(b[1], 10) || 0;
2439
        b[2] = parseInt(b[2], 10) || 0;
2440
        return a.R > b[0] || a.R == b[0] && a.Ha > b[1] || a.R == b[0] && a.Ha == b[1] && a.hb >= b[2]
2441
    }
2442
2443
    function Yf(a) {
2444
        return -1 < a.Lc.indexOf("Gnash") && -1 == a.Lc.indexOf("AVM2") || 9 == a.R && 1 == a.Ha || 9 == a.R && 0 == a.Ha && 1 == a.hb ? m : 9 <= a.R
0 ignored issues
show
Best Practice introduced by
Comparing 1 to a.hb using the == operator is not safe. Consider using === instead.
Loading history...
Best Practice introduced by
Comparing 1 to a.Ha using the == operator is not safe. Consider using === instead.
Loading history...
2445
    }
2446
2447
    function Zf(a) {
2448
        return -1 < navigator.userAgent.indexOf("Sony/COM2") && !Xf(a, 9, 1, 58) ? m : k
2449
    }
2450
2451
    function Wf(a) {
2452
        if (3 > a.Da)
2453
            if (1 > a.Da) {
2454
                var b = s("window.navigator.plugins"),
2455
                    c = s("window.navigator.mimeTypes"),
2456
                    b = b && b["Shockwave Flash"],
2457
                    c = c && c["application/x-shockwave-flash"],
2458
                    c = b && c && c.enabledPlugin && b.description || "";
2459 View Code Duplication
                if (b = c) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
2460
                    var d = b.indexOf("Shockwave Flash");
2461
                    0 <= d && (b = b.substr(d + 15));
2462
                    for (var d = b.split(" "), e = "", b = "", f = 0, g = d.length; f < g; f++)
2463
                        if (e)
2464
                            if (b) break;
2465
                            else b = d[f];
2466
                    else e = d[f];
2467
                    e = e.split(".");
2468
                    d = parseInt(e[0], 10) || 0;
2469
                    e = parseInt(e[1], 10) || 0;
2470
                    f = 0;
2471
                    if ("r" == b.charAt(0) || "d" == b.charAt(0)) f = parseInt(b.substr(1),
2472
                        10) || 0;
2473
                    b = [d, e, f]
2474
                } else b = [0, 0, 0];
2475
                a.Lc = c;
2476
                c = b;
2477
                a.R = c[0];
2478
                a.Ha = c[1];
2479
                a.hb = c[2];
2480
                a.Da = 1;
2481
                0 < a.R ? $f(a) : Wf(a)
2482
            } else if (2 > a.Da) {
2483
            var i, n, r, y;
2484
            if (Wd) {
2485
                try {
2486
                    i = new ActiveXObject("ShockwaveFlash.ShockwaveFlash")
2487
                } catch (D) {
2488
                    i = l
2489
                }
2490
                i || a.Ud("")
2491
            } else r = document.getElementsByTagName("body")[0], y = document.createElement("object"), y.setAttribute("type", "application/x-shockwave-flash"), i = r.appendChild(y);
2492
            var G = t(a.Ud, a),
2493
                H = 0,
2494
                ka = function () {
2495
                    if (i && "GetVariable" in i) try {
2496
                        n = i.GetVariable("$version")
2497
                    } catch (a) {
2498
                        n = ""
2499
                    }
2500
                    n || 10 <= H ? (r && y && r.removeChild(y),
2501
                        G(n || "")) : (H++, N(ka, 10))
2502
                };
2503
            N(ka, 0)
2504
        } else $f(a)
2505
    }
2506
    p.Ud = function (a) {
2507
        a ? (a = a.split(" ")[1].split(","), a = [parseInt(a[0], 10) || 0, parseInt(a[1], 10) || 0, parseInt(a[2], 10) || 0]) : a = [0, 0, 0];
2508
        this.R = a[0];
2509
        this.Ha = a[1];
2510
        this.hb = a[2];
2511
        this.Da = 2;
2512
        0 < this.R ? $f(this) : Wf(this)
2513
    };
2514
2515
    function $f(a) {
2516
        if (3 > a.Da) {
2517
            a.Da = 3;
2518
            for (var b = 0, c = a.b.length; b < c; b++) a.b[b](a);
2519
            a.b = []
2520
        }
2521
    };
2522
2523
    function ag(a, b, c) {
2524
        if ((a = F(a)) && b && c) {
2525
            c instanceof Rf || (c = new Rf(c));
2526
            var d = qb(c.attrs);
2527
            d.tabindex = 0;
2528
            var e = qb(c.params);
2529
            e.flashvars = Df(c.args);
2530
            if (Wd) {
2531
                d.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
2532
                e.movie = b;
2533
                var b = document.createElement("object"),
2534
                    f;
2535
                for (f in d) b.setAttribute(f, d[f]);
2536
                for (f in e) d = document.createElement("param"), d.setAttribute("name", f), d.setAttribute("value", e[f]), b.appendChild(d)
2537
            } else {
2538
                d.type = "application/x-shockwave-flash";
2539
                d.src = b;
2540
                b = document.createElement("embed");
2541
                for (f in d) b.setAttribute(f,
2542
                    d[f]);
2543
                for (f in e) b.setAttribute(f, e[f])
2544
            }
2545
            e = document.createElement("div");
2546
            e.appendChild(b);
2547
            a.innerHTML = e.innerHTML
2548
        }
2549
    }
2550
2551
    function bg(a, b) {
2552
        a = F(a);
2553
        b instanceof Rf || (b = new Rf(b));
2554
        if (window != window.top) {
2555
            var c = l;
2556
            document.referrer && (c = document.referrer.substring(0, 128));
2557
            b.args.framer = c
2558
        }
2559
        cg(function (c) {
2560
            Xf(c, b.minVersion) || L("IS_OPERA_MINI") ? (c = Yf(c) && b.url || Zf(c) && b.urlV9As2 || b.urlV8 || b.url, ag(a, c, b)) : 0 == c.R && b.fallback ? b.fallback() : 0 == c.R && b.fallbackMessage ? b.fallbackMessage() : a.innerHTML = '<div id="flash-upgrade">' + O("FLASH_UPGRADE", j, 'You need to upgrade your Adobe Flash Player to watchthis video. <br> <a href="http://get.adobe.com/flashplayer/">Download it from Adobe.</a>') +
0 ignored issues
show
Best Practice introduced by
Comparing 0 to c.R using the == operator is not safe. Consider using === instead.
Loading history...
2561
                "</div>"
2562
        })
2563
    }
2564
2565
    function dg(a, b, c) {
2566
        if (a) {
2567
            a instanceof Rf || (a = new Rf(a));
2568
            var d = !!b,
2569
                e = F(a.attrs.id),
2570
                f = e ? e.parentNode : l;
2571
            if (!e || !f) N(function () {
2572
                dg(a)
2573
            }, 50);
2574
            else {
2575
                if (window != window.top) {
2576
                    b = l;
2577
                    if (document.referrer) {
2578
                        var g = document.referrer.substring(0, 128),
2579
                            i = Qf(g);
2580
                        Of(i) || Pf(i) || (b = g)
2581
                    } else b = "unknown";
2582
                    b && (d = k, a.args.framer = b)
2583
                }
2584
                cg(function (b) {
2585
                    if (Xf(b, a.minVersion)) {
2586
                        var g = ""; - 1 < navigator.userAgent.indexOf("Sony/COM2") || (g = e.getAttribute("src") || e.movie);
2587
                        if (Yf(b))(g != a.url || d) && ag(f, a.url, a);
2588
                        else if (Zf(b))(g != a.urlV9As2 || d) && ag(f,
2589
                            a.urlV9As2, a);
2590
                        else if (g != a.urlV8 || d)
2591
                            if (ag(f, a.urlV8, a), b = F("flash10-promo-div")) U(b), b = He.getInstance(), b = parseInt(b.get("ftuc") || 0, 10) + 1, Me("ftuc", b), Pe()
2592
                    } else Wd && Xf(b, 6, 0, 65) ? (b = new Rf({
2593
                        url: "/swf/expressInstall.swf",
2594
                        args: {
2595
                            MMredirectURL: window.location,
2596
                            MMplayerType: "ActiveX",
2597
                            MMdoctitle: document.title
2598
                        }
2599
                    }), ag(f, b.url, b)) : 0 == b.R && a.fallback ? a.fallback() : 0 == b.R && a.fallbackMessage ? a.fallbackMessage() : f.innerHTML = '<div id="flash-upgrade">' + O("FLASH_UPGRADE") + "</div>";
0 ignored issues
show
Best Practice introduced by
Comparing 0 to b.R using the == operator is not safe. Consider using === instead.
Loading history...
2600
                    c && c()
2601
                })
2602
            }
2603
        }
2604
    }
2605
2606
    function cg(a) {
2607
        Vf.getInstance().load(function (b) {
2608
            He.getInstance();
2609
            Me("fv", [b.R, b.Ha, b.hb].join("."));
2610
            Pe();
2611
            a(b)
2612
        })
2613
    };
2614
2615
    function eg() {}
2616
    eg.prototype.L = m;
2617
    eg.prototype.na = function () {
2618
        this.L || (this.L = k, this.T())
2619
    };
2620
    eg.prototype.T = function () {
2621
        this.i && fg.apply(l, this.i);
2622
        if (this.ca)
2623
            for (; this.ca.length;) this.ca.shift()()
2624
    };
2625
2626
    function fg(a) {
2627
        for (var b = 0, c = arguments.length; b < c; ++b) {
2628
            var d = arguments[b];
2629
            fa(d) ? fg.apply(l, d) : d && "function" == typeof d.na && d.na()
2630
        }
2631
    };
2632
2633
    function gg() {
2634
        this.b = [];
2635
        this.W = {}
2636
    }
2637
    v(gg, eg);
2638
    p = gg.prototype;
2639
    p.Dd = 1;
2640
    p.Vb = 0;
2641
    p.ra = function (a, b, c) {
2642
        var d = this.W[a];
2643
        d || (d = this.W[a] = []);
2644
        var e = this.Dd;
2645
        this.b[e] = a;
2646
        this.b[e + 1] = b;
2647
        this.b[e + 2] = c;
2648
        this.Dd = e + 3;
2649
        d.push(e);
2650
        return e
2651
    };
2652
    p.Vd = function (a, b, c) {
2653
        if (a = this.W[a]) {
2654
            var d = this.b;
2655
            if (a = Sa(a, function (a) {
2656
                    return d[a + 1] == b && d[a + 2] == c
2657
                })) return this.Ub(a)
2658
        }
2659
        return m
2660
    };
2661
    p.Ub = function (a) {
2662
        if (0 != this.Vb) return this.c || (this.c = []), this.c.push(a), m;
0 ignored issues
show
Best Practice introduced by
Comparing 0 to this.Vb using the != operator is not safe. Consider using !== instead.
Loading history...
2663
        var b = this.b[a];
2664
        if (b) {
2665
            var c = this.W[b];
2666
            c && Xa(c, a);
2667
            delete this.b[a];
2668
            delete this.b[a + 1];
2669
            delete this.b[a + 2]
2670
        }
2671
        return !!b
2672
    };
2673
    p.za = function (a, b) {
2674
        var c = this.W[a];
2675
        if (c) {
2676
            this.Vb++;
2677
            for (var d = bb(arguments, 1), e = 0, f = c.length; e < f; e++) {
2678
                var g = c[e];
2679
                this.b[g + 1].apply(this.b[g + 2], d)
2680
            }
2681
            this.Vb--;
2682
            if (this.c && 0 == this.Vb)
0 ignored issues
show
Best Practice introduced by
Comparing 0 to this.Vb using the == operator is not safe. Consider using === instead.
Loading history...
2683
                for (; c = this.c.pop();) this.Ub(c);
2684
            return 0 != e
0 ignored issues
show
Best Practice introduced by
Comparing 0 to e using the != operator is not safe. Consider using !== instead.
Loading history...
2685
        }
2686
        return m
2687
    };
2688
    p.clear = function (a) {
2689
        if (a) {
2690
            var b = this.W[a];
2691
            b && (w(b, this.Ub, this), delete this.W[a])
2692
        } else this.b.length = 0, this.W = {}
2693
    };
2694
    p.Z = function (a) {
2695
        if (a) {
2696
            var b = this.W[a];
2697
            return b ? b.length : 0
2698
        }
2699
        a = 0;
2700
        for (b in this.W) a += this.Z(b);
2701
        return a
2702
    };
2703
    p.T = function () {
2704
        gg.J.T.call(this);
2705
        delete this.b;
2706
        delete this.W;
2707
        delete this.c
2708
    };
2709
    var hg = s("yt.pubsub.instance_") || new gg;
2710
    gg.prototype.subscribe = gg.prototype.ra;
2711
    gg.prototype.unsubscribeByKey = gg.prototype.Ub;
2712
    gg.prototype.publish = gg.prototype.za;
2713
    gg.prototype.clear = gg.prototype.clear;
2714
    u("yt.pubsub.instance_", hg);
2715
2716
    function ig(a, b, c) {
2717
        var d = s("yt.pubsub.instance_");
2718
        return d ? d.subscribe(a, function () {
2719
            var a = arguments;
2720
            N(function () {
2721
                b.apply(c || q, a)
2722
            }, 0)
2723
        }, c) : 0
2724
    }
2725
2726
    function jg(a) {
2727
        var b = s("yt.pubsub.instance_");
2728
        b && ("number" == typeof a && (a = [a]), w(a, function (a) {
2729
            b.unsubscribeByKey(a)
2730
        }))
2731
    }
2732
2733
    function W(a, b) {
2734
        var c = s("yt.pubsub.instance_");
2735
        return c ? c.publish.apply(c, arguments) : m
2736
    };
2737
    var kg;
2738
2739
    function lg(a, b, c) {
2740
        this.c = a;
2741
        mg && (this.i = b);
2742
        this.L = c || window;
2743
        this.e = this.L.location;
2744
        this.U = this.e.href.split("#")[0];
2745
        this.H = t(this.oa, this)
2746
    }
2747
    var ng = E && 8 <= document.documentMode || Eb && Sb("1.9.2") || Fb && Sb("532.1"),
2748
        mg = E && !ng;
2749
    lg.prototype.ca = function (a, b) {
2750
        this.f && (se(this.f), delete this.f);
2751
        this.n && (Vd(this.n), delete this.n);
2752
        if (a) {
2753
            this.b = og(this);
2754
            if (mg) {
2755
                var c = this.i.contentWindow.document.body;
2756
                (!c || !c.innerHTML) && pg(this, this.b)
2757
            }
2758
            b || this.c(this.b);
2759
            ng ? this.f = R(this.L, "hashchange", this.H) : this.n = Td(this.H, 200)
2760
        }
2761
    };
2762
    lg.prototype.oa = function () {
2763
        if (mg) {
2764
            var a;
2765
            a = (a = this.i.contentWindow.document.body) ? ya(a.innerHTML.substring(1)) : "";
2766
            a != this.b ? (this.b = a, qg(this, a), this.c(a)) : (a = og(this), a != this.b && (this.b = a, pg(this, a), this.c(a)))
2767
        } else a = og(this), a != this.b && (this.b = a, this.c(a))
2768
    };
2769
2770
    function og(a) {
2771
        var a = a.e.href,
2772
            b = a.indexOf("#");
2773
        return 0 > b ? "" : a.substring(b + 1)
2774
    }
2775
2776
    function qg(a, b) {
2777
        var c = a.U + "#" + b,
2778
            d = a.e.href;
2779
        d == c || d + "#" == c || (a.e.href = c)
2780
    }
2781
2782
    function pg(a, b) {
2783
        var c = a.i.contentWindow.document,
2784
            d = "#" + encodeURIComponent(String(b));
2785
        if ((c.body ? c.body.innerHTML : "") != d) d = ["<title>", za(window.document.title || ""), "</title><body>", d, "</body>"], c.open("text/html"), c.write(d.join("")), c.close()
2786
    }
2787
    lg.prototype.M = function (a, b, c) {
2788
        this.b = "" + a;
2789
        mg && pg(this, a);
2790
        qg(this, a);
2791
        c || this.c(this.b)
2792
    };
2793
2794
    function rg() {
2795
        this.b = qa()
2796
    }
2797
    new rg;
0 ignored issues
show
Unused Code Best Practice introduced by
The object created with new rg() is not used but discarded. Consider invoking another function instead of a constructor if you are doing this purely for side effects.
Loading history...
2798
    rg.prototype.get = function () {
2799
        return this.b
2800
    };
2801
2802
    function sg(a, b) {
2803
        this.e = a;
2804
        this.f = b || window;
2805
        this.c = this.f.location;
2806
        this.H = t(this.L, this)
2807
    }
2808
    var tg = !!window.history.pushState && (!Fb || Fb && Sb("534.11"));
2809
    sg.prototype.U = function (a, b) {
2810
        this.i && (se(this.i), delete this.i);
2811
        this.n && (Vd(this.n), delete this.n);
2812
        a && tg && (this.b = this.c.href, b || this.e(this.b), this.i = R(this.f, "popstate", this.H))
2813
    };
2814
    sg.prototype.L = function (a) {
2815
        var b = this.c.href;
2816
        if ((a = a.state) || b != this.b) this.b = b, this.e(b, a)
2817
    };
2818
    sg.prototype.M = function (a, b, c) {
2819
        if (a || b) a = a || this.c.href, this.f.history.pushState(b, "", a), this.b = a, c || this.e(a, b)
2820
    };
2821
    sg.prototype.replace = function (a, b, c) {
2822
        if (a || b) a = a || this.c.href, this.f.history.replaceState(b, "", a), this.b = a, c || this.e(a, b)
2823
    };
2824
2825
    function ug(a) {
2826
        var a = a || "hash",
2827
            b = s("yt.history.instance_");
2828
        b || ("state" == a ? (b = new sg(vg), sg.prototype.setEnabled = sg.prototype.U, sg.prototype.add = sg.prototype.M, sg.prototype.replace = sg.prototype.replace) : (b = new lg(vg, F("legacy-history-iframe")), lg.prototype.setEnabled = lg.prototype.ca, lg.prototype.add = lg.prototype.M, lg.prototype.replace = lg.prototype.M), kg = b, u("yt.history.instance_", kg));
2829
        return b
2830
    }
2831
2832
    function vg(a, b) {
2833
        W("navigate", a, b)
2834
    };
2835
2836
    function wg(a) {
2837
        a = String(a);
2838
        if (/^\s*$/.test(a) ? 0 : /^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g, "@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x10-\x1f\x80-\x9f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g, ""))) try {
2839
            return eval("(" + a + ")")
2840
        } catch (b) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
2841
        h(Error("Invalid JSON string: " + a))
2842
    }
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
2843
2844
    function xg(a) {
2845
        return eval("(" + a + ")")
2846
    }
2847
2848
    function yg(a) {
2849
        this.b = a
2850
    }
2851
2852
    function zg(a, b) {
2853
        var c = [];
2854
        Ag(a, b, c);
2855
        return c.join("")
2856
    }
2857
2858
    function Ag(a, b, c) {
2859
        switch (typeof b) {
2860
        case "string":
2861
            Bg(b, c);
2862
            break;
2863
        case "number":
2864
            c.push(isFinite(b) && !isNaN(b) ? b : "null");
2865
            break;
2866
        case "boolean":
2867
            c.push(b);
2868
            break;
2869
        case "undefined":
2870
            c.push("null");
2871
            break;
2872
        case "object":
2873
            if (b == l) {
2874
                c.push("null");
2875
                break
2876
            }
2877
            if (ea(b)) {
2878
                var d = b.length;
2879
                c.push("[");
2880
                for (var e = "", f = 0; f < d; f++) c.push(e), e = b[f], Ag(a, a.b ? a.b.call(b, String(f), e) : e, c), e = ",";
2881
                c.push("]");
2882
                break
2883
            }
2884
            c.push("{");
2885
            d = "";
2886
            for (f in b) Object.prototype.hasOwnProperty.call(b, f) && (e = b[f], "function" != typeof e && (c.push(d), Bg(f, c), c.push(":"),
2887
                Ag(a, a.b ? a.b.call(b, f, e) : e, c), d = ","));
2888
            c.push("}");
2889
            break;
2890
        case "function":
2891
            break;
2892
        default:
2893
            h(Error("Unknown type: " + typeof b))
2894
        }
2895
    }
2896
    var Cg = {
2897
            '"': '\\"',
2898
            "\\": "\\\\",
2899
            "/": "\\/",
2900
            "\b": "\\b",
2901
            "\f": "\\f",
2902
            "\n": "\\n",
2903
            "\r": "\\r",
2904
            "\t": "\\t",
2905
            "\x0B": "\\u000b"
2906
        },
2907
        Dg = /\uffff/.test("￿") ? /[\\\"\x00-\x1f\x7f-\uffff]/g : /[\\\"\x00-\x1f\x7f-\xff]/g;
2908
2909
    function Bg(a, b) {
2910
        b.push('"', a.replace(Dg, function (a) {
2911
            if (a in Cg) return Cg[a];
2912
            var b = a.charCodeAt(0),
2913
                e = "\\u";
2914
            16 > b ? e += "000" : 256 > b ? e += "00" : 4096 > b && (e += "0");
2915
            return Cg[a] = e + b.toString(16)
2916
        }), '"')
2917
    };
2918
    var Eg = l;
2919
    "undefined" != typeof XMLHttpRequest ? Eg = function () {
2920
        return new XMLHttpRequest
2921
    } : "undefined" != typeof ActiveXObject && (Eg = function () {
2922
        return new ActiveXObject("Microsoft.XMLHTTP")
2923
    });
2924
2925
    function Fg(a) {
2926
        switch (a && "status" in a ? a.status : -1) {
2927
        case 0:
2928
        case 200:
2929
        case 204:
2930
        case 304:
2931
            return k;
2932
        default:
2933
            return m
2934
        }
2935
    };
2936
2937
    function Gg(a, b, c, d, e) {
2938
        var f = Eg && Eg();
2939 View Code Duplication
        if ("open" in f) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
Complexity Best Practice introduced by
There is no return statement if "open" in f is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
2940
            f.onreadystatechange = function () {
2941
                4 == (f && "readyState" in f ? f.readyState : 0) && b && b(f)
2942
            };
2943
            c = (c || "GET").toUpperCase();
2944
            d = d || "";
2945
            f.open(c, a, k);
2946
            a = "POST" == c;
2947
            if (e)
2948
                for (var g in e) f.setRequestHeader(g, e[g]), "content-type" == g.toLowerCase() && (a = m);
2949
            a && f.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
2950
            f.send(d);
2951
            return f
2952
        }
2953
    }
2954
2955
    function X(a, b) {
2956
        var c = b.format || "JSON";
2957
        b.pb && (a = document.location.protocol + "//" + document.location.hostname + a);
2958
        var d = b.o;
2959
        d && (a = Nf(a, d));
2960
        var e = b.Ra || "";
2961
        if (d = b.C) e = Hf(e), sb(e, d), e = Df(e);
2962
        var f = m,
2963
            g, i = Gg(a, function (a) {
2964
                if (!f) {
2965
                    f = k;
2966
                    g && Ud(g);
2967
                    var d = Fg(a),
2968
                        e = l;
2969
                    if (d || 400 <= a.status && 500 > a.status) {
2970
                        var i = l;
2971
                        switch (c) {
2972
                        case "JSON":
2973
                            var e = a.responseText,
2974
                                G = a.getResponseHeader("Content-Type") || "";
2975
                            e && 0 <= G.indexOf("json") && (i = xg(e));
2976
                            break;
2977
                        case "XML":
2978
                            if (e = (e = a.responseXML) ? Hg(e) : l) i = {}, w(e.getElementsByTagName("*"), function (a) {
2979
                                i[a.tagName] =
2980
                                    Ig(a)
2981
                            })
2982
                        }
2983
                        e = i
2984
                    }
2985
                    if (d) a: {
2986
                        switch (c) {
2987
                        case "XML":
2988
                            d = 0 == parseInt(e && e.return_code, 10);
0 ignored issues
show
Best Practice introduced by
Comparing 0 to parseInt(e && e.return_code, 10) using the == operator is not safe. Consider using === instead.
Loading history...
2989
                            break a;
2990
                        case "RAW":
2991
                            d = k;
2992
                            break a
2993
                        }
2994
                        d = !!e
2995
                    }
2996
                    e = e || {};
2997
                    G = b.B || q;
2998
                    d ? b.j && b.j.call(G, a, e) : b.onError && b.onError.call(G, a, e);
2999
                    b.S && b.S.call(G, a, e)
3000
                }
3001
            }, b.method, e, b.headers);
3002
        b.ag && 0 < b.timeout && (g = N(function () {
3003
            f || (f = k, i.abort(), Ud(g), b.ag.call(b.B || q, i))
3004
        }, b.timeout))
3005
    }
3006
3007
    function Jg(a, b) {
3008
        var c = b || {};
3009
        c.method = a.method.toUpperCase();
3010
        if ("POST" == c.method) c.Ra = Qc(a);
3011
        else {
3012
            var d = Mc(Nc(a)),
3013
                e = c.o || {};
3014
            sb(e, d);
3015
            c.o = e
3016
        }
3017
        X(a.action, c)
3018
    }
3019
3020
    function Kg(a, b) {
3021
        var c = b.onComplete || l,
3022
            d = b.onException || l,
3023
            e = b.onError || l,
3024
            f = b.update || l,
3025
            g = b.json || m;
3026
        return Gg(a, function (a) {
3027
            if (Fg(a)) {
3028
                var b = a.responseXML,
3029
                    r = b ? Hg(b) : l,
3030
                    b = !(!b || !r),
3031
                    y, D;
3032
                if (b && (y = Lg(r, "return_code"), D = Lg(r, "html_content"), 0 == y)) {
0 ignored issues
show
Best Practice introduced by
Comparing 0 to y using the == operator is not safe. Consider using === instead.
Loading history...
3033
                    f && D && (F(f).innerHTML = D);
3034
                    var G = Lg(r, "js_content");
3035
                    if (G) {
3036
                        var H = document.createElement("script");
3037
                        H.text = G;
3038
                        document.getElementsByTagName("head")[0].appendChild(H)
3039
                    }
3040
                }
3041
                c && (b ? (b = Lg(r, "redirect_on_success"), y && b ? window.location = b : ((r = Lg(r, 0 == y ? "success_message" : "error_message")) &&
3042
                    alert(r), a = g ? eval("(" + D + ")") : a, 0 == y ? c(a) : d && d(a))) : a.responseText && c(a))
3043
            } else e && e(a)
3044
        }, b.method || "POST", b.postBody || l, b.headers || l)
3045
    }
3046
3047
    function Hg(a) {
3048
        return !a ? l : (a = ("responseXML" in a ? a.responseXML : a).getElementsByTagName("root")) && 0 < a.length ? a[0] : l
3049
    }
3050
3051
    function Lg(a, b) {
3052
        if (!a) return l;
3053
        var c = a.getElementsByTagName(b);
3054
        return c && 0 < c.length ? Ig(c[0]) : l
3055
    }
3056
3057
    function Ig(a) {
3058
        var b = "";
3059
        w(a.childNodes, function (a) {
3060
            b += a.nodeValue
3061
        });
3062
        return b
3063
    }
3064
    var Mg = {
3065
            html5_ajax: "action_get_html5_token",
3066
            watch_actions_ajax: "action_get_watch_actions_token",
3067
            addto_ajax: "action_get_wl_token"
3068
        },
3069
        Ng = {
3070
            html5_ajax: "html5_ajax_token",
3071
            watch_actions_ajax: "watch_actions_ajax_token",
3072
            addto_ajax: "addto_ajax_token"
3073
        };
3074
3075
    function Og(a, b, c) {
3076
        if (M(a)) b && window.setTimeout(b, 0);
3077
        else {
3078
            var d = wf() + "/token_ajax",
3079
                e = {};
3080
            e[Mg[a]] = 1;
3081
            X(d, {
3082
                format: "RAW",
3083
                method: "GET",
3084
                o: e,
3085
                S: function (d) {
3086
                    var e = Hf(d.responseText),
3087
                        i = e[Ng[a]];
3088
                    i ? (Rd(a, i), b && b()) : c && c(d, e)
3089
                }
3090
            })
3091
        }
3092
    };
3093
    var Pg = {},
3094
        Qg = {};
3095
3096
    function Rg(a, b, c) {
3097
        a = F(a);
3098
        c = c || ja(a);
3099
        c in Pg || (Pg[c] = []);
3100
        Pg[c].push([a, b]);
3101
        Qg[c] = m;
3102
        return c
3103
    }
3104
3105
    function Sg(a, b) {
3106
        var a = F(a),
3107
            c = b || ja(a),
3108
            d = Pg[c];
3109
        d && (Pg[c] = Qa(d, function (b) {
3110
            return b[0] != a
3111
        }))
3112
    }
3113
3114
    function Tg(a) {
3115
        a in Pg && !Qg[a] && (w(Pg[a], function (a) {
3116
            var c = a[0],
3117
                a = a[1];
3118
            c && "IMG" == c.tagName && (c.onload = "", c.src = a)
3119
        }), Pg[a] = [], Qg[a] = k)
3120
    };
3121
3122
    function Ug(a, b, c) {
3123
        var d = "scriptload-" + Na(a),
3124
            e = document.getElementById(d),
3125
            f = e && Q(e, "loaded"),
3126
            g = e && !f;
3127
        if (f && !c) return b && b(), e;
3128
        if (g && !c) return b && ig(d, b), e;
3129
        e && (d = "scriptload-" + (Math.floor(2147483648 * Math.random()).toString(36) + Math.abs(Math.floor(2147483648 * Math.random()) ^ qa()).toString(36)));
3130
        b && ig(d, b);
3131
        var i, b = d,
3132
            n = document.createElement("script");
3133
        n.id = b;
3134
        n.onload = function () {
3135
            if (!Q(i, "loaded")) {
3136
                P(i, "loaded", "true");
3137
                W(d);
3138
                var a = d,
3139
                    b = s("yt.pubsub.instance_");
3140
                b && b.clear(a)
3141
            }
3142
        };
3143
        n.onreadystatechange = function () {
3144
            if ("loaded" ==
3145
                n.readyState || "complete" == n.readyState) n.onload()
3146
        };
3147
        n.src = a;
3148
        a = document.getElementsByTagName("head")[0];
3149
        a.insertBefore(n, a.firstChild);
3150
        return i = n
3151
    };
3152
3153
    function Vg(a, b) {
3154
        var c = vf(a);
3155
        if (c == vf(window.location.href) || !c && 0 == a.lastIndexOf("/", 0))
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a.lastIndexOf("/", 0) using the == operator is not safe. Consider using === instead.
Loading history...
3156
            if (c = xf(a), c = yf(c)) {
3157
                var c = "s_tempdata-" + Na(c),
3158
                    d = b ? Df(b) : "";
3159
                Ee(c, d, 5)
3160
            }
3161
    };
3162
    var Wg = {},
3163
        Xg = 0;
3164
3165
    function Yg(a, b) {
3166
        if (a) {
3167
            var c = new Image,
3168
                d = "" + Xg++;
3169
            Wg[d] = c;
3170
            c.onload = c.onerror = function () {
3171
                b && Wg[d] && b();
3172
                delete Wg[d]
3173
            };
3174
            c.src = a;
3175
            c = eval("null")
3176
        }
3177
    };
3178
3179
    function Zg(a, b, c) {
3180
        Yd(a, b || "null");
3181
        a = "a=" + a + (b ? "&" + b : "").replace(/\//g, "&");
3182
        Yg("/gen_204?" + a, c)
3183
    }
3184
3185
    function $g(a, b, c, d) {
3186
        var a = {
3187
                name: a,
3188
                locale: c,
3189
                feature: d
3190
            },
3191
            e;
3192
        for (e in b) a[e] = b[e];
3193
        b = Lf("/sharing_services", a);
3194
        Yg(b)
3195
    }
3196
3197
    function ah(a, b, c, d) {
3198
        $g(a, {
3199
            v: b
3200
        }, c, d)
3201
    }
3202
3203
    function bh(a, b, c, d, e) {
3204
        $g(a, {
3205
            list: b,
3206
            v: c
3207
        }, d, e)
3208
    };
3209
3210
    function ch(a, b, c, d, e, f, g) {
3211
        var i, n;
3212
        if (i = c.offsetParent) {
3213
            var r = "HTML" == i.tagName || "BODY" == i.tagName;
3214
            if (!r || "static" != We(i, "position")) n = $e(i), r || (r = (r = af(i)) && Eb ? -i.scrollLeft : r && (!E || !Sb("8")) ? i.scrollWidth - i.clientWidth - i.scrollLeft : i.scrollLeft, n = kb(n, new jb(r, i.scrollTop)))
3215
        }
3216
        i = n || new jb;
3217
        n = gf(a);
3218
        if (r = Ze(a)) {
3219
            var y = new Re(r.left, r.top, r.right - r.left, r.bottom - r.top),
3220
                r = Math.max(n.left, y.left),
3221
                D = Math.min(n.left + n.width, y.left + y.width);
3222
            if (r <= D) {
3223
                var G = Math.max(n.top, y.top),
3224
                    y = Math.min(n.top + n.height, y.top +
3225
                        y.height);
3226
                G <= y && (n.left = r, n.top = G, n.width = D - r, n.height = y - G)
3227
            }
3228
        }
3229
        r = Zb(a);
3230
        G = Zb(c);
3231
        if (r.b != G.b) {
3232
            var D = r.b.body,
3233
                G = G.b.parentWindow || G.b.defaultView,
3234
                y = new jb(0, 0),
3235
                H = ac(D) ? ac(D).parentWindow || ac(D).defaultView : window,
3236
                ka = D;
3237
            do {
3238
                var ua = H == G ? $e(ka) : bf(ka);
3239
                y.x += ua.x;
3240
                y.y += ua.y
3241
            } while (H && H != G && (ka = H.frameElement) && (H = H.parent));
3242
            D = kb(y, $e(D));
3243
            E && !Dc(r) && (D = kb(D, Ec(r)));
3244
            n.left += D.x;
3245
            n.top += D.y
3246
        }
3247
        a = (b & 4 && af(a) ? b ^ 2 : b) & -5;
0 ignored issues
show
introduced by
You have used a bitwise operator & in a condition. Did you maybe want to use the logical operator &&
Loading history...
3248
        b = new jb(a & 2 ? n.left + n.width : n.left, a & 1 ? n.top + n.height : n.top);
0 ignored issues
show
introduced by
You have used a bitwise operator & in a condition. Did you maybe want to use the logical operator &&
Loading history...
3249
        b = kb(b, i);
3250
        e && (b.x += (a & 2 ? -1 : 1) * e.x, b.y += (a &
0 ignored issues
show
introduced by
You have used a bitwise operator & in a condition. Did you maybe want to use the logical operator &&
Loading history...
3251
            1 ? -1 : 1) * e.y);
3252
        var S;
3253
        if (g && (S = Ze(c))) S.top -= i.y, S.right -= i.x, S.bottom -= i.y, S.left -= i.x;
3254
        return dh(b, c, d, f, S, g, j)
3255
    }
3256
3257
    function dh(a, b, c, d, e, f, g) {
3258
        var a = a.ta(),
3259
            i = 0,
3260
            n = (c & 4 && af(b) ? c ^ 2 : c) & -5,
0 ignored issues
show
introduced by
You have used a bitwise operator & in a condition. Did you maybe want to use the logical operator &&
Loading history...
3261
            c = ef(b),
3262
            g = g ? g.ta() : c.ta();
3263 View Code Duplication
        if (d || 0 != n) n & 2 ? a.x -= g.width + (d ? d.right : 0) : d && (a.x += d.left), n & 1 ? a.y -= g.height + (d ? d.bottom : 0) : d && (a.y += d.top);
0 ignored issues
show
introduced by
You have used a bitwise operator & in a condition. Did you maybe want to use the logical operator &&
Loading history...
Best Practice introduced by
Comparing 0 to n using the != operator is not safe. Consider using !== instead.
Loading history...
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
3264 View Code Duplication
        if (f) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
3265
            if (e) {
3266
                i = a;
3267
                d = 0;
3268
                if (65 == (f & 65) && (i.x < e.left || i.x >= e.right)) f &= -2;
3269
                if (132 == (f & 132) && (i.y < e.top || i.y >= e.bottom)) f &= -5;
3270
                i.x < e.left && f & 1 && (i.x = e.left, d |= 1);
3271
                i.x < e.left && (i.x + g.width > e.right && f & 16) && (g.width = Math.max(g.width - (i.x + g.width - e.right), 0), d |= 4);
3272
                i.x + g.width > e.right && f & 1 && (i.x = Math.max(e.right -
3273
                    g.width, e.left), d |= 1);
3274
                f & 2 && (d |= (i.x < e.left ? 16 : 0) | (i.x + g.width > e.right ? 32 : 0));
3275
                i.y < e.top && f & 4 && (i.y = e.top, d |= 2);
3276
                i.y >= e.top && (i.y + g.height > e.bottom && f & 32) && (g.height = Math.max(g.height - (i.y + g.height - e.bottom), 0), d |= 8);
3277
                i.y + g.height > e.bottom && f & 4 && (i.y = Math.max(e.bottom - g.height, e.top), d |= 2);
3278
                f & 8 && (d |= (i.y < e.top ? 64 : 0) | (i.y + g.height > e.bottom ? 128 : 0));
3279
                i = d
3280
            } else i = 256;
3281
            if (i & 496) return i
0 ignored issues
show
introduced by
You have used a bitwise operator & in a condition. Did you maybe want to use the logical operator &&
Loading history...
3282
        }
3283
        f = a;
3284
        e = Eb && (xb || Ib) && Sb("1.9");
3285
        f instanceof jb ? (a = f.x, f = f.y) : (a = f, f = j);
3286
        b.style.left = df(a, e);
3287
        b.style.top = df(f, e);
3288
        if (!(c == g || (!c ||
3289
                !g ? 0 : c.width == g.width && c.height == g.height))) a = Dc(Zb(ac(b))), E && (!a || !Sb("8")) ? (c = b.style, a ? (E ? (a = hf(b, Ve(b, "paddingLeft")), e = hf(b, Ve(b, "paddingRight")), f = hf(b, Ve(b, "paddingTop")), d = hf(b, Ve(b, "paddingBottom")), a = new Qe(f, e, d, a)) : (a = Ue(b, "paddingLeft"), e = Ue(b, "paddingRight"), f = Ue(b, "paddingTop"), d = Ue(b, "paddingBottom"), a = new Qe(parseFloat(f), parseFloat(e), parseFloat(d), parseFloat(a))), E ? (e = kf(b, "borderLeft"), f = kf(b, "borderRight"), d = kf(b, "borderTop"), b = kf(b, "borderBottom"), b = new Qe(d, f, b, e)) : (e = Ue(b,
3290
            "borderLeftWidth"), f = Ue(b, "borderRightWidth"), d = Ue(b, "borderTopWidth"), b = Ue(b, "borderBottomWidth"), b = new Qe(parseFloat(d), parseFloat(f), parseFloat(b), parseFloat(e))), c.pixelWidth = g.width - b.left - a.left - a.right - b.right, c.pixelHeight = g.height - b.top - a.top - a.bottom - b.bottom) : (c.pixelWidth = g.width, c.pixelHeight = g.height)) : (b = b.style, Eb ? b.MozBoxSizing = "border-box" : Fb ? b.WebkitBoxSizing = "border-box" : b.boxSizing = "border-box", b.width = Math.max(g.width, 0) + "px", b.height = Math.max(g.height, 0) + "px");
3291
        return i
3292
    };
3293
    var eh = {},
3294
        fh = "ontouchstart" in document;
3295
3296
    function gh(a, b, c) {
3297
        b in eh || (eh[b] = new gg);
3298
        eh[b].ra(a, c)
3299
    }
3300
3301
    function hh(a, b, c) {
3302
        var d;
3303
        switch (a) {
3304
        case "mouseover":
3305
        case "mouseout":
3306
            d = 3;
3307
            break;
3308
        case "mouseenter":
3309
        case "mouseleave":
3310
            d = 9
3311
        }
3312
        return Bc(c, function (a) {
3313
            return B(a, b)
3314
        }, k, d)
3315
    }
3316
3317
    function ih(a) {
3318
        var b = "mouseover" == a.type && "mouseenter" in eh || "mouseout" == a.type && "mouseleave" in eh,
3319
            c = a.type in eh || b;
3320
        if ("HTML" != a.target.tagName && c) {
3321
            if (b) {
3322
                var b = "mouseover" == a.type ? "mouseenter" : "mouseleave",
3323
                    c = eh[b],
3324
                    d;
3325
                for (d in c.W) {
3326
                    var e = hh(b, d, a.target);
3327
                    e && !Bc(a.relatedTarget, function (a) {
3328
                        return a == e
3329
                    }, k) && c.za(d, e, b, a)
3330
                }
3331
            }
3332
            if (b = eh[a.type])
3333
                for (d in b.W)(e = hh(a.type, d, a.target)) && b.za(d, e, a.type, a)
3334
        }
3335
    }
3336
    R(document, "blur", ih, k);
3337
    R(document, "change", ih, k);
3338
    R(document, "click", ih);
3339
    R(document, "focus", ih, k);
3340
    R(document, "mouseover", ih);
3341
    R(document, "mouseout", ih);
3342
    R(document, "mousedown", ih);
3343
    R(document, "keydown", ih);
3344
    R(document, "keyup", ih);
3345
    R(document, "keypress", ih);
3346
    R(document, "cut", ih);
3347
    R(document, "paste", ih);
3348
    fh && (R(document, "touchstart", ih), R(document, "touchend", ih), R(document, "touchcancel", ih));
3349
    var jh = window.yt && window.yt.uix && window.yt.uix.widgets_ || {};
3350
    u("yt.uix.widgets_", jh);
3351
3352
    function kh(a) {
3353
        var a = a.getInstance(),
3354
            b = Y(a);
3355
        !(b in jh) && a.Uc() && (a.register(), jh[b] = a)
3356
    };
3357
3358
    function lh() {
3359
        this.b = {}
3360
    }
3361
    p = lh.prototype;
3362
    p.Rc = !!eval("false");
3363
    p.Uc = function () {
3364
        return k
3365
    };
3366
3367
    function Z(a, b, c, d) {
3368
        var d = Y(a, d),
3369
            e = t(c, a);
3370
        gh(d, b, e);
3371
        a.b[c] = e
3372
    }
3373
    p.ia = function (a, b, c) {
3374
        var d = this.getData(a, b);
3375
        if (d && (d = s(d))) {
3376
            var e = bb(arguments, 2);
3377
            ab(e, 0, 0, a);
3378
            d.apply(l, e)
3379
        }
3380
    };
3381
    p.getData = function (a, b) {
3382
        return Q(a, b)
3383
    };
3384
    p.setData = function (a, b, c) {
3385
        P(a, b, c)
3386
    };
3387
3388
    function mh(a, b) {
3389
        return Cc(b, Y(a))
3390
    }
3391
3392
    function Y(a, b) {
3393
        return "yt-uix" + (a.O ? "-" + a.O : "") + (b ? "-" + b : "")
3394
    };
3395
3396
    function nh() {
3397
        this.b = {}
3398
    }
3399
    v(nh, lh);
3400
    ba(nh);
3401
    p = nh.prototype;
3402
    p.O = "button";
3403
    p.register = function () {
3404
        Z(this, "click", this.Qg);
3405
        Z(this, "keydown", this.Rg);
3406
        Z(this, "keypress", this.Sg)
3407
    };
3408
    p.Qg = function (a) {
3409
        if (a && !a.disabled) {
3410
            if (this.getData(a, "button-toggle")) {
3411
                var b = Cc(a, Y(this, "group"));
3412
                if (b && this.getData(b, "button-toggle-group")) {
3413
                    var c = this.getData(b, "button-toggle-group"),
3414
                        b = I(Y(this), b),
3415
                        d = Y(this, "toggled"),
3416
                        e = B(a, d);
3417
                    w(b, function (b) {
3418
                        b != a || "optional" == c && e ? z(b, d) : x(a, d)
3419
                    })
3420
                } else ib(a, Y(this, "toggled"))
3421
            }
3422
            this.click(a)
3423
        }
3424
    };
3425
    p.Rg = function (a, b, c) {
3426
        if (!c.altKey && (!c.ctrlKey && !c.shiftKey) && (b = oh(this, a))) {
3427
            var d = function (a) {
3428
                var b = "";
3429
                a.tagName && (b = a.tagName.toLowerCase());
3430
                return "ul" == b || "table" == b
3431
            };
3432
            if (d(b)) d = b;
3433
            else var e = [],
3434
                d = uc(b, d, e, k) ? e[0] : j;
3435
            if (d) {
3436
                var d = d.tagName.toLowerCase(),
3437
                    f;
3438
                "ul" == d ? f = this.Yg : "table" == d && (f = this.Xg);
3439
                f && (d = t(f, this), e = mf(b), (f = 9 == c.keyCode) || 32 == c.keyCode || 13 == c.keyCode ? (c = ph(this, b)) ? (a = nc(c), "a" == a.tagName.toLowerCase() ? window.location = a.href : xe(a)) : f && qh(this, a) : e ? 27 == c.keyCode ? (ph(this, b), qh(this,
3440
                    a)) : d(a, b, c) : (b = B(a, Y(this, "reverse")) ? 38 : 40, c.keyCode == b && (xe(a), c.preventDefault())))
3441
            }
3442
        }
3443
    };
3444
    p.Sg = function (a, b, c) {
3445
        !c.altKey && (!c.ctrlKey && !c.shiftKey) && (a = oh(this, a), mf(a) && c.preventDefault())
3446
    };
3447
3448
    function ph(a, b) {
3449
        var c = Y(a, "menu-item-highlight"),
3450
            d = K(c, b);
3451
        d && z(d, c);
3452
        return d
3453
    }
3454
3455
    function rh(a, b, c) {
3456
        x(c, Y(a, "menu-item-highlight"));
3457
        b.setAttribute("aria-activedescendant", c.getAttribute("id"))
3458
    }
3459
    p.Xg = function (a, b, c) {
3460
        var d = ph(this, b),
3461
            b = he("table", l, b),
3462
            e = he("tr", l, b),
3463
            e = J("td", l, e).length,
3464
            b = J("td", l, b),
3465
            d = sh(d, b, e, c); - 1 != d && (rh(this, a, b[d]), c.preventDefault())
3466
    };
3467
    p.Yg = function (a, b, c) {
3468
        if (40 == c.keyCode || 38 == c.keyCode) {
3469
            var d = ph(this, b),
3470
                b = J("li", l, b),
3471
                d = sh(d, b, 1, c);
3472
            rh(this, a, b[d]);
3473
            c.preventDefault()
3474
        }
3475
    };
3476
3477
    function sh(a, b, c, d) {
3478
        var e = b.length,
3479
            a = Pa(b, a);
3480 View Code Duplication
        if (-1 == a)
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
3481
            if (38 == d.keyCode) a = e - c;
3482
            else {
3483
                if (37 == d.keyCode || 38 == d.keyCode || 40 == d.keyCode) a = 0
3484
            }
3485
        else 39 == d.keyCode ? (a % c == c - 1 && (a -= c), a += 1) : 37 == d.keyCode ? (0 == a % c && (a += c), a -= 1) : 38 == d.keyCode ? (a < c && (a += e), a -= c) : 40 == d.keyCode && (a >= e - c && (a -= e), a += c);
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a % c using the == operator is not safe. Consider using === instead.
Loading history...
3486
        return a
3487
    }
3488
3489
    function th(a, b) {
3490
        if (!yb || !B(b, Y(a, "masked"))) return l;
3491
        var c = b.iframeMask;
3492
        c || (c = document.createElement("iframe"), c.src = 'javascript:""', c.className = Y(a, "menu-mask"), b.iframeMask = c);
3493
        return c
3494
    }
3495
3496
    function uh(a, b, c) {
3497
        var d = Cc(b, Y(a, "group")),
3498
            e = !!a.getData(b, "button-menu-ignore-group"),
3499
            d = d && !e ? d : b,
3500
            e = 5,
3501
            f = 4,
3502
            g = gf(b);
3503
        if (B(b, Y(a, "reverse"))) {
3504
            e = 4;
3505
            f = 5;
3506
            g = g.top + "px";
3507
            try {
3508
                c.style.maxHeight = g
3509
            } catch (i) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
3510
        }
3511
        B(b, "flip") && (B(b, Y(a, "reverse")) ? (e = 6, f = 7) : (e = 7, f = 6));
3512
        var n;
3513
        a.getData(b, "button-has-sibling-menu") ? n = Ye(d) : a.getData(b, "button-menu-root-container") && (n = vh(a, b));
3514
        E && !Sb("8") && (n = l);
3515
        var r;
3516
        n && (r = gf(n), r = new Qe(-r.top, r.left, r.top, -r.left));
3517
        n = new jb(0, 1);
3518
        B(b, Y(a, "center-menu")) && (n.x -= Math.round((ef(c).width -
3519
            ef(b).width) / 2));
3520
        if (a = th(a, b)) b = ef(c), a.style.width = b.width + "px", a.style.height = b.height + "px", ch(d, e, a, f, n, r);
3521
        ch(d, e, c, f, n, r)
3522
    }
3523
3524
    function vh(a, b) {
3525
        if (a.getData(b, "button-menu-root-container")) {
3526
            var c = a.getData(b, "button-menu-root-container");
3527
            return Cc(b, c)
3528
        }
3529
        return document.body
3530
    }
3531
    p.Sc = function (a) {
3532
        if (a) {
3533
            var b = oh(this, a);
3534
            if (b) {
3535
                a.setAttribute("aria-pressed", "true");
3536
                a.setAttribute("aria-expanded", "true");
3537
                b.originalParentNode = b.parentNode;
3538
                b.activeButtonNode = a;
3539
                b.parentNode.removeChild(b);
3540
                this.getData(a, "button-has-sibling-menu") ? a.parentNode.appendChild(b) : vh(this, a).appendChild(b);
3541
                b.style.minWidth = a.offsetWidth - 2 + "px";
3542
                var c = th(this, a);
3543
                c && document.body.appendChild(c);
3544
                uh(this, a, b);
3545
                U(b);
3546
                this.ia(a, "button-menu-action", k);
3547
                x(a, Y(this, "active"));
3548
                c = t(this.Fg, this, a);
3549
                b = R(document, "click",
3550
                    c);
3551
                c = R(document, "contextmenu", c);
3552
                this.setData(a, "button-listener", b);
3553
                this.setData(a, "button-context-menu-listener", c)
3554
            }
3555
        }
3556
    };
3557
3558
    function qh(a, b) {
3559
        if (b) {
3560
            var c = oh(a, b);
3561
            if (c) {
3562
                b.setAttribute("aria-pressed", "false");
3563
                b.setAttribute("aria-expanded", "false");
3564
                V(c);
3565
                a.ia(b, "button-menu-action", m);
3566
                var d = th(a, b);
3567
                N(function () {
3568
                    d && d.parentNode && d.parentNode.removeChild(d);
3569
                    c.originalParentNode && (c.parentNode.removeChild(c), c.originalParentNode.appendChild(c), c.originalParentNode = l, c.activeButtonNode = l)
3570
                }, 1)
3571
            }
3572
            var e = Cc(b, Y(a, "group"));
3573
            z(b, Y(a, "active"));
3574
            e && z(e, Y(a, "group-active"));
3575
            if (e = a.getData(b, "button-listener")) se(e), $d(b, "button-listener");
3576
            if (e = a.getData(b, "button-context-menu-listener")) se(e), $d(b, "button-context-menu-listener")
3577
        }
3578
    }
3579
3580
    function wh(a, b) {
3581
        return Cc(b.activeButtonNode || b.parentNode, Y(a))
3582
    }
3583
    p.Fg = function (a, b) {
3584
        var c = ve(b),
3585
            d = Cc(c, Y(this));
3586
        if (d) {
3587
            var d = oh(this, d),
3588
                e = oh(this, a);
3589
            if (d == e) return
3590
        }
3591
        if (!Cc(c, Y(this, "menu")) || B(c, Y(this, "menu-item")) || B(c, Y(this, "menu-close")))
3592
            if (qh(this, a), (d = Cc(c, Y(this, "menu"))) && this.getData(a, "button-menu-indicate-selected"))(e = K(Y(this, "content"), a)) && tc(e, yc(c)), e = Y(this, "menu-item-selected"), (d = K(e, d)) && z(d, e), x(c.parentNode, e)
3593
    };
3594
3595
    function oh(a, b) {
3596
        if (!b.widgetMenu) {
3597
            var c = a.getData(b, "button-menu-id"),
3598
                c = c && F(c),
3599
                d = Y(a, "menu");
3600
            c ? (x(c, d), x(c, Y(a, "menu-external"))) : c = K(d, b);
3601
            b.widgetMenu = c
3602
        }
3603
        return b.widgetMenu
3604
    }
3605
    p.click = function (a) {
3606
        if (oh(this, a)) {
3607
            var b = oh(this, a),
3608
                c = wh(this, b);
3609
            c && c != a ? (qh(this, c), N(t(this.Sc, this, a), 1)) : mf(b) ? qh(this, a) : this.Sc(a);
3610
            a.focus()
3611
        }
3612
        this.ia(a, "button-action")
3613
    };
3614
3615
    function xh() {
3616
        this.b = {}
3617
    }
3618
    v(xh, lh);
3619
    ba(xh);
3620
    p = xh.prototype;
3621
    p.O = "expander";
3622
    p.register = function () {
3623
        Z(this, "click", this.dh, "head");
3624
        Z(this, "keypress", this.eh, "head")
3625
    };
3626
    p.dh = function (a) {
3627
        yh(this, a)
3628
    };
3629
    p.eh = function (a, b, c) {
3630
        c && 13 == c.keyCode && yh(this, a)
3631
    };
3632
3633
    function yh(a, b) {
3634
        var c = mh(a, b);
3635
        c && (ib(c, Y(a, "collapsed")), a.ia(c, "expander-action"))
3636
    }
3637
3638
    function zh(a, b) {
3639
        var c = mh(a, b);
3640
        c && (x(c, Y(a, "collapsed")), a.ia(c, "expander-action"))
3641
    }
3642
    p.getBodyElement = function (a) {
3643
        return K(Y(this, "body"), a)
3644
    };
3645
3646
    function Ah() {
3647
        this.b = {}
3648
    }
3649
    v(Ah, lh);
3650
    ba(Ah);
3651
    p = Ah.prototype;
3652
    p.O = "tooltip";
3653
    p.jc = 0;
3654
    p.register = function () {
3655
        Z(this, "mouseover", this.ce);
3656
        Z(this, "mouseout", this.Pc);
3657
        Z(this, "click", this.Pc);
3658
        Z(this, "touchstart", this.Gg);
3659
        Z(this, "touchend", this.fe);
3660
        Z(this, "touchcancel", this.fe)
3661
    };
3662
    p.Uc = function () {
3663
        return !(this.Rc && 0 == Qb.indexOf("6"))
0 ignored issues
show
Best Practice introduced by
Comparing 0 to Qb.indexOf("6") using the == operator is not safe. Consider using === instead.
Loading history...
3664
    };
3665
    p.ce = function (a) {
3666
        if (!(this.jc && 1E3 > qa() - this.jc)) {
3667
            var b = parseInt(this.getData(a, "tooltip-hide-timer"), 10);
3668
            b && ($d(a, "tooltip-hide-timer"), Ud(b));
3669
            var b = t(function () {
3670
                    Bh(this, a);
3671
                    $d(a, "tooltip-show-timer")
3672
                }, this),
3673
                c = parseInt(this.getData(a, "tooltip-show-delay"), 10) || 0,
3674
                b = N(b, c);
3675
            this.setData(a, "tooltip-show-timer", b.toString());
3676
            a.title && (this.setData(a, "tooltip-text", a.title), a.title = "")
3677
        }
3678
    };
3679
    p.Pc = function (a) {
3680
        var b = parseInt(this.getData(a, "tooltip-show-timer"), 10);
3681
        b && (Ud(b), $d(a, "tooltip-show-timer"));
3682
        b = t(function () {
3683
            Ch(this, a);
3684
            $d(a, "tooltip-hide-timer")
3685
        }, this);
3686
        b = N(b, 50);
3687
        this.setData(a, "tooltip-hide-timer", b.toString());
3688
        if (b = this.getData(a, "tooltip-text")) a.title = b
3689
    };
3690
    p.Gg = function (a, b, c) {
3691
        this.jc = 0;
3692
        a = hh(b, Y(this), c.changedTouches[0].target);
3693
        this.ce(a)
3694
    };
3695
    p.fe = function (a, b, c) {
3696
        this.jc = qa();
3697
        a = hh(b, Y(this), c.changedTouches[0].target);
3698
        this.Pc(a)
3699
    };
3700
3701
    function Dh(a, b, c, d) {
3702
        a.setData(b, "tooltip-text", c);
3703
        var e = a.getData(b, "content-id");
3704
        if (e = F(e)) e.innerHTML = c, d && Ch(a, b)
3705
    }
3706
3707
    function Bh(a, b) {
3708
        if (b) {
3709
            var c = a.getData(b, "tooltip-text") || b.title;
3710
            if (c) {
3711
                var d = F(Eh(a, b));
3712
                if (!d) {
3713
                    d = document.createElement("div");
3714
                    d.id = Eh(a, b);
3715
                    d.className = Y(a, "tip");
3716
                    var e = document.createElement("div");
3717
                    e.className = Y(a, "tip-body");
3718
                    var f = document.createElement("div");
3719
                    f.className = Y(a, "tip-arrow");
3720
                    var g = document.createElement("div");
3721
                    g.className = Y(a, "tip-content");
3722
                    var i;
3723
                    i = l;
3724
                    yb && B(b, Y(a, "masked")) && ((i = F("yt-uix-tooltip-shared-mask")) ? (i.parentNode.removeChild(i), U(i)) : (i = document.createElement("iframe"),
3725
                        i.src = 'javascript:""', i.id = "yt-uix-tooltip-shared-mask", i.className = Y(a, "tip-mask")));
3726
                    var n = Eh(a, b, "content");
3727
                    g.id = n;
3728
                    a.setData(b, "content-id", n);
3729
                    e.appendChild(g);
3730
                    i && d.appendChild(i);
3731
                    d.appendChild(e);
3732
                    d.appendChild(f);
3733
                    (je() || document.body).appendChild(d);
3734
                    Dh(a, b, c);
3735
                    if ((c = parseInt(a.getData(b, "tooltip-max-width"), 10)) && e.offsetWidth > c) e.style.width = c + "px", x(g, Y(a, "normal-wrap"));
3736
                    g = B(b, Y(a, "reverse"));
3737
                    Fh(a, b, d, e, i, g) || Fh(a, b, d, e, i, !g);
3738
                    var r = Y(a, "tip-visible");
3739
                    N(function () {
3740
                        x(d, r)
3741
                    }, 0)
3742
                }
3743
            }
3744
        }
3745
    }
3746
3747
    function Fh(a, b, c, d, e, f) {
3748
        C(c, Y(a, "tip-reverse"), f);
3749
        var g = 0;
3750
        f && (g = 1);
3751
        var i = ef(b),
3752
            f = new jb((i.width - 10) / 2, f ? i.height : 0),
3753
            n = $e(b);
3754
        dh(new jb(n.x + f.x, n.y + f.y), c, g);
3755
        var g = cc(window),
3756
            n = bf(c),
3757
            c = ef(d),
3758
            r = c.width / 2;
3759
        e && (e.style.left = "3px", e.style.height = c.height + "px", e.style.width = c.width + "px");
3760
        e = !!(g.height < n.y + i.height);
3761
        i = !!(n.y < i.height);
3762
        f = !!(n.x < r);
3763
        g = !!(g.width < n.x + r);
3764
        n = (c.width + 3) / -2 - -5;
3765
        a = a.getData(b, "force-tooltip-direction");
3766
        if ("left" == a || f) n = -5;
3767
        else if ("right" == a || g) n = 20 - c.width - 3;
3768
        d.style.left = n + "px";
3769
        return !(e || i)
3770
    }
3771
3772
    function Ch(a, b) {
3773
        if (b) {
3774
            var c = F(Eh(a, b));
3775
            if (c) {
3776
                var d = F("yt-uix-tooltip-shared-mask"),
3777
                    e = d && Bc(d, function (a) {
3778
                        return a == c
3779
                    }, m, 2);
3780
                d && e && (d.parentNode.removeChild(d), V(d), document.body.appendChild(d));
3781
                mc(c);
3782
                $d(b, "content-id")
3783
            }
3784
        }
3785
    }
3786
3787
    function Eh(a, b, c) {
3788
        a = Y(a) + ce(b);
3789
        c && (a += "-" + c);
3790
        return a
3791
    };
3792
3793
    function Gh(a, b, c) {
3794
        window.location = Lf(a, b || {}) + (c || "")
3795
    }
3796
3797 View Code Duplication
    function Hh(a, b) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
3798
        var c = b || {};
3799
        c.target = c.target || a.target || "YouTube";
3800
        c.width = c.width || 600;
3801
        c.height = c.height || 600;
3802
        var d = c;
3803
        d || (d = {});
3804
        var e = window,
3805
            c = "undefined" != typeof a.href ? a.href : String(a),
3806
            f = d.target || a.target,
3807
            g = [],
3808
            i;
3809
        for (i in d) switch (i) {
3810
        case "width":
3811
        case "height":
3812
        case "top":
3813
        case "left":
3814
            g.push(i + "=" + d[i]);
3815
            break;
3816
        case "target":
3817
        case "noreferrer":
3818
            break;
3819
        default:
3820
            g.push(i + "=" + (d[i] ? 1 : 0))
3821
        }
3822
        i = g.join(",");
3823
        if (d.noreferrer) {
3824
            if (d = e.open("", f, i)) E && -1 != c.indexOf(";") && (c = "'" + c.replace(/'/g, "%27") + "'"), d.opener =
3825
                l, Fb ? d.location.href = c : (c = za(c), d.document.write('<META HTTP-EQUIV="refresh" content="0; url=' + c + '">'), d.document.close())
3826
        } else d = e.open(c, f, i);
3827
        c = d;
3828
        if (!c) return l;
3829
        c.opener || (c.opener = window);
3830
        c.focus();
3831
        return c
3832
    }
3833
3834
    function Ih(a, b) {
3835
        return !Hh(a, b)
3836
    };
3837
3838
    function Jh(a, b) {
3839
        if ("view" == a && b.convViewUrl) return b.convViewUrl;
3840
        if (!b.baseUrl || !b.uid) return l;
3841
        var c = b.rmktEnabled,
3842
            d = b.focEnabled && !b.isAd;
3843
        if (!c && !d) return l;
3844
        var e = {
3845
            label: d ? "followon_" + a : "default"
3846
        };
3847
        if (c) {
3848
            c = {
3849
                utuid: b.uid,
3850
                type: a
3851
            };
3852
            b.vid && (c.utvid = b.vid);
3853
            b.eventLabel && (c.el = b.eventLabel);
3854
            b.playerStyle && (c.ps = b.playerStyle);
3855
            b.feature && (c.feature = b.feature);
3856
            b.ppe && (c.ppe = b.ppe);
3857
            var f = [],
3858
                g;
3859
            for (g in c) f.push(encodeURIComponent(g) + "=" + encodeURIComponent(c[g]));
3860
            e.data = f.join(";")
3861
        }
3862
        if (d && "view" == a && b.vid && b.uid &&
3863
            (b.oeid || b.ieid)) b.oeid && (e.oeid = b.oeid), b.ieid && (e.ieid = b.ieid), e.evid = b.vid;
3864
        d && (e.foc_id = b.uid);
3865
        return Lf(b.baseUrl, e)
3866
    }
3867
3868
    function Kh(a) {
3869
        var b = L("CONVERSION_CONFIG_DICT");
3870
        b && (a = Jh(a, b)) && Yg(a)
3871
    };
3872
3873
    function Lh() {
3874
        this.b = {}
3875
    }
3876
    v(Lh, lh);
3877
    ba(Lh);
3878
    p = Lh.prototype;
3879
    p.O = "overlay";
3880
    p.register = function () {
3881
        Z(this, "click", this.Pd, "target");
3882
        Z(this, "click", this.cc, "close")
3883
    };
3884
    p.Pd = function (a) {
3885
        if (a = mh(this, a)) {
3886
            var b = Y(this, "fg"),
3887
                c = F(b);
3888
            if (!c) {
3889
                var d = K(Y(this, "content"), a);
3890
                if (d) {
3891
                    c = document.createElement("div");
3892
                    c.id = b;
3893
                    c.className = b;
3894
                    b = this.getData(a, "overlay-hidden") || "";
3895
                    P(c, "overlay-hidden", b);
3896
                    b = this.getData(a, "overlay-class") || "";
3897
                    x(c, b);
3898
                    var e = document.createElement("div");
3899
                    e.className = Y(this, "fg-content");
3900
                    var b = document.createElement("div"),
3901
                        f = Y(this, "base");
3902
                    b.id = f;
3903
                    x(b, f);
3904
                    var g = Y(this, "bg"),
3905
                        f = document.createElement("div");
3906
                    f.id = g;
3907
                    f.className = g;
3908
                    f.style.height = ec() + "px";
3909
                    g = document.createElement("span");
3910
                    x(g, Y(this, "align"));
3911
                    b.appendChild(g);
3912
                    e.innerHTML = d.innerHTML;
3913
                    d = J("iframe", l, e);
3914
                    w(d, function (a) {
3915
                        var b = this.getData(a, "onload");
3916
                        b && ((b = s(b)) && R(a, "load", b), a.src = this.getData(a, "src") || a.src)
3917
                    }, this);
3918
                    c.appendChild(e);
3919
                    d = document.getElementsByTagName("embed");
3920
                    e = document.getElementsByTagName("object");
3921
                    g = t(function (a) {
3922
                        var b = a.style.visibility || "visible";
3923
                        "hidden" != b && (this.setData(a, "overlay-hidden", "true"), this.setData(a, "overlay-visibility-value", b), a.style.visibility = "hidden")
3924
                    }, this);
3925
                    w(d, g);
3926
                    w(e, g);
3927
                    b.appendChild(c);
3928
                    document.body.appendChild(f);
3929
                    document.body.appendChild(b);
3930
                    this.getData(a, "disable-shortcuts") || (c = t(function (a) {
3931
                        B(a.target, Y(this, "base")) && this.cc()
3932
                    }, this), R(b, "click", c), R(document, "keydown", t(this.ae, this)));
3933
                    this.ia(a, "overlay-shown")
3934
                }
3935
            }
3936
        }
3937
    };
3938
    p.cc = function () {
3939
        var a = Y(this, "bg"),
3940
            b = F(Y(this, "fg"));
3941
        if (b) {
3942
            if (B(b, Y(this, "unclosable"))) return;
3943
            V(b);
3944
            document.body.removeChild(b.parentNode)
3945
        }(a = F(a)) && document.body.removeChild(a);
3946
        var a = document.getElementsByTagName("embed"),
3947
            c = document.getElementsByTagName("object"),
3948
            d = t(function (a) {
3949
                this.getData(a, "overlay-hidden") && (a.style.visibility = this.getData(a, "overlay-visibility-value"), $d(a, "overlay-hidden"))
3950
            }, this);
3951
        w(a, d);
3952
        w(c, d);
3953
        ue(document, "keydown", t(this.ae, this));
3954
        b && this.ia(b, "overlay-hidden")
3955
    };
3956
    p.ae = function (a) {
3957
        27 == a.keyCode && this.cc()
3958
    };
3959
3960
    function Mh() {
3961
        var a = Lh.getInstance(),
3962
            b = F(Y(a, "fg"));
3963
        return !b ? l : K(Y(a, "fg-content"), b)
3964
    };
3965
    var Nh = {
3966
        Ei: 0,
3967
        Bh: 1,
3968
        Id: 2,
3969
        ii: 3,
3970
        Ch: 4,
3971
        cj: 5,
3972
        ej: 6,
3973
        bj: 7,
3974
        $i: 8,
3975
        aj: 9,
3976
        dj: 10,
3977
        Zi: 11,
3978
        Li: 12,
3979
        Ki: 13,
3980
        Ji: 14,
3981
        Sh: 15,
3982
        vi: 16,
3983
        yi: 17,
3984
        zi: 18,
3985
        xi: 19,
3986
        wi: 20,
3987
        Mi: 21,
3988
        Fh: 22,
3989
        Yi: 23,
3990
        Eh: 24,
3991
        oh: 25,
3992
        Gh: 26,
3993
        Qh: 27,
3994
        Hi: 28,
3995
        Dh: 29,
3996
        Gi: 30,
3997
        Ti: 31,
3998
        Si: 32,
3999
        Nh: 33,
4000
        Qi: 34,
4001
        Ni: 35,
4002
        Oi: 36,
4003
        Pi: 37,
4004
        Ri: 38,
4005
        ji: 39,
4006
        Bi: 40,
4007
        ph: 41,
4008
        Ai: 42,
4009
        rh: 43,
4010
        Hd: 44,
4011
        Hh: 45,
4012
        si: 46,
4013
        Ui: 47,
4014
        fj: 48,
4015
        gj: 49,
4016
        ij: 50,
4017
        Ii: 51,
4018
        wh: 52,
4019
        yh: 53,
4020
        ti: 54,
4021
        di: 55,
4022
        he: 56,
4023
        Fi: 57,
4024
        Ci: 58,
4025
        Ph: 59,
4026
        pi: 60,
4027
        fi: 61,
4028
        ki: 62,
4029
        qh: 63,
4030
        Xi: 64,
4031
        th: 65,
4032
        sh: 66,
4033
        li: 67,
4034
        Ah: 68,
4035
        Jh: 69,
4036
        Yh: 70,
4037
        qi: 71,
4038
        Rh: 72,
4039
        Di: 73,
4040
        mi: 74,
4041
        Jd: 75,
4042
        ug: 76,
4043
        Zd: 77,
4044
        Kh: 78,
4045
        Vi: 79,
4046
        gi: 80,
4047
        xh: 81,
4048
        oi: 82,
4049
        Zh: 83,
4050
        ai: 84,
4051
        $h: 85,
4052
        bi: 86,
4053
        ci: 87,
4054
        uh: 88,
4055
        nh: 89,
4056
        vh: 90,
4057
        ui: 91,
4058
        ri: 92,
4059
        zh: 93,
4060
        hj: 94,
4061
        Mh: 95,
4062
        Lh: 96,
4063
        Oh: 97,
4064
        hi: 98,
4065
        Ih: 99,
4066
        ni: 100,
4067
        Uh: 101,
4068
        Th: 102,
4069
        Wh: 103,
4070
        Xh: 104,
4071
        Vh: 105,
4072
        Wi: 106
4073
    };
4074
    var Oh = ["FL", "LL", "QL", "SV", "WL"];
4075
4076
    function Ph() {
4077
        return parseInt(L("SHUFFLE_VALUE"), 10) || 0
4078
    };
4079
4080
    function Qh() {
4081
        var a = Fe("watch_queue_new");
4082
        return a ? a.split(",") : []
4083
    }
4084
4085
    function Rh(a) {
4086
        a = bb(a, 0, 100);
4087
        (a = a.join(",")) ? Ee("watch_queue_new", a): Ge("watch_queue_new")
4088
    };
4089
4090
    function Sh(a, b, c, d) {
4091
        this.e = a;
4092
        this.P = b;
4093
        this.pa = this.Kb = m;
4094
        this.ea = new gg;
4095
        this.K = c || [];
4096
        this.Gb = d || 0;
4097
        this.ob = {};
4098
        this.f = !c;
4099
        this.nb = "";
4100
        this.b = -1;
4101
        this.Za = 1;
4102
        this.Fb = this.ma = 0;
4103
        this.lb = this.mb = "";
4104
        this.c = this.Wa = this.Ja = l
4105
    }
4106
4107
    function Th(a) {
4108
        a.ea.za("LIST_UPDATED")
4109
    }
4110
    p = Sh.prototype;
4111
    p.isEqual = function (a) {
4112
        return this.e != a.e ? m : this.Qa() == a.Qa()
4113
    };
4114
    p.Fc = function (a) {
4115
        this.nb = a.nb || "";
4116
        this.b = a.fa();
4117
        this.ma = a.ma;
4118
        this.Za = a.Za;
4119
        this.mb = a.mb;
4120
        this.lb = a.lb;
4121
        this.Gb = a.Gb
4122
    };
4123
    p.Aa = function () {
4124
        return this.e
4125
    };
4126
    p.Qa = function () {
4127
        return this.e + (this.P || "")
4128
    };
4129
4130
    function Uh(a) {
4131
        return a.Y() ? Vh(a, "shuffled_ids", function () {
4132
            return Ra(Wh(this), function (a) {
4133
                return a.id
4134
            })
4135
        }) : a.Ba()
4136
    }
4137
    p.Jc = function (a) {
4138
        var b = Uh(this);
4139
        if (!b.length) return "";
4140
        a = this.fa() + a;
4141
        a >= b.length && (a %= b.length);
4142
        return b[a]
4143
    };
4144
4145
    function Xh(a, b) {
4146
        var c = Uh(a);
4147
        return Ra(b, function (a) {
4148
            var b;
4149
            a: {
4150
                b = function (b) {
4151
                    return b == a
4152
                };
4153
                for (var f = ga(c) ? c.split("") : c, g = c.length - 1; 0 <= g; g--)
4154
                    if (g in f && b.call(j, f[g])) {
4155
                        b = g;
4156
                        break a
4157
                    } b = -1
4158
            }
4159
            return b
4160
        })
4161
    }
4162
    p.Ba = function () {
4163
        return Za(this.K)
4164
    };
4165
4166
    function Wh(a) {
4167
        return Vh(a, "shuffled_videos", function () {
4168
            function a(b) {
4169
                for (var c = 1, e = [], b = b.split(""); b.length;) {
4170
                    var c = (d + c) % b.length,
4171
                        f = b[c];
4172
                    Ya(b, c);
4173
                    e.push(f)
4174
                }
4175
                return e.join("")
4176
            }
4177
            var c = this.Ba(),
4178
                d = Ph(),
4179
                e = [];
4180
            w(c, function (c, d) {
4181
                e.push({
4182
                    id: c,
4183
                    key: a(c),
4184
                    index: d
4185
                })
4186
            });
4187
            Oa.sort.call(e, function (a, b) {
4188
                return cb(a.key, b.key)
4189
            } || cb);
4190
            var f = d >> 8;
4191
            Ta(e, function (a) {
4192
                return f == a.index
4193
            });
4194
            c = bb(e, f).concat(bb(e, 0, f));
4195
            return Ra(c, function (a) {
4196
                return {
4197
                    id: a.id,
4198
                    Ec: a.index
4199
                }
4200
            })
4201
        })
4202
    }
4203
    p.getVideoData = function (a) {
4204
        return this.ob[a] || {}
4205
    };
4206
    p.Z = function () {
4207
        return this.Ba().length
4208
    };
4209
    p.fa = function () {
4210
        return this.Y() ? Ta(Wh(this), function (a) {
4211
            return a.Ec == this.b
4212
        }, this) : this.b
4213
    };
4214
    p.Y = function () {
4215
        return 0 < this.ma
4216
    };
4217
    p.ya = function () {
4218
        return 0 <= this.b
4219
    };
4220
    p.vb = function () {
4221
        return !!this.Kb
4222
    };
4223
    p.Bc = function () {
4224
        return m
4225
    };
4226
    p.$a = function () {
4227
        return m
4228
    };
4229
4230
    function Yh(a, b, c) {
4231
        var d = a.fa() + 1;
4232
        d >= a.Z() && (d = 0);
4233
        return Zh(a, d, !b, c)
4234
    }
4235
4236
    function Zh(a, b, c, d) {
4237
        var e = Uh(a)[b];
4238
        if (!e) return l;
4239
        var f = {
4240
            v: e
4241
        };
4242
        if (1 < (Vh(a, "occurrences", function () {
4243
                var a = {};
4244
                w(this.Ba(), function (b) {
4245
                    a[b] = (a[b] || 0) + 1
4246
                });
4247
                return a
4248
            })[e] || 0)) e = b + 1 + a.Fb, a.Y() && (e = Wh(a)[b].Ec + 1), f.index = e;
4249
        c && (f.playnext = a.Za);
4250
        a.Y() && (f.shuffle = a.ma);
4251
        d && (f.feature = d);
4252
        return Nf(a.nb, f)
4253
    }
4254
    p.clear = function () {
4255
        this.ie();
4256
        Th(this)
4257
    };
4258
    p.removeItem = function (a) {
4259
        this.Y() && (a = Wh(this)[a].Ec);
4260
        var b = this.Ba()[a];
4261
        this.Cd(a);
4262
        this.b > a ? this.b -= 1 : this.b == a && (this.b = -1);
4263
        Th(this);
4264
        return b
4265
    };
4266
    p.Cd = function (a) {
4267
        var b = this.K[a];
4268
        Ya(this.K, a);
4269
        X(this.ac(), {
4270
            format: "XML",
4271
            method: "POST",
4272
            C: {
4273
                video_ids: b,
4274
                session_token: M("addto_ajax") || "",
4275
                playlist_id: this.P || "",
4276
                index: a
4277
            },
4278
            j: function (a, b) {
4279
                this.Ja = b.html_content
4280
            },
4281
            onError: function (a, b) {
4282
                this.Wa = b.error_message || O("ERROR_OCCURRED")
4283
            },
4284
            S: function () {
4285
                Th(this)
4286
            },
4287
            B: this
4288
        })
4289
    };
4290
    p.load = function (a) {
4291
        this.f && !this.Kb && $h(this);
4292
        ai(this, a)
4293
    };
4294
4295
    function ai(a, b) {
4296
        var c = Uh(a),
4297
            c = Qa(c, function (a) {
4298
                return !(a in this.ob)
4299
            }, a);
4300
        w(c, function (a) {
4301
            this.ob[a] = {}
4302
        }, a);
4303
        var d = t(function (a) {
4304
            for (var c in a) this.ob[c] = a[c];
4305
            Th(this);
4306
            b && b()
4307
        }, a);
4308
        c.length && X("/video_info_ajax", {
4309
            method: "POST",
4310
            o: {
4311
                action_get_videos_data: 1,
4312
                count: c.length
4313
            },
4314
            C: {
4315
                video_ids: c.join(",")
4316
            },
4317
            j: function (a, b) {
4318
                b.data && d(b.data)
4319
            }
4320
        })
4321
    }
4322
4323
    function $h(a, b, c) {
4324
        a.Kb = k;
4325
        a.f = m;
4326
        var d = {
4327
            style: "bottomfeedr_json",
4328
            action_get_list: 1,
4329
            list: a.Qa()
4330
        };
4331
        c && sb(d, c);
4332
        X("/list_ajax", {
4333
            o: d,
4334
            j: function (a, b) {
4335
                var c = b.data;
4336
                this.K = Za(c.videos);
4337
                this.P = c.list_id;
4338
                this.pa = !!c.editable;
4339
                this.nb = c.video_url || "";
4340
                this.mb = c.menu_title_html;
4341
                this.lb = c.menu_html;
4342
                this.Gb = c.video_count;
4343
                this.Fb = c.index_offset;
4344
                var c = c.video_data,
4345
                    d;
4346
                for (d in c) this.ob[d] = c[d]
4347
            },
4348
            onError: function () {},
4349
            S: function () {
4350
                this.Kb = m;
4351
                ai(this);
4352
                Th(this);
4353
                b && b()
4354
            },
4355
            B: a
4356
        })
4357
    }
4358
4359
    function Vh(a, b, c) {
4360
        if (a.c && b in a.c) return a.c[b];
4361
        c = c.call(a);
4362
        a.c && (a.c[b] = c);
4363
        return c
4364
    };
4365
4366
    function bi(a, b, c) {
4367
        Sh.call(this, "FL", a, b, c)
4368
    }
4369
    v(bi, Sh);
4370
    bi.prototype.ac = function () {
4371
        return "/addto_ajax?action_delete_from_favorites=1"
4372
    };
4373
4374
    function ci(a, b, c) {
4375
        Sh.call(this, "LL", a, b, c)
4376
    }
4377
    v(ci, Sh);
4378
    ci.prototype.ac = function () {
4379
        return "/addto_ajax?action_delete_from_liked=1"
4380
    };
4381
4382
    function di(a, b, c) {
4383
        Sh.call(this, "ML", a, b, c)
4384
    }
4385
    v(di, Sh);
4386
    di.prototype.Bc = function () {
4387
        return !!this.pa
4388
    };
4389
    di.prototype.$a = function () {
4390
        return !!this.pa
4391
    };
4392
4393
    function ei(a, b, c, d) {
4394
        Sh.call(this, a, b, c, d)
4395
    }
4396
    v(ei, Sh);
4397
    p = ei.prototype;
4398
    p.Ic = function (a) {
4399
        $a(this.K, a);
4400
        X("/addto_ajax", {
4401
            format: "XML",
4402
            method: "POST",
4403
            o: {
4404
                action_add_to_playlist: 1
4405
            },
4406
            C: {
4407
                playlist_id: this.P,
4408
                video_ids: a.join(","),
4409
                session_token: M("addto_ajax")
4410
            },
4411
            onError: function () {
4412
                this.Wa = O("ERROR_OCCURRED");
4413
                Th(this)
4414
            },
4415
            B: this
4416
        })
4417
    };
4418
    p.ac = function () {
4419
        return "/addto_ajax?action_delete_from_playlist=1"
4420
    };
4421
    p.ie = function () {
4422
        var a = this.K.length;
4423
        Va(this.K);
4424
        X("/addto_ajax", {
4425
            format: "XML",
4426
            method: "POST",
4427
            o: {
4428
                action_clear_playlist: 1,
4429
                list_length: a,
4430
                type: this.e
4431
            },
4432
            C: {
4433
                playlist_id: this.P,
4434
                session_token: M("addto_ajax")
4435
            },
4436
            onError: function () {
4437
                this.Wa = O("ERROR_OCCURRED");
4438
                Th(this)
4439
            },
4440
            B: this
4441
        })
4442
    };
4443
    p.vd = function (a, b) {
4444
        var c = this.K[a];
4445
        Ya(this.K, a);
4446
        ab(this.K, b, 0, c);
4447
        var d = Za(this.K);
4448
        X("/addto_ajax?action_move_playlist_video=1", {
4449
            format: "XML",
4450
            method: "POST",
4451
            C: {
4452
                video_ids: c,
4453
                playlist_id: this.P,
4454
                source_index: a,
4455
                target_index: b,
4456
                session_token: M("addto_ajax")
4457
            },
4458
            onError: function () {
4459
                var e;
4460
                a: if (e = this.K, !fa(e) || !fa(d) || e.length != d.length) e = m;
4461
                    else {
4462
                        for (var f = e.length, g = 0; g < f; g++)
4463
                            if (e[g] !== d[g]) {
4464
                                e = m;
4465
                                break a
4466
                            } e = k
4467
                    } e && (Ya(this.K, b), ab(this.K, a, 0, c));
4468
                this.Wa = O("ERROR_OCCURRED");
4469
                Th(this)
4470
            },
4471
            B: this
4472
        })
4473
    };
4474
    p.$a = function () {
4475
        return !!this.pa
4476
    };
4477
4478
    function fi(a) {
4479
        Sh.call(this, "QL", l);
4480
        this.pa = k;
4481
        this.f = !a
4482
    }
4483
    v(fi, Sh);
4484
    p = fi.prototype;
4485
    p.Fc = function (a) {
4486
        fi.J.Fc.call(this, a);
4487
        this.f = m
4488
    };
4489
    p.Ba = function () {
4490
        return Qh()
4491
    };
4492
    p.Ic = function (a) {
4493
        var b = Qh();
4494
        $a(b, a);
4495
        Rh(b)
4496
    };
4497
    p.Cd = function (a) {
4498
        var b = Uh(this)[a],
4499
            a = Qh(),
4500
            b = Pa(a, b);
4501
        0 <= b && (Ya(a, b), Rh(a))
4502
    };
4503
    p.ie = function () {
4504
        Rh([])
4505
    };
4506
    p.vd = function (a, b) {
4507
        var c = Qh(),
4508
            d = c[a];
4509
        Ya(c, a);
4510
        ab(c, b, 0, d);
4511
        Rh(c)
4512
    };
4513
    p.$a = function () {
4514
        return !!this.pa
4515
    };
4516
4517
    function gi(a, b, c) {
4518
        Sh.call(this, "SV", a, b, c);
4519
        this.pa = k
4520
    }
4521
    v(gi, Sh);
4522
    gi.prototype.load = function (a) {
4523
        gi.J.load.call(this, a);
4524
        !this.vb() && this.ya() && (a = Uh(this), this.fa() >= a.length - 1 && $h(this, l, {
4525
            load_more: "1"
4526
        }))
4527
    };
4528
    gi.prototype.ac = function () {
4529
        return "/addto_ajax?action_delete_from_station=1"
4530
    };
4531
4532
    function hi(a, b, c, d) {
4533
        var e = l;
4534
        switch (a) {
4535
        case "PL":
4536
        case "SP":
4537
        case "BP":
4538
        case "WL":
4539
            e = new ei(a, b, c, d);
4540
            break;
4541
        case "FL":
4542
            e = new bi(b, c, d);
4543
            break;
4544
        case "LL":
4545
            e = new ci(b, c, d);
4546
            break;
4547
        case "AV":
4548
        case "BB":
4549
        case "ML":
4550
        case "MC":
4551
            e = new di(b, c, d);
4552
            break;
4553
        case "QL":
4554
            e = new fi;
4555
            break;
4556
        case "SV":
4557
            e = new gi(b, c, d);
4558
            break;
4559
        default:
4560
            e = new Sh(a, b, c, d)
4561
        }
4562
        return e
4563
    };
4564
4565
    function ii(a) {
4566
        var b, c, d, e = window.location.href,
4567
            f = k,
4568
            g = F("page"),
4569
            i = a || l;
4570
        if (!i && !B(g, "watch")) return l;
4571
        var n = Ac(i, "ul");
4572
        n || (n = Ac(i, "ol"));
4573
        if (B(g, "search-base") || F("search-base-div")) {
4574
            a = "search";
4575
            b = ji;
4576
            var r = K("search-term");
4577
            r && (c = r.value)
4578
        } else if (B(g, "watch")) {
4579
            b = ki;
4580
            f = m;
4581
            i || (i = L("GUIDE_ENABLED") ? K("guide-context-item") : K("watch-context-item"));
4582
            n = F("watch-context-container");
4583
            a = Q(n, "context-type");
4584
            if ("channel" == a && (r = K("guide-context-image"))) r = nc(r), d = r.src;
4585
            (r = K("context-back-link", n)) && (c = yc(K("placeholder",
4586
                r)));
4587
            if (r = K("context-back-link", n)) e = r.href;
4588
            n = J("ul", l, n)[0]
4589
        } else if (B(g, "channel"))
4590
            if (a = "channel", F("guide")) {
4591
                if (b = F("feed") ? li : mi, (r = J("h1", j, j)[0]) && (c = yc(r)), r = K("channel-header-profile-image")) d = r.src
4592
            } else {
4593
                if (g = (g = he("li", "selected", F("channel-header-main"))) && nc(g))
4594
                    if (g = g.href, r = Sa(g.split("/"), function (a, b, c) {
4595
                            return "user" == c[b - 2]
4596
                        }), !r) return l;
4597
                "featured" == r ? ((n = Cc(i, "blogger-video")) ? n = rc(n) : (n = Cc(i, "playlist"), n = rc(n)), b = ni) : "feed" == r ? b = oi : "videos" == r && (b = pi);
4598
                (r = J("h1", j, j)[0]) && (c = yc(r));
4599
                if (r = J("img", l, F("channel-header-main"))[0]) d = r.src
4600
            }
4601
        else B(g, "home") ? (a = "home", n = K("feed-page", g), n = nc(n), b = qi, r = K("branded-page-header-title")) : (a = "home", b = ri, r = nc(K("feed-header-details"))), r && (c = yc(r));
4602
        if (!n || !b) return l;
4603
        try {
4604
            for (var y = nc(n), n = []; y;) si(y) || n.push(y), y = y.nextElementSibling != j ? y.nextElementSibling : oc(y.nextSibling);
4605
            y = b;
4606
            b = [];
4607
            for (var D, G, H, g = r = 0; g < n.length; g++)
4608
                if (D = n[g], !si(D)) {
4609
                    var ka;
4610
                    if (B(D, "playlist") || B(D, "context-playlist") || K("feed-item-content-playlist", D) || K("yt-pl-thumb-link",
4611
                            D) || K("related-playlist", D)) {
4612
                        var ua = D,
4613
                            S = y,
4614
                            Wa = j,
4615
                            xa = j,
4616
                            Ca = K(S.playlistId, ua);
4617
                        Ca && (Ca = Ca.href, xa = Gf(Ca, "list"), Wa = Gf(Ca, "v"));
4618
                        if (Wa) {
4619
                            var Ka = j,
4620
                                ed = K(S.playlistName, ua);
4621
                            ed && (Ka = yc(ed));
4622
                            var If = j,
4623
                                ne = K(S.playlistImg, ua);
4624
                            if (ne && (ne = he("img", l, ne))) If = Q(ne, "thumb"), If || (If = ne.src);
4625
                            var ll = j,
4626
                                ml = K(S.playlistVidCount, ua);
4627
                            ml && (ll = yc(ml));
4628
                            var nl = j,
4629
                                oe = K(S.userImg, ua);
4630
                            oe && (oe = he("img", l, oe)) && (nl = Q(oe, "thumb") || oe.src);
4631
                            var ol = j,
4632
                                wc = K(S.feedAction, ua);
4633
                            if (wc) {
4634
                                if (S == li || S == mi || S == ni || S == oi || S == pi) {
4635
                                    var wc = K("yt-uix-hovercard",
4636
                                            wc),
4637
                                        wc = wc.cloneNode(k),
4638
                                        Up = J("span", l, wc);
4639
                                    w(Up, mc)
4640
                                }
4641
                                ol = yc(wc)
4642
                            }
4643
                            ka = {
4644
                                videoId: Wa,
4645
                                playlistId: xa,
4646
                                playlistName: Ka,
4647
                                playlistImg: If,
4648
                                playlistCount: ll,
4649
                                userImg: nl,
4650
                                feedAction: ol,
4651
                                itemType: "playlist"
4652
                            }
4653
                        } else ka = l
4654
                    } else ka = ti(D, y);
4655
                    if (G = ka) sc(D, i) && (H = r), b.push(G), r++
4656
                } var Wp = b,
4657
                Xp = H
4658
        } catch (Br) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
4659
        return {
4660
            contextList: Wp,
4661
            contextSource: c,
4662
            contextType: a,
4663
            contextImage: d,
4664
            backLink: e,
4665
            clickedIndex: Xp,
4666
            showNotification: f
4667
        }
4668
    }
4669
4670
    function si(a) {
4671
        return B(a, "movie") || B(a, "music-onebox") || B(a, "video-alt-query") || B(a, "result-item-channel") || "DIV" != a.tagName && "LI" != a.tagName ? k : m
4672
    }
4673
4674
    function ti(a, b) {
4675
        var c, d = K(b.videoId, a);
4676
        d && (d = d.href) && (c = Gf(d, "v"));
4677
        if (!c) return l;
4678
        var e;
4679
        if (d = K(b.videoImg, a))(d = he("img", l, d)) && (e = Q(d, "thumb") || d.src);
4680
        var f;
4681
        (d = K(b.videoName, a)) && (f = yc(d));
4682
        var g;
4683
        (d = K(b.videoViews, a)) && (g = yc(d));
4684
        var i;
4685
        (d = K(b.videoTime, a)) && (i = yc(d));
4686
        var n;
4687
        if (d = K(b.userImg, a))(d = he("img", l, d)) && (n = Q(d, "thumb") || d.src);
4688
        var r;
4689
        b == pi ? r = Sa(window.location.href.split("/"), function (a, b, c) {
4690
            return "user" == c[b - 1]
4691
        }) : (d = b == oi || b == ri ? (d = K("metadata", a)) ? K(b.userName, d) : K(b.userName, a) : K(b.userName,
4692
            a), d && (r = yc(d)));
4693
        var y;
4694
        if (d = K(b.feedAction, a)) {
4695
            d = d.cloneNode(k);
4696
            if (b == li || b == mi || b == ni || b == oi || b == pi) y = J("span", l, d), w(y, mc);
4697
            y = J("div", l, d);
4698
            w(y, mc);
4699
            y = yc(d)
4700
        }
4701
        return {
4702
            videoId: c,
4703
            videoImg: e,
4704
            videoName: f,
4705
            videoViews: g,
4706
            videoTime: i,
4707
            userImg: n,
4708
            userName: r,
4709
            feedAction: y,
4710
            itemType: "video"
4711
        }
4712
    }
4713
    var ji = {
4714
            videoViews: "viewcount",
4715
            videoName: "result-item-translation-title",
4716
            videoTime: "video-time",
4717
            userName: "yt-user-name",
4718
            userImg: "NULL",
4719
            videoImg: "yt-thumb-clip-inner",
4720
            videoId: "yt-uix-contextlink",
4721
            playlistVidCount: "video-count",
4722
            playlistName: "result-item-translation-title",
4723
            playlistId: "yt-uix-tile-link",
4724
            playlistImg: "playlist-large-thumb",
4725
            feedAction: "feed-item-actions-line"
4726
        },
4727
        li = {
4728
            videoViews: "view-count",
4729
            videoName: "title",
4730
            videoTime: "video-time",
4731
            userName: "yt-user-name",
4732
            userImg: "feed-item-author",
4733
            videoImg: "feed-item-thumb",
4734
            videoId: "yt-uix-contextlink",
4735
            playlistVidCount: "count-label",
4736
            playlistName: "title",
4737
            playlistId: "yt-uix-contextlink",
4738
            playlistImg: "yt-pl-thumb",
4739
            feedAction: "feed-item-actions-line"
4740
        },
4741
        mi = {
4742
            videoViews: "view-count",
4743
            videoName: "title",
4744
            videoTime: "video-time",
4745
            userName: "yt-user-name",
4746
            userImg: "yt-user-photo",
4747
            videoImg: "feed-item-thumb",
4748
            videoId: "yt-uix-contextlink",
4749
            playlistVidCount: "video-count-block",
4750
            playlistName: "title",
4751
            playlistId: "yt-uix-contextlink",
4752
            playlistImg: "video-thumb",
4753
            feedAction: "NULL"
4754
        },
4755
        qi = {
4756
            videoViews: "view-count",
4757
            videoName: "feed-video-title",
4758
            videoTime: "video-time",
4759
            userName: "yt-user-name",
4760
            userImg: "feed-item-author",
4761
            videoImg: "feed-item-thumb",
4762
            videoId: "yt-uix-contextlink",
4763
            playlistVidCount: "count-label",
4764
            playlistName: "title",
4765
            playlistId: "yt-uix-contextlink",
4766
            playlistImg: "yt-pl-thumb",
4767
            feedAction: "feed-item-actions-line"
4768
        },
4769
        ri = {
4770
            videoViews: "view-count",
4771
            videoName: "feed-video-title",
4772
            videoTime: "video-time",
4773
            userName: "yt-user-name",
4774
            userImg: "feed-item-author",
4775
            videoImg: "feed-item-thumb",
4776
            videoId: "yt-uix-contextlink",
4777
            playlistId: "yt-uix-contextlink",
4778
            feedAction: "feed-item-actions-line"
4779
        },
4780
        ki = {
4781
            videoViews: "viewcount",
4782
            videoName: "title",
4783
            videoTime: "video-time",
4784
            userName: "username",
4785
            userImg: "context-user-thumb",
4786
            videoImg: "context-video-thumb",
4787
            videoId: "yt-uix-contextlink",
4788
            playlistVidCount: "videocount",
4789
            playlistName: "title",
4790
            playlistId: "yt-uix-contextlink",
4791
            playlistImg: "yt-thumb-clip-inner",
4792
            feedAction: "action"
4793
        },
4794
        oi = {
4795
            videoViews: "view-count",
4796
            videoName: "title",
4797
            videoTime: "video-time",
4798
            userName: "yt-user-name",
4799
            userImg: "feed-item-author",
4800
            videoImg: "feed-item-thumb",
4801
            videoId: "yt-uix-contextlink",
4802
            playlistVidCount: "NULL",
4803
            playlistName: "title",
4804
            playlistId: "yt-pl-thumb-link",
4805
            playlistImg: "feed-item-author",
4806
            feedAction: "feed-item-actions-line"
4807
        },
4808
        ni = {
4809
            videoViews: "video-view-count",
4810
            videoName: "video-title",
4811
            videoTime: "video-time",
4812
            userName: "video-owner",
4813
            userImg: "NULL",
4814
            videoImg: "video-thumb",
4815
            videoId: "yt-uix-contextlink",
4816
            playlistVidCount: "video-count-box",
4817
            playlistName: "yt-uix-tile-link",
4818
            playlistId: "yt-uix-contextlink",
4819
            playlistImg: "clip",
4820
            feedAction: "NULL"
4821
        },
4822
        pi = {
4823
            videoViews: "yt-c3-grid-item-viewcount",
4824
            videoName: "content-item-title",
4825
            videoTime: "video-time",
4826
            userName: "NULL",
4827
            userImg: "NULL",
4828
            videoImg: "video-thumb",
4829
            videoId: "yt-uix-contextlink",
4830
            playlistVidCount: "video-count-box",
4831
            playlistName: "yt-uix-tile-link",
4832
            playlistId: "yt-uix-contextlink",
4833
            playlistImg: "clip",
4834
            feedAction: "NULL"
4835
        };
4836
4837
    function ui() {};
4838
4839
    function vi() {}
4840
    v(vi, ui);
4841
    vi.prototype.Z = function () {
4842
        var a = 0;
4843
        Ic(this.Sa(k), function () {
4844
            a++
4845
        });
4846
        return a
4847
    };
4848
    vi.prototype.clear = function () {
4849
        var a;
4850
        a = this.Sa(k);
4851
        if (fa(a)) a = Za(a);
4852
        else {
4853
            a = Hc(a);
4854
            var b = [];
4855
            Ic(a, function (a) {
4856
                b.push(a)
4857
            });
4858
            a = b
4859
        }
4860
        var c = this;
4861
        w(a, function (a) {
4862
            c.b.removeItem(a)
4863
        })
4864
    };
4865
4866
    function wi(a) {
4867
        this.b = a
4868
    }
4869
    v(wi, vi);
4870
    wi.prototype.get = function (a) {
4871
        a = this.b.getItem(a);
4872
        !ga(a) && a !== l && h("Storage mechanism: Invalid value was encountered");
4873
        return a
4874
    };
4875
    wi.prototype.Z = function () {
4876
        return this.b.length
4877
    };
4878
    wi.prototype.Sa = function (a) {
4879
        var b = 0,
4880
            c = this.b,
4881
            d = new Gc;
4882
        d.b = function () {
4883
            b >= c.length && h(Fc);
4884
            var d;
4885
            d = c.key(b++);
4886
            if (a) return d;
4887
            d = c.getItem(d);
4888
            ga(d) || h("Storage mechanism: Invalid value was encountered");
4889
            return d
4890
        };
4891
        return d
4892
    };
4893
    wi.prototype.clear = function () {
4894
        this.b.clear()
4895
    };
4896
4897
    function xi() {
4898
        var a = l;
4899
        try {
4900
            a = window.localStorage || l
4901
        } catch (b) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
4902
        this.b = a
4903
    }
4904
    v(xi, wi);
4905
4906
    function yi(a) {
4907
        this.fb = a;
4908
        this.Ed = new yg
4909
    }
4910
    p = yi.prototype;
4911
    p.fb = l;
4912
    p.Ed = l;
4913
    p.gb = function (a, b) {
4914
        if (da(b)) {
4915
            var c = zg(this.Ed, b);
4916
            try {
4917
                this.fb.b.setItem(a, c)
4918
            } catch (d) {
4919
                h("Storage mechanism: Quota exceeded")
4920
            }
4921
        } else this.fb.b.removeItem(a)
4922
    };
4923
    p.get = function (a) {
4924
        a = this.fb.get(a);
4925
        if (a !== l) try {
0 ignored issues
show
Complexity Best Practice introduced by
There is no return statement if a !== l is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
4926
            return wg(a)
4927
        } catch (b) {
4928
            h("Storage: Invalid value was encountered")
4929
        }
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
4930
    };
4931
    p.Xb = function (a) {
4932
        this.fb.b.removeItem(a)
4933
    };
4934
4935
    function zi(a) {
4936
        yi.call(this, a)
4937
    }
4938
    v(zi, yi);
4939
4940
    function Ai(a) {
4941
        this.data = a
4942
    }
4943
4944
    function Bi(a) {
4945
        return !da(a) || a instanceof Ai ? a : new Ai(a)
4946
    }
4947
    zi.prototype.gb = function (a, b) {
4948
        zi.J.gb.call(this, a, Bi(b))
4949
    };
4950
    zi.prototype.b = function (a) {
4951
        a = zi.J.get.call(this, a);
4952
        if (!da(a) || a instanceof Object) return a;
4953
        h("Storage: Invalid value was encountered")
4954
    };
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
4955
    zi.prototype.get = function (a) {
4956
        (a = this.b(a)) ? (a = a.data, da(a) || h("Storage: Invalid value was encountered")) : a = j;
4957
        return a
4958
    };
4959
4960
    function Ci(a) {
4961
        yi.call(this, a)
4962
    }
4963
    v(Ci, zi);
4964
4965
    function Di(a) {
4966
        var b = a.creation,
4967
            a = a.expiration;
4968
        return !!a && a < qa() || !!b && b > qa()
4969
    }
4970
    Ci.prototype.gb = function (a, b, c) {
4971
        if (b = Bi(b)) {
4972
            if (c) {
4973
                if (c < qa()) {
4974
                    Ci.prototype.Xb.call(this, a);
4975
                    return
4976
                }
4977
                b.expiration = c
4978
            }
4979
            b.creation = qa()
4980
        }
4981
        Ci.J.gb.call(this, a, b)
4982
    };
4983
    Ci.prototype.b = function (a, b) {
4984
        var c = Ci.J.b.call(this, a);
4985
        if (c)
0 ignored issues
show
Complexity Best Practice introduced by
There is no return statement if c is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
4986
            if (!b && Di(c)) Ci.prototype.Xb.call(this, a);
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
4987
            else return c
4988
    };
4989
4990
    function Ei(a) {
4991
        yi.call(this, a)
4992
    }
4993
    v(Ei, Ci);
4994
4995
    function Fi(a, b) {
4996
        var c = zg(new yg(j), b);
4997
        (new Ei(new xi)).gb(a, c, qa() + 6E5)
4998
    };
4999
    var Gi = 0,
5000
        Hi = 0,
5001
        Ii = 0,
5002
        Ji = 0,
5003
        Ki = m;
5004
5005
    function Li() {
5006
        var a = fc(document).y + cc(window).height + Hi,
5007
            b = Ii;
5008
        Ji = a;
5009
        var c = Math.abs(b - a);
5010
        if (!b || 400 <= c) {
5011
            c = Mi(a);
5012
            for (b = Mi(b); b < c;) Tg("thumb-group-" + c), c--;
5013
            Ii = a
5014
        }
5015
    }
5016
5017
    function Ni() {
5018
        for (var a = Mi(Ji); 0 <= a; a--) Tg("thumb-group-" + a)
5019
    }
5020
5021
    function Oi(a) {
5022
        Pi(function (a, c) {
5023
            var d = Q(a, "group-key");
5024
            d && (Sg(a, d), $d(a, "group-key"));
5025
            a.src = c
5026
        }, a)
5027
    }
5028
5029
    function Qi(a, b) {
5030
        Ki && Pi(function (a, d) {
5031
            var e = Q(a, "group-key");
5032
            Q(a, "thumb-manual") || e && !b || (e && Sg(a, e), e = "thumb-group-" + Mi(pf(a).y), Rg(a, d, e), P(a, "group-key", e))
5033
        }, a)
5034
    }
5035
5036
    function Pi(a, b) {
5037
        var c = J("img", l, b);
5038
        w(c, function (b) {
5039
            var c = Q(b, "thumb");
5040
            c && a.call(q, b, c)
5041
        })
5042
    }
5043
5044
    function Mi(a) {
5045
        return Math.ceil(Math.max(0, a - Gi) / 400)
5046
    };
5047
5048
    function Ri(a) {
5049
        Ri[" "](a);
5050
        return a
5051
    }
5052
    Ri[" "] = aa;
5053
    !E || Ub(9);
5054
    var Si = !E || Ub(9),
5055
        Ti = E && !Sb("9");
5056
    !Fb || Sb("528");
5057
    Eb && Sb("1.9b") || E && Sb("8") || Db && Sb("9.5") || Fb && Sb("528");
5058
    Eb && !Sb("8") || E && Sb("9");
5059
5060
    function Ui(a, b) {
5061
        this.type = a;
5062
        this.currentTarget = this.target = b
5063
    }
5064
    p = Ui.prototype;
5065
    p.na = function () {};
5066
    p.Ua = m;
5067
    p.fc = k;
5068
    p.stopPropagation = function () {
5069
        this.Ua = k
5070
    };
5071
    p.preventDefault = function () {
5072
        this.fc = m
5073
    };
5074
5075
    function Vi(a, b) {
5076
        a && this.init(a, b)
5077
    }
5078
    v(Vi, Ui);
5079
    p = Vi.prototype;
5080
    p.target = l;
5081
    p.relatedTarget = l;
5082
    p.clientX = 0;
5083
    p.clientY = 0;
5084
    p.keyCode = 0;
5085
    p.charCode = 0;
5086
    p.ctrlKey = m;
5087
    p.altKey = m;
5088
    p.shiftKey = m;
5089
    p.Ia = l;
5090
    p.init = function (a, b) {
5091
        var c = this.type = a.type;
5092
        Ui.call(this, c);
5093
        this.target = a.target || a.srcElement;
5094
        this.currentTarget = b;
5095
        var d = a.relatedTarget;
5096
        if (d) {
5097
            if (Eb) {
5098
                var e;
5099
                a: {
5100
                    try {
5101
                        Ri(d.nodeName);
5102
                        e = k;
5103
                        break a
5104
                    } catch (f) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
5105
                    e = m
5106
                }
5107
                e || (d = l)
5108
            }
5109
        } else "mouseover" == c ? d = a.fromElement : "mouseout" == c && (d = a.toElement);
5110
        this.relatedTarget = d;
5111
        this.clientX = a.clientX !== j ? a.clientX : a.pageX;
5112
        this.clientY = a.clientY !== j ? a.clientY : a.pageY;
5113
        this.keyCode = a.keyCode || 0;
5114
        this.charCode = a.charCode || ("keypress" == c ? a.keyCode : 0);
5115
        this.ctrlKey = a.ctrlKey;
5116
        this.altKey =
5117
            a.altKey;
5118
        this.shiftKey = a.shiftKey;
5119
        this.Ia = a;
5120
        a.defaultPrevented && this.preventDefault();
5121
        delete this.Ua
5122
    };
5123
    p.stopPropagation = function () {
5124
        Vi.J.stopPropagation.call(this);
5125
        this.Ia.stopPropagation ? this.Ia.stopPropagation() : this.Ia.cancelBubble = k
5126
    };
5127
    p.preventDefault = function () {
5128
        Vi.J.preventDefault.call(this);
5129
        var a = this.Ia;
5130
        if (a.preventDefault) a.preventDefault();
5131
        else if (a.returnValue = m, Ti) try {
5132
            if (a.ctrlKey || 112 <= a.keyCode && 123 >= a.keyCode) a.keyCode = -1
5133
        } catch (b) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
5134
    };
5135
    p.Hg = function () {
5136
        return this.Ia
5137
    };
5138
5139
    function Wi() {}
5140
    var Xi = 0;
5141
    p = Wi.prototype;
5142
    p.key = 0;
5143
    p.Pa = m;
5144
    p.od = m;
5145
    p.init = function (a, b, c, d, e, f) {
5146
        ha(a) ? this.b = k : a && a.handleEvent && ha(a.handleEvent) ? this.b = m : h(Error("Invalid listener argument"));
5147
        this.eb = a;
5148
        this.c = b;
5149
        this.src = c;
5150
        this.type = d;
5151
        this.capture = !!e;
5152
        this.Tb = f;
5153
        this.od = m;
5154
        this.key = ++Xi;
5155
        this.Pa = m
5156
    };
5157
    p.handleEvent = function (a) {
5158
        return this.b ? this.eb.call(this.Tb || this.src, a) : this.eb.handleEvent.call(this.eb, a)
5159
    };
5160
    var Yi = {},
5161
        Zi = {},
5162
        $i = {},
5163
        aj = {};
5164
5165
    function bj(a, b, c, d, e) {
5166
        if (b) {
5167
            if (ea(b)) {
5168
                for (var f = 0; f < b.length; f++) bj(a, b[f], c, d, e);
5169
                return l
5170
            }
5171
            var d = !!d,
5172
                g = Zi;
5173
            b in g || (g[b] = {
5174
                Q: 0,
5175
                ba: 0
5176
            });
5177
            g = g[b];
5178
            d in g || (g[d] = {
5179
                Q: 0,
5180
                ba: 0
5181
            }, g.Q++);
5182
            var g = g[d],
5183
                i = ja(a),
5184
                n;
5185
            g.ba++;
5186
            if (g[i]) {
5187
                n = g[i];
5188
                for (f = 0; f < n.length; f++)
5189
                    if (g = n[f], g.eb == c && g.Tb == e) {
5190
                        if (g.Pa) break;
5191
                        return n[f].key
5192
                    }
5193
            } else n = g[i] = [], g.Q++;
5194
            var r = cj,
5195
                y = Si ? function (a) {
5196
                    return r.call(y.src, y.key, a)
5197
                } : function (a) {
5198
                    a = r.call(y.src, y.key, a);
5199
                    if (!a) return a
0 ignored issues
show
Complexity Best Practice introduced by
There is no return statement if !a is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
5200
                },
5201
                f = y;
5202
            f.src = a;
5203
            g = new Wi;
5204
            g.init(c, f, a, b, d, e);
5205
            c = g.key;
5206
            f.key = c;
5207
            n.push(g);
5208
            Yi[c] = g;
5209
            $i[i] || ($i[i] = []);
5210
            $i[i].push(g);
5211
            a.addEventListener ? (a == q || !a.Ld) && a.addEventListener(b, f, d) : a.attachEvent(b in aj ? aj[b] : aj[b] = "on" + b, f);
5212
            return c
5213
        }
5214
        h(Error("Invalid event type"))
5215
    }
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
5216
5217
    function dj(a, b, c, d, e) {
5218
        if (ea(b))
5219
            for (var f = 0; f < b.length; f++) dj(a, b[f], c, d, e);
5220
        else if (d = !!d, a = ej(a, b, d))
5221
            for (f = 0; f < a.length; f++)
5222
                if (a[f].eb == c && a[f].capture == d && a[f].Tb == e) {
5223
                    fj(a[f].key);
5224
                    break
5225
                }
5226
    }
5227
5228
    function fj(a) {
5229
        if (!Yi[a]) return m;
5230
        var b = Yi[a];
5231
        if (b.Pa) return m;
5232
        var c = b.src,
5233
            d = b.type,
5234
            e = b.c,
5235
            f = b.capture;
5236
        c.removeEventListener ? (c == q || !c.Ld) && c.removeEventListener(d, e, f) : c.detachEvent && c.detachEvent(d in aj ? aj[d] : aj[d] = "on" + d, e);
5237
        c = ja(c);
5238
        $i[c] && (e = $i[c], Xa(e, b), 0 == e.length && delete $i[c]);
0 ignored issues
show
Best Practice introduced by
Comparing 0 to e.length using the == operator is not safe. Consider using === instead.
Loading history...
5239
        b.Pa = k;
5240
        if (b = Zi[d][f][c]) b.Nd = k, gj(d, f, c, b);
5241
        delete Yi[a];
5242
        return k
5243
    }
5244
5245
    function gj(a, b, c, d) {
5246
        if (!d.$b && d.Nd) {
5247
            for (var e = 0, f = 0; e < d.length; e++) d[e].Pa ? d[e].c.src = l : (e != f && (d[f] = d[e]), f++);
5248
            d.length = f;
5249
            d.Nd = m;
5250
            0 == f && (delete Zi[a][b][c], Zi[a][b].Q--, 0 == Zi[a][b].Q && (delete Zi[a][b], Zi[a].Q--), 0 == Zi[a].Q && delete Zi[a])
0 ignored issues
show
Best Practice introduced by
Comparing 0 to f using the == operator is not safe. Consider using === instead.
Loading history...
Best Practice introduced by
Comparing 0 to Zi.a.b.Q using the == operator is not safe. Consider using === instead.
Loading history...
Best Practice introduced by
Comparing 0 to Zi.a.Q using the == operator is not safe. Consider using === instead.
Loading history...
5251
        }
5252
    }
5253
5254
    function ej(a, b, c) {
5255
        var d = Zi;
5256
        return b in d && (d = d[b], c in d && (d = d[c], a = ja(a), d[a])) ? d[a] : l
5257
    }
5258
5259
    function hj(a, b, c, d, e) {
5260
        var f = 1,
5261
            b = ja(b);
5262
        if (a[b]) {
5263
            a.ba--;
5264
            a = a[b];
5265
            a.$b ? a.$b++ : a.$b = 1;
5266
            try {
5267
                for (var g = a.length, i = 0; i < g; i++) {
5268
                    var n = a[i];
5269
                    n && !n.Pa && (f &= ij(n, e) !== m)
5270
                }
5271
            } finally {
5272
                a.$b--, gj(c, d, b, a)
5273
            }
5274
        }
5275
        return Boolean(f)
5276
    }
5277
5278
    function ij(a, b) {
5279
        a.od && fj(a.key);
5280
        return a.handleEvent(b)
5281
    }
5282
5283
    function cj(a, b) {
5284
        if (!Yi[a]) return k;
5285
        var c = Yi[a],
5286
            d = c.type,
5287
            e = Zi;
5288
        if (!(d in e)) return k;
5289
        var e = e[d],
5290
            f, g;
5291
        if (!Si) {
5292
            f = b || s("window.event");
5293
            var i = k in e,
5294
                n = m in e;
5295
            if (i) {
5296
                if (0 > f.keyCode || f.returnValue != j) return k;
5297
                a: {
5298
                    var r = m;
5299
                    if (0 == f.keyCode) try {
0 ignored issues
show
Best Practice introduced by
Comparing 0 to f.keyCode using the == operator is not safe. Consider using === instead.
Loading history...
5300
                        f.keyCode = -1;
5301
                        break a
5302
                    } catch (y) {
5303
                        r = k
5304
                    }
5305
                    if (r || f.returnValue == j) f.returnValue = k
5306
                }
5307
            }
5308
            r = new Vi;
5309
            r.init(f, this);
5310
            f = k;
5311
            try {
5312
                if (i) {
5313
                    for (var D = [], G = r.currentTarget; G; G = G.parentNode) D.push(G);
5314
                    g = e[k];
5315
                    g.ba = g.Q;
5316
                    for (var H = D.length - 1; !r.Ua && 0 <= H && g.ba; H--) r.currentTarget = D[H], f &= hj(g, D[H], d, k, r);
5317
                    if (n) {
5318
                        g = e[m];
5319
                        g.ba = g.Q;
5320
                        for (H = 0; !r.Ua && H < D.length && g.ba; H++) r.currentTarget = D[H], f &= hj(g, D[H], d, m, r)
5321
                    }
5322
                } else f = ij(c, r)
5323
            } finally {
5324
                D && (D.length = 0)
5325
            }
5326
            return f
5327
        }
5328
        d = new Vi(b, this);
5329
        return f = ij(c, d)
5330
    };
5331
5332
    function jj() {}
5333
    v(jj, eg);
5334
    p = jj.prototype;
5335
    p.Ld = k;
5336
    p.ec = l;
5337
    p.Kc = function (a) {
5338
        this.ec = a
5339
    };
5340
    p.addEventListener = function (a, b, c, d) {
5341
        bj(this, a, b, c, d)
5342
    };
5343
    p.removeEventListener = function (a, b, c, d) {
5344
        dj(this, a, b, c, d)
5345
    };
5346
    p.dispatchEvent = function (a) {
5347
        var b = a.type || a,
5348
            c = Zi;
5349
        if (b in c) {
5350
            if (ga(a)) a = new Ui(a, this);
5351
            else if (a instanceof Ui) a.target = a.target || this;
5352
            else {
5353
                var d = a,
5354
                    a = new Ui(b, this);
5355
                sb(a, d)
5356
            }
5357
            var d = 1,
5358
                e, c = c[b],
5359
                b = k in c,
5360
                f;
5361
            if (b) {
5362
                e = [];
5363
                for (f = this; f; f = f.ec) e.push(f);
5364
                f = c[k];
5365
                f.ba = f.Q;
5366
                for (var g = e.length - 1; !a.Ua && 0 <= g && f.ba; g--) a.currentTarget = e[g], d &= hj(f, e[g], a.type, k, a) && a.fc != m
5367
            }
5368
            if (m in c)
5369
                if (f = c[m], f.ba = f.Q, b)
5370
                    for (g = 0; !a.Ua && g < e.length && f.ba; g++) a.currentTarget = e[g], d &= hj(f, e[g], a.type, m, a) && a.fc != m;
5371
                else
5372
                    for (e = this; !a.Ua && e &&
5373
                        f.ba; e = e.ec) a.currentTarget = e, d &= hj(f, e, a.type, m, a) && a.fc != m;
5374
            a = Boolean(d)
5375
        } else a = k;
5376
        return a
5377
    };
5378
    p.T = function () {
5379
        jj.J.T.call(this);
5380
        var a, b = 0,
5381
            c = a == l;
5382
        a = !!a;
5383
        if (this == l) mb($i, function (d) {
5384
            for (var e = d.length - 1; 0 <= e; e--) {
5385
                var f = d[e];
5386
                if (c || a == f.capture) fj(f.key), b++
5387
            }
5388
        });
5389
        else {
5390
            var d = ja(this);
5391
            if ($i[d])
5392
                for (var d = $i[d], e = d.length - 1; 0 <= e; e--) {
5393
                    var f = d[e];
5394
                    if (c || a == f.capture) fj(f.key), b++
5395
                }
5396
        }
5397
        this.ec = l
5398
    };
5399
5400
    function kj(a) {
5401
        this.c = a;
5402
        this.b = []
5403
    }
5404
    v(kj, eg);
5405
    var lj = [];
5406
5407
    function mj(a, b, c, d) {
5408
        ea(c) || (lj[0] = c, c = lj);
5409
        for (var e = 0; e < c.length; e++) {
5410
            var f = bj(b, c[e], d || a, m, a.c || a);
5411
            a.b.push(f)
5412
        }
5413
    }
5414
5415
    function nj(a, b, c, d, e, f) {
5416
        if (ea(c))
5417
            for (var g = 0; g < c.length; g++) nj(a, b, c[g], d, e, f);
5418
        else {
5419
            a: {
5420
                d = d || a;f = f || a.c || a;e = !!e;
5421
                if (b = ej(b, c, e))
5422
                    for (c = 0; c < b.length; c++)
5423
                        if (!b[c].Pa && b[c].eb == d && b[c].capture == e && b[c].Tb == f) {
5424
                            b = b[c];
5425
                            break a
5426
                        } b = l
5427
            }
5428
            b && (b = b.key, fj(b), Xa(a.b, b))
5429
        }
5430
    }
5431
    kj.prototype.T = function () {
5432
        kj.J.T.call(this);
5433
        w(this.b, fj);
5434
        this.b.length = 0
5435
    };
5436
    kj.prototype.handleEvent = function () {
5437
        h(Error("EventHandler.handleEvent not implemented"))
5438
    };
5439
    E || Eb && Sb("1.9.3");
5440
    var oj = q.window;
5441
5442
    function pj(a, b) {
5443
        ha(a) ? b && (a = t(a, b)) : a && "function" == typeof a.handleEvent ? a = t(a.handleEvent, a) : h(Error("Invalid listener argument"));
5444
        oj.setTimeout(a, 10)
5445
    };
5446
    new gg;
0 ignored issues
show
Unused Code Best Practice introduced by
The object created with new gg() is not used but discarded. Consider invoking another function instead of a constructor if you are doing this purely for side effects.
Loading history...
5447
5448
    function qj(a, b) {
5449
        this.b = a;
5450
        var c = b || l;
5451
        if (!c) {
5452
            var d = [],
5453
                e = {};
5454
            this.b.replace(rj, function (a, b) {
5455
                b in e || (e[b] = k, d.push(b))
5456
            });
5457
            c = d
5458
        }
5459
        c = sa("__%s__", "(" + c.join("|") + ")");
5460
        this.c = RegExp(c, "g")
5461
    }
5462
    var rj = /__([a-z]+(?:_[a-z]+)*)__/g;
5463
5464
    function sj(a, b) {
5465
        var c = tj(F(a));
5466
        return new qj(c, b)
5467
    }
5468
5469
    function tj(a) {
5470
        a = a.innerHTML;
5471
        a = a.replace(/^\s*(<\!--\s*)?/, "");
5472
        return a = a.replace(/(\s*--\>)?\s*$/, "")
5473
    }
5474
    qj.prototype.da = function (a, b, c) {
5475
        var d = t(function (d, f) {
5476
            b && (f = b(f));
5477
            return c ? a[f] || "" : za(a[f] || "")
5478
        }, this);
5479
        return this.b.replace(this.c, d)
5480
    };
5481
5482
    function uj() {
5483
        this.b = {}
5484
    }
5485
    v(uj, lh);
5486
    ba(uj);
5487
    p = uj.prototype;
5488
    p.O = "scroller";
5489
    p.register = function () {
5490
        Z(this, "mouseenter", this.Zg);
5491
        Z(this, "mouseleave", this.$g)
5492
    };
5493
    p.Zg = function (a) {
5494
        var b = R(a, "mousewheel", t(this.Vg, this, a));
5495
        this.setData(a, "scroller-mousewheel-listener", b);
5496
        b = R(a, "scroll", t(this.Wg, this, a));
5497
        this.setData(a, "scroller-scroll-listener", b)
5498
    };
5499
    p.$g = function (a) {
5500
        se(this.getData(a, "scroller-mousewheel-listener") || "");
5501
        this.setData(a, "scroller-mousewheel-listener", "");
5502
        se(this.getData(a, "scroller-scroll-listener") || "");
5503
        this.setData(a, "scroller-scroll-listener", "")
5504
    };
5505
    p.Vg = function (a, b) {
5506
        b.preventDefault();
5507
        b.wheelDeltaY && (a.scrollTop = a.scrollTop + b.wheelDeltaY)
5508
    };
5509
    p.Wg = function (a) {
5510
        this.ia(a, "scroll-action")
5511
    };
5512
5513
    function vj(a) {
5514
        if (!a.length) return 0;
5515
        var b = a[0],
5516
            c = b.offsetHeight;
5517
        1 < a.length && (c = a[1].offsetTop - b.offsetTop);
5518
        return c
5519
    }
5520
    p.zd = function (a, b) {
5521
        if (a && b) {
5522
            var c = I(Y(this, "scroll-unit"), a),
5523
                c = Pa(c, b);
5524
            0 <= c && this.Ca(a, c)
5525
        }
5526
    };
5527
    p.Ca = function (a, b) {
5528
        if (a && !(isNaN(b) || 0 > b)) {
5529
            var c = I(Y(this, "scroll-unit"), a);
5530
            if (!(0 >= c.length)) {
5531
                b >= c.length && (b = c.length - 1);
5532
                var d = vj(c),
5533
                    e = a.offsetHeight,
5534
                    f = Math.max(Math.floor(a.scrollTop / d), 0);
5535
                b > f - 1 && (d = Math.floor(e / d), e = c.length, b + d > e && (b = e - d + 1));
5536
                0 > b && (b = 0);
5537
                wj(this, a, c[b].offsetTop)
5538
            }
5539
        }
5540
    };
5541
5542
    function wj(a, b, c) {
5543
        b && !isNaN(c) && (0 > c && (c = 0), b.scrollTop = c, a.setData(b, "scroller-offset", c + ""))
5544
    }
5545
    p.Bd = function (a) {
5546
        var b = this.getData(a, "scroller-offset"),
5547
            b = parseInt(b, 10) || 0;
5548
        wj(this, a, b)
5549
    };
5550
5551
    function xj() {
5552
        this.b = {}
5553
    }
5554
    v(xj, lh);
5555
    ba(xj);
5556
    p = xj.prototype;
5557
    p.O = "slider";
5558
    p.register = function () {
5559
        Z(this, "click", this.Jg, "num");
5560
        Z(this, "click", this.Kg, "prev");
5561
        Z(this, "click", this.Ig, "next");
5562
        Z(this, "mouseover", this.Pg, "ajax-trigger")
5563
    };
5564
    p.Jg = function (a) {
5565
        if (a) {
5566
            var b = mh(this, a),
5567
                a = parseInt(this.getData(a, "slider-num"), 10);
5568
            if (isNaN(a) || 0 > a) a = 0;
5569
            this.ic(b, a)
5570
        }
5571
    };
5572
    p.Ig = function (a, b, c) {
5573
        if (a) {
5574
            a = mh(this, a);
5575
            if (B(a, Y(this, "fluid"))) {
5576
                if (a) {
5577
                    var d = this.getBodyElement(a),
5578
                        b = yj(this, d),
5579
                        e = zj(this, b),
5580
                        f = 0 < e.length,
5581
                        b = parseInt(this.getData(a, "slider-offset"), 10);
5582
                    if (isNaN(b) || 0 < b) b = 0;
5583
                    var g = Aj(this, a);
5584
                    f ? (d = Bj(this, a, e), g = Math.floor(g / d), b = Math.abs(Math.floor(b / d)) - 1, this.Ca(a, (0 <= b ? b : 0) + g)) : (e = Cj(this, a) ? d.scrollHeight : d.scrollWidth, this.Rc && 8 > document.documentMode ? Math.abs(b - g) < e && (b -= g) : d.offsetWidth < e && (b -= g), Dj(this, a, b))
5585
                }
5586
            } else if (a) {
5587
                b = parseInt(this.getData(a, "slider-current"),
5588
                    10);
5589
                if (isNaN(b) || 0 > b) b = 0;
5590
                d = parseInt(this.getData(a, "slider-slides"), 10);
5591
                if (isNaN(d) || 0 > d) d = 0;
5592
                b = Math.min(b + 1, d - 1);
5593
                this.ic(a, b)
5594
            }
5595
            c.preventDefault()
5596
        }
5597
    };
5598
    p.Kg = function (a, b, c) {
5599
        if (a) {
5600
            a = mh(this, a);
5601
            if (B(a, Y(this, "fluid"))) {
5602
                if (a) {
5603
                    var b = this.getBodyElement(a),
5604
                        b = yj(this, b),
5605
                        d = zj(this, b),
5606
                        e = 0 < d.length,
5607
                        b = parseInt(this.getData(a, "slider-offset"), 10);
5608
                    if (isNaN(b) || 0 < b) b = 0;
5609
                    var f = Aj(this, a);
5610
                    e ? (d = Bj(this, a, d), f = Math.floor(f / d), b = Math.abs(Math.floor(b / d)) - 1, this.Ca(a, (0 <= b ? b : 0) - f)) : (b += f, 0 < b && (b = 0), Dj(this, a, b))
5611
                }
5612
            } else if (a) {
5613
                b = parseInt(this.getData(a, "slider-current"), 10);
5614
                if (isNaN(b) || 0 > b) b = 0;
5615
                b = Math.max(b - 1, 0);
5616
                this.ic(a, b)
5617
            }
5618
            c.preventDefault()
5619
        }
5620
    };
5621
    p.Pg = function (a) {
5622
        if (a = mh(this, a)) {
5623
            var b = Y(this, "ajax-trigger"),
5624
                c = I(b, a);
5625
            w(c, function (a) {
5626
                z(a, b)
5627
            });
5628
            Ej(this, a)
5629
        }
5630
    };
5631
5632
    function Ej(a, b, c) {
5633
        var d = a.getData(b, "slider-ajax-url");
5634
        d && !a.getData(b, "slider-loaded") && (a.setData(b, "slider-loaded", "true"), X(d, {
5635
            B: a,
5636
            j: function (a, d) {
5637
                var g = jc(d.slides_html),
5638
                    i = K(Y(this, "slides"), b);
5639
                i && g && kc(i, g);
5640
                c && c()
5641
            }
5642
        }))
5643
    }
5644
5645
    function Cj(a, b) {
5646
        return B(b, Y(a, "vertical"))
5647
    }
5648
5649
    function Aj(a, b) {
5650
        var c = a.getBodyElement(b);
5651
        return Cj(a, b) ? c.offsetHeight : c.offsetWidth
5652
    }
5653
    p.ic = function (a, b) {
5654
        if (a)
5655
            if (this.getData(a, "slider-ajax-url") && !this.getData(a, "slider-loaded")) Ej(this, a, t(this.ic, this, a, b));
5656
            else {
5657
                var c = J(l, Y(this, "num"), a),
5658
                    d = Y(this, "num-current"),
5659
                    e;
5660
                w(c, function (a) {
5661
                    e = this.getData(a, "slider-num") == b;
5662
                    C(a, d, e);
5663
                    C(a, "yt-uix-pager-selected", e);
5664
                    B(a, "yt-uix-button") && C(a, "yt-uix-button-toggled", e)
5665
                }, this);
5666
                var c = K(Y(this, "slides"), a),
5667
                    f = Cj(this, a);
5668
                if (c) {
5669
                    var g = yj(this, c);
5670
                    if (g) {
5671
                        var i = -1 * b * (f ? g.offsetHeight : g.offsetWidth) + "px";
5672
                        f ? c.style.top = i : af(g) ? c.style.right = i : c.style.left =
5673
                            i
5674
                    }
5675
                }
5676
                if (c = K("yt-uix-pager-current-page", a)) c.innerHTML = b + 1;
5677
                this.setData(a, "slider-current", b + "");
5678
                a && (c = parseInt(this.getData(a, "slider-current"), 10), f = parseInt(this.getData(a, "slider-slides"), 10), g = I(Y(this, "next"), a), i = I(Y(this, "prev"), a), w(g, function (a) {
5679
                    a.disabled = m
5680
                }), w(i, function (a) {
5681
                    a.disabled = m
5682
                }), 0 == c && w(i, function (a) {
0 ignored issues
show
Best Practice introduced by
Comparing 0 to c using the == operator is not safe. Consider using === instead.
Loading history...
5683
                    a.disabled = k
5684
                }), c == f - 1 && w(g, function (a) {
5685
                    a.disabled = k
5686
                }))
5687
            }
5688
    };
5689
    p.zd = function (a, b) {
5690
        if (a) {
5691
            var c = this.getBodyElement(a),
5692
                c = yj(this, c),
5693
                c = zj(this, c),
5694
                c = Pa(c, b);
5695
            0 <= c && this.Ca(a, c)
5696
        }
5697
    };
5698
    p.Ca = function (a, b) {
5699
        if (a) {
5700
            var c = this.getBodyElement(a),
5701
                c = yj(this, c),
5702
                d = zj(this, c);
5703
            if (!(0 >= d.length)) {
5704
                b >= d.length && (b = d.length - 1);
5705
                var e = parseInt(this.getData(a, "slider-offset"), 10);
5706
                if (isNaN(e) || 0 < e) e = 0;
5707
                var c = Aj(this, a),
5708
                    f = Bj(this, a, d),
5709
                    e = Math.abs(Math.floor(e / f)) - 1;
5710
                if (b > (0 <= e ? e : 0)) {
5711
                    var e = Math.floor(c / f),
5712
                        g = d.length;
5713
                    b + e > g && (b = g - e + 1)
5714
                }
5715
                0 > b && (b = 0);
5716
                d = d[b];
5717
                e = af(a) ? d.offsetLeft - c + f + 10 : -1 * (d.offsetLeft - 10);
5718
                Dj(this, a, e)
5719
            }
5720
        }
5721
    };
5722
5723
    function Dj(a, b, c) {
5724
        if (b) {
5725
            isNaN(c) && (c = 0);
5726
            var d = a.getBodyElement(b),
5727
                d = yj(a, d),
5728
                e = J(l, Y(a, "title"), d),
5729
                f = af(b) ? "right" : "left";
5730
            d.style[f] = c + "px";
5731
            w(e, function (a) {
5732
                a.style[f] = -1 * c + "px"
5733
            });
5734
            a.setData(b, "slider-offset", c + "")
5735
        }
5736
    }
5737
    p.Bd = function (a) {
5738
        var b = this.getData(a, "slider-offset"),
5739
            b = parseInt(b, 10) || 0;
5740
        Dj(this, a, b)
5741
    };
5742
    p.getBodyElement = function (a) {
5743
        return K(Y(this, "body"), a)
5744
    };
5745
5746
    function yj(a, b) {
5747
        return K(Y(a, "slide"), b)
5748
    }
5749
5750
    function zj(a, b) {
5751
        return J(l, Y(a, "slide-unit"), b)
5752
    }
5753
5754
    function Bj(a, b, c) {
5755
        if (0 == c.length) return 0;
0 ignored issues
show
Best Practice introduced by
Comparing 0 to c.length using the == operator is not safe. Consider using === instead.
Loading history...
5756
        var a = Cj(a, b),
5757
            b = c[0],
5758
            d = a ? b.offsetHeight : b.offsetWidth;
5759
        1 < c.length && (c = c[1], d = a ? c.offsetTop - b.offsetHeight : af(b) ? b.offsetLeft - c.offsetLeft : c.offsetLeft - b.offsetLeft);
5760
        return d
5761
    };
5762
5763
    function Fj(a) {
5764
        this.D = a;
5765
        var b, c;
5766
        Gj() ? (b = F("watch7-playlist-tray"), c = F("watch7-playlist-bar-title"), a = F("watch7-playlist-tray-item-template")) : (b = F("playlist-bar-tray"), c = F("playlist-bar-title"), a = F("playlist-bar-template"));
5767
        this.b = b;
5768
        this.i = c;
5769
        this.ka = he("ol", l, this.b);
5770
        this.c = F("playlist-bar-extras-menu");
5771
        b = ob(Hj);
5772
        this.e = sj(a, b);
5773
        a = Q(a, "video-thumb-url") || "";
5774
        this.f = new qj(a, b);
5775
        T(this.b, "click", t(function () {
5776
            N(t(this.xc, this), 0)
5777
        }, this), "playlist-bar-tray-button")
5778
    }
5779
    var Hj = {
5780
        classes: "classes",
5781
        list_position: "index",
5782
        video_encrypted_id: "id",
5783
        video_title: "title",
5784
        video_url: "url",
5785
        video_display_name: "display_name",
5786
        video_thumb_url: "thumb_url"
5787
    };
5788
    Fj.prototype.da = function (a, b, c, d, e, f) {
5789
        var g = d.mb;
5790
        g && (this.i.innerHTML = g, this.c && (this.c.innerHTML = d.lb));
5791
        var i = [];
5792
        w(a, function (a, b) {
5793
            var e = b + f == c,
5794
                g = d.getVideoData(a);
5795
            g.id = a;
5796
            g.url = Zh(d, b);
5797
            i.push(Ij(this, g, b + 1 + f, e))
5798
        }, this);
5799
        this.ka.innerHTML = i.join("");
5800
        e ? this.scroll(3) : this.scroll(5);
5801
        a = I("item-count", this.D);
5802
        w(a, function (a) {
5803
            a.innerHTML = b
5804
        });
5805
        a = I("playing-index", this.D);
5806
        w(a, function (a) {
5807
            a.innerHTML = c + 1
5808
        })
5809
    };
5810
5811
    function Ij(a, b, c, d) {
5812
        function e(a) {
5813
            return Hj[a]
5814
        }
5815
        b.index = c;
5816
        b.thumb_url = a.f.da(b, e);
5817
        c = [];
5818
        b.unviewable ? (c.push("playlist-bar-item-unviewable"), b.thumb_url = "//s.ytimg.com/yt/img/meh_mini-vfl0Ugnu3.png") : b.title || c.push("loading");
5819
        d && c.push("playlist-bar-item-playing");
5820
        b.classes = c.join(" ");
5821
        return a.e.da(b, e)
5822
    }
5823
    Fj.prototype.xc = function () {
5824
        var a;
5825
        if (Gj()) {
5826
            a = uj.getInstance();
5827
            var b = this.b;
5828
            if (b)
5829
                if (a = I(Y(a, "scroll-unit"), b), 0 >= a.length) a = [];
5830
                else {
5831
                    var c = b.scrollTop,
5832
                        d = vj(a),
5833
                        e = b.offsetHeight,
5834
                        b = Math.max(Math.floor(c / d), 0),
5835
                        c = Math.min(Math.ceil((c + e) / d), a.length);
5836
                    a = bb(a, b, c)
5837
                }
5838
            else a = []
5839
        } else if (c = xj.getInstance(), d = this.b, a = c.getBodyElement(d), a = yj(c, a), a = zj(c, a), a.length) {
5840
            b = parseInt(c.getData(d, "slider-offset"), 10);
5841
            if (isNaN(b) || 0 < b) b = 0;
5842
            e = Aj(c, d);
5843
            d = Bj(c, d, a);
5844
            c = Math.floor(-b / d);
5845
            c = Math.max(0, c);
5846
            d = Math.ceil((-b + e) / d);
5847
            d = Math.min(d,
5848
                a.length);
5849
            a = bb(Za(a), c, d)
5850
        } else a = [];
5851
        w(a, function (a) {
5852
            Oi(a)
5853
        })
5854
    };
5855
    Fj.prototype.scroll = function (a, b) {
5856
        var c;
5857
        c = Gj() ? uj.getInstance() : xj.getInstance();
5858
        switch (a) {
5859
        case 3:
5860
            var d = he("li", "playlist-bar-item-playing", this.ka);
5861
            d ? c.zd(this.b, d) : c.Ca(this.b, 0);
5862
            break;
5863
        case 4:
5864
            b && c.Ca(this.b, b);
5865
            break;
5866
        case 5:
5867
            c.Bd(this.b)
5868
        }
5869
        this.xc()
5870
    };
5871
    Fj.prototype.dc = function (a) {
5872
        var b = 0,
5873
            c = t(function () {
5874
                var d = J("li", "playlist-bar-item", this.ka),
5875
                    e = !(b % 2);
5876
                w(a, function (a) {
5877
                    C(d[a], "playlist-bar-item-highlight", e)
5878
                });
5879
                b++;
5880
                6 > b && N(c, 150)
5881
            }, this);
5882
        c()
5883
    };
5884
5885
    function Gj() {
5886
        return F("watch7-playlist-container") != l
5887
    };
5888
5889
    function Jj(a, b) {
5890
        this.D = a;
5891
        this.L = F("page");
5892
        this.ja = new Fj(this.D);
5893
        this.e = b;
5894
        this.vc = this.n = m;
5895
        this.i = F("playlist-bar-bar");
5896
        R(this.i, "click", t(this.Se, this));
5897
        this.oa = F("playlist-bar-play-button");
5898
        R(this.oa, "click", t(this.Ye, this));
5899
        this.Va = F("playlist-bar-prev-button") || F("watch7-playlist-bar-prev-button");
5900
        this.H = F("playlist-bar-next-button") || F("watch7-playlist-bar-next-button");
5901
        R(this.Va, "click", t(this.Ze, this));
5902
        R(this.H, "click", t(this.We, this));
5903
        this.c = F("playlist-bar-autoplay-button");
5904
        R(this.c, "click",
5905
            t(this.Re, this));
5906
        this.M = F("playlist-bar-shuffle-button") || F("watch7-playlist-bar-shuffle-button");
5907
        R(this.M, "click", t(this.$e, this));
5908
        this.U = F("playlist-bar-toggle-button") || F("watch7-playlist-bar-toggle-button");
5909
        R(this.U, "click", t(this.af, this));
5910
        this.f = F("playlist-bar-options-menu");
5911
        T(this.f, "click", t(this.Xe, this), "yt-uix-button-menu-item");
5912
        this.ka = F("playlist-bar-tray-content");
5913
        T(this.ka, "click", t(this.Te, this), "delete");
5914
        T(this.ka, "click", t(this.Ue, this), "load-lists");
5915
        T(this.ka, "click", t(this.Ve,
5916
            this), "load-more");
5917
        this.ca = sj(F("playlist-bar-next-up-template") || F("watch7-playlist-bar-next-up-template"), ["video_encrypted_id"]);
5918
        Kj(this, b, function () {
5919
            U("watch7-playlist-tray");
5920
            V("watch7-playlist-loading")
5921
        });
5922
        this.g.Z() ? Lj(this) : A(this.D, ["min", "max"], "hid");
5923
        if (Q(this.D, "masked")) {
5924
            var c = document.createElement("iframe");
5925
            c.id = "playlist-bar-mask";
5926
            c.frameBorder = "0";
5927
            c.src = 'javascript:""';
5928
            this.D.insertBefore(c, this.D.firstChild)
5929
        }
5930
    }
5931
5932
    function Kj(a, b, c, d) {
5933
        if (a.g && (a.g.ea.clear("LIST_UPDATED"), a.e.isEqual(b) || d)) b.Fc(a.e), a.e = b;
5934
        a.g = b;
5935
        a.g.ea.ra("LIST_UPDATED", a.bb, a);
5936
        a.g.load(c);
5937
        a.bb(k)
5938
    }
5939
    p = Jj.prototype;
5940
    p.Aa = function () {
5941
        return this.g.Aa()
5942
    };
5943
    p.Qa = function () {
5944
        return this.g.Qa()
5945
    };
5946
    p.ya = function () {
5947
        return this.g.ya()
5948
    };
5949
5950
    function Mj(a) {
5951
        return a.ya() && B(a.D, "autoplay-on")
5952
    }
5953
5954
    function Nj(a, b) {
5955
        b ? A(a.D, "autoplay-off", "autoplay-on") : A(a.D, "autoplay-on", "autoplay-off");
5956
        He.getInstance();
5957
        Oe(Nh.ug, !b);
5958
        Pe();
5959
        Pd("LIST_AUTO_PLAY_ON", b)
5960
    }
5961
    p.Y = function () {
5962
        return B(this.D, "shuffle-on")
5963
    };
5964
    p.vb = function () {
5965
        return B(this.D, "loading")
5966
    };
5967
5968
    function Lj(a) {
5969
        Ne(He.getInstance(), Nh.Zd) ? Oj(a) : Pj(a)
5970
    }
5971
5972
    function Oj(a) {
5973
        A(a.D, ["hid", "max"], "min");
5974
        Qj(a, k)
5975
    }
5976
5977
    function Pj(a) {
5978
        A(a.D, ["hid", "min"], "max");
5979
        Qj(a, k);
5980
        N(t(a.ja.xc, a.ja), 300)
5981
    }
5982
5983
    function Rj(a) {
5984
        var b;
5985
        B(a.D, "min") ? (Pj(a), b = m) : (Oj(a), b = k);
5986
        Zg("bf", "toggleBar=1&collapsed=" + b, j);
5987
        He.getInstance();
5988
        Oe(Nh.Zd, b);
5989
        Pe();
5990
        Sj(a, k)
5991
    }
5992
    p.Se = function (a) {
5993
        Bc(a.target, function (a) {
5994
            a = a.tagName && a.tagName.toLowerCase();
5995
            return "a" == a || "button" == a
5996
        }, k) || Rj(this)
5997
    };
5998
    p.Xe = function (a) {
5999
        a.stopPropagation();
6000
        switch (Q(a.currentTarget, "action")) {
6001
        case "clear":
6002
            this.clear();
6003
            break;
6004
        case "load-lists":
6005
            Tj(this);
6006
            break;
6007
        case "show-active":
6008
            this.e && Kj(this, this.e);
6009
            break;
6010
        case "save":
6011
            this.vb() || (Pj(this), Uj(this, {
6012
                o: {
6013
                    action_get_save_playlist_form: 1
6014
                },
6015
                j: function (a, c) {
6016
                    A(this.D, "lists", "save");
6017
                    var d = c.html;
6018
                    this.Gd = F("playlist-bar-save");
6019
                    this.Gd.innerHTML = d;
6020
                    d = F("playlist-bar-title-edit");
6021
                    d.focus();
6022
                    d.select();
6023
                    R(F("playlist-bar-save-cancel"), "click", t(this.Vf, this));
6024
                    R(F("playlist-bar-save-form"),
6025
                        "submit", t(this.Wf, this))
6026
                }
6027
            }))
6028
        }
6029
    };
6030
    p.af = function () {
6031
        ib(this.L, "watch-playlist-collapsed");
6032
        Rj(this)
6033
    };
6034
    p.Re = function () {
6035
        var a = !Mj(this);
6036
        Nj(this, a);
6037
        Qj(this)
6038
    };
6039
    p.$e = function () {
6040
        var a = !this.Y(),
6041
            b = 0;
6042
        Pd("SHUFFLE_ENABLED", a);
6043
        a && Pd("SHUFFLE_VALUE", Math.max(1, 1E6 * Math.random()));
6044
        a ? (A(this.D, "shuffle-off", "shuffle-on"), b = Ph()) : A(this.D, "shuffle-on", "shuffle-off");
6045
        this.g.ma = b;
6046
        this.bb();
6047
        this.ja.scroll(3)
6048
    };
6049
    p.Ye = function () {
6050
        Vj(this, k, "bf_play")
6051
    };
6052
    p.Ze = function () {
6053
        Wj(this, "bf_prev")
6054
    };
6055
    p.We = function () {
6056
        Vj(this, k, "bf_next")
6057
    };
6058
    p.Te = function (a) {
6059
        a.preventDefault();
6060
        var b = J("li", "playlist-bar-item", this.ka),
6061
            a = Ac(a.currentTarget, "li", "playlist-bar-item"),
6062
            b = Pa(b, a);
6063
        this.g.Bc() && (a = this.g.Aa(), Xj(this), Zg("bf", "copyFrom=1&action=delete&list_type=" + a, j));
6064
        var c = this.g.Aa(),
6065
            d = Uh(this.g)[b];
6066
        this.g.removeItem(b);
6067
        Yj(this, O("PLAYLIST_VIDEO_DELETED"), m, m, m, function () {
6068
            this.g.Ic([d]);
6069
            this.bb();
6070
            var a = this.g.Z() - 1;
6071
            this.ja.scroll(4, a);
6072
            this.ja.dc([a]);
6073
            Zg("bf", "undo_delete=1&list_type=" + c, j)
6074
        });
6075
        Zg("bf", "delete=1&list_type=" + c, j)
6076
    };
6077
    p.uf = function (a) {
6078
        var b = a.sourceIndex,
6079
            a = a.targetIndex;
6080
        if (!(b == a || 0 > b || 0 > a)) {
6081
            if (this.g.Bc()) {
6082
                var c = this.g.Aa();
6083
                Xj(this);
6084
                Zg("bf", "copyFrom=1&action=drag&list_type=" + c, j)
6085
            }
6086
            c = this.g;
6087
            if (!c.Y() && c.$a()) {
6088
                var d = Uh(c);
6089
                d[b] && d[a] && (c.vd(b, a), d = c.b, d == b ? c.b = a : d > b && d <= a ? c.b -= 1 : d < b && d >= a && (c.b += 1));
6090
                Th(c)
6091
            }
6092
            b = Df({
6093
                moved_item_delta: Math.abs(a - b),
6094
                list_type: this.g.Aa()
6095
            });
6096
            Zg("bf", b, j)
6097
        }
6098
    };
6099
6100
    function Wj(a, b) {
6101
        var c;
6102
        c = a.g;
6103
        var d = c.fa() - 1;
6104
        0 > d && (d = c.Z() - 1);
6105
        if (c = Zh(c, d, m, b)) Zj(a, c, b), Gh(c)
6106
    }
6107
6108
    function Vj(a, b, c) {
6109
        b || Zg("bf", "autoplay=1&playcount=" + a.g.Za, j);
6110
        var d = Yh(a.g, b, c);
6111
        d && (Zj(a, d, c, !b), Gh(d))
6112
    }
6113
6114
    function $j(a, b) {
6115
        if (!(1 > b || 5 < b)) {
6116
            Zg("bf", "delayedautoplay=" + b, j);
6117
            a.c && Bh(Ah.getInstance(), a.c);
6118
            var c = O("AUTOPLAY_WARNING" + b);
6119
            c && Yj(a, c, m, k, F("watch7-playlist-container") != l)
6120
        }
6121
    }
6122
    p.clear = function () {
6123
        var a = this.g.Ba();
6124
        this.g.clear();
6125
        Yj(this, O("LIST_CLEARED"), m, m, m, function () {
6126
            this.g.Ic(a);
6127
            this.bb();
6128
            Zg("bf", "undo_clear=1&list_type=" + b, j)
6129
        });
6130
        var b = this.g.Aa();
6131
        Zg("bf", "clear=1&list_type=" + b, j)
6132
    };
6133
    p.Jc = function (a) {
6134
        return this.g.Jc(a)
6135
    };
6136
    p.bb = function (a) {
6137
        var b = this.g.vb(),
6138
            c = !b && !!this.g.pa,
6139
            d = !this.g.Z(),
6140
            e = this.g.ya();
6141
        this.f && (e ? A(this.f, "passive", "active") : A(this.f, "active", "passive"));
6142
        var f = [],
6143
            g = [];
6144
        (e ? g : f).push("active");
6145
        (!e ? g : f).push("passive");
6146
        (b ? g : f).push("loading");
6147
        (c ? g : f).push("editable");
6148
        (d ? g : f).push("empty");
6149
        A(this.D, f, g);
6150
        if (!b) {
6151
            b = this.g;
6152
            b.c = {};
6153
            try {
6154
                var i = Uh(this.g),
6155
                    n = this.g.Gb,
6156
                    r = this.g.fa();
6157
                this.ja.da(i, n, r, this.g, !!a, this.g.Fb);
6158
                this.vc = m
6159
            } finally {
6160
                b.c = l
6161
            }
6162
        }
6163
        a = this.g.Wa;
6164
        i = this.g.Ja;
6165
        a ? Yj(this, a, k, m) : i && Yj(this, i, m, k);
6166
        a = this.g;
6167
        a.Ja =
6168
            l;
6169
        a.Wa = l;
6170
        Qj(this);
6171
        this.g.$a() && this.g.Z() && !this.n && (this.n = k, Ug((L("DRAGDROP_BINARY_URL") || "") + "", t(function () {
6172
            R(this.ka, "mouseover", t(function () {
6173
                this.vc || (this.vc = k, this.g.$a() && !this.g.Y() && s("yt.www.lists.dragdrop").createDraggables())
6174
            }, this));
6175
            var a = s("yt.www.lists.dragdrop");
6176
            a.init(this.ka, "playlist-bar-item");
6177
            a.subscribe("DROPPED_AT_INDEX", this.uf, this)
6178
        }, this)))
6179
    };
6180
6181
    function Qj(a, b) {
6182
        var c = O("AUTOPLAY_OFF_TOOLTIP");
6183
        Mj(a) && (c = O("AUTOPLAY_ON_TOOLTIP"));
6184
        var d = O("SHUFFLE_OFF_TOOLTIP");
6185
        a.Y() && (d = O("SHUFFLE_ON_TOOLTIP"));
6186
        var e = O("NEXT_VIDEO_NOTHUMB_TOOLTIP");
6187
        if (a.g.ya()) {
6188
            var f = Uh(a.g),
6189
                g = a.g.fa();
6190
            if ((f = (g = f[f.length == g + 1 ? 0 : g + 1]) && a.g.getVideoData(g)) && f.title) e = a.ca.da({
6191
                video_encrypted_id: g
6192
            }), e = a.i ? O("NEXT_VIDEO_TOOLTIP", {
6193
                "{next_video_title}": f.title
6194
            }) + " " + e : '<div class="playlist-bar-next-tip">' + e + " " + O("NEXT_VIDEO_TOOLTIP", {
6195
                "{next_video_title}": f.title
6196
            }) + "</div>"
6197
        }
6198
        f =
6199
            "";
6200
        f = a.i ? B(a.D, "min") ? O("SHOW_PLAYLIST_TOOLTIP") : O("HIDE_PLAYLIST_TOOLTIP") : B(a.L, "watch-playlist-collapsed") ? O("SHOW_PLAYLIST_TOOLTIP") : O("HIDE_PLAYLIST_TOOLTIP");
6201
        g = Ah.getInstance();
6202
        Dh(g, a.H, e);
6203
        a.c && Dh(g, a.c, c);
6204
        Dh(g, a.M, d);
6205
        Dh(g, a.U, f, b)
6206
    }
6207
    p.Ea = l;
6208
    p.Yb = l;
6209
6210
    function Yj(a, b, c, d, e, f) {
6211
        b && (a.b || (a.b = F("playlist-bar-notifications"), T(a.b, "click", t(a.Pf, a), "playlist-bar-undo")), a.Yb = f || l, a.Yb && (b += ' <a class="playlist-bar-undo">' + O("UNDO_LINK") + "</a>"), K("yt-alert-content", a.b).innerHTML = b, b = K("yt-alert-icon", a.b), lf(b, !e), C(a.b, "yt-alert-error", !!c), C(a.b, "yt-alert-success", !c), U(a.b), a.Ea && (Ud(a.Ea), a.Ea = l), d && (c = t(function () {
6212
            Sj(this)
6213
        }, a), a.Ea = N(c, 1E4)))
6214
    }
6215
    p.showError = function (a, b) {
6216
        Yj(this, a, k, b)
6217
    };
6218
6219
    function Sj(a, b) {
6220
        var c = !!a.Ea;
6221
        if (!b || !c) V(a.b), a.Yb = l, a.Ea && (Ud(a.Ea), a.Ea = l)
6222
    }
6223
    p.Pf = function (a) {
6224
        a.stopPropagation();
6225
        a.preventDefault();
6226
        a = this.Yb;
6227
        Sj(this);
6228
        a.call(this)
6229
    };
6230
    p.dc = function (a) {
6231
        a = Xh(this.g, a);
6232
        a.length && (this.ja.dc(a), this.ja.scroll(4, a[0]))
6233
    };
6234
    p.Vf = function (a) {
6235
        a.preventDefault();
6236
        z(this.D, "save")
6237
    };
6238
    p.Wf = function (a) {
6239
        a.preventDefault();
6240
        var b = Uh(this.g).join(",");
6241
        b && (Sj(this), a = Qc(a.target), Uj(this, {
6242
            o: {
6243
                action_save_playlist: 1
6244
            },
6245
            method: "POST",
6246
            Ra: a + ("&video_ids=" + b),
6247
            j: function (a, b) {
6248
                this.Gd.innerHTML = "";
6249
                z(this.D, "save");
6250
                var e = hi("PL", b.list_id);
6251
                Kj(this, e, l, k);
6252
                e = O("PLAYLIST_BAR_PLAYLIST_SAVED");
6253
                Yj(this, e, m, k)
6254
            }
6255
        }))
6256
    };
6257
    p.Ue = function (a) {
6258
        a.preventDefault();
6259
        Tj(this)
6260
    };
6261
    p.Ve = function () {
6262
        var a = this.g;
6263
        $h(a, l, {
6264
            load_more: "1"
6265
        });
6266
        Th(a)
6267
    };
6268
6269
    function Tj(a) {
6270
        a.vb() || (Pj(a), Uj(a, {
6271
            o: {
6272
                action_get_playlists: 1
6273
            },
6274
            j: function (a, c) {
6275
                A(this.D, "save", "lists");
6276
                this.eg = F("playlist-bar-lists-back");
6277
                this.cg = R(this.eg, "click", t(this.fg, this));
6278
                var d = c.html;
6279
                this.Bb = F("playlist-bar-lists");
6280
                this.Bb.innerHTML = d;
6281
                Oi(this.Bb);
6282
                this.dg = T(this.Bb, "click", t(this.gg, this), "playlist-bar-playlist-item")
6283
            }
6284
        }))
6285
    }
6286
    p.gg = function (a) {
6287
        a.preventDefault();
6288
        var b = a.currentTarget;
6289
        b && (ak(this), a = Q(b, "list-type") || "", b = Q(b, "list-id") || "", a = hi(a, b), Kj(this, a))
6290
    };
6291
    p.fg = function (a) {
6292
        a.preventDefault();
6293
        ak(this)
6294
    };
6295
6296
    function ak(a) {
6297
        z(a.D, "lists");
6298
        a.Bb && (a.Bb.innerHTML = "");
6299
        se(a.dg);
6300
        se(a.cg)
6301
    }
6302
6303
    function Uj(a, b) {
6304
        x(a.D, "loading");
6305
        sb(b, {
6306
            format: "JSON",
6307
            onError: function (a, b) {
6308
                var e = O("ERROR_OCCURRED");
6309
                b && b.errors && (e = b.errors[0]);
6310
                this.showError(e, k)
6311
            },
6312
            S: function () {
6313
                z(this.D, "loading")
6314
            },
6315
            B: a
6316
        });
6317
        X("/playlist_bar_ajax", b)
6318
    }
6319
    p.fa = function () {
6320
        return this.g.fa()
6321
    };
6322
6323
    function Xj(a) {
6324
        var b = a.g.Ba();
6325
        Rh([]);
6326
        var c = Qh();
6327
        $a(c, b);
6328
        Rh(c);
6329
        b = new fi;
6330
        c = a.g.fa();
6331
        b.b = c;
6332
        b.ma = a.g.ma;
6333
        Kj(a, b)
6334
    }
6335
6336
    function Zj(a, b, c, d) {
6337
        var e = L("EVENT_ID");
6338
        e && (e = {
6339
            ei: e
6340
        }, c && (e.feature = c), a.g.Y() && (e.shuffle = a.g.ma), d && (e.playnext = a.g.Za), Vg(b, e));
6341
        if (L("WATCH7_ENABLED") && L("GUIDE_ENABLED") && (a = Gf(b, "v")))(b = ii()) && Fi(a, b)
6342
    };
6343
    var bk = l,
6344
        ck = m;
6345
6346
    function dk() {
6347
        if (!bk) {
6348
            var a = F("playlist-bar") || F("watch7-playlist-bar");
6349
            if (a) {
6350
                var b;
6351
                if (B(a, "active")) {
6352
                    b = Q(a, "list-type") || "";
6353
                    if ("QL" == b) b = new fi(k);
6354
                    else {
6355
                        var c = Q(a, "list-id") || "",
6356
                            d = (Q(a, "video-ids") || "").split(","),
6357
                            e = 0,
6358
                            f = Q(a, "list-length");
6359
                        f && (e = parseInt(f, 10));
6360
                        b = hi(b, c, d, e)
6361
                    }
6362
                    c = parseInt(Q(a, "index-offset"), 10) || 0;
6363
                    b.Fb = c;
6364
                    b.b = parseInt(L("PLAYLIST_BAR_PLAYING_INDEX"), 10) || 0;
6365
                    b.Za = parseInt(L("LIST_AUTO_PLAY_VALUE"), 10) || 0;
6366
                    c = 0;
6367
                    L("SHUFFLE_ENABLED") && (c = Ph());
6368
                    b.ma = c
6369
                } else b = new fi(k);
6370
                c = Q(a, "video-url");
6371
                b.nb =
6372
                    c || "";
6373
                c = B(a, "editable");
6374
                b.pa = c;
6375
                if (c = F("playlist-bar-title") || F("watch7-playlist-bar-title")) b.mb = c.innerHTML;
6376
                if (c = F("playlist-bar-extras-menu")) b.lb = c.innerHTML;
6377
                bk = new Jj(a, b)
6378
            }
6379
        }
6380
        return bk
6381
    }
6382
6383
    function ek(a, b) {
6384
        var c = dk();
6385
        if (Mj(c)) {
6386
            var d = b || "mr_meh";
6387
            0 < a ? ($j(c, a), N(function () {
6388
                ek(a - 1, d)
6389
            }, 1E3)) : Vj(c, m, d)
6390
        }
6391
    }
6392
6393
    function fk(a, b, c, d, e, f) {
6394
        if (ck) {
6395
            var g = dk();
6396
            if (g) {
6397
                var i = f || [],
6398
                    a = hi(a, b, d || l, e || 0),
6399
                    b = k;
6400
                g.ya() && (b = g.g.isEqual(a));
6401
                b ? (Kj(g, a, function () {
6402
                    g.dc(i);
6403
                    Yj(g, c, m, k)
6404
                }), Lj(g)) : Yj(g, c, m, k)
6405
            }
6406
        }
6407
    }
6408
6409
    function gk(a) {
6410
        var b = L("LIST_END_TIME");
6411
        b || (b = a.getDuration());
6412
        for (var c = 5; 0 < c; c--) a.addCueRange("NEAR_END" + c, b - c, b - c + 1);
6413
        a.addEventListener("onCueRangeEnter", "yt.www.lists.handleNearPlaybackEnd")
6414
    }
6415
6416
    function hk() {
6417
        var a = dk();
6418
        if (!ck || !a || !a.ya()) return m;
6419
        a = dk().Aa();
6420
        return !Ua(Oh, a)
6421
    };
6422
    var ik = -1,
6423
        jk = -1;
6424
6425
    function kk(a) {
6426
        var a = !!a,
6427
            b = F("page"),
6428
            c = F("watch-sidebar") || F("watch7-sidebar"),
6429
            d = F("baseDiv"),
6430
            e = L("WIDE_PLAYER_STYLES"),
6431
            f = 0;
6432
        "webkitTransition" in c.style ? (f = document.defaultView.getComputedStyle(c, l), f = 1E3 * parseFloat(f["-webkit-transition-duration"])) : "MozTransition" in c.style ? (f = document.defaultView.getComputedStyle(c, l), f = 1E3 * parseFloat(f.getPropertyValue("-moz-transition-duration"))) : "OTransition" in c.style && (f = document.defaultView.getComputedStyle(c, l), f = 1E3 * parseFloat(f.getPropertyValue("-o-transition-duration")));
6433
        if (a) x(b,
6434
            "watch-wide"), N(function () {
6435
            lk();
6436
            if (d)
6437
                for (var a = 0; a < e.length; ++a) x(d, e[a])
6438
        }, f);
6439
        else {
6440
            f /= 2;
6441
            lk("small");
6442
            if (d)
6443
                for (var g = 0; g < e.length; ++g) z(d, e[g]);
6444
            N(function () {
6445
                z(b, "watch-wide")
6446
            }, f);
6447
            Oi(c)
6448
        }
6449
        lf("masthead-utility-menulink-short", a);
6450
        lf("masthead-utility-menulink-long", !a)
6451
    }
6452
6453
    function lk(a) {
6454
        var b = mk();
6455
        if (!B(F("page"), "watch-wide") || "small" == a) z(b, "medium", "large");
6456
        else {
6457
            var c = cc(window),
6458
                c = !!(1400 <= c.width && 1040 <= c.height);
6459
            L("ENABLE_AUTO_LARGE") && (c || "large" == a) ? A(b, "medium", "large") : A(b, "large", "medium")
6460
        }
6461
    }
6462
6463
    function nk() {
6464
        return F("movie_player") && ok() && Wd && 8 >= document.documentMode
6465
    }
6466
6467
    function pk() {
6468
        if (nk()) {
6469
            Ud(jk);
6470
            var a = mk(),
6471
                b = "small";
6472
            w(["small", "medium", "large"], function (c) {
6473
                B(a, c) && (b = c)
6474
            });
6475
            qk({
6476
                small: 112,
6477
                medium: 384,
6478
                large: 597
6479
            } [b])
6480
        }
6481
    }
6482
6483
    function rk() {
6484
        nk() && (jk = N(function () {
6485
            qk(0)
6486
        }, 50))
6487
    }
6488
6489
    function qk(a) {
6490
        var b = F("movie_player"),
6491
            c = ok();
6492
        "rtl" == document.body.getAttribute("dir") ? (c.style.left = a + "px", b.style.right = a + "px") : (c.style.right = a, b.style.left = a)
6493
    }
6494
6495
    function sk() {
6496
        return L("PLAYER_REFERENCE")
6497
    }
6498
6499
    function tk(a) {
6500
        Ac(a.target, "BUTTON") || a.currentTarget.click()
6501
    }
6502
6503
    function ok() {
6504
        return F("watch-player") || F("watch7-player")
6505
    }
6506
6507
    function mk() {
6508
        return F("watch-video") || F("watch7-video")
6509
    };
6510
6511
    function uk(a, b, c, d, e) {
6512
        this.k = a;
6513
        this.yc = m;
6514
        a = wf() + "/share_ajax";
6515
        c = {
6516
            action_get_email: 1,
6517
            video_id: c,
6518
            list: d
6519
        };
6520
        e && (c.new_share = 1);
6521
        X(a, {
6522
            format: "JSON",
6523
            o: c,
6524
            j: function (a, c) {
6525
                this.k.innerHTML = c.email_html;
6526
                this.Na();
6527
                this.focus();
6528
                var d = c.sharing_binary_url;
6529
                if (d) {
6530
                    var e = c.contacts;
6531
                    Ug(d, t(function () {
6532
                        var a = s("yt.sharing.ContactTools");
6533
                        a && a.createContactTools(this.uc, l, e, b)
6534
                    }, this))
6535
                }
6536
            },
6537
            B: this
6538
        })
6539
    }
6540
    p = uk.prototype;
6541
    p.Na = function () {
6542
        this.z = this.k.getElementsByTagName("form")[0];
6543
        R(this.z, "submit", t(this.cf, this));
6544
        K("share-email-send", this.z);
6545
        this.Ja = K("share-email-success", this.k);
6546
        this.e = K("share-email-remail", this.Ja);
6547
        R(this.e, "click", t(function () {
6548
            vk(this);
6549
            this.focus()
6550
        }, this));
6551
        this.uc = K("share-email-recipients", this.k);
6552
        this.b = K("share-email-note", this.k);
6553
        this.c = K("share-email-preview-note", this.k);
6554
        R(this.b, "keyup", t(this.bf, this))
6555
    };
6556
    p.ua = function () {
6557
        this.z && (this.yc && vk(this), this.focus())
6558
    };
6559
    p.focus = function () {
6560
        this.uc.focus()
6561
    };
6562
6563
    function vk(a) {
6564
        a.yc = m;
6565
        a.uc.value = "";
6566
        a.b.value = "";
6567
        a.c.innerHTML = "";
6568
        V(a.Ja);
6569
        U(a.z)
6570
    }
6571
    p.bf = function () {
6572
        var a = this.b.value,
6573
            a = a.substring(0, 300),
6574
            a = za(a),
6575
            a = a.replace(/\n/g, "<br>");
6576
        this.c.innerHTML = a
6577
    };
6578
    p.cf = function (a) {
6579
        a.preventDefault();
6580
        var b = J("button", l, this.z)[0];
6581
        b.disabled = k;
6582
        var c = K("share-email-captcha", this.k),
6583
            d = K("share-email-error", this.k),
6584
            e = K("yt-alert-content", d),
6585
            a = wf() + xf(this.z.action);
6586
        X(a, {
6587
            format: "JSON",
6588
            method: "POST",
6589
            Ra: Qc(this.z),
6590
            j: function () {
6591
                this.yc = k;
6592
                U(this.Ja);
6593
                V(this.z);
6594
                V(d);
6595
                V(c)
6596
            },
6597
            onError: function (a, b) {
6598
                b.captcha_html && (c.innerHTML = b.captcha_html, U(c));
6599
                b.errors && (e.innerHTML = b.errors.join("<br>"), U(d))
6600
            },
6601
            S: function () {
6602
                b.disabled = m
6603
            },
6604
            B: this
6605
        })
6606
    };
6607
6608
    function wk() {
6609
        this.b = {}
6610
    }
6611
    v(wk, lh);
6612
    ba(wk);
6613
    p = wk.prototype;
6614
    p.O = "form-input";
6615
    p.register = function () {
6616
        E && !Sb(9) && (Z(this, "click", this.hc, "checkbox"), Z(this, "keypressed", this.hc, "checkbox"), Z(this, "click", this.$d, "radio"), Z(this, "keypressed", this.$d, "radio"));
6617
        Z(this, "change", this.hc, "checkbox");
6618
        Z(this, "blur", this.vg, "select-element");
6619
        Z(this, "change", this.Ga, "select-element");
6620
        Z(this, "keyup", this.Ga, "select-element");
6621
        Z(this, "focus", this.wg, "select-element");
6622
        Z(this, "keyup", this.Nc, "text");
6623
        Z(this, "keyup", this.Nc, "textarea");
6624
        Z(this, "keyup", this.Nc, "bidi");
6625
        Z(this, "click", this.xg, "reset")
6626
    };
6627
    p.hc = function (a) {
6628
        var b = Cc(a, Y(this, "checkbox-container"));
6629
        a.checked && B(b, "partial") && (a.checked = m, a.e = m, z(b, "partial"));
6630
        C(b, "checked", a.checked)
6631
    };
6632
    p.hh = function (a) {
6633
        var b = Cc(a, Y(this, "radio-container"));
6634
        b && C(b, "checked", a.checked)
6635
    };
6636
    p.$d = function () {
6637
        xk()
6638
    };
6639
    p.Nc = function (a) {
6640
        var b = a.value,
6641
            c = "";
6642
        Xc(b) ? c = "rtl" : Vc.test(b) && (c = "ltr");
6643
        a.dir = c
6644
    };
6645
    p.wg = function (a) {
6646
        var b = Cc(a, Y(this, "select"));
6647
        x(b, "focused");
6648
        this.Ga(a)
6649
    };
6650
    p.vg = function (a) {
6651
        var b = Cc(a, Y(this, "select"));
6652
        z(b, "focused");
6653
        this.Ga(a)
6654
    };
6655
    p.Ga = function (a) {
6656
        var b = Cc(a, Y(this, "select")),
6657
            b = K(Y(this, "select-value"), b),
6658
            c = a.options[Math.max(a.selectedIndex, 0)];
6659
        c && ("" != b.innerHTML && c.innerHTML != b.innerHTML && this.ia(a, "onchange-callback"), b.innerHTML = c.innerHTML)
6660
    };
6661
    p.xg = function () {
6662
        var a = wk.getInstance(),
6663
            b = I(Y(a, "checkbox"));
6664
        w(b, a.hc);
6665
        xk();
6666
        yk()
6667
    };
6668
6669
    function xk() {
6670
        var a = wk.getInstance(),
6671
            b = I(Y(a, "radio"));
6672
        w(b, a.hh)
6673
    }
6674
6675
    function yk() {
6676
        var a = wk.getInstance(),
6677
            b = I(Y(a, "select-element"));
6678
        w(b, function (b) {
6679
            a.Ga(b)
6680
        })
6681
    };
6682
6683
    function zk(a, b, c, d) {
6684
        this.k = a;
6685
        this.kb = d || m;
6686
        a = wf() + "/share_ajax";
6687
        b = {
6688
            action_get_embed: 1,
6689
            video_id: b,
6690
            list: c
6691
        };
6692
        this.kb && (b.new_share = 1);
6693
        X(a, {
6694
            format: "JSON",
6695
            o: b,
6696
            j: function (a, b) {
6697
                this.k.innerHTML = b.embed_html;
6698
                this.gf = b.legacy_url;
6699
                this.ff = b.legacy_code;
6700
                this.ef = b.iframe_url;
6701
                this.df = b.iframe_code;
6702
                this.Na();
6703
                var c = He.getInstance();
6704
                this.La && (this.La.checked = !Ne(0, Nh.Id));
6705
                this.Hb.checked = Ne(0, Nh.Hd);
6706
                this.Ka && (this.Ka.checked = Ne(0, Nh.Jd));
6707
                a: if (c = c.get("ems"), this.kb) {
6708
                    "custom" == c && U(F("share-embed-customize"));
6709
                    for (var d =
6710
                            0; d < this.Ma.length; d++) {
6711
                        var n = this.Ma[d];
6712
                        if (n.value == c) {
6713
                            n.selected = k;
6714
                            wk.getInstance().Ga(this.va);
6715
                            break a
6716
                        }
6717
                    }
6718
                    this.Ma[0].selected = k;
6719
                    wk.getInstance().Ga(this.va)
6720
                } else(c in this.la ? this.la[c] : nb(this.la)).select();
6721
                Ak(this);
6722
                this.ua()
6723
            },
6724
            B: this
6725
        })
6726
    }
6727
    p = zk.prototype;
6728
    p.ab = 0;
6729
    p.ub = 0;
6730
    p.Na = function () {
6731
        this.b = K("share-embed-code", this.k);
6732
        R(this.b, "click", t(this.pe, this));
6733
        if (this.kb) {
6734
            this.va = F("embed-layout-options");
6735
            this.Ma = J("option", l, this.va);
6736
            var a = parseInt(Q(this.Ma[0], "width"), 10),
6737
                b = parseInt(Q(this.Ma[0], "height"), 10);
6738
            this.e = a / b;
6739
            R(this.va, "change", t(function () {
6740
                var a = this.va.options[Math.max(this.va.selectedIndex, 0)],
6741
                    a = !a ? l : a.value || a.text;
6742
                He.getInstance();
6743
                Me("ems", a);
6744
                Pe();
6745
                Ak(this);
6746
                var b = F("share-embed-customize");
6747
                "custom" == a ? U(b) : (V(b), this.focus())
6748
            }, this));
6749
            a = F("share-embed-customize");
6750
            this.f = K("share-embed-size-custom-width", a);
6751
            this.c = K("share-embed-size-custom-height", a);
6752
            R(this.f, "keyup", t(this.ve, this));
6753
            R(this.c, "keyup", t(this.ue, this))
6754
        } else {
6755
            a = K("share-embed-size-list", this.k);
6756
            b = I("share-embed-size-radio", a);
6757
            this.la = {};
6758
            w(b, function (a) {
6759
                B(a, "share-embed-size-radio-custom") || (a = new Bk(a), this.la[a.name] = a)
6760
            }, this);
6761
            var b = nb(this.la).width / nb(this.la).height,
6762
                c = K("share-embed-size-radio-custom", a),
6763
                b = new Ck(c, b);
6764
            this.n = this.la[b.name] = b;
6765
            T(a, "click", t(this.re, this), "share-embed-size");
6766
            a = K("share-embed-customize", a);
6767
            R(a, "keyup", t(this.we, this))
6768
        }
6769
        var d = {},
6770
            a = I("share-embed-option", this.k);
6771
        w(a, function (a) {
6772
            d[a.name] = a
6773
        });
6774
        (this.La = d["show-related"]) && R(this.La, "click", t(this.qe, this));
6775
        this.Hb = d["delayed-cookies"];
6776
        R(this.Hb, "click", t(this.oe, this));
6777
        this.i = d["use-https"];
6778
        R(this.i, "click", t(this.te, this));
6779
        (this.Ka = d["use-flash-code"] || l) && R(this.Ka, "click", t(this.se, this))
6780
    };
6781
    p.ve = function () {
6782
        this.ab = parseInt(this.f.value, 10);
6783
        this.ub = Math.round(this.ab / this.e) || 0;
6784
        this.c.value = this.ub + "";
6785
        Ak(this)
6786
    };
6787
    p.ue = function () {
6788
        this.ub = parseInt(this.c.value, 10);
6789
        this.ab = Math.round(this.ub * this.e) || 0;
6790
        this.ab.value = this.ab + "";
6791
        Ak(this)
6792
    };
6793
    p.ua = function () {
6794
        this.focus()
6795
    };
6796
    p.focus = function () {
6797
        this.b && (this.b.focus(), this.b.select())
6798
    };
6799
6800
    function Ak(a) {
6801
        var b = a.df,
6802
            c = a.ef;
6803
        a.Ka && a.Ka.checked && (b = a.ff, c = a.gf);
6804
        a.Hb.checked && (c = c.replace("youtube.com", "youtube-nocookie.com"));
6805
        a.i.checked && (c = c.split("//"), c[0] = "https:", c = c.join("//"));
6806
        var d = {};
6807
        a.La && !a.La.checked && (d.rel = 0);
6808
        c = Nf(c, d);
6809
        if (a.kb) {
6810
            var e = a.va.options[Math.max(a.va.selectedIndex, 0)];
6811
            e ? "custom" == e.value ? d = {
6812
                width: a.ab,
6813
                height: a.ub
6814
            } : (d = parseInt(Q(e, "width"), 10), e = parseInt(Q(e, "height"), 10), d = {
6815
                width: d,
6816
                height: e
6817
            }) : d = {
6818
                width: 0,
6819
                height: 0
6820
            }
6821
        } else d = a.la, d = (e = pb(d, function (a) {
6822
                return a.yb.checked
6823
            },
6824
            j)) && d[e], d = !d ? {
6825
            width: 0,
6826
            height: 0
6827
        } : {
6828
            width: d.width,
6829
            height: d.height
6830
        };
6831
        if (!d.width || 200 > d.width) a.kb ? (d = parseInt(Q(a.Ma[0], "width"), 10), e = parseInt(Q(a.Ma[0], "height"), 10), d = {
6832
            width: d,
6833
            height: e
6834
        }) : d = nb(a.la);
6835
        b = b.replace(/__url__/g, za(c));
6836
        b = b.replace(/__width__/g, d.width + "");
6837
        b = b.replace(/__height__/g, d.height + "");
6838
        b = za(b);
6839
        b != a.b.innerHTML && (a.b.innerHTML = b)
6840
    }
6841
    p.qe = function () {
6842
        var a = this.La.checked;
6843
        He.getInstance();
6844
        Oe(Nh.Id, !a);
6845
        Pe();
6846
        Ak(this)
6847
    };
6848
    p.oe = function () {
6849
        var a = this.Hb.checked;
6850
        He.getInstance();
6851
        Oe(Nh.Hd, a);
6852
        Pe();
6853
        Ak(this)
6854
    };
6855
    p.te = function () {
6856
        Ak(this)
6857
    };
6858
    p.se = function () {
6859
        var a = this.Ka.checked;
6860
        He.getInstance();
6861
        Oe(Nh.Jd, a);
6862
        Pe();
6863
        Ak(this)
6864
    };
6865
    p.pe = function () {
6866
        this.focus()
6867
    };
6868
    p.re = function (a) {
6869
        a = K("share-embed-size-radio", a.currentTarget);
6870
        a = this.la[a.value];
6871
        a.select();
6872
        He.getInstance();
6873
        Me("ems", a.name);
6874
        Pe();
6875
        Ak(this);
6876
        a != this.n && this.focus()
6877
    };
6878
    p.we = function () {
6879
        Ak(this)
6880
    };
6881
6882
    function Bk(a) {
6883
        this.name = a.value;
6884
        this.yb = a;
6885
        this.width = parseInt(Q(this.yb, "width"), 10);
6886
        this.height = parseInt(Q(this.yb, "height"), 10)
6887
    }
6888
    Bk.prototype.select = function () {
6889
        this.yb.checked = k;
6890
        var a = Ac(this.yb, "li"),
6891
            b = Ac(a, "ul"),
6892
            b = J("li", "selected", b);
6893
        w(b, function (a) {
6894
            z(a, "selected")
6895
        });
6896
        x(a, "selected")
6897
    };
6898
6899
    function Ck(a, b) {
6900
        Bk.call(this, a);
6901
        this.e = b;
6902
        var c = Ac(a, "li");
6903
        this.c = K("share-embed-size-custom-width", c);
6904
        this.b = K("share-embed-size-custom-height", c);
6905
        R(this.c, "keyup", t(this.i, this));
6906
        R(this.b, "keyup", t(this.f, this))
6907
    }
6908
    v(Ck, Bk);
6909
    Ck.prototype.i = function () {
6910
        this.width = parseInt(this.c.value, 10);
6911
        this.height = Math.round(this.width / this.e) || 0;
6912
        this.b.value = this.height + ""
6913
    };
6914
    Ck.prototype.f = function () {
6915
        this.height = parseInt(this.b.value, 10);
6916
        this.width = Math.round(this.height * this.e) || 0;
6917
        this.c.value = this.width + ""
6918
    };
6919
6920
    function Dk(a, b, c, d, e, f, g) {
6921
        this.k = a;
6922
        this.f = b || l;
6923
        this.P = c || l;
6924
        this.U = m;
6925
        this.H = g || m;
6926
        a = wf() + "/share_ajax";
6927
        b = {
6928
            action_get_share_box: 1,
6929
            video_id: this.f,
6930
            list: this.P
6931
        };
6932
        this.H && (b.new_share = 1, this.P && (b.render_playlist_options = 1));
6933
        X(a, {
6934
            format: "JSON",
6935
            o: b,
6936
            j: function (a, b) {
6937
                this.k.innerHTML = b.share_html;
6938
                this.ud = b.url_short;
6939
                this.td = b.url_long;
6940
                this.oc = b.lang;
6941
                this.Xa = l;
6942
                "session_index" in b && (this.Xa = b.session_index);
6943
                this.Na();
6944
                d && d();
6945
                this.ua()
6946
            },
6947
            B: this
6948
        })
6949
    }
6950
    var Ek = {
6951
        FACEBOOK: "share_facebook",
6952
        BLOGGER: "share_blogger",
6953
        TWITTER: "share_twitter"
6954
    };
6955
    p = Dk.prototype;
6956
    p.Na = function () {
6957
        var a = K("share-panel-show-url-options");
6958
        R(a, "click", t(this.Hf, this));
6959
        a = K("share-panel-show-more");
6960
        R(a, "click", t(this.Cf, this));
6961
        a = K("share-panel-services", this.k);
6962
        R(a, "click", t(this.Df, this));
6963
        a = K("share-panel-embed", this.k);
6964
        R(a, "click", t(this.Af, this));
6965
        a = K("share-panel-email", this.k);
6966
        R(a, "click", t(this.zf, this));
6967
        (a = K("share-panel-hangout", this.k)) && R(a, "click", t(this.Bf, this));
6968
        this.X = K("share-panel-url", this.k);
6969
        R(this.X, "click", t(this.If, this));
6970
        R(this.X, "focus", t(function () {
6971
                x(this.X, "focused")
6972
            },
6973
            this));
6974
        R(this.X, "blur", t(function () {
6975
            z(this.X, "focused")
6976
        }, this));
6977
        this.Jb = K("share-panel-long-url", this.k);
6978
        this.i = K("share-panel-start-at", this.k);
6979
        this.aa = K("share-panel-start-at-time", this.k);
6980
        R(this.aa, "keyup", t(this.Jf, this));
6981
        R(this.aa, "click", t(this.Gf, this));
6982
        R(this.aa, "focus", t(function () {
6983
            x(this.aa, "focused")
6984
        }, this));
6985
        R(this.aa, "blur", t(function () {
6986
            z(this.aa, "focused")
6987
        }, this));
6988
        this.Va = K("share-panel-hd", this.k);
6989
        this.n = K("share-panel-url-options", this.k);
6990
        R(this.n, "click", t(this.Rb, this));
6991
        this.L = K("share-panel-services",
6992
            this.k);
6993
        this.M = K("share-panel-buttons", this.k);
6994
        a = K("share-panel-show-more", this.k);
6995
        R(a, "click", t(this.Ff, this));
6996
        T(this.k, "click", t(this.Ef, this), "share-service-button");
6997
        this.H && (T(this.k, "click", t(this.Kf, this), "share-service-expand-arrow"), this.e = K("share-panel-services-container", this.k), R(F("share-with-playlist"), "click", t(this.Nf, this)), R(F("share-with-playlist-current"), "click", t(this.Lf, this)), R(F("share-with-playlist-first"), "click", t(this.Mf, this)))
6998
    };
6999
    p.Kf = function (a) {
7000
        var b = Cc(a.target, "secondary"),
7001
            a = K("overlay", b),
7002
            c = B(b, "expanded"),
7003
            d = 0;
7004
        "webkitTransition" in a.style ? (d = document.defaultView.getComputedStyle(a, l), d = 1E3 * parseFloat(d["-webkit-transition-duration"])) : "MozTransition" in a.style ? (d = document.defaultView.getComputedStyle(a, l), d = 1E3 * parseFloat(d.getPropertyValue("-moz-transition-duration"))) : "OTransition" in a.style && (d = document.defaultView.getComputedStyle(a, l), d = 1E3 * parseFloat(d.getPropertyValue("-o-transition-duration")));
7005
        var e = "rtl" == document.body.getAttribute("dir") ?
7006
            "right" : "left",
7007
            c = c ? "0px" : ef(b).width + "px";
7008
        a.style[e] = c;
7009
        N(function () {
7010
            ib(b, "expanded")
7011
        }, d)
7012
    };
7013
    p.ua = function () {
7014
        this.X && !B(this.X, "focused") && (this.X.focus(), this.X.select())
7015
    };
7016
    p.Rb = function () {
7017
        if (!B(this.X, "focused")) {
7018
            var a = this.ud;
7019
            this.Jb && this.Jb.checked && (a = this.td);
7020
            var b = {};
7021
            this.Va && this.Va.checked && (b.hd = 1);
7022
            var c;
7023
            if (c = !this.i.disabled)
7024
                if (c = this.i.checked) {
7025
                    var d = this.aa.value;
7026
                    c = ["h", "m", "s"];
7027
                    var e = Za(c);
7028
                    e.reverse();
7029
                    var f = {},
7030
                        d = d.toLowerCase().match(/\d+\s*[hms]?/g) || [],
7031
                        d = Qa(d, function (a) {
7032
                            var b = (a.match(/[hms]/) || [""])[0];
7033
                            return b ? (f[b] = parseInt(a.match(/\d+/)[0], 10), m) : k
7034
                        });
7035
                    for (d.reverse(); d.length && e.length;) {
7036
                        var g = e.shift();
7037
                        g in f || (f[g] = parseInt(d.shift(), 10))
7038
                    }
7039
                    if (d.length ||
7040
                        59 < f.s || 59 < f.m || 9 < f.h) c = l;
7041
                    else {
7042
                        var i = "";
7043
                        w(c, function (a) {
7044
                            f[a] && (i += f[a] + a)
7045
                        });
7046
                        c = i || l
7047
                    }
7048
                } c && (b.t = c);
7049
            a = Lf(a, b);
7050
            this.X.value != a && (this.X.value = a)
7051
        }
7052
    };
7053
    p.Jf = function () {
7054
        this.U = k;
7055
        this.i.checked = k;
7056
        this.Rb()
7057
    };
7058
    p.Gf = function () {
7059
        this.i.checked = k;
7060
        this.aa.value.match(/[1-9]/) || (this.aa.value = "")
7061
    };
7062
    p.If = function () {
7063
        this.X.select()
7064
    };
7065
    p.zf = function () {
7066
        var a = xh.getInstance();
7067
        zh(a, this.M);
7068
        zh(a, this.n);
7069
        zh(a, this.L);
7070
        this.c && V(this.c);
7071
        this.e && V(this.e);
7072
        this.b || (this.b = K("share-panel-email-container", this.k));
7073
        nf(this.b);
7074
        !Q(this.b, "disabled") && mf(this.b) && (this.ca ? this.ca.ua() : this.ca = new uk(this.b, this.Xa, this.f, this.P, this.H));
7075
        Kh("share_mail")
7076
    };
7077
    p.Bf = function () {
7078
        var a = sk();
7079
        a && a.pauseVideo && a.pauseVideo();
7080
        var a = Lf("https://talkgadget.google.com/hangouts", {
7081
                hl: this.oc,
7082
                authuser: this.Xa,
7083
                gid: "youtube",
7084
                gd: this.f,
7085
                hs: 5
7086
            }),
7087
            b = window.screen.height,
7088
            c = Math.min(0.9 * window.screen.width, 1E3),
7089
            b = Math.min(0.9 * b, 800);
7090
        ah("HANGOUT", this.f + "");
7091
        Hh(a, {
7092
            width: c,
7093
            height: b
7094
        })
7095
    };
7096
    p.Af = function () {
7097
        var a = xh.getInstance();
7098
        zh(a, this.M);
7099
        zh(a, this.n);
7100
        zh(a, this.L);
7101
        this.b && V(this.b);
7102
        this.e && V(this.e);
7103
        this.c || (this.c = K("share-panel-embed-container", this.k));
7104
        nf(this.c);
7105
        !Q(this.c, "disabled") && mf(this.c) && (this.oa ? this.oa.ua() : this.oa = new zk(this.c, this.f, this.P, this.H));
7106
        Kh("share_embed")
7107
    };
7108
    p.Ef = function (a) {
7109
        a = Q(a.currentTarget, "service-name") || "";
7110
        (a = Ek[a]) && Kh(a)
7111
    };
7112
    p.Hf = function () {
7113
        zh(xh.getInstance(), this.L);
7114
        this.b && V(this.b);
7115
        this.c && V(this.c)
7116
    };
7117
    p.Cf = function () {
7118
        zh(xh.getInstance(), this.n);
7119
        this.b && V(this.b);
7120
        this.c && V(this.c)
7121
    };
7122
    p.Ff = function () {
7123
        Fk(this)
7124
    };
7125
    p.Df = function () {
7126
        Fk(this);
7127
        this.e && U(this.e)
7128
    };
7129
7130
    function Fk(a) {
7131
        a.b && V(a.b);
7132
        a.c && V(a.c)
7133
    }
7134
    p.Nf = function (a) {
7135
        Gk(this);
7136
        var b = m;
7137
        a.target.checked && (b = Ac(F("share-with-playlist-first"), "li"), b = B(b, "yt-uix-button-menu-item-selected"));
7138
        Hk(this, a.target.checked, b)
7139
    };
7140
7141
    function Ik(a) {
7142
        F("share-with-playlist").checked = k;
7143
        Gk(a)
7144
    }
7145
7146
    function Gk(a) {
7147
        var b = F("share-with-playlist").checked;
7148
        K("share-panel-start-at", a.e).disabled = b;
7149
        K("share-panel-start-at-time", a.e).disabled = b
7150
    }
7151
    p.Lf = function () {
7152
        Ik(this);
7153
        Hk(this, k)
7154
    };
7155
    p.Mf = function () {
7156
        Ik(this);
7157
        Hk(this, k, k)
7158
    };
7159
7160
    function Hk(a, b, c) {
7161
        var d = {
7162
            action_get_share_urls: 1,
7163
            video_id: a.f
7164
        };
7165
        b && (d.list = a.P);
7166
        c && (d.use_first_video = k);
7167
        X("share_ajax", {
7168
            format: "JSON",
7169
            o: d,
7170
            j: function (a, b) {
7171
                this.ud = b.url_short;
7172
                this.td = b.url_long;
7173
                this.Rb();
7174
                F("share-services-container").innerHTML = b.share_services_html
7175
            },
7176
            B: a
7177
        })
7178
    };
7179
7180
    function Jk() {}
7181
    p = Jk.prototype;
7182
    p.de = m;
7183
    p.Eb = l;
7184
    p.gc = l;
7185
    p.init = function () {
7186
        if (!this.de) {
7187
            this.de = k;
7188
            this.Eb = K("player-root", j);
7189
            this.gc = K("player-actions-container", this.Eb);
7190
            var a = K("player-actions-close", this.gc);
7191
            R(a, "click", t(this.zg, this))
7192
        }
7193
    };
7194
    p.zg = function () {
7195
        C(this.Eb, "actions-mode", m)
7196
    };
7197
    p.yg = function () {
7198
        600 > this.Eb.clientWidth && x(this.gc, "small-view")
7199
    };
7200
    p.Oc = l;
7201
    p.kf = function (a, b) {
7202
        this.init();
7203
        C(this.Eb, "actions-mode", k);
7204
        if (this.Oc) this.Oc.ua();
7205
        else {
7206
            var c = K("player-actions-share", this.gc);
7207
            this.Oc = new Dk(c, a, b, t(this.yg, this))
7208
        }
7209
    };
7210
    var Kk, Lk, Mk, Nk, Ok, Pk, Qk;
7211
    Qk = Pk = Ok = Nk = Mk = Lk = Kk = m;
7212
    var Rk = zb();
7213
    Rk && (-1 != Rk.indexOf("Firefox") ? Kk = k : -1 != Rk.indexOf("Camino") ? Lk = k : -1 != Rk.indexOf("iPhone") || -1 != Rk.indexOf("iPod") ? Mk = k : -1 != Rk.indexOf("iPad") ? Nk = k : -1 != Rk.indexOf("Android") ? Ok = k : -1 != Rk.indexOf("Chrome") ? Pk = k : -1 != Rk.indexOf("Safari") && (Qk = k));
7214
    var Sk = Kk,
7215
        Tk = Lk,
7216
        Uk = Mk,
7217
        Vk = Nk,
7218
        Wk = Ok,
7219
        Xk = Pk,
7220
        Yk = Qk;
7221
    var Zk = {};
7222
7223
    function $k(a, b, c) {
7224
        if (a = F(a)) {
0 ignored issues
show
Complexity Best Practice introduced by
There is no return statement if a = F(a) is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
7225
            var b = b instanceof Rf ? b : new Rf(b),
7226
                d = !b.args.jsapicallback,
7227
                e = "player" + ja(a),
7228
                f = Zk[e];
7229
            f && f.ed();
7230
            f = new al(a, e, b, c);
7231
            Zk[e] = f;
7232
            N(function () {
7233
                d && (q.onYouTubePlayerReady = function () {
7234
                    bl(e)
7235
                });
7236
                f.write()
7237
            }, 0);
7238
            return f.b
7239
        }
7240
    }
7241
7242
    function cl(a, b, c) {
7243
        return $k(a, b, {
7244
            force: c
7245
        })
7246
    }
7247
7248
    function dl(a) {
7249
        if (a = F(a)) {
7250
            var a = "player" + ja(a),
7251
                b = Zk[a];
7252
            b && b.na();
7253
            delete Zk[a]
7254
        }
7255
    }
7256
7257
    function bl(a) {
7258
        a = Zk[a];
7259
        if (!a.Ac) {
7260
            a.Ac = k;
7261
            var b = nc(a.f),
7262
                c = b.getApiInterface();
7263
            w(c, function (a) {
7264
                "addEventListener" == a ? this.b.nativeAddEventListener = t(b[a], b) : "destroy" == a ? this.b.b = t(b[a], b) : this.b[a] = t(b[a], b)
7265
            }, a);
7266
            for (var d in a.c) a.b.nativeAddEventListener(d, a.c[d]);
7267
            el(a) && a.H && a.Mb("SHARE_CLICKED", t(a.H.kf, a.H));
7268
            a.Mb("onTabOrderChange", t(a.hf, a));
7269
            a.Mb("onNavigate", t(a.jf, a));
7270
            a.Pb && a.Pb(a.n)
7271
        }
7272
    }
7273
7274
    function al(a, b, c, d) {
7275
        this.f = this.e = a;
7276
        this.n = b;
7277
        fl(this, c, d);
7278
        a = this.F;
7279
        b = !!a.disable.html5;
7280
        c = !!a.disable.flash;
7281
        d = zb();
7282
        (!d ? 0 : 0 <= d.toLowerCase().indexOf("android 2.2")) ? d = k: (d = document.createElement("video"), d = !(!d || !d.canPlayType || !d.canPlayType('video/mp4; codecs="avc1.42001E, mp4a.40.2"') && !d.canPlayType('video/webm; codecs="vp8.0, vorbis"')));
7283
        var d = d && (s("yt.player.Application") || a.assets.js),
7284
            e = !!a.html5;
7285
        d || (a.args.html5_unavailable = "1");
7286
        var f = this.Lb ? this.De : this.Ee;
7287
        e && d || c ? (this.pc = this.sc, c || (this.Nb =
7288
            f)) : (this.pc = f, d && !b && (this.Nb = this.sc));
7289
        this.Nb && (a.fallback = t(this.Ce, this));
7290
        this.b = {
7291
            addEventListener: t(this.Mb, this),
7292
            destroy: t(this.ed, this)
7293
        };
7294
        a = this.ea = new gg;
7295
        this.i || (this.i = []);
7296
        this.i.push(a);
7297
        this.c = {};
7298
        this.H = el(this) ? new Jk : l
7299
    }
7300
    v(al, eg);
7301
    p = al.prototype;
7302
    p.Ac = m;
7303
    p.F = l;
7304
    p.Lb = l;
7305
    p.Pb = l;
7306
    p.pc = l;
7307
    p.Nb = l;
7308
7309
    function fl(a, b, c) {
7310
        a.F = b.ta();
7311
        a.U = a.F.attrs.id;
7312
        a.M = a.F.args.el;
7313
        a.Lb = c || l;
7314
        a.F.args.eurl || (b = document.location.toString(), -1 != b.indexOf("/embed/") && (b = "unknown", document.referrer && (b = document.referrer.substring(0, 128))), a.F.args.eurl = b);
7315
        a.F.args.enablejsapi = "1";
7316
        a.F.args.playerapiid = a.n;
7317
        var d = a.e,
7318
            e = a.M;
7319
        a.F.fallbackMessage = function () {
7320
            var a = O("PLAYER_FALLBACK_OVERRIDE");
7321
            if (!a) {
7322
                var a = O("PLAYER_FALLBACK", j, 'The Adobe Flash Player or an HTML5 supported browser is required for video playback. <br> <a href="http://get.adobe.com/flashplayer/">Get the latest Flash Player</a> <br> <a href="/html5">Learn more about upgrading to an HTML5 browser</a>'),
7323
                    b = navigator.userAgent.match(/Version\/(\d).*Safari/);
7324
                b && 5 <= parseInt(b[1], 10) && (a = O("QUICKTIME_FALLBACK", j, 'The Adobe Flash Player or QuickTime is required for video playback. <br> <a href="http://get.adobe.com/flashplayer/">Get the latest Flash Player</a> <br> <a href="http://www.apple.com/quicktime/download/">Get the latest version of QuickTime</a>'))
7325
            }
7326
            d.innerHTML = '<div class="fallback-message">' + a + "</div>";
7327
            "embedded" == e && w(d.getElementsByTagName("a"), function (a) {
7328
                a.setAttribute("target", "_blank")
7329
            })
7330
        };
7331
        a.Pb || (a.Pb = a.F.args.jsapicallback ? gl(a.F.args.jsapicallback) : s("onYouTubePlayerReady"));
7332
        a.F.args.jsapicallback = "ytPlayerOnYouTubePlayerReady"
7333
    }
7334
    p.Ce = function (a) {
7335
        a = a || this.F;
7336
        a instanceof Rf || (a = new Rf(a));
7337
        delete a.fallback;
7338
        a.html5 ? a.args.autoplay = 1 : Og("html5_ajax", this.ig);
7339
        this.Ac = m;
7340
        fl(this, a);
7341
        lc(this.f);
7342
        this.Nb()
7343
    };
7344
    p.write = function () {
7345
        if (!this.L) {
7346
            x(this.e, "player-root");
7347
            this.F.attrs.width && Se(this.e, "width", this.F.attrs.width);
7348
            this.F.attrs.height && Se(this.e, "height", this.F.attrs.height);
7349
            Se(this.e, "overflow", "hidden");
7350
            if (!this.Lb && (lc(this.f), el(this))) {
7351
                var a = gc("div", "player-container"),
7352
                    b = gc("div", "player-actions-container", gc("div", "player-actions-share"), gc("div", "player-actions-close", gc("div", "player-actions-close-button")));
7353
                kc(this.e, a, b);
7354
                this.f = a;
7355
                s("yt.tracking.shareVideo") || (u("yt.tracking.shareVideo",
7356
                    ah), u("yt.tracking.shareList", bh));
7357
                s("yt.window.popup") || u("yt.window.popup", Ih)
7358
            }
7359
            this.pc()
7360
        }
7361
    };
7362
    p.sc = function () {
7363
        this.F.attrs.id = this.U + "-html5";
7364
        var a = s("yt.player.Application");
7365
        a ? new a(this.f, this.F) : Ug(this.F.assets.js, t(this.sc, this))
7366
    };
7367
    p.Ee = function () {
7368
        this.F.attrs.id = this.U + "-flash";
7369
        bg(this.f, this.F)
7370
    };
7371
    p.De = function () {
7372
        dg(this.F, this.Lb.force, t(this.Sd, this))
7373
    };
7374
    p.Sd = function () {
7375
        if (!this.oa) {
7376
            var a = F(this.F.attrs.id);
7377
            try {
7378
                a.getApiInterface();
7379
                bl(this.n);
7380
                return
7381
            } catch (b) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
7382
            N(t(this.Sd, this), 50)
7383
        }
7384
    };
7385
    p.Mb = function (a, b) {
7386
        var c = gl(b);
7387
        if (c) {
7388
            if (!this.c[a]) {
7389
                var d = "ytPlayer" + a + this.n,
7390
                    e = t(function (b) {
7391
                        this.ea.za(a, b)
7392
                    }, this);
7393
                this.c[a] = d;
7394
                q[d] = e;
7395
                this.c[a] = d;
7396
                this.b.nativeAddEventListener && this.b.nativeAddEventListener(a, d)
7397
            }
7398
            this.ea.ra(a, c)
7399
        }
7400
    };
7401
7402
    function gl(a) {
7403
        var b = a;
7404
        "string" == typeof a && (b = function () {
7405
            s(a).apply(q, arguments)
7406
        });
7407
        return !b ? l : b
7408
    }
7409
    p.hf = function (a) {
7410
        for (var a = a ? qc : pc, b = a(document.activeElement); b && !(1 == b.nodeType && (b.focus(), b == document.activeElement));) b = a(b)
0 ignored issues
show
Best Practice introduced by
Comparing 1 to b.nodeType using the == operator is not safe. Consider using === instead.
Loading history...
7411
    };
7412
    p.jf = function (a) {
7413
        var b = L("EVENT_ID");
7414
        b && Vg(a.url, {
7415
            ei: b,
7416
            feature: a.feature
7417
        })
7418
    };
7419
7420
    function el(a) {
7421
        return "embedded" == a.M || "profilepage" == a.M
7422
    }
7423
    p.ig = function () {
7424
        X("/html5", {
7425
            pb: k,
7426
            method: "POST",
7427
            C: {
7428
                prefer_html5: k,
7429
                session_token: M("html5_ajax")
7430
            }
7431
        })
7432
    };
7433
    p.ed = function () {
7434
        hl(this.e)
7435
    };
7436
    p.T = function () {
7437
        this.b.b && this.b.b();
7438
        delete this.b;
7439
        this.F.fallback = l;
7440
        this.F.fallbackMessage = l;
7441
        delete this.F;
7442
        for (var a in this.c) delete q[this.c[a]];
7443
        lc(this.f);
7444
        al.J.T.call(this)
7445
    };
7446
    var il = s("yt.player.embed") || $k;
7447
    u("yt.player.embed", il);
7448
    var jl = s("yt.player.update") || cl;
7449
    u("yt.player.update", jl);
7450
    var hl = s("yt.player.destroy") || dl;
7451
    u("yt.player.destroy", hl);
7452
    s("ytPlayerOnYouTubePlayerReady") || u("ytPlayerOnYouTubePlayerReady", bl);
7453
    kh(nh);
7454
    kh(xh);
7455
    kh(Ah);
7456
    var $ = s("yt.timing") || {};
7457
    u("yt.timing", $);
7458
    $.mj = 0;
7459
    $.lj = 0;
7460
    $.ge = function (a, b) {
7461
        var c = $.timer || {};
7462
        c[a] = b ? b : qa();
7463
        $.timer = c
7464
    };
7465
    $.info = function (a, b) {
7466
        var c = $.info_args || {};
7467
        c[a] = b;
7468
        $.info_args = c
7469
    };
7470
    $.kc = function (a) {
7471
        var a = a || L("TIMING_ACTION"),
7472
            b = $.timer || {},
7473
            c = $.info_args || {},
7474
            d = b.start,
7475
            e = "",
7476
            f = [],
7477
            g = [];
7478
        delete b.start;
7479
        $.srt && (e = "&srt=" + $.srt);
7480
        b.aft && b.plev && (b.aft = Math.min(b.aft, b.plev));
7481
        for (var i in b) {
7482
            var n = Math.max(Math.round(b[i] - d), 0);
7483
            f.push(i + "." + n)
7484
        }
7485
        for (i in c) g.push(i + "=" + c[i]);
7486
        b.vr && b.gv && f.push("vl." + Math.round(b.vr - b.gv));
7487
        var r;
7488
        !b.aft && b.vr && b.cl ? r = b.cl > b.vr ? b.cl - d : b.vr - d : !b.aft && b.vr ? r = b.vr - d : b.aft || (r = b.ol - d);
7489
        f.push("aft." + Math.max(Math.round(r), 0));
7490
        Yg(["https:" == window.location.protocol ?
7491
            "https://gg.google.com/csi" : "http://csi.gstatic.com/csi", "?v=2&s=youtube&action=", a, e, "&", g.join("&"), "&rt=", f.join(",")
7492
        ].join(""))
7493
    };
7494
    $.Tc = function () {
7495
        var a = L("TIMING_ACTION"),
7496
            b = $.timer || {};
7497
        a && b.start && ($.wff && -1 != a.indexOf("ajax") && b.vr && b.cl ? $.kc() : $.wff && -1 == a.indexOf("ajax") && b.vr ? $.kc() : !$.wff && (b.ol || b.aft) && $.kc())
7498
    };
7499
    $.je = function () {
7500
        $.ge("ol");
7501
        $.Tc()
7502
    };
7503
7504
    function kl() {
7505
        this.b = {}
7506
    }
7507
    v(kl, lh);
7508
    ba(kl);
7509
    kl.prototype.O = "char-counter";
7510
    kl.prototype.register = function () {
7511
        Z(this, "keydown", this.c, "input");
7512
        Z(this, "paste", this.c, "input");
7513
        Z(this, "cut", this.c, "input")
7514
    };
7515
    kl.prototype.c = function (a) {
7516
        var b = mh(this, a);
7517
        if (b) {
7518
            var c = "true" == this.getData(b, "count-char-by-size"),
7519
                d = parseInt(this.getData(b, "char-limit"), 10);
7520
            isNaN(d) || 0 >= d || N(t(function () {
7521
                var e = parseInt(a.getAttribute("maxlength"), 10);
7522
                if (!isNaN(e)) {
7523
                    var f = pl(a, c);
7524
                    if (c) {
7525
                        if (f > e) {
7526
                            var g = a.value,
7527
                                i = g.length,
7528
                                n = 0,
7529
                                e = f - e,
7530
                                f = "",
7531
                                r = 0;
7532
                            do f += g[i - n], r = unescape(encodeURIComponent(f)).length, n++; while (r < e);
7533
                            a.value = a.value.substring(0, i - n)
7534
                        }
7535
                    } else f > e && (a.value = a.value.substring(0, e))
7536
                }
7537
                g = parseInt(this.getData(b, "warn-at-chars-remaining"),
7538
                    10);
7539
                isNaN(g) && (g = 0);
7540
                i = d - pl(a, c);
7541
                C(b, Y(this, "maxed-out"), i < g);
7542
                K(Y(this, "remaining"), b).innerHTML = i
7543
            }, this), 0)
7544
        }
7545
    };
7546
7547
    function pl(a, b) {
7548
        var c = a.value;
7549
        return b ? unescape(encodeURIComponent(c)).length : c.length
7550
    };
7551
7552
    function ql() {
7553
        this.b = {}
7554
    }
7555
    v(ql, lh);
7556
    ql.prototype.Uc = function () {
7557
        return this.Rc && 0 == Qb.indexOf("6") ? m : k
0 ignored issues
show
Best Practice introduced by
Comparing 0 to Qb.indexOf("6") using the == operator is not safe. Consider using === instead.
Loading history...
7558
    };
7559
    ql.prototype.zb = function (a) {
7560
        var b = mh(this, a);
7561
        if (b) {
7562
            x(b, Y(this, "active"));
7563
            var c = rl(this, a, b);
7564
            if (c) {
7565
                c.cardTargetNode = a;
7566
                c.cardRootNode = b;
7567
                sl(this, a, c);
7568
                var d = Y(this, "card-visible"),
7569
                    e = this.getData(a, "card-delegate-show") && this.getData(b, "card-action");
7570
                this.ia(b, "card-action", a);
7571
                V(c);
7572
                N(function () {
7573
                    e || U(c);
7574
                    x(c, d)
7575
                }, 10)
7576
            }
7577
        }
7578
    };
7579
7580
    function rl(a, b, c) {
7581
        var d = Y(a, "card"),
7582
            e = d + ce(c),
7583
            f = F(e);
7584
        if (f) return f;
7585
        var g = tl(a, c);
7586
        if (!g) return l;
7587
        f = document.createElement("div");
7588
        f.id = e;
7589
        f.className = d;
7590
        (c = Q(c, "card-class")) && x(f, c);
7591
        c = document.createElement("div");
7592
        c.className = Y(a, "card-border");
7593
        b = a.getData(b, "orientation") || "horizontal";
7594
        d = document.createElement("div");
7595
        d.className = "yt-uix-card-border-arrow yt-uix-card-border-arrow-" + b;
7596
        e = document.createElement("div");
7597
        e.className = Y(a, "card-body");
7598
        a = document.createElement("div");
7599
        a.className = "yt-uix-card-body-arrow yt-uix-card-body-arrow-" +
7600
            b;
7601
        mc(g);
7602
        e.appendChild(g);
7603
        c.appendChild(a);
7604
        c.appendChild(e);
7605
        f.appendChild(d);
7606
        f.appendChild(c);
7607
        document.body.appendChild(f);
7608
        return f
7609
    }
7610
7611
    function sl(a, b, c) {
7612
        var d = a.getData(b, "orientation") || "horizontal",
7613
            e = a.getData(b, "position"),
7614
            f = !!a.getData(b, "force-position"),
7615
            d = "horizontal" == d,
7616
            g = "bottomright" == e || "bottomleft" == e,
7617
            e = "topright" == e || "bottomright" == e,
7618
            i, n;
7619
        e && g ? (n = 7, i = 4) : e && !g ? (n = 6, i = 5) : !e && g ? (n = 5, i = 6) : (n = 4, i = 7);
7620
        var r = af(document.body),
7621
            y = af(b);
7622
        r != y && (n ^= 2);
7623
        var D;
7624
        d ? (y = b.offsetHeight / 2 - 12, D = new jb(-12, b.offsetHeight + 6)) : (y = b.offsetWidth / 2 - 6, D = new jb(b.offsetWidth + 6, -12));
7625
        var G = ef(c),
7626
            y = Math.min(y, (d ? G.height : G.width) - 24 - 6);
7627
        6 > y && (y = 6, d ? D.y +=
7628
            12 - b.offsetHeight / 2 : D.x += 12 - b.offsetWidth / 2);
7629
        var H = l;
7630
        f || (H = 10);
7631
        G = Y(a, "card-flip");
7632
        a = Y(a, "card-reverse");
7633
        C(c, G, e);
7634
        C(c, a, g);
7635
        H = ch(b, n, c, i, D, l, H);
7636
        !f && H && (H & 48 && (e = !e, n ^= 2, i ^= 2), H & 192 && (g = !g, n ^= 1, i ^= 1), C(c, G, e), C(c, a, g), ch(b, n, c, i, D));
7637
        b = K("yt-uix-card-body-arrow", c);
7638
        c = K("yt-uix-card-border-arrow", c);
7639
        d = d ? g ? "top" : "bottom" : !r && e || r && !e ? "left" : "right";
7640
        b.setAttribute("style", "");
7641
        c.setAttribute("style", "");
7642
        b.style[d] = y + "px";
7643
        c.style[d] = y + "px"
7644
    }
7645
7646
    function ul(a, b) {
7647
        var c = mh(a, b);
7648
        if (c) {
7649
            var d = rl(a, b, c);
7650
            d && (z(c, Y(a, "active")), z(d, Y(a, "card-visible")), V(d), d.cardTargetNode = l, d.cardRootNode = l)
7651
        }
7652
    }
7653
7654
    function vl(a, b, c) {
7655
        var d = mh(a, b);
7656
        if (d) {
7657
            var e = tl(a, d);
7658
            e && (e.innerHTML = c, B(d, Y(a, "active")) && (c = rl(a, b, d), sl(a, b, c), U(c)))
7659
        }
7660
    }
7661
7662
    function tl(a, b) {
7663
        var c = b.cardContentNode;
7664
        if (!c) {
7665
            var d = Y(a, "content"),
7666
                e = Y(a, "card-content"),
7667
                c = K(d, b);
7668
            A(c, d, e);
7669
            b.cardContentNode = c
7670
        }
7671
        return c
7672
    }
7673
    ql.prototype.e = {
7674
        og: 200,
7675
        pg: 200
7676
    };
7677
7678
    function wl() {
7679
        this.b = {}
7680
    }
7681
    v(wl, ql);
7682
    ba(wl);
7683
    p = wl.prototype;
7684
    p.O = "clickcard";
7685
    p.register = function () {
7686
        Z(this, "click", this.Ug, "target");
7687
        Z(this, "click", this.Tg, "close")
7688
    };
7689
    p.Ug = function (a) {
7690
        var b = this.getData(a, "card-target"),
7691
            a = b ? F(b) : a,
7692
            b = mh(this, a);
7693
        B(b, Y(this, "active")) ? (ul(this, a), z(b, Y(this, "active"))) : (this.zb(a), x(b, Y(this, "active")))
7694
    };
7695
    p.zb = function (a) {
7696
        wl.J.zb.call(this, a);
7697
        var b = mh(this, a);
7698
        xl(this);
7699
        Q(b, "click-outside-persists") || (this.c = a, this.f = R(document, "click", t(this.Sf, this)))
7700
    };
7701
    p.Sf = function (a) {
7702
        Cc(a.target, "yt-uix" + (this.O ? "-" + this.O : "") + "-card") || xl(this)
7703
    };
7704
7705
    function xl(a) {
7706
        a.c && (ul(a, a.c), a.c = l, se(a.f))
7707
    }
7708
    p.Tg = function (a) {
7709
        (a = Cc(a, Y(this, "card"))) && ul(this, a.cardTargetNode)
7710
    };
7711
7712
    function yl() {
7713
        this.b = {}
7714
    }
7715
    v(yl, lh);
7716
    ba(yl);
7717
    yl.prototype.O = "close";
7718
    yl.prototype.register = function () {
7719
        Z(this, "click", this.c)
7720
    };
7721
    yl.prototype.c = function (a) {
7722
        var b, c = this.getData(a, "close-parent-class"),
7723
            d = this.getData(a, "close-parent-id");
7724
        d ? b = F(d) : c && (b = Cc(a, c));
7725
        b && V(b);
7726
        this.ia(a, "close-callback", b)
7727
    };
7728
7729
    function zl() {
7730
        this.b = {}
7731
    }
7732
    v(zl, lh);
7733
    ba(zl);
7734
    zl.prototype.O = "contextlink";
7735
    zl.prototype.register = function () {
7736
        Z(this, "click", this.c)
7737
    };
7738
    zl.prototype.c = function (a) {
7739
        var b = a.href;
7740
        if (b) {
7741
            var c = vf(b);
7742
            if (c == window.location.host || !c && 0 == b.lastIndexOf("/", 0))
0 ignored issues
show
Best Practice introduced by
Comparing 0 to b.lastIndexOf("/", 0) using the == operator is not safe. Consider using === instead.
Loading history...
7743
                if (c = xf(b), c = yf(c)) b = Gf(b, "v"), b == l && (b = "default_tag"), (a = ii(a)) && Fi(b, a)
7744
        }
7745
    };
7746
7747
    function Al() {
7748
        this.b = {}
7749
    }
7750
    v(Al, ql);
7751
    ba(Al);
7752
    p = Al.prototype;
7753
    p.O = "hovercard";
7754
    p.register = function () {
7755
        Z(this, "mouseenter", this.Lg, "target");
7756
        Z(this, "mouseleave", this.Ng, "target");
7757
        Z(this, "mouseenter", this.Mg, "card");
7758
        Z(this, "mouseleave", this.Og, "card")
7759
    };
7760
    p.Lg = function (a) {
7761
        if (Bl != a) {
7762
            Bl && (ul(this, Bl), Bl = l);
7763
            var b = t(this.zb, this, a),
7764
                c = parseInt(this.getData(a, "delay-show"), 10),
7765
                b = N(b, -1 < c ? c : this.e.og);
7766
            this.setData(a, "card-timer", b.toString());
7767
            Bl = a;
7768
            a.alt && (this.setData(a, "card-alt", a.alt), a.alt = "");
7769
            a.title && (this.setData(a, "card-title", a.title), a.title = "")
7770
        }
7771
    };
7772
    p.Ng = function (a) {
7773
        var b = parseInt(this.getData(a, "card-timer"), 10);
7774
        Ud(b);
7775
        mh(this, a).isCardHidable = k;
7776
        b = parseInt(this.getData(a, "delay-hide"), 10);
7777
        b = -1 < b ? b : this.e.pg;
7778
        N(t(this.qg, this, a), b);
7779
        if (b = this.getData(a, "card-alt")) a.alt = b;
7780
        if (b = this.getData(a, "card-title")) a.title = b
7781
    };
7782
    p.qg = function (a) {
7783
        mh(this, a).isCardHidable && (ul(this, a), Bl = l)
7784
    };
7785
    p.Mg = function (a) {
7786
        a && (a.cardRootNode.isCardHidable = m)
7787
    };
7788
    p.Og = function (a) {
7789
        a && ul(this, a.cardTargetNode)
7790
    };
7791
    var Bl = l;
7792
7793
    function Cl() {
7794
        this.b = {}
7795
    }
7796
    v(Cl, lh);
7797
    ba(Cl);
7798
    Cl.prototype.O = "redirect-link";
7799
    Cl.prototype.register = function () {
7800
        Z(this, "click", this.c)
7801
    };
7802
    Cl.prototype.c = function (a) {
7803
        if (!Q(a, "redirect-href-updated")) {
7804
            P(a, "redirect-href-updated", "true");
7805
            var b = L("XSRF_REDIRECT_TOKEN"),
7806
                c = L("XSRF_FIELD_NAME");
7807
            if (b && c) {
7808
                var d = {};
7809
                d.q = a.href;
7810
                d[c] = b;
7811
                a.href = Lf("/redirect", d)
7812
            }
7813
        }
7814
    };
7815
7816
    function Dl() {
7817
        this.b = {}
7818
    }
7819
    v(Dl, lh);
7820
    ba(Dl);
7821
    Dl.prototype.O = "sessionlink";
7822
    Dl.prototype.register = function () {
7823
        Z(this, "click", this.c)
7824
    };
7825
    Dl.prototype.c = function (a) {
7826
        El(a)
7827
    };
7828
7829
    function El(a) {
7830
        var b = Q(a, "sessionlink-target") || a.href;
7831
        b && (a = Q(a, "sessionlink") || "", a = Hf(a), Vg(b, a))
7832
    };
7833
7834
    function Fl() {
7835
        this.b = {}
7836
    }
7837
    v(Fl, lh);
7838
    ba(Fl);
7839
    Fl.prototype.O = "tile";
7840
    Fl.prototype.register = function () {
7841
        Z(this, "click", this.c)
7842
    };
7843
    Fl.prototype.c = function (a, b, c) {
7844
        if (!Ac(c.target, "a") && !Ac(c.target, "button") && (a = K(Y(this, "link"), a))) E && !Sb(9) ? a.click() : (B(a, "yt-uix-sessionlink") && El(a), Gh(a.href))
7845
    };
7846
7847
    function Gl(a, b) {
7848
        this.c = a;
7849
        this.e = m;
7850
        this.ea = new gg;
7851
        T(this.c, "click", t(this.n, this), "yt-dialog-dismiss");
7852
        Hl(this, "content");
7853
        this.f = b
7854
    }
7855
    var Il = {
7856
        LOADING: "loading",
7857
        mh: "content",
7858
        kj: "working"
7859
    };
7860
7861
    function Hl(a, b) {
7862
        var c = K("yt-dialog-fg-content", a.c),
7863
            d = [];
7864
        mb(Il, function (a) {
7865
            d.push("yt-dialog-show-" + a)
7866
        });
7867
        A(c, d, "yt-dialog-show-" + b)
7868
    }
7869
7870
    function Jl(a) {
7871
        if (!a.e) {
7872
            var b = nh.getInstance(),
7873
                c = I(Y(b, "menu"), a.c);
7874
            w(c, function (a) {
7875
                a = wh(b, a);
7876
                P(a, "button-menu-root-container", "yt-dialog-base")
7877
            });
7878
            a.e = k
7879
        }
7880
        document.activeElement && document.activeElement != document.body && document.activeElement.blur();
7881
        a.b || (a.b = F("yt-dialog-bg"), a.b || (a.b = document.createElement("div"), a.b.id = "yt-dialog-bg", a.b.className = "yt-dialog-bg", document.body.appendChild(a.b)));
7882
        a.b.style.height = ec() + "px";
7883
        U(a.b);
7884
        var c = document.getElementsByTagName("embed"),
7885
            d = document.getElementsByTagName("object"),
7886
            e = t(function (a) {
7887
                var b = a.style.visibility;
7888
                "hidden" != b && (P(a, "dialog-hidden", "true"), b && P(a, "dialog-visibility-value", b), a.style.visibility = "hidden")
7889
            }, a);
7890
        w(c, e);
7891
        w(d, e);
7892
        a.f || R(document, "keydown", t(a.i, a));
7893
        U(a.c)
7894
    }
7895
    Gl.prototype.n = function (a) {
7896
        a = a.currentTarget;
7897
        a.disabled || (a = Q(a, "action") || "", Kl(this, a))
7898
    };
7899
7900
    function Kl(a, b) {
7901
        V(a.c);
7902
        V(a.b);
7903
        var c = document.getElementsByTagName("embed"),
7904
            d = document.getElementsByTagName("object"),
7905
            e = t(function (a) {
7906
                if (Q(a, "dialog-hidden")) {
7907
                    $d(a, "dialog-hidden");
7908
                    var b = Q(a, "dialog-visibility-value");
7909
                    b ? a.style.visibility = b : a.style.visibility = l
7910
                }
7911
            }, a);
7912
        w(c, e);
7913
        w(d, e);
7914
        a.f || ue(document, "keydown", t(a.i, a));
7915
        a.ea.za("all");
7916
        a.ea.za(b)
7917
    }
7918
    Gl.prototype.setTitle = function (a) {
7919
        tc(K("yt-dialog-title", this.c), a)
7920
    };
7921
    Gl.prototype.i = function (a) {
7922
        27 == a.keyCode && Kl(this, "cancel")
7923
    };
7924
    u("yt.ui.Dialog", Gl);
7925
    var Ll, Ml, Nl = m;
7926
7927
    function Ol() {
7928
        if (!F("create-channel-identity-css") && (Ug(L("CREATE_CHANNEL_JS_URL"), Pl), !F("create-channel-identity-css"))) {
7929
            var a = L("CREATE_CHANNEL_CSS_URL"),
7930
                b = J("head", j, j)[0],
7931
                a = gc("link", {
7932
                    id: "create-channel-identity-css",
7933
                    rel: "stylesheet",
7934
                    href: a
7935
                });
7936
            b.insertBefore(a, b.childNodes[0] || l)
7937
        }
7938
    }
7939
7940
    function Pl() {
7941
        Nl = k;
7942
        Ll && Ql(Ll)
7943
    }
7944
7945
    function Rl() {
7946
        var a = L("CREATE_CHANNEL_NEXT_URL");
7947
        a && ("/" == a ? document.location.href = a : window.history.back())
7948
    }
7949
7950
    function Sl(a) {
7951
        if (!Ml) {
7952
            var b = F("create-channel-identity-lb");
7953
            if (!b) return;
7954
            Ml = new Gl(b);
7955
            Ml.ea.ra("all", Rl)
7956
        }
7957
        b = "default";
7958
        if (a && (a = Q(a.currentTarget, "upsell"), "upload" == a || "playlist" == a || "comment" == a)) b = a;
7959
        Ql(b)
7960
    }
7961
7962
    function Ql(a) {
7963
        Ml.setTitle(L("CREATE_CHANNEL_DIALOG_TITLE_" + a.toUpperCase()));
7964
        Hl(Ml, "loading");
7965
        Jl(Ml);
7966
        if (Nl) {
7967
            var b;
7968
            b = "upload" == a ? L("CREATE_CHANNEL_NEXT_URL_UPLOAD") : document.location.href;
7969
            L("HAS_GPLUS") ? s("yt.www.account.CreateChannelLightboxForm.fetchAndShow")(a, b) : s("yt.www.account.CreateGplusDialog.fetchAndShow")(a, b)
7970
        } else Ll = a
7971
    };
7972
    var Tl, Ul, Vl, Wl, Xl = m;
7973
7974
    function Yl(a) {
7975
        a ? document.body.style.cursor = "wait" : "wait" == document.body.style.cursor && (document.body.style.cursor = "default")
7976
    }
7977
7978
    function Zl() {
7979
        if (!F("link-gplus-css")) {
7980
            Ug(L("LINK_GPLUS_JS_URL"), $l);
7981
            var a = L("LINK_GPLUS_CSS_URL"),
7982
                b = J("head", j, j)[0],
7983
                a = gc("link", {
7984
                    id: "link-gplus-css",
7985
                    rel: "stylesheet",
7986
                    href: a
7987
                });
7988
            b.insertBefore(a, b.childNodes[0] || l)
7989
        }
7990
    }
7991
7992
    function $l() {
7993
        Xl = k;
7994
        Ul && Xl && am()
7995
    }
7996
7997
    function bm(a) {
7998
        if (!Tl) {
7999
            var b = F("link-gplus-lb");
8000
            if (!b) return;
8001
            Tl = new Gl(b, k)
8002
        }
8003
        a ? (b = Cc(a.target, "link-gplus-lightbox"), Vl = B(b, "ignore-opt-out"), Wl = Q(b, "upsell"), a.preventDefault()) : (Vl = m, Wl = "signin");
8004
        Ul = k;
8005
        Yl(k);
8006
        Xl && am()
8007
    }
8008
8009
    function am() {
8010
        var a = "";
8011
        "upload" == Wl ? a = "/my_videos_upload" : "signin" == Wl && (a = L("LINK_GPLUS_NEXT_URL"));
8012
        s("yt.www.account.LinkGplusDialog.fetchAndShow")(Wl, a, Vl)
8013
    };
8014
8015
    function cm(a, b) {
8016
        this.b = a;
8017
        this.c = b;
8018
        R(F("premium-yva"), "click", t(this.rd, this))
8019
    }
8020
    p = cm.prototype;
8021
    p.kh = function () {
8022
        V("ad_creative_1");
8023
        W("ads-masthead-hide");
8024
        Qi(F("page"), k);
8025
        Ni();
8026
        this.c || V("ad_creative_collapse_btn_1");
8027
        U("ad_creative_expand_btn_1");
8028
        dm(this);
8029
        Zg("homepage_collapse_masthead_ad", j, j)
8030
    };
8031
    p.rd = function () {
8032
        U("ad_creative_expand_btn_1");
8033
        mc(F("premium-yva"));
8034
        Se(document.getElementById("feed"), {
8035
            "margin-top": 0
8036
        });
8037
        dm(this)
8038
    };
8039
    p.ih = function () {
8040
        A(document.getElementById("premium-yva"), "premium-yva-unexpanded", "premium-yva-expanded")
8041
    };
8042
    p.jh = function () {
8043
        A(document.getElementById("premium-yva"), "premium-yva-expanded", "premium-yva-unexpanded")
8044
    };
8045
8046
    function dm(a) {
8047
        He.getInstance();
8048
        Me("HIDDEN_MASTHEAD_ID", a.b);
8049
        Pe()
8050
    }
8051
    p.gh = function () {
8052
        V("premium-yva");
8053
        z(F("premium-yva"), "premium-yva-unexpanded")
8054
    };
8055
    p.lh = function () {
8056
        He.getInstance();
8057
        Me("HIDDEN_MASTHEAD_ID", m);
8058
        Pe();
8059
        Zg("homepage_expand_masthead_ad", j, j);
8060
        Gh(document.location.href)
8061
    };
8062
    var em;
8063
8064
    function fm() {
8065
        var a = Mh();
8066
        V(K("flag-comment-step1", a));
8067
        U(K("flag-comment-step2", a));
8068
        V(K("flag-comment-step3", a))
8069
    }
8070
8071
    function gm() {
8072
        var a = Mh(),
8073
            b = K("flag-comment-form", a),
8074
            c = K("flag-comment-block-user-input", a),
8075
            d = K("submit-flag-comment", a),
8076
            e = K("flag-comment-error-msg", a);
8077
        V(e);
8078
        c.disabled = k;
8079
        d.disabled = k;
8080
        X("/comment_servlet", {
8081
            format: "XML",
8082
            method: "POST",
8083
            o: {
8084
                flag_comment: 1
8085
            },
8086
            C: Hf(Qc(b)),
8087
            j: function (b, c) {
8088
                c && c.html_content ? (V(K("flag-comment-step1", a)), V(K("flag-comment-step2", a)), U(K("flag-comment-step3", a)), K("flag-comment-captcha-placeholder", a).innerHTML = c.html_content) : Lh.getInstance().cc()
8089
            },
8090
            onError: function (a, b) {
8091
                var i =
8092
                    b && b.error_message;
8093
                if (i) {
8094
                    var n = K("yt-alert-message", e);
8095
                    tc(n, i)
8096
                }
8097
                U(e);
8098
                c.disabled = m;
8099
                d.disabled = m
8100
            }
8101
        })
8102
    }
8103
8104
    function hm(a) {
8105
        var b = Mh(),
8106
            c = K("abuse-type-placeholder", b),
8107
            a = Ac(a.currentTarget, "LABEL");
8108
        tc(c, yc(a));
8109
        K("continue-flag-comment", b).disabled = m
8110
    };
8111
8112
    function im(a, b, c) {
8113
        this.i = !!c;
8114
        this.z = a;
8115
        this.wa = he("button", l, a);
8116
        this.V = he("textarea", l, a);
8117
        this.Oa = l;
8118
        this.c = K("comments-remaining-count", this.z);
8119
        this.f = parseInt(Q(this.c, "max-count"), 10);
8120
        this.Ya = K("comments-post-message", this.z);
8121
        this.Xc = K("yt-alert-content", this.Ya);
8122
        this.mc = K("comments-threshold-countdown", this.z);
8123
        this.nc = K("comments-threshold-count", this.mc);
8124
        this.e = [];
8125
        this.lc = [];
8126
        this.b = l;
8127
        jm(this);
8128
        km(this, this.V, "focus", this.jd);
8129
        km(this, this.V, "blur", this.Ge);
8130
        km(this, this.z, "submit", this.fd);
8131
        km(this,
8132
            this.V, "change", this.kd);
8133
        km(this, this.V, "keyup", this.kd);
8134
        km(this, this.V, "keydown", this.He);
8135
        b && this.jd()
8136
    }
8137
8138
    function lm(a) {
8139
        mm(a);
8140
        nm(a);
8141
        z(a.z, "has-focus");
8142
        a.wa.disabled = m;
8143
        a.V.value = "";
8144
        jm(a);
8145
        a.V.blur();
8146
        a.b = l;
8147
        se(a.e);
8148
        a.e = [];
8149
        w(a.lc, function (a) {
8150
            Vd(a)
8151
        });
8152
        a.lc = [];
8153
        $d(a.z, "initialized");
8154
        W("comment-form-reset")
8155
    }
8156
    p = im.prototype;
8157
    p.focus = function () {
8158
        this.V.focus()
8159
    };
8160
8161
    function km(a, b, c, d) {
8162
        a.e.push(R(b, c, t(d, a)))
8163
    }
8164
8165
    function mm(a) {
8166
        a.Oa && (a.Oa.innerHTML = "")
8167
    }
8168
8169
    function jm(a) {
8170
        var b = a.f - a.V.value.length;
8171
        a.c.innerHTML = b + "";
8172
        b = 0 > b;
8173
        C(a.c, "too-many", b);
8174
        a.wa.disabled = b
8175
    }
8176
8177
    function nm(a) {
8178
        V(a.mc);
8179
        U(K("comments-remaining"));
8180
        a.nc.innerHTML = "";
8181
        a.wa.disabled = m
8182
    }
8183
    p.kd = function () {
8184
        this.V.readOnly || jm(this)
8185
    };
8186
    p.He = function (a) {
8187
        if (this.i) switch (a.keyCode) {
8188
        case 13:
8189
            this.fd(a);
8190
            break;
8191
        case 27:
8192
            lm(this)
8193
        }
8194
    };
8195
    p.jd = function () {
8196
        B(this.z, "has-focus") || V(this.Ya);
8197
        x(this.z, "has-focus");
8198
        W("comments-focus", this.z)
8199
    };
8200
    p.Ge = function () {
8201
        W("comments-blur", this.z)
8202
    };
8203
    p.fd = function (a) {
8204
        a.preventDefault();
8205
        if (!this.wa.disabled) {
8206
            this.wa.disabled = k;
8207
            this.V.readOnly = k;
8208
            a = Hf(Qc(this.z));
8209
            a.screen = Df({
8210
                h: window.screen.height,
8211
                w: window.screen.width,
8212
                d: window.screen.colorDepth
8213
            });
8214
            var b = a.comment,
8215
                b = {
8216
                    return_ajax: "true",
8217
                    len: b.length,
8218
                    wc: b.split(/\s+/).length
8219
                };
8220
            this.z.reply_parent_id.value && (b.reply = 1);
8221
            this.b && (b.tag = this.b);
8222
            var c = L("PLAYBACK_ID");
8223
            c && (a.plid = c);
8224
            X(this.z.action, {
8225
                format: "XML",
8226
                method: "POST",
8227
                o: b,
8228
                C: a,
8229
                S: function (a, b) {
8230
                    var c = b.str_code;
8231
                    switch (c) {
8232
                    case "OK":
8233
                        c = document.createElement("ul");
8234
                        c.innerHTML = b.html_content;
8235
                        c = nc(c);
8236
                        if (this.z.reply_parent_id.value) {
8237
                            var g = Ac(this.z, l, "comments-post-container"),
8238
                                i = Ac(g, l, "comment");
8239
                            mc(g);
8240
                            A(i, "replying", "has-child");
8241
                            x(c, "child");
8242
                            C(c, "last", !(i.nextElementSibling != j ? i.nextElementSibling : oc(i.nextSibling)));
8243
                            i.parentNode && i.parentNode.insertBefore(c, i.nextSibling)
8244
                        } else g = Ac(this.z, l, "comments-section"), g = K("comment-list", g), g.insertBefore(c, g.childNodes[0] || l), lm(this);
8245
                        Oi(c);
8246
                        W("comment-submit-success");
8247
                        break;
8248
                    case "PENDING":
8249
                        mm(this);
8250
                        this.Xc.innerHTML =
8251
                            O("COMMENT_PENDING");
8252
                        A(this.Ya, "yt-alert-error", "yt-alert-info");
8253
                        U(this.Ya);
8254
                        break;
8255
                    default:
8256
                        switch (c) {
8257
                        case "PENDING":
8258
                            g = O("COMMENT_PENDING");
8259
                            break;
8260
                        case "BLOCKED":
8261
                            g = O("COMMENT_BLOCKED");
8262
                            break;
8263
                        case "EMAIL":
8264
                            g = O("COMMENT_ERROR_EMAIL");
8265
                            break;
8266
                        case "INLINE_CAPTCHAFAIL":
8267
                            g = O("COMMENT_CAPTCHAFAIL");
8268
                            break;
8269
                        case "SHOW_COUNTDOWN":
8270
                            g = O("SHOW_COUNTDOWN");
8271
                            break;
8272
                        case "FAILED_OWNER_LINKING":
8273
                            g = O("COMMENT_OWNER_LINKING")
8274
                        }
8275
                        g = g || l || O("COMMENT_ERROR");
8276
                        this.Xc.innerHTML = g;
8277
                        A(this.Ya, "yt-alert-info", "yt-alert-error");
8278
                        U(this.Ya);
8279
                        switch (c) {
8280
                        case "INLINE_CAPTCHA":
8281
                        case "INLINE_CAPTCHAFAIL":
8282
                            X("/comment_servlet?gimme_captcha=1", {
8283
                                format: "XML",
8284
                                method: "POST",
8285
                                C: {
8286
                                    session_token: M("comment_servlet")
8287
                                },
8288
                                j: function (a, b) {
8289
                                    if (!this.Oa) {
8290
                                        this.Oa = document.createElement("div");
8291
                                        this.Oa.className = "comment-captcha";
8292
                                        var c = this.V;
8293
                                        c.parentNode && c.parentNode.insertBefore(this.Oa, c.nextSibling)
8294
                                    }
8295
                                    this.Oa.innerHTML = b.html_content;
8296
                                    this.wa.disabled = m
8297
                                },
8298
                                B: this
8299
                            });
8300
                            break;
8301
                        case "SHOW_COUNTDOWN":
8302
                            var n = parseInt(b.countdown_timer, 10) || 30;
8303
                            this.nc.innerHTML = n;
8304
                            V(K("comments-remaining"));
8305
                            U(this.mc);
8306
                            this.wa.disabled = k;
8307
                            var r = Td(t(function () {
8308
                                0 == n ? (Vd(r), nm(this)) : (n--, this.nc.innerHTML = n)
0 ignored issues
show
Best Practice introduced by
Comparing 0 to n using the == operator is not safe. Consider using === instead.
Loading history...
8309
                            }, this), 1E3);
8310
                            this.lc.push(r);
8311
                            break;
8312
                        default:
8313
                            this.wa.disabled = m, mm(this)
8314
                        }
8315
                    }
8316
                    this.V.readOnly = m
8317
                },
8318
                B: this
8319
            });
8320
            Kh("comment")
8321
        }
8322
    };
8323
8324
    function om(a) {
8325
        this.k = a;
8326
        K("watch-more-comments-button");
8327
        this.b = !!L("ENABLE_LIVE_COMMENTS");
8328
        this.e = [];
8329
        this.qb()
8330
    }
8331
    om.prototype.qb = function () {
8332
        var a = K("comments-pagination", this.k);
8333
        a && Q(a, "ajax-enabled") && this.e.push(T(this.k, "click", t(this.c, this), "yt-uix-pager-button"))
8334
    };
8335
    om.prototype.c = function (a) {
8336
        a.preventDefault();
8337
        a = a.currentTarget;
8338
        if (!B(a, "yt-uix-button-toggled")) {
8339
            var b = parseInt(Q(a, "page"), 10);
8340
            U("comments-loading");
8341
            W("comments-page-changing");
8342
            P(this.k, "type", "everything");
8343
            X("/watch_ajax?action_get_comments=1", {
8344
                format: "XML",
8345
                o: {
8346
                    v: L("VIDEO_ID"),
8347
                    p: b,
8348
                    commentthreshold: L("COMMENTS_THRESHHOLD"),
8349
                    commenttype: "everything",
8350
                    enable_live_comments: this.b ? "yes" : l,
8351
                    page_size: L("COMMENTS_PAGE_SIZE"),
8352
                    source: L("COMMENT_SOURCE")
8353
                },
8354
                j: function (a, d) {
8355
                    var e = d.html_content;
8356
                    if (e) {
8357
                        this.k.innerHTML =
8358
                            e;
8359
                        Oi(this.k);
8360
                        var e = K("comment-list", this.k),
8361
                            f = K("live-comments-setting", this.k);
8362
                        e && W("comments-page-changed", e, f, b)
8363
                    }
8364
                    V("comments-loading")
8365
                },
8366
                B: this
8367
            })
8368
        }
8369
    };
8370
8371
    function pm(a, b, c) {
8372
        a = Ac(a, "form");
8373
        ae(a, "initialized") || (P(a, "initialized", "true"), em = new im(a, !b, c), b && em.focus())
8374
    }
8375
    var qm = [];
8376
8377
    function rm(a) {
8378
        var a = a.currentTarget,
8379
            b = Ac(a, l, "comment");
8380
        switch (Q(a, "action")) {
8381
        case "approve":
8382
            var a = Q(b, "id"),
8383
                c = L("VIDEO_ID");
8384
            z(b, "pending");
8385
            X("/comment_servlet?field_approve_comment=1", {
8386
                format: "XML",
8387
                method: "POST",
8388
                C: {
8389
                    comment_id: a,
8390
                    entity_id: c,
8391
                    session_token: M("comment_servlet")
8392
                },
8393
                onError: function () {
8394
                    x(b, "pending")
8395
                }
8396
            });
8397
            break;
8398
        case "block":
8399
            confirm(O("BLOCK_USER")) && (sm(b, k), x(b, "blocked"));
8400
            break;
8401
        case "unblock":
8402
            sm(b, m);
8403
            z(b, "blocked");
8404
            break;
8405
        case "flag-in-place":
8406
            if (tm()) {
8407
                var d = F("comment-flag-area"),
8408
                    a = Q(b, "id"),
8409
                    c = Q(b, "author-id"),
8410
                    e = yc(K("author", b)),
8411
                    f = K("comment-text", b).innerHTML,
8412
                    g = L("VIDEO_ID");
8413
                Lh.getInstance().Pd(d);
8414
                d = Mh();
8415
                K("flagged-comment-id", d).value = a;
8416
                K("flagged-comment-author-id", d).value = c;
8417
                K("flagged-comment-video-id", d).value = g;
8418
                tc(K("flagged-comment-author-name", d), e);
8419
                K("flagged-comment-text", d).appendChild(jc(f));
8420
                R(K("continue-flag-comment", d), "click", fm);
8421
                T(d, "click", gm, "submit-flag-comment");
8422
                T(d, "click", hm, "abuse-type-radio-input")
8423
            }
8424
            break;
8425
        case "flag":
8426
            tm() && (a = Q(b, "id"), c = L("VIDEO_ID"), V(b), x(b,
8427
                "flagged"), X("/comment_servlet", {
8428
                format: "XML",
8429
                method: "POST",
8430
                o: {
8431
                    mark_comment_as_spam: a,
8432
                    entity_id: c
8433
                },
8434
                C: {
8435
                    session_token: M("comment_servlet")
8436
                },
8437
                onError: function () {
8438
                    U(b);
8439
                    z(b, "flagged")
8440
                }
8441
            }));
8442
            break;
8443
        case "unflag":
8444
            a = Q(b, "id");
8445
            X("/comment_servlet", {
8446
                format: "XML",
8447
                method: "POST",
8448
                C: {
8449
                    unmark_comment_as_spam: a,
8450
                    entity_id: L("VIDEO_ID"),
8451
                    session_token: M("comment_servlet")
8452
                }
8453
            });
8454
            break;
8455
        case "hide":
8456
            x(b, "hidden");
8457
            break;
8458
        case "show":
8459
            z(b, "hidden");
8460
            break;
8461
        case "remove":
8462
            a = Q(b, "id");
8463
            c = L("VIDEO_ID");
8464
            V(b);
8465
            X("/comment_servlet?remove_comment=1", {
8466
                format: "XML",
8467
                method: "POST",
8468
                C: {
8469
                    comment_id: a,
8470
                    entity_id: c,
8471
                    session_token: M("comment_servlet")
8472
                },
8473
                onError: function () {
8474
                    U(b)
8475
                }
8476
            });
8477
            break;
8478
        case "reply":
8479
            um(b);
8480
            break;
8481
        case "realtime-reply":
8482
            tm() && (vm(b), em || (a = K("comments-textarea", F("comments-view")), pm(a)), a = em, lm(a), a.focus());
8483
            break;
8484
        case "share":
8485
            wm(b);
8486
            break;
8487
        case "close-share":
8488
            vm(b);
8489
            break;
8490
        case "vote-up":
8491
            xm(b, k);
8492
            break;
8493
        case "vote-down":
8494
            xm(b, m);
8495
            break;
8496
        case "show-parent":
8497
            a = Q(b, "id");
8498
            c = L("VIDEO_ID");
8499
            z(b, "has-child");
8500
            x(b, "child");
8501
            if (e = F("parent-comment-loading")) {
8502
                var i =
8503
                    ge(e);
8504
                b.parentNode && b.parentNode.insertBefore(i, b);
8505
                U(i)
8506
            }
8507
            X("/comment_servlet?get_comment_parent=1", {
8508
                format: "XML",
8509
                method: "POST",
8510
                C: {
8511
                    comment_id: a,
8512
                    entity_id: c,
8513
                    session_token: M("comment_servlet")
8514
                },
8515
                j: function (a, c) {
8516
                    var d = document.createElement("ul");
8517
                    d.innerHTML = c.html_content;
8518
                    b.parentNode && b.parentNode.insertBefore(nc(d), b);
8519
                    mc(i)
8520
                },
8521
                onError: function (a, c) {
8522
                    x(b, "has-child");
8523
                    z(b, "child");
8524
                    mc(i);
8525
                    c && c.error_message ? window.alert(c.error_message) : window.alert("Request failed, please try later.")
8526
                }
8527
            })
8528
        }
8529
    }
8530
8531
    function tm() {
8532
        return L("COMMENTS_SIGNIN_URL") ? (Gh(L("COMMENTS_SIGNIN_URL")), m) : !L("COMMENTS_YPC_CAN_POST_OR_REACT_TO_COMMENT") ? m : k
8533
    }
8534
8535
    function sm(a, b) {
8536
        var c = {};
8537
        c["action_" + (b ? "" : "un") + "block_commenter"] = 1;
8538
        var d = Q(a, "id");
8539
        X("/link_ajax", {
8540
            format: "XML",
8541
            method: "POST",
8542
            o: c,
8543
            C: {
8544
                session_token: M("link_ajax"),
8545
                comment_id: d
8546
            },
8547
            j: function (a, b) {
8548
                b && b.success_message && window.alert(b.success_message)
8549
            }
8550
        })
8551
    }
8552
8553
    function um(a) {
8554
        if (tm())
8555
            if (B(a, "replying")) ym(a);
8556
            else {
8557
                x(a, "replying");
8558
                vm(a);
8559
                var b = K("comments-post", F("watch7-discussion") || F("watch7-discussion")),
8560
                    b = ge(b),
8561
                    c = document.createElement("div");
8562
                c.className = "comments-post-container";
8563
                a.appendChild(c);
8564
                c.appendChild(b);
8565
                b = new im(b);
8566
                lm(b);
8567
                c = Q(a, "id");
8568
                b.z.reply_parent_id.value = c;
8569
                if (a = Q(a, "tag")) b.b = a;
8570
                b.focus()
8571
            }
8572
    }
8573
8574
    function ym(a) {
8575
        B(a, "replying") && (z(a, "replying"), a = K("comments-post-container", a), mc(a))
8576
    }
8577
8578
    function wm(a) {
8579
        if (!B(a, "sharing")) {
8580
            x(a, "sharing");
8581
            ym(a);
8582
            var b = ge(F("comment-share-area")),
8583
                c = document.createElement("div");
8584
            c.className = "comments-post-container";
8585
            a.appendChild(c);
8586
            c.appendChild(b);
8587
            var d = Q(a, "id"),
8588
                c = L("COMMENT_SHARE_URL"),
8589
                c = c.replace("_COMMENT_ID_", d);
8590
            K("comment-share-url", b).value = c;
8591
            for (var a = K("comment-text", a), e, a = yc(nc(a)), c = [], f = 0; f < a.length; f++) {
8592
                var g = c,
8593
                    i = f,
8594
                    n;
8595
                n = a.charAt(f);
8596
                if (n in La) n = La[n];
8597
                else if (n in Ja) n = La[n] = Ja[n];
8598
                else {
8599
                    var r = n,
8600
                        y = n.charCodeAt(0);
8601
                    if (31 < y && 127 > y) r = n;
8602
                    else {
8603
                        if (256 >
8604
                            y) {
8605
                            if (r = "\\x", 16 > y || 256 < y) r += "0"
8606
                        } else r = "\\u", 4096 > y && (r += "0");
8607
                        r += y.toString(16).toUpperCase()
8608
                    }
8609
                    n = La[n] = r
8610
                }
8611
                g[i] = n
8612
            }
8613
            e = c.join("");
8614
            a = I("icon-comment-share", b);
8615
            w(a, function (a) {
8616
                var b = a.getAttribute("action"),
8617
                    b = b.replace("_COMMENT_ID_", d),
8618
                    c;
8619
                c = -1 != b.indexOf("twitter") ? Ia(e, 80) : Ia(e, 150);
8620
                b = b.replace("_COMMENT_TEXT_", c);
8621
                qm.push(R(a, "click", t(function (a) {
8622
                    eval(a)
8623
                }, q, b)))
8624
            });
8625
            U(b)
8626
        }
8627
    }
8628
8629
    function vm(a) {
8630
        B(a, "sharing") && (z(a, "sharing"), a = K("comments-post-container", a), mc(a))
8631
    }
8632
8633
    function xm(a, b) {
8634
        if (tm() && !Q(a, "voted")) {
8635
            var c = Q(a, "id"),
8636
                d = L("VIDEO_ID"),
8637
                e = Q(a, "score"),
8638
                f = b ? 1 : -1;
8639
            P(a, "voted", f + "");
8640
            b ? A(a, "voted-down", "voted-up") : A(a, "voted-up", "voted-down");
8641
            c = {
8642
                a: f,
8643
                id: c,
8644
                video_id: d,
8645
                old_vote: e
8646
            };
8647
            (d = Q(a, "tag")) && (c.tag = d);
8648
            X("/comment_voting", {
8649
                format: "XML",
8650
                method: "POST",
8651
                o: c,
8652
                C: {
8653
                    session_token: M("comment_voting")
8654
                }
8655
            })
8656
        }
8657
    };
8658
    var zm = m,
8659
        Am = m;
8660
8661
    function Bm(a) {
8662
        var b = {
8663
                video_ids: a.$c,
8664
                playlist_id: a.xe || "",
8665
                new_playlist_name: a.bd || "",
8666
                session_token: M("addto_ajax")
8667
            },
8668
            c = L("PLAYBACK_ID");
8669
        c && (b.plid = c);
8670
        c = {};
8671
        a.ad && (c["private"] = a.ad);
8672
        a.qc && (c.feature = a.qc);
8673
        var d = "";
8674
        switch (a.Zc) {
8675
        case "PL":
8676
            d = a.bd ? "action_add_to_new_playlist" : "action_add_to_playlist";
8677
            break;
8678
        case "FL":
8679
            d = "action_add_to_favorites";
8680
            break;
8681
        case "WL":
8682
            d = "action_add_to_watch_later_list"
8683
        }
8684
        c[d] = 1;
8685
        X("/addto_ajax", {
8686
            pb: k,
8687
            format: "XML",
8688
            method: "POST",
8689
            o: c,
8690
            C: b,
8691
            B: a.B,
8692
            onError: a.onError,
8693
            j: a.j
8694
        })
8695
    };
8696
8697
    function Cm() {}
8698
    ba(Cm);
8699
    Cm.prototype.b = 0;
8700
    Cm.getInstance();
8701
8702
    function Dm(a) {
8703
        this.e = a || Zb()
8704
    }
8705
    v(Dm, jj);
8706
    p = Dm.prototype;
8707
    p.Qf = Cm.getInstance();
8708
    p.Fd = l;
8709
    p.xa = m;
8710
    p.$ = l;
8711
    p.cb = l;
8712
    p.bc = l;
8713
    p.Ab = l;
8714
    p.Yc = m;
8715
    p.getId = function () {
8716
        return this.Fd || (this.Fd = ":" + (this.Qf.b++).toString(36))
8717
    };
8718
    p.A = function () {
8719
        return this.$
8720
    };
8721
    p.Kc = function (a) {
8722
        this.cb && this.cb != a && h(Error("Method not supported"));
8723
        Dm.J.Kc.call(this, a)
8724
    };
8725
    p.sd = function () {
8726
        this.$ = this.e.createElement("div")
8727
    };
8728
    p.da = function (a) {
8729
        this.xa && h(Error("Component already rendered"));
8730
        this.$ || this.sd();
8731
        a ? a.insertBefore(this.$, l) : this.e.b.body.appendChild(this.$);
8732
        (!this.cb || this.cb.xa) && this.rb()
8733
    };
8734
    p.tc = function (a) {
8735
        this.$ = a
8736
    };
8737
    p.rb = function () {
8738
        this.xa = k;
8739
        Em(this, function (a) {
8740
            !a.xa && a.A() && a.rb()
8741
        })
8742
    };
8743
    p.wb = function () {
8744
        Em(this, function (a) {
8745
            a.xa && a.wb()
8746
        });
8747
        if (this.n) {
8748
            var a = this.n;
8749
            w(a.b, fj);
8750
            a.b.length = 0
8751
        }
8752
        this.xa = m
8753
    };
8754
    p.T = function () {
8755
        Dm.J.T.call(this);
8756
        this.xa && this.wb();
8757
        this.n && (this.n.na(), delete this.n);
8758
        Em(this, function (a) {
8759
            a.na()
8760
        });
8761
        !this.Yc && this.$ && mc(this.$);
8762
        this.cb = this.$ = this.Ab = this.bc = l
8763
    };
8764
8765
    function Em(a, b) {
8766
        a.bc && w(a.bc, b, j)
8767
    }
8768
    p.removeChild = function (a, b) {
8769
        if (a) {
8770
            var c = ga(a) ? a : a.getId(),
8771
                a = this.Ab && c ? (c in this.Ab ? this.Ab[c] : j) || l : l;
8772
            if (c && a) {
8773
                var d = this.Ab;
8774
                c in d && delete d[c];
8775
                Xa(this.bc, a);
8776
                b && (a.wb(), a.$ && mc(a.$));
8777
                c = a;
8778
                c == l && h(Error("Unable to set parent component"));
8779
                c.cb = l;
8780
                Dm.J.Kc.call(c, l)
8781
            }
8782
        }
8783
        a || h(Error("Child is not in parent component"));
8784
        return a
8785
    };
8786
8787
    function Fm(a, b) {
8788
        this.e = b || Zb();
8789
        this.c = a || ""
8790
    }
8791
    v(Fm, Dm);
8792
    Fm.prototype.f = l;
8793
    var Gm = "placeholder" in document.createElement("input");
8794
    p = Fm.prototype;
8795
    p.xb = m;
8796
    p.sd = function () {
8797
        this.$ = this.e.Qd("input", {
8798
            type: "text"
8799
        })
8800
    };
8801
    p.tc = function (a) {
8802
        Fm.J.tc.call(this, a);
8803
        this.c || (this.c = a.getAttribute("label") || "");
8804
        var b;
8805
        a: {
8806
            var c = ac(a);
8807
            try {
8808
                b = c && c.activeElement;
8809
                break a
8810
            } catch (d) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
8811
            b = l
8812
        }
8813
        b == a && (this.xb = k, z(this.A(), "label-input-label"));
8814
        Gm ? this.A().placeholder = this.c : this.A().setAttribute("aria-label", this.c)
8815
    };
8816
    p.rb = function () {
8817
        Fm.J.rb.call(this);
8818
        var a = new kj(this);
8819
        mj(a, this.A(), "focus", this.ld);
8820
        mj(a, this.A(), "blur", this.rf);
8821
        Gm ? this.b = a : (Eb && mj(a, this.A(), ["keypress", "keydown", "keyup"], this.sf), mj(a, ac(this.A()) ? ac(this.A()).parentWindow || ac(this.A()).defaultView : window, "load", this.tf), this.b = a, Hm(this));
8822
        Im(this);
8823
        this.A().c = this
8824
    };
8825
    p.wb = function () {
8826
        Fm.J.wb.call(this);
8827
        this.b && (this.b.na(), this.b = l);
8828
        this.A().c = l
8829
    };
8830
8831
    function Hm(a) {
8832
        !a.H && (a.b && a.A().form) && (mj(a.b, a.A().form, "submit", a.Of), a.H = k)
8833
    }
8834
    p.T = function () {
8835
        Fm.J.T.call(this);
8836
        this.b && (this.b.na(), this.b = l)
8837
    };
8838
    p.ld = function () {
8839
        this.xb = k;
8840
        z(this.A(), "label-input-label");
8841
        if (!Gm && !Jm(this) && !this.M) {
8842
            var a = this,
8843
                b = function () {
8844
                    a.A().value = ""
8845
                };
8846
            E ? pj(b) : b()
8847
        }
8848
    };
8849
    p.rf = function () {
8850
        Gm || (nj(this.b, this.A(), "click", this.ld), this.f = l);
8851
        this.xb = m;
8852
        Im(this)
8853
    };
8854
    p.sf = function (a) {
8855
        27 == a.keyCode && ("keydown" == a.type ? this.f = this.A().value : "keypress" == a.type ? this.A().value = this.f : "keyup" == a.type && (this.f = l), a.preventDefault())
8856
    };
8857
    p.Of = function () {
8858
        Jm(this) || (this.A().value = "", pj(this.tg, this))
8859
    };
8860
    p.tg = function () {
8861
        Jm(this) || (this.A().value = this.c)
8862
    };
8863
    p.tf = function () {
8864
        Im(this)
8865
    };
8866
8867
    function Jm(a) {
8868
        return !!a.A() && "" != a.A().value && a.A().value != a.c
8869
    }
8870
    p.clear = function () {
8871
        this.A().value = "";
8872
        this.f != l && (this.f = "")
8873
    };
8874
8875
    function Im(a) {
8876
        Gm ? a.A().placeholder != a.c && (a.A().placeholder = a.c) : (Hm(a), a.A().setAttribute("aria-label", a.c));
8877
        Jm(a) ? z(a.A(), "label-input-label") : (!a.M && !a.xb && x(a.A(), "label-input-label"), Gm || pj(a.Xf, a))
8878
    }
8879
    p.Xf = function () {
8880
        this.A() && (!Jm(this) && !this.xb) && (this.A().value = this.c)
8881
    };
8882
8883
    function Km(a, b, c) {
8884
        this.b = a;
8885
        this.f = b;
8886
        X("/playlist_ajax", {
8887
            o: {
8888
                action_get_addto_panel: 1,
8889
                video_id: this.f
8890
            },
8891
            j: function (a, b) {
8892
                Lm(this, b.html);
8893
                c()
8894
            },
8895
            B: this
8896
        })
8897
    }
8898
    p = Km.prototype;
8899
    p.na = function () {
8900
        Mm(this)
8901
    };
8902
8903
    function Lm(a, b) {
8904
        a.b.innerHTML = b;
8905
        a.ca = K("sort-playlists", a.b);
8906
        a.e = K("playlist-items", a.b);
8907
        a.Wc = K("added-to-message", a.b);
8908
        a.Vc = K("added-to-message-title", a.b);
8909
        a.ne = K("note-added-message", a.b);
8910
        a.me = K("note-added-message-title", a.b);
8911
        a.n = K("create-playlist", a.b);
8912
        if (a.n) {
8913
            a.c = K("new-playlist-title", a.b);
8914
            var c = a.c.getAttribute("placeholder"),
8915
                c = new Fm(c),
8916
                d = a.c;
8917
            c.xa && h(Error("Component already rendered"));
8918
            if (d) {
8919
                c.Yc = k;
8920
                if (!c.e || c.e.b != ac(d)) c.e = Zb(d);
8921
                c.tc(d);
8922
                c.rb()
8923
            } else h(Error("Invalid element to decorate"));
8924
            a.Ib = K("create-new-playlist", a.b)
8925
        }
8926
        a.Jb = R(a.ca, "change", t(a.Ie, a));
8927
        a.U = R(a.n, "submit", t(a.Me, a));
8928
        a.H = T(a.b, "click", t(a.Ke, a), "playlist-item-favorite");
8929
        a.L = T(a.b, "click", t(a.Le, a), "playlist-item");
8930
        a.oa = T(a.b, "click", t(a.Oe, a), "save-note");
8931
        a.M = T(a.b, "click", t(a.Je, a), "cancel-note");
8932
        a.Va = R(a.c, "keyup", t(a.Ne, a));
8933
        yk()
8934
    }
8935
8936
    function Mm(a) {
8937
        se(a.Jb);
8938
        se(a.U);
8939
        se(a.H);
8940
        se(a.L);
8941
        se(a.oa);
8942
        se(a.M);
8943
        se(a.Va)
8944
    }
8945
    p.Ie = function (a) {
8946
        var a = {
8947
                created: this.lg,
8948
                privacy: this.mg,
8949
                "a-z": this.Rd,
8950
                "z-a": this.ng
8951
            } [a.currentTarget.value],
8952
            b = Za(I("playlist-item", this.e)),
8953
            c = K("playlist-item-favorite", this.e);
8954
        b.push(c);
8955
        var a = b.sort(t(a, this)),
8956
            d = document.createDocumentFragment();
8957
        w(a, function (a) {
8958
            d.appendChild(a)
8959
        });
8960
        lc(this.e);
8961
        kc(this.e, d)
8962
    };
8963
    p.mg = function (a, b) {
8964
        var c = Q(a, "is-private") || "",
8965
            d = Q(b, "is-private") || "";
8966
        return wa(c, d)
8967
    };
8968
    p.lg = function (a, b) {
8969
        function c(a) {
8970
            return ae(a, "time-created") ? (a = Q(a, "time-created"), parseInt(a, 10)) : (new Date).getTime() / 1E3
8971
        }
8972
        return c(b) - c(a)
8973
    };
8974
    p.Rd = function (a, b) {
8975
        var c = Q(a, "title") || "",
8976
            d = Q(b, "title") || "";
8977
        return wa(c, d)
8978
    };
8979
    p.ng = function (a, b) {
8980
        return this.Rd(b, a)
8981
    };
8982
    p.Me = function (a) {
8983
        a.preventDefault();
8984
        var b = K("create-playlist", this.b);
8985
        ta(this.c.value) || (x(b, "loading"), Jg(b, {
8986
            B: this,
8987
            j: function (a, d) {
8988
                z(b, "loading");
8989
                d.html ? (Mm(this), Lm(this, d.html)) : d.errors && Nm(this, d.errors[0])
8990
            }
8991
        }))
8992
    };
8993
8994
    function Nm(a, b) {
8995
        var c = K("added-to-error-message", a.b);
8996
        K("yt-alert-content", c).innerHTML = b;
8997
        U(c)
8998
    }
8999
    p.Ke = function (a) {
9000
        a.stopPropagation();
9001
        var b = a.currentTarget;
9002
        x(b, "loading");
9003
        X("/addto_ajax", {
9004
            method: "POST",
9005
            format: "XML",
9006
            o: {
9007
                action_add_to_favorites: 1
9008
            },
9009
            C: {
9010
                video_ids: this.f,
9011
                session_token: M("addto_ajax"),
9012
                plid: L("PLAYBACK_ID")
9013
            },
9014
            B: this,
9015
            j: function () {
9016
                z(b, "loading");
9017
                this.Vc.innerHTML = Q(b, "title");
9018
                Om(this, this.Wc);
9019
                Pm(b)
9020
            }
9021
        })
9022
    };
9023
    p.Le = function (a) {
9024
        var b = a.currentTarget;
9025
        if (!B(b, "selected")) {
9026
            a.stopPropagation();
9027
            Qm(this);
9028
            var a = Q(b, "playlist-id"),
9029
                c = F("playlist-addto-top-checkbox").checked ? "True" : "False";
9030
            x(b, "loading");
9031
            X("/addto_ajax", {
9032
                method: "POST",
9033
                format: "XML",
9034
                o: {
9035
                    action_add_to_playlist: 1
9036
                },
9037
                C: {
9038
                    playlist_id: a,
9039
                    video_ids: this.f,
9040
                    session_token: M("addto_ajax"),
9041
                    plid: L("PLAYBACK_ID"),
9042
                    add_to_top: c
9043
                },
9044
                B: this,
9045
                j: function (a, c) {
9046
                    this.nd = c.setvideo_id;
9047
                    z(b, "loading");
9048
                    x(b, "selected");
9049
                    this.Vc.innerHTML = Q(b, "title");
9050
                    Om(this, this.Wc);
9051
                    Pm(b)
9052
                }
9053
            })
9054
        }
9055
    };
9056
9057
    function Pm(a) {
9058
        a = K("playlist-video-count", a);
9059
        a.innerHTML = parseInt(a.innerHTML, 10) + 1
9060
    }
9061
    p.Oe = function (a) {
9062
        a.preventDefault();
9063
        var b = Cc(a.currentTarget, "playlist-note-form");
9064
        x(b, "loading");
9065
        Jg(b, {
9066
            C: {
9067
                session_token: M("playlist_bar_ajax"),
9068
                setvideo_id: this.nd
9069
            },
9070
            B: this,
9071
            j: function () {
9072
                Qm(this);
9073
                z(b, "loading");
9074
                var a = K("playlist-name", b);
9075
                this.me.innerHTML = a.value;
9076
                Om(this, this.ne)
9077
            },
9078
            onError: function (a, d) {
9079
                z(b, "loading");
9080
                Nm(this, d.errors[0])
9081
            }
9082
        })
9083
    };
9084
    p.Je = function () {
9085
        Qm(this)
9086
    };
9087
9088
    function Qm(a) {
9089
        var b = K("selected", a.b);
9090
        b && (z(b, "selected"), a.nd = l)
9091
    }
9092
9093
    function Om(a, b) {
9094
        a.i && V(a.i);
9095
        a.i = b;
9096
        U(b)
9097
    }
9098
    p.Ne = function () {
9099
        this.Ib.disabled = ta(this.c.value)
9100
    };
9101
9102
    function Rm(a, b, c, d, e, f, g) {
9103
        this.k = a;
9104
        this.n = b;
9105
        this.ha = c;
9106
        this.oc = d;
9107
        this.b = !isNaN(parseInt(e, 10));
9108
        this.Xa = l;
9109
        this.b && (this.Xa = e);
9110
        this.i = f || {};
9111
        this.c = !!g;
9112
        window.__GOOGLEAPIS = window.__GOOGLEAPIS || {};
9113
        window.__GOOGLEAPIS.gwidget = window.__GOOGLEAPIS.gwidget || {};
9114
        window.__GOOGLEAPIS.gwidget.lang = this.oc;
9115
        this.b && (window.__GOOGLEAPIS["googleapis.config"] = window.__GOOGLEAPIS["googleapis.config"] || {}, window.__GOOGLEAPIS["googleapis.config"].sessionIndex = this.Xa);
9116
        Ug("https://apis.google.com/js/plusone.js", t(this.f,
9117
            this))
9118
    }
9119
    Rm.prototype.f = function () {
9120
        var a = s("gapi.plusone.render");
9121
        if (a) {
9122
            var b = Math.floor(1E4 * Math.random()),
9123
                c = "__PLUS_ONE_CALLBACK_" + b,
9124
                d = this.k.id;
9125
            d || (d = "plusone-button-" + b, this.k.id = d);
9126
            window[c] = t(this.e, this);
9127
            b = {
9128
                callbackName: c,
9129
                count: "false",
9130
                href: this.ha,
9131
                size: "medium",
9132
                source: "google:youtube"
9133
            };
9134
            this.c && (b.db = 1);
9135
            sb(b, this.i);
9136
            U(this.k);
9137
            a(d, b)
9138
        }
9139
    };
9140
    Rm.prototype.e = function (a) {
9141
        "off" != a.state && (ah("PLUS_ONE", this.n + ""), this.c && Ih(Lf("https://plusone.google.com/_/+1/confirm", {
9142
            url: a.url,
9143
            source: "google:youtube"
9144
        }), {
9145
            width: 480,
9146
            height: 550
9147
        }))
9148
    };
9149
9150
    function Sm(a, b, c) {
9151
        this.c = a;
9152
        this.version = b;
9153
        this.b = c
9154
    }
9155
    Sm.prototype.write = function (a, b, c) {
9156
        var d = M("promo_ajax_token"),
9157
            a = {
9158
                action_write_promo: 1,
9159
                method: a,
9160
                subtype: this.c,
9161
                version: this.version
9162
            };
9163
        this.b && (a.encrypted_video_id = this.b);
9164
        d = {
9165
            session_token: d
9166
        };
9167
        c && (d.json_data = c);
9168
        X("/promo_ajax", {
9169
            method: "POST",
9170
            o: a,
9171
            C: d,
9172
            j: function () {
9173
                if (b && (b.lf && V(F(b.lf)), b.mf && U(F(b.mf)), b.of)) return Gh(b.of)
0 ignored issues
show
Complexity Best Practice introduced by
There is no return statement if b && b.lf && V(F(b.lf)), b.mf && U(F(b.mf)), b.of is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
9174
            },
9175
            onError: function () {
9176
                b && b.nf && U(F(b.nf))
9177
            }
9178
        })
9179
    };
9180
9181
    function Tm(a) {
9182
        var b = F("insight-optout-form");
9183
        b && Jg(b, {
9184
            format: "XML",
9185
            o: {
9186
                opt_out: a
9187
            },
9188
            j: function () {
9189
                var b = F("insight-public");
9190
                C(F("insight-private"), "selected", a);
9191
                C(b, "selected", !a)
9192
            },
9193
            S: function (a, b) {
9194
                F("insight-optout-response").innerHTML = "error_message" in b ? b.error_message : ""
9195
            }
9196
        })
9197
    };
9198
9199
    function Um(a, b, c) {
9200
        var d = {};
9201
        0 === b ? d.action_like_video = 1 : 1 === b ? d.action_dislike_video = 1 : d.action_indifferent_video = 1;
9202
        d.video_id = a;
9203
        d.plid = c.hg;
9204
        a = {
9205
            screen: Df({
9206
                h: screen.height,
9207
                w: screen.width,
9208
                d: screen.colorDepth
9209
            }),
9210
            session_token: M("watch_actions_ajax")
9211
        };
9212
        c.Od && (a.station_id = c.Od);
9213
        X("/watch_actions_ajax", {
9214
            format: "XML",
9215
            method: "POST",
9216
            o: d,
9217
            C: a,
9218
            j: c.j,
9219
            onError: c.onError,
9220
            S: c.S
9221
        });
9222
        0 === b ? Kh("like") : 1 === b && Kh("dislike")
9223
    };
9224
9225
    function Vm(a, b, c, d) {
9226
        this.z = a;
9227
        this.N = b;
9228
        R(this.z, "submit", t(this.c, this));
9229
        a = t(this.b, this);
9230
        te(this.N, "click", a, function (a) {
9231
            return "li" === a.nodeName.toLowerCase() && k
9232
        });
9233
        R(F("flag-video-cancel"), "click", function (a) {
9234
            a.preventDefault();
9235
            c()
9236
        });
9237
        this.Sb = d
9238
    }
9239
    Vm.prototype.b = function (a) {
9240
        var b, a = a.currentTarget,
9241
            c = nh.getInstance(),
9242
            d = wh(c, this.N);
9243
        qh(c, d);
9244
        c = K(Y(c, "content"), d);
9245
        d = K("label", a);
9246
        c.innerHTML = yc(d);
9247
        c = I("selected", this.N);
9248
        w(c, function (a) {
9249
            z(a, "selected", "child-selected")
9250
        });
9251
        x(a, "selected");
9252
        d = "";
9253
        if (c = Q(a, "subreason") || "") {
9254
            var e = Ac(a.parentNode, "li"),
9255
                d = Q(e, "reason") || "";
9256
            x(e, "selected", "child-selected")
9257
        } else d = Q(a, "reason") || "";
9258
        b = d;
9259
        var d = Q(a, "show-textbox-with-label"),
9260
            e = !!Q(a, "include-time"),
9261
            f = !!Q(a, "show-hate-group"),
9262
            g = Q(a, "popup-url"),
9263
            i = Q(a, "result-message") ||
9264
            "default",
9265
            a = !!Q(a, "no-post");
9266
        this.z.reason.value = b;
9267
        this.z.sub_reason.value = c;
9268
        c = F("flag-video-more-info-comment");
9269
        d && (F("flag-video-more-info-textarea-label").innerHTML = d);
9270
        lf(c, !!d);
9271
        lf(F("flag-video-more-info-time"), e);
9272
        lf(F("flag-video-more-info-hate-group"), f);
9273
        g && Hh(g, {
9274
            target: "atmfc",
9275
            width: 900,
9276
            height: 700,
9277
            left: 0,
9278
            top: 0,
9279
            status: "yes",
9280
            toolbar: "no",
9281
            menubar: "no",
9282
            location: "no",
9283
            scrollbars: "yes"
9284
        });
9285
        a ? (V(this.z), Wm(i)) : (P(this.z, "result-message", i), U(this.z))
9286
    };
9287
    Vm.prototype.c = function (a) {
9288
        a.preventDefault();
9289
        var b = F("flag-video-submit");
9290
        b.disabled = k;
9291
        var c = Q(this.z, "result-message");
9292
        X(this.z.action, {
9293
            format: "XML",
9294
            method: "POST",
9295
            Ra: Qc(this.z),
9296
            j: function () {
9297
                Wm(c);
9298
                this.Sb.call(q)
9299
            },
9300
            onError: function (a, c) {
9301
                Xm();
9302
                var f = F("flag-video-error");
9303
                c && c.error_message && (K("yt-alert-content", f).innerHTML = c.error_message);
9304
                U(f);
9305
                b.disabled = m
9306
            },
9307
            B: this
9308
        })
9309
    };
9310
9311
    function Wm(a) {
9312
        Xm();
9313
        V("flag-video-form-container");
9314
        U("flag-video-result-" + a)
9315
    }
9316
9317
    function Xm() {
9318
        var a = I("flag-video-result", F("flag-video-results-container"));
9319
        w(a, function (a) {
9320
            V(a)
9321
        })
9322
    };
9323
    var Ym, Zm;
9324
9325
    function $m() {
9326
        var a = F("watch-like-unlike");
9327
        return B(a, "liked") ? 0 : B(a, "unliked") ? 1 : 2
9328
    }
9329
9330
    function an(a) {
9331
        var b = F("watch-like-unlike"),
9332
            b = I(Y(nh.getInstance()), b);
9333
        w(b, function (b) {
9334
            B(b, "yt-always-enabled") || (b.disabled = !a)
9335
        })
9336
    }
9337
9338
    function bn(a) {
9339
        if (!L("LOGGED_IN")) {
9340
            var b = "rating-enabled=" + L("ALLOW_RATINGS");
9341
            0 === a ? Zg("logged-out-like", b, j) : 1 === a && Zg("logged-out-dislike", b, j)
9342
        }
9343
        if (L("ALLOW_RATINGS")) {
9344
            if (b = !cn()) L("YPC_CAN_RATE_VIDEO") ? b = m : (dn("watch-actions-rental-required"), b = k), b = !b;
9345
            if (b)
9346
                if (L("YPC_SHOW_VPPA_CONFIRM_RATING") && !confirm(O("VPPA_CONFIRM"))) en();
9347
                else {
9348
                    2 !== a && fn();
9349
                    an(m);
9350
                    gn(a);
9351
                    var b = {
9352
                            hg: L("PLAYBACK_ID"),
9353
                            Od: L("STATION_ID"),
9354
                            j: function (b, c) {
9355
                                var f = F("watch-like-unlike");
9356
                                0 === a ? A(f, "unliked", "liked") : 1 === a ? A(f, "liked", "unliked") :
9357
                                    z(f, "liked", "unliked");
9358
                                2 !== a && (hn(c.html_content), Oi(F("watch-actions-ajax")));
9359
                                gn(a)
9360
                            },
9361
                            onError: jn,
9362
                            S: function () {
9363
                                an(k)
9364
                            }
9365
                        },
9366
                        c = L("VIDEO_ID"),
9367
                        b = b || {};
9368
                    Og("watch_actions_ajax", t(Um, q, c, a, b), b.onError)
9369
                }
9370
        } else dn("watch-actions-ratings-disabled")
9371
    }
9372
9373
    function gn(a) {
9374
        var b = F("watch-like-hovercard-plusone-liked"),
9375
            c = F("watch-like-hovercard-plusone-not-liked");
9376
        b && c && (0 === a ? (x(b, "hid"), z(c, "hid")) : (z(b, "hid"), x(c, "hid")))
9377
    }
9378
9379
    function kn(a, b) {
9380
        var c = a || F("watch-flag");
9381
        if (ln(c) && !cn()) {
9382
            fn();
9383
            var d = 0,
9384
                e = sk();
9385
            e && e.pauseVideo && (e.pauseVideo(), d = e.getCurrentTime());
9386
            d = Math.floor(d);
9387
            e = Math.floor(d / 60);
9388
            d = {
9389
                action_get_flag_video_component: 1,
9390
                video_id: L("VIDEO_ID"),
9391
                t_mins: e,
9392
                t_secs: d - 60 * e
9393
            };
9394
            b && (d.from_dislike = 1);
9395
            X("/watch_ajax", {
9396
                format: "XML",
9397
                method: "GET",
9398
                o: d,
9399
                j: function (a, b) {
9400
                    hn(b.html_content);
9401
                    var d = F("flag-video-form"),
9402
                        e = F("flag-video-menu");
9403
                    d && e && new Vm(d, e, function () {
9404
                        en()
9405
                    }, function () {
9406
                        c.disabled = k
9407
                    })
9408
                },
9409
                onError: jn
9410
            })
9411
        }
9412
    }
9413
    var mn = l,
9414
        nn = l;
9415
9416
    function on() {
9417
        if (hk()) var a = pn("watch-actions-share"),
9418
            a = K("yt-uix-button-toggled", a),
9419
            a = Q(a, "video-id");
9420
        else a = L("VIDEO_ID");
9421
        return a
9422
    }
9423
9424
    function qn() {
9425
        var a = l;
9426
        hk() && F("share-with-playlist").checked && (a = ck ? dk().Qa() : l);
9427
        return a
9428
    }
9429
9430
    function rn(a, b) {
9431
        if (ln(a)) {
9432
            var c = on(),
9433
                d = qn();
9434
            sn(c, d, b)
9435
        }
9436
    }
9437
9438
    function sn(a, b, c) {
9439
        var d = pn("watch-actions-share-panel");
9440
        a != mn || b != nn ? (mn = a, nn = b, dn("watch-actions-share"), U("watch-actions-share-loading"), W("watch-actions-player-sidebar-height-changed"), V("watch-actions-share-panel"), Ym = new Dk(d, a, b, function () {
9441
            V("watch-actions-share-loading");
9442
            dn("watch-actions-share-panel")
9443
        })) : (dn("watch-actions-share"), dn("watch-actions-share-panel"), Ym.ua(), W("watch-actions-player-sidebar-height-changed"));
9444
        c ? Zg("shareOpenedFromFlash", j, j) : Zg("shareOpenedFromActionBar", j, j);
9445
        var e =
9446
            sk(),
9447
            f = Td(function () {
9448
                var a = B(F("watch-share"), "active");
9449
                if (!e || !a) Vd(f);
9450
                else {
9451
                    for (var a = [], b = Math.floor(e.getCurrentTime()); 0 < b;) a.unshift(b % 60), b = Math.floor(b / 60);
9452
                    for (; 2 > a.length;) a.unshift(0);
9453
                    a = Ra(a, function (a, b) {
9454
                        return 0 < b && 10 > a ? "0" + a : a
9455
                    });
9456
                    a = a.join(":");
9457
                    b = Ym;
9458
                    b.aa && (!B(b.aa, "focused") && !b.U) && (b.aa.value = a, b.Rb())
9459
                }
9460
            }, 1E3);
9461
        Kh("share")
9462
    }
9463
9464
    function ln(a) {
9465
        var b = !B(a, "active");
9466
        en();
9467
        b && (x(a, "active"), Ch(Ah.getInstance(), a));
9468
        return b
9469
    }
9470
9471
    function fn() {
9472
        dn("watch-actions-loading");
9473
        W("watch-actions-player-sidebar-height-changed")
9474
    }
9475
9476
    function hn(a) {
9477
        pn("watch-actions-ajax").innerHTML = a;
9478
        dn("watch-actions-ajax")
9479
    }
9480
9481
    function jn(a, b) {
9482
        var c = b && b.error_message;
9483
        c || (c = O("WATCH_ERROR_MESSAGE"));
9484
        pn("watch-error-string").innerHTML = c;
9485
        dn("watch-actions-error")
9486
    }
9487
    var tn = {};
9488
9489
    function pn(a) {
9490
        a in tn || (tn[a] = F(a));
9491
        return tn[a]
9492
    }
9493
9494
    function dn(a) {
9495
        var b = pn("watch-actions-area-container"),
9496
            a = pn(a),
9497
            c = pn("watch-actions-loading"),
9498
            d = pn("watch-actions-area");
9499
        mf(b) || (b.style.height = "0px", U(b));
9500
        V(c);
9501
        U(a);
9502
        x(b, "transitioning");
9503
        var e = d.offsetHeight + "px";
9504
        N(function () {
9505
            b.style.height = e;
9506
            W("watch-actions-player-sidebar-height-changed")
9507
        }, 0);
9508
        N(function () {
9509
            b.style.height == e && (z(b, "transitioning"), b.style.height = "auto")
9510
        }, 500)
9511
    }
9512
9513
    function en() {
9514
        var a = pn("watch-actions-area-container");
9515
        V(a);
9516
        a = I("watch-actions-panel", a);
9517
        w(a, function (a) {
9518
            V(a)
9519
        });
9520
        W("watch-actions-player-sidebar-height-changed");
9521
        pn("watch-actions-ajax").innerHTML = "";
9522
        var a = pn("watch-actions"),
9523
            b = pn("watch-subactions"),
9524
            a = J("button", l, a);
9525
        b && (b = J("button", l, b), $a(Za(a), Za(b)));
9526
        w(a, function (a) {
9527
            z(a, "active")
9528
        })
9529
    }
9530
9531
    function cn() {
9532
        return !L("LOGGED_IN") ? (dn("watch-actions-logged-out"), k) : m
9533
    };
9534
    var un, vn, wn;
9535
9536
    function xn(a) {
9537
        this.b = a;
9538
        this.N = F("shared-addto-menu");
9539
        this.f = Q(this.b, "feature") || "";
9540
        this.i = B(this.b, "watch");
9541
        this.c = Q(this.b, "video-ids") || "";
9542
        this.K = this.c.split(",");
9543
        da(wn) || (wn = B(this.N, "lightweight-panel"));
9544
        (a = K("sign-in", this.N)) ? R(a, "click", t(this.Fe, this)): (a = {
9545
            action_get_dropdown: "1"
9546
        }, this.f && (a.feature = this.f), X("/addto_ajax", {
9547
            pb: k,
9548
            format: "XML",
9549
            method: "GET",
9550
            B: this,
9551
            o: a,
9552
            j: function (a, c) {
9553
                this.N.innerHTML = c.html_content || "";
9554
                C(this.N, "ie", E);
9555
                this.Na();
9556
                var d = [];
9557
                $a(d, I("playlist-name", this.l.list));
9558
                $a(d, I("label-name", this.l.list));
9559
                w(d, function (a) {
9560
                    function b(a) {
9561
                        var c = [],
9562
                            d;
9563
                        for (d = 0; d < a.length; d++) c.push(a[d]), y[d] && c.push(y[d]);
9564
                        y[d] && y[d].match(/^<\s*\//) && c.push(y[d]);
9565
                        c = c.join("");
9566
                        return c.length < r.length ? c + "&hellip;" : c
9567
                    }
9568
                    var c = F(a),
9569
                        d, n = F(c);
9570
                    d = fe(n);
9571
                    c.parentNode.appendChild(d);
9572
                    d.style.whiteSpace = "normal";
9573
                    d.style.lineHeight = "1.5em";
9574
                    var r = Q(n, "original-html");
9575
                    r || (r = n.innerHTML.replace(/^\s+|\s+$/, ""), P(n, "original-html", r));
9576
                    for (var n = /<[^>]+>/g, y = r.match(n) || [], n = r.replace(n, "<wbr>").split("<wbr>"),
9577
                            D = d.innerHTML, G = "", H = 0; 1 > H; H++) G += "&nbsp;<br>";
9578
                    d.innerHTML = G;
9579
                    G = d.clientHeight || d.offsetHeight;
9580
                    d.innerHTML = D;
9581
                    for (var D = 0, H = n.join("").length + 1, ka = []; D < H;) {
9582
                        var ua = D + Math.round((H - D) / 2),
9583
                            S;
9584
                        S = ua;
9585
                        for (var Wa = [], xa = 0, Ca = n.length; xa < Ca && 0 < S; xa++) {
9586
                            var Ka = n[xa];
9587
                            Wa.push(Ka.substring(0, S));
9588
                            S -= Ka.length
9589
                        }
9590
                        S = Wa;
9591
                        d.innerHTML = b(S);
9592
                        Wa = (d.clientHeight || d.offsetHeight) <= G;
9593
                        d.innerHTML = "";
9594
                        Wa ? (ka = S, D = ua + 1) : H = ua - 1
9595
                    }
9596
                    mc(d);
9597
                    d = b(ka);
9598
                    n = c.innerHTML != d;
9599
                    c.innerHTML = d;
9600
                    n && (a = Cc(a, "yt-uix-button-menu-item"), a.title = Q(a, "possible-tooltip"))
9601
                })
9602
            }
9603
        }))
9604
    }
9605
    p = xn.prototype;
9606
    p.Na = function () {
9607
        this.l = {};
9608
        this.l.list = F("addto-list-panel");
9609
        this.l.Gc = F("addto-list-saved-panel");
9610
        this.l.Zb = F("addto-list-error-panel");
9611
        this.l.Fa = F("addto-note-input-panel");
9612
        this.l.yd = F("addto-note-saving-panel");
9613
        this.l.Md = F("addto-note-saved-panel");
9614
        this.l.Hc = F("addto-note-error-panel");
9615
        this.l.sa = F("addto-create-panel");
9616
        this.e = this.l.list;
9617
        T(this.l.list, "click", t(this.Zf, this), "yt-uix-button-menu-item");
9618
        this.Qb = K("playlist-save-note", this.l.Fa);
9619
        R(this.Qb, "click", t(this.$f, this));
9620
        var a = K("close-button",
9621
            this.N);
9622
        R(a, "click", t(this.Yf, this))
9623
    };
9624
    p.Zf = function (a) {
9625
        a.stopPropagation();
9626
        var b = a.currentTarget;
9627
        Ch(Ah.getInstance(), b);
9628
        this.H = m;
9629
        var a = Q(b, "list-action"),
9630
            c = Q(b, "item-id") || "",
9631
            b = Q(b, "item-name") || "";
9632
        switch (a) {
9633
        case "create-playlist":
9634
            yn(this, this.l.sa, k);
9635
            this.wd = K("addto-create-playlist", this.l.sa);
9636
            this.xd = K("addto-create-playlist-label", this.l.sa);
9637
            this.Ib = K("create-playlist-button", this.l.sa);
9638
            this.Cc = K("privacy-form", this.l.sa);
9639
            T(this.Cc, "click", t(this.Dc, this), "playlist-privacy-option");
9640
            $d(this.N, "video-ids");
9641
            var d = F("addto-create-playlist");
9642
            R(d, "keydown", t(this.Dc, this));
9643
            R(d, "paste", t(this.Dc, this));
9644
            zn(this.l.sa, function () {
9645
                d.focus()
9646
            });
9647
            a = K("addto-create-cancel-button", this.l.sa);
9648
            R(a, "click", t(function () {
9649
                An(this)
9650
            }, this));
9651
            a = K("create-playlist-button", this.l.sa);
9652
            R(a, "click", t(this.yf, this));
9653
            break;
9654
        case "favorites":
9655
            this.H = k;
9656
            Bn(this, "FL");
9657
            Cn(this, b);
9658
            break;
9659
        case "watch-later":
9660
            Bn(this, "WL");
9661
            Cn(this, b);
9662
            break;
9663
        case "playlist":
9664
            Bn(this, "PL", c);
9665
            1 < this.K.length ? Cn(this, b) : Dn(this, b);
9666
            break;
9667
        case "label":
9668
            X("/labels_ajax", {
9669
                method: "POST",
9670
                o: {
9671
                    action_add_members: 1
9672
                },
9673
                C: {
9674
                    session_token: M("labels_ajax"),
9675
                    label_id: c,
9676
                    video_ids: this.c.split(",")
9677
                },
9678
                B: this
9679
            }), Cn(this, b)
9680
        }
9681
    };
9682
9683
    function Cn(a, b) {
9684
        K("addto-title", a.l.Gc).innerHTML = b;
9685
        z(a.N, "lightweight-panel");
9686
        yn(a, a.l.Gc, k);
9687
        var c = K("close-note", a.N);
9688
        U(c)
9689
    }
9690
9691
    function Dn(a, b) {
9692
        K("addto-title", a.l.Fa).innerHTML = za(b);
9693
        yn(a, a.l.Fa, k);
9694
        var c = K("close-note", a.N);
9695
        U(c);
9696
        var d = F("addto-note");
9697
        R(d, "keydown", t(a.Td, a));
9698
        R(d, "paste", t(a.Td, a));
9699
        zn(a.l.Fa, function () {
9700
            d.focus()
9701
        })
9702
    }
9703
9704
    function zn(a, b) {
9705
        if (b) {
9706
            var c = Fb ? "webkitTransitionEnd" : Db ? "oTransitionEnd" : Eb ? "transitionend" : E && Sb(10) ? "MSTransitionEnd" : l;
9707
            c ? re(a, c, function () {
9708
                b()
9709
            }) : b()
9710
        }
9711
    }
9712
    p.Td = function (a) {
9713
        var b = a.target,
9714
            c = K("addto-note-label", this.l.Fa);
9715
        N(t(function () {
9716
            var a = ta(b.value);
9717
            a ? U(c) : V(c);
9718
            !a && this.P && this.zc ? ie(this.Qb, k) : ie(this.Qb, m)
9719
        }, this), 0)
9720
    };
9721
9722
    function yn(a, b, c) {
9723
        var c = c ? "slide" : "fade",
9724
            d = ["fade", "slide"];
9725
        A(a.e, d, c);
9726
        A(b, d, c);
9727
        wn && b == a.l.list && x(a.N, "lightweight-panel");
9728
        B(b, "dismissed-panel") ? (z(b, "dismissed-panel"), z(a.e, "active-panel")) : hb(a.e, "active-panel", "dismissed-panel");
9729
        x(b, "active-panel");
9730
        a.e = b
9731
    }
9732
    p.yf = function () {
9733
        var a = this.wd.value;
9734
        this.bg = k;
9735
        var b = parseInt(Tc(this.Cc), 10);
9736
        Bn(this, "PL", l, a, b);
9737
        1 < this.K.length ? An(this) : Dn(this, a)
9738
    };
9739
    p.Dc = function () {
9740
        N(t(function () {
9741
            var a = ta(this.wd.value);
9742
            a ? U(this.xd) : V(this.xd);
9743
            var b = Tc(this.Cc);
9744
            a || !b ? ie(this.Ib, m) : ie(this.Ib, k)
9745
        }, this), 0)
9746
    };
9747
    p.Yf = function () {
9748
        An(this)
9749
    };
9750
9751
    function An(a) {
9752
        var b = nh.getInstance(),
9753
            c = wh(b, a.N);
9754
        c && Q(c, "video-ids") == a.c && qh(b, c)
9755
    }
9756
9757
    function Bn(a, b, c, d, e) {
9758
        a.n = b;
9759
        Bm({
9760
            $c: a.c,
9761
            Zc: a.n,
9762
            xe: c,
9763
            bd: d,
9764
            ad: e,
9765
            qc: a.f,
9766
            j: a.Qe,
9767
            onError: a.Pe,
9768
            B: a
9769
        });
9770
        $d(a.N, "video-ids");
9771
        b = "";
9772
        switch (a.n) {
9773
        case "PL":
9774
            b = d ? "new_pl" : "pl";
9775
            break;
9776
        case "FL":
9777
            b = "fav";
9778
            break;
9779
        case "WL":
9780
            b = "wl"
9781
        }
9782
        d = {
9783
            list: b,
9784
            feature: a.f
9785
        };
9786
        if ((b = Ac(a.b, "a", l)) && b.href) b = Jf(b.href), d.link_feature = b.feature || "";
9787
        d = Df(d);
9788
        Zg("addto", d, j);
9789
        a.i && Kh("add_to_playlist")
9790
    }
9791
    p.Qe = function (a, b) {
9792
        this.P = b.list_id || "";
9793
        this.zc = b.setvideo_id || "";
9794
        var c = b.html_content || "",
9795
            d = b.list_url || "";
9796
        if (this.P && this.zc) {
9797
            var e = K("addto-title", this.N),
9798
                f = document.createElement("a");
9799
            f.href = d;
9800
            f.innerHTML = e.innerHTML;
9801
            lc(e);
9802
            e.appendChild(f);
9803
            ta(F("addto-note").value) || ie(this.Qb, k)
9804
        }
9805
        if (!this.i && (d = Cc(this.b, "ux-thumb-wrap")))(e = K("video-in-quicklist", d)) && mc(e), e = document.createElement("span"), e.className = "video-in-quicklist", e.innerHTML = c, d.appendChild(e);
9806
        c = O("PLAYLIST_BAR_ADDED_TO_PLAYLIST");
9807
        this.H &&
9808
            (c = O("PLAYLIST_BAR_ADDED_TO_FAVORITES"));
9809
        fk(this.n, this.P, c, this.K, this.K.length, this.K)
9810
    };
9811
    p.Pe = function (a, b) {
9812
        var c = b && b.error_message;
9813
        if (c) {
9814
            K("error-details", this.l.Zb).innerHTML = c;
9815
            var c = K("show-menu-link", this.l.Zb),
9816
                d = R(c, "click", t(function (a) {
9817
                    a.preventDefault();
9818
                    se(d);
9819
                    z(this.l.Fa, "dismissed-panel", "fade", "slide");
9820
                    z(this.l.Gc, "dismissed-panel", "fade", "slide");
9821
                    a = K("close-note", this.N);
9822
                    V(a);
9823
                    this.bg ? yn(this, this.l.sa, k) : yn(this, this.l.list, k)
9824
                }, this));
9825
            if (c = F("addto-create-name")) c.disabled = m;
9826
            z(this.l.Zb, "dismissed-panel", "fade", "slide");
9827
            yn(this, this.l.Zb)
9828
        } else An(this);
9829
        this.i && jn(0, b)
9830
    };
9831
    p.$f = function () {
9832
        X("/playlist_bar_ajax", {
9833
            method: "POST",
9834
            pb: k,
9835
            o: {
9836
                action_set_playlist_item_annotation: 1
9837
            },
9838
            C: {
9839
                annotation: F("addto-note").value,
9840
                playlist_id: this.P,
9841
                setvideo_id: this.zc,
9842
                session_token: M("playlist_bar_ajax")
9843
            },
9844
            j: this.Uf,
9845
            onError: this.Tf,
9846
            B: this
9847
        });
9848
        yn(this, this.l.yd)
9849
    };
9850
    p.Uf = function () {
9851
        var a = K("addto-title", this.l.Fa),
9852
            b = fe(a);
9853
        x(b, "yt-uix-tooltip-reverse");
9854
        K("panel-content", this.l.Md).appendChild(b);
9855
        yn(this, this.l.Md);
9856
        N(t(function () {
9857
            Ch(Ah.getInstance(), b);
9858
            An(this)
9859
        }, this), 3E3)
9860
    };
9861
    p.Tf = function (a, b) {
9862
        var c = b && b.errors;
9863
        if (c) {
9864
            var d = K("error-details", this.l.Hc);
9865
            lc(d);
9866
            w(c, function (a) {
9867
                var b = document.createElement("li");
9868
                b.innerHTML = a;
9869
                d.appendChild(b)
9870
            });
9871
            var c = K("add-note-link", this.l.Hc),
9872
                e = R(c, "click", t(function (a) {
9873
                    a.preventDefault();
9874
                    se(e);
9875
                    z(this.l.yd, "dismissed-panel");
9876
                    yn(this, this.l.Fa)
9877
                }, this));
9878
            yn(this, this.l.Hc)
9879
        } else An(this)
9880
    };
9881
    p.Fe = function () {
9882
        var a = Nf("/addto_ajax", {
9883
                action_redirect_to_signin_with_add: 1,
9884
                list_type: "WL",
9885
                video_ids: this.c,
9886
                next_url: document.location
9887
            }),
9888
            b = document.createElement("form");
9889
        b.action = a;
9890
        b.method = "POST";
9891
        a = document.createElement("input");
9892
        a.type = "hidden";
9893
        a.name = "session_token";
9894
        a.value = M("addto_ajax_logged_out");
9895
        b.appendChild(a);
9896
        document.body.appendChild(b);
9897
        b.submit()
9898
    };
9899
    var En = "";
9900
9901
    function Fn() {
9902
        gh("addto-watch-later-button", "click", Gn);
9903
        gh("addto-watch-later-button-success", "click", Hn);
9904
        gh("addto-watch-later-button-sign-in", "click", In);
9905
        T(F("shared-addto-watch-later-login"), "click", Jn, "sign-in-link")
9906
    }
9907
9908
    function In(a) {
9909
        En = Q(a, "video-ids")
9910
    }
9911
9912
    function Jn(a) {
9913
        var b = Nf("/addto_ajax", {
9914
                action_redirect_to_signin_with_add: 1,
9915
                list_type: "WL",
9916
                video_ids: En,
9917
                next_url: document.location
9918
            }),
9919
            c = document.createElement("form");
9920
        c.action = b;
9921
        c.method = "POST";
9922
        b = document.createElement("input");
9923
        b.type = "hidden";
9924
        b.name = "session_token";
9925
        b.value = M("addto_ajax_logged_out");
9926
        c.appendChild(b);
9927
        document.body.appendChild(c);
9928
        c.submit();
9929
        a.preventDefault()
9930
    }
9931
9932
    function Gn(a) {
9933
        hb(a, "addto-watch-later-button", "addto-watch-later-button-loading");
9934
        var b = Q(a, "video-ids");
9935
        X("/addto_ajax", {
9936
            method: "POST",
9937
            format: "XML",
9938
            o: {
9939
                action_add_to_watch_later_list: 1
9940
            },
9941
            C: {
9942
                session_token: M("addto_ajax"),
9943
                video_ids: b
9944
            },
9945
            j: function (c, d) {
9946
                Kn(d.list_id, b, a)
9947
            },
9948
            onError: function (c, d) {
9949
                6 == d.return_code ? Kn(d.list_id, b, a) : Ln(a, d)
9950
            }
9951
        })
9952
    }
9953
9954
    function Hn(a) {
9955
        hb(a, "addto-watch-later-button-success", "addto-watch-later-button-loading");
9956
        var b = Q(a, "video-ids");
9957
        X("/addto_ajax", {
9958
            method: "POST",
9959
            format: "XML",
9960
            o: {
9961
                action_delete_from_watch_later_list: 1
9962
            },
9963
            C: {
9964
                session_token: M("addto_ajax"),
9965
                video_ids: b
9966
            },
9967
            j: function () {
9968
                hb(a, "addto-watch-later-button-loading", "addto-watch-later-button")
9969
            },
9970
            onError: function (b, d) {
9971
                Ln(a, d)
9972
            }
9973
        })
9974
    }
9975
9976
    function Kn(a, b, c) {
9977
        hb(c, "addto-watch-later-button-loading", "addto-watch-later-button-success");
9978
        var d = O("ADDTO_WATCH_LATER_ADDED");
9979
        Dh(Ah.getInstance(), c, d);
9980
        c = O("PLAYLIST_BAR_ADDED_TO_PLAYLIST");
9981
        fk("WL", a, c, l, 0, b.split(","))
9982
    }
9983
9984
    function Ln(a, b) {
9985
        hb(a, "addto-watch-later-button-loading", "addto-watch-later-button-error");
9986
        var c = b.error_message || O("ADDTO_WATCH_LATER_ERROR");
9987
        Dh(Ah.getInstance(), a, c)
9988
    };
9989
    var Mn = m;
9990
    var Nn = window,
9991
        On = document,
9992
        Pn = Nn.location;
9993
9994
    function Qn() {}
9995
    var Rn = /\[native code\]/;
9996
9997
    function Sn(a, b, c) {
9998
        return a[b] = a[b] || c
9999
    }
10000
10001
    function Tn(a) {
10002
        for (var b = 0; b < this.length; b++)
10003
            if (this[b] === a) return b;
10004
        return -1
10005
    }
10006
10007
    function Un() {
10008
        var a;
10009
        if ((a = Object.create) && Rn.test(a)) a = a(l);
10010
        else {
10011
            a = {};
10012
            for (var b in a) a[b] = j
10013
        }
10014
        return a
10015
    }
10016
    var Vn = Sn(Nn, "gapi", {});
10017
    var Wn;
10018
    Wn = Sn(Nn, "___jsl", Un());
10019
    Sn(Wn, "I", 0);
10020
    Sn(Wn, "hel", 10);
10021
10022
    function Xn() {
10023
        var a = Pn.href,
10024
            b;
10025
        if (Wn.dpo) b = Wn.h;
10026
        else {
10027
            b = Wn.h;
10028
            var c = RegExp("([#].*&|[#])jsh=([^&#]*)", "g"),
10029
                d = RegExp("([?#].*&|[?#])jsh=([^&#]*)", "g");
10030
            if (a = a && (c.exec(a) || d.exec(a))) try {
10031
                b = decodeURIComponent(a[2])
10032
            } catch (e) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
10033
        }
10034
        return b
10035
    }
10036
10037
    function Yn(a) {
10038
        return Sn(Sn(Wn, "H", Un()), a, Un())
10039
    };
10040
    var Zn = Sn(Wn, "perf", Un());
10041
    Sn(Zn, "g", Un());
10042
    var $n = Sn(Zn, "i", Un());
10043
    Sn(Zn, "r", []);
10044
    Un();
10045
    Un();
10046
10047
    function ao(a, b, c) {
10048
        b && 0 < b.length && (b = bo(b), c && 0 < c.length && (b += "___" + bo(c)), c = b, b = Sn($n, "_p", Un()), Sn(b, c, Un())[a] = (new Date).getTime(), b = Zn.r, "function" === typeof b ? b(a, "_p", c) : b.push([a, "_p", c]))
10049
    }
10050
10051
    function bo(a) {
10052
        return a.join("__").replace(/\./g, "_").replace(/\-/g, "_").replace(/\,/g, "_")
10053
    };
10054
    var co = Un(),
10055
        eo = [],
10056
        fo;
10057
    fo = {
10058
        ee: "callback",
10059
        Eg: "sync",
10060
        Ag: "config",
10061
        Bg: "_c",
10062
        Cg: "h",
10063
        jj: "platform",
10064
        fh: "jsl",
10065
        TIMEOUT: "timeout",
10066
        Dg: "ontimeout"
10067
    };
10068
    eo.push([fo.fh, function (a) {
10069
        for (var b in a)
10070
            if (Object.prototype.hasOwnProperty.call(a, b)) {
10071
                var c = a[b];
10072
                "object" == typeof c ? Wn[b] = Sn(Wn, b, []).concat(c) : Sn(Wn, b, c)
10073
            } if (a = a.u) b = Sn(Wn, "us", []), b.push(a), (c = /^https:(.*)$/.exec(a)) && b.push("http:" + c[1]), Sn(Wn, "u", a)
10074
    }]);
10075
    var go = decodeURI("%73cript");
10076
    co.m = function (a) {
10077
        var b = Wn.ms || "https://apis.google.com",
10078
            a = a[0],
10079
            c;
10080
        if (!(c = !a)) c = 0 <= a.indexOf("..");
10081
        c && h("Bad hint");
10082
        return b + "/" + a.replace(/^\//, "")
10083
    };
10084
10085
    function ho(a) {
10086
        return a.join(",").replace(/\./g, "_").replace(/-/g, "_")
10087
    }
10088
10089
    function io(a, b) {
10090
        for (var c = [], d = 0; d < a.length; ++d) {
10091
            var e = a[d];
10092
            e && 0 > Tn.call(b, e) && c.push(e)
10093
        }
10094
        return c
10095
    }
10096
    var jo = /[@"'<>#\?&%]/,
10097
        ko = /^https?:\/\/[^\/\?#]+\.google\.com(:\d+)?\/[^\?#]+$/,
10098
        lo = /\/cb=/g;
10099
10100
    function mo(a) {
10101
        var b = On.createElement(go);
10102
        b.setAttribute("src", a);
10103
        b.async = "true";
10104
        a = On.getElementsByTagName(go)[0];
10105
        a.parentNode.insertBefore(b, a)
10106
    }
10107
10108
    function no(a, b) {
10109
        function c(a, b) {
10110
            if (ka) return 0;
10111
            Nn.clearTimeout(H);
10112
            ua.push.apply(ua, xa);
10113
            var c = ((Vn || {}).config || {}).update;
10114
            c ? c(D) : D && Sn(Wn, "cu", []).push(D);
10115
            if (b) {
10116
                ao("me0", a, S);
10117
                try {
10118
                    oo(function () {
10119
                        var a;
10120
                        a = r === Xn() ? Sn(Vn, "_", Un()) : Un();
10121
                        a = Sn(Yn(r), "_", a);
10122
                        b(a)
10123
                    })
10124
                } finally {
10125
                    ao("me1", a, S)
10126
                }
10127
            }
10128
            y && y();
10129
            return 1
10130
        }
10131
        var d = b || {};
10132
        "function" == typeof b && (d = {}, d[fo.ee] = b);
10133
        var e = d,
10134
            f = e && e[fo.Bg];
10135
        if (f)
10136
            for (var g = 0; g < eo.length; g++) {
10137
                var i = eo[g][0],
10138
                    n = eo[g][1];
10139
                n && Object.prototype.hasOwnProperty.call(f, i) && n(f[i], a, e)
10140
            }
10141
        if (!(e = d[fo.Cg]))(e =
10142
            Xn()) || h("Bad hint");
10143
        var r = e,
10144
            y = d[fo.ee],
10145
            D = d[fo.Ag],
10146
            f = d[fo.TIMEOUT],
10147
            G = d[fo.Dg],
10148
            H = l,
10149
            ka = m;
10150
        (f && !G || !f && G) && h("Timeout requires both the timeout parameter and ontimeout parameter to be set");
10151
        var e = Sn(Yn(r), "r", []).sort(),
10152
            ua = Sn(Yn(r), "L", []).sort(),
10153
            S = [].concat(e);
10154
        0 < f && (H = Nn.setTimeout(function () {
10155
            ka = k;
10156
            G()
10157
        }, f));
10158
        if (a) {
10159
            f = a.split(":").sort();
10160
            g = [];
10161
            i = j;
10162
            for (n = 0; n < f.length; n++) {
10163
                var Wa = f[n];
10164
                Wa != i && g.push(Wa);
10165
                i = Wa
10166
            }
10167
            f = g
10168
        } else f = [];
10169
        var xa = io(f, ua);
10170
        if (!xa.length) return c(xa);
10171
        var xa = io(f, e),
10172
            Ca = Sn(Wn, "CP", []),
10173
            Ka = Ca.length;
10174
        Ca[Ka] = function (a) {
10175
            function b() {
10176
                Ca[Ka] = l;
10177
                return c(xa, a)
10178
            }
10179
            if (!a) return 0;
10180
            ao("ml1", xa, S);
10181
            if (0 < Ka && Ca[Ka - 1]) Ca[Ka] = b;
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
10182
            else {
10183
                b();
10184
                for (var d;
0 ignored issues
show
introduced by
The for loop does not have a body. Maybe you have misplaced a semicolon. If you do wish to have a loop without a body, use an empty body {}.
Loading history...
10185
                    (d = Ca[++Ka]) && d(););
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
10186
            }
10187
        };
10188
        if (!xa.length) return Ca[Ka](Qn);
10189
        var ed = "loaded_" + Wn.I++;
10190
        Vn[ed] = function (a) {
10191
            Ca[Ka](a);
10192
            Vn[ed] = l
10193
        };
10194
        f = r.split(";");
10195
        (f = (g = co[f.shift()]) && g(f)) || h("Bad hint:" + r);
10196
        g = f = f.replace("__features__", ho(xa)).replace(/\/$/, "") + (e.length ? "/ed=1/exm=" + ho(e) : "") + ("/cb=gapi." + ed);
10197
        i = g.match(lo);
10198
        (!i || !(1 === i.length && ko.test(g) && !jo.test(g))) && h("Bad URL " + f);
10199
        e.push.apply(e,
10200
            xa);
10201
        ao("ml0", xa, S);
10202
        d[fo.Eg] || Nn.___gapisync ? (d = f, "loading" != On.readyState ? mo(d) : On.write("<" + go + ' src="' + encodeURI(d) + '"></' + go + ">")) : mo(f)
10203
    };
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
10204
10205
    function oo(a) {
10206
        if (Wn.hee && 0 < Wn.hel) try {
10207
            return a()
10208
        } catch (b) {
10209
            Wn.hel--, no("debug_error", function () {
10210
                window.___jsl.hefn(b)
10211
            })
10212
        } else return a()
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
10213
    };
10214
    Vn.load = function (a, b) {
10215
        return oo(function () {
10216
            return no(a, b)
10217
        })
10218
    };
10219
    var po = -2;
10220
10221
    function qo() {
10222
        if (-2 == po) {
10223
            po = parseInt(Fe("ACTIVITY", "-1"), 10);
10224
            R(document, "keypress", ro);
10225
            R(document, "click", so);
10226
            var a = L("LIST_AUTO_PLAY_VALUE");
10227
            a && 1 < a || to()
10228
        }
10229
    }
10230
10231
    function ro() {
10232
        to()
10233
    }
10234
10235
    function so() {
10236
        to()
10237
    }
10238
10239
    function to() {
10240
        qo();
10241
        var a = qa();
10242
        1E3 > a - po || (po = a, Ee("ACTIVITY", "" + a))
10243
    }
10244
10245
    function uo() {
10246
        return -1 == po || -2 == po ? -1 : Math.max(qa() - po, 0)
10247
    };
10248
10249
    function vo(a, b, c, d, e, f) {
10250
        this.b = l;
10251
        this.qf = c;
10252
        this.f = a;
10253
        this.n = b;
10254
        this.e = d;
10255
        this.i = L("GOOGLEPLUS_HOST") + (e != l ? "/u/" + e : "") + (f != l ? "/b/" + f : "") + "/_/notifications/frame#pid=36";
10256
        this.pf = F(a)
10257
    }
10258
10259
    function wo(a, b, c, d) {
10260
        return {
10261
            onOpen: t(function (a) {
10262
                return a.openInto(c)
10263
            }, a),
10264
            onReady: t(function () {
10265
                b.showOnepick && d && b.showOnepick()
10266
            }, a),
10267
            onClose: function (a) {
10268
                b.hideOnepick && d && b.hideOnepick();
10269
                a.remove()
10270
            }
10271
        }
10272
    }
10273
10274
    function xo(a, b, c) {
10275
        if ("undefined" === typeof c) a[b]();
10276
        else a[b](c)
10277
    }
10278
    vo.prototype.load = function (a) {
10279
        iframes.setHandler("iframe-style", wo(this, a, this.f, m));
10280
        iframes.setHandler("onepick", wo(this, a, this.n, k));
10281
        var b = {
10282
            setNotificationWidgetHeight: t(function (a) {
10283
                this.pf.style.height = a
10284
            }, this),
10285
            setNotificationText: t(function (a) {
10286
                this.qf(parseInt(a, 10))
10287
            }, this),
10288
            hideNotificationWidget: function () {
10289
                a.hideNotificationWidget && a.hideNotificationWidget()
10290
            },
10291
            openSharebox: function () {},
10292
            onError: function () {}
10293
        };
10294
        this.b = iframes.open(this.i, {
10295
            style: "iframe-style"
10296
        }, {
10297
            origin: window.location.protocol + "//" +
10298
                window.location.hostname,
10299
            source: "yt",
10300
            hl: this.e
10301
        }, b, function () {})
10302
    };
10303
    vo.prototype.close = function () {
10304
        xo(this.b, "onHide")
10305
    };
10306
    vo.prototype.c = function () {
10307
        return cc(window).height - 60 - 20
10308
    };
10309
10310
    function yo(a, b) {
10311
        b ? xo(a.b, "onActive") : xo(a.b, "onIdle")
10312
    };
10313
10314
    function zo(a, b, c) {
10315
        this.e = this.c = m;
10316
        this.n = 0;
10317
        this.k = F("sb-container");
10318
        this.f = F("sb-button-notify");
10319
        this.H = he("SPAN", "yt-uix-button-content", F("sb-button-notify"));
10320
        this.i = F("sb-onepick-target");
10321
        this.b = new vo("sb-target", "sb-onepick-target", t(this.Be, this), a, b, c);
10322
        this.b.load({
10323
            hideNotificationWidget: t(this.cd, this),
10324
            showOnepick: t(this.Ae, this),
10325
            hideOnepick: t(this.ze, this)
10326
        });
10327
        this.L = ef(this.i);
10328
        this.dd();
10329
        R(window, "resize", t(this.dd, this));
10330
        R(window, "click", t(this.cd, this));
10331
        qo();
10332
        Td(t(this.ye, this), 12E4)
10333
    }
10334
    p = zo.prototype;
10335
    p.ah = function (a) {
10336
        if (this.c) Ao(this), yo(this.b, k);
10337
        else {
10338
            this.e && Bo(this);
10339
            this.b.close();
10340
            Co(this, k, "notif");
10341
            x(this.f, "sb-notif-clicked");
10342
            pk();
10343
            var b = this.b,
10344
                c = {
10345
                    maxWidgetHeight: b.c()
10346
                };
10347
            xo(b.b, "onShowNotificationsOnly", c);
10348
            this.c = k;
10349
            yo(this.b, m)
10350
        }
10351
        we(a)
10352
    };
10353
    p.bh = function (a) {
10354
        if (this.e) Bo(this);
10355
        else {
10356
            this.c && Ao(this);
10357
            this.b.close();
10358
            Co(this, k, "sharebox");
10359
            pk();
10360
            var b = this.b,
10361
                c = window.location.href; - 1 != c.indexOf("/watch?") && xo(b.b, "setPrefill", {
10362
                items: [{
10363
                    type: "http://schema.org/VideoObject",
10364
                    id: c,
10365
                    properties: {
10366
                        url: [c]
10367
                    }
10368
                }]
10369
            });
10370
            xo(b.b, "onShowShareboxOnly", {
10371
                maxWidgetHeight: b.c
10372
            });
10373
            this.e = k
10374
        }
10375
        we(a)
10376
    };
10377
10378
    function Co(a, b, c) {
10379
        c = "sb-card-" + c;
10380
        b ? (A(a.k, "sb-off", "sb-on"), x(a.k, c)) : (A(a.k, "sb-on", "sb-off"), z(a.k, c))
10381
    }
10382
10383
    function Bo(a) {
10384
        rk();
10385
        Co(a, m, "sharebox");
10386
        a.e = m
10387
    }
10388
10389
    function Ao(a) {
10390
        rk();
10391
        Co(a, m, "notif");
10392
        a.c = m;
10393
        z(a.f, "sb-notif-clicked")
10394
    }
10395
    p.cd = function () {
10396
        if (this.c || this.e) this.b.close(), Ao(this), Bo(this), Do(this)
10397
    };
10398
    p.Be = function (a) {
10399
        this.n = a;
10400
        Do(this)
10401
    };
10402
10403
    function Do(a) {
10404
        tc(a.H, a.n + "");
10405
        0 == a.n ? A(a.f, "sb-notif-on", "sb-notif-off") : A(a.f, "sb-notif-off", "sb-notif-on")
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a.n using the == operator is not safe. Consider using === instead.
Loading history...
10406
    }
10407
    p.Ae = function () {
10408
        A(this.i, "sb-off", "sb-on")
10409
    };
10410
    p.ze = function () {
10411
        A(this.i, "sb-on", "sb-off")
10412
    };
10413
    p.dd = function () {
10414
        var a = Math.max((cc(window).height - this.L.height) / 2, 0);
10415
        Se(this.i, "top", a + "px")
10416
    };
10417
    p.ye = function () {
10418
        6E5 < uo() ? yo(this.b, m) : yo(this.b, k)
10419
    };
10420
10421
    function Eo(a) {
10422
        T(a, "mouseover", t(Fo, a), "group-header");
10423
        T(a, "mouseout", t(Go, a), "group-header")
10424
    }
10425
10426
    function Fo() {
10427
        x(this, "header-hover")
10428
    }
10429
10430
    function Go() {
10431
        z(this, "header-hover")
10432
    };
10433
    var Ho, Io;
10434
10435
    function Jo(a, b) {
10436
        this.Sb = a;
10437
        this.b = b;
10438
        this.userData = {}
10439
    }
10440
    Jo.prototype.be = function () {
10441
        return {}
10442
    };
10443
    Jo.prototype.le = function (a) {
10444
        this.Sb(this, a)
10445
    };
10446
    Jo.prototype.Qc = function (a) {
10447
        this.b(this, a)
10448
    };
10449
10450
    function Ko(a, b) {
10451
        Jo.call(this, a, b)
10452
    }
10453
    v(Ko, Jo);
10454
    p = Ko.prototype;
10455
    p.ha = "/subscription_ajax";
10456
    p.jb = {};
10457
10458
    function Lo(a, b) {
10459
        a.ha = Lf(a.ha, b)
10460
    }
10461
    p.be = function () {
10462
        return this.jb
10463
    };
10464
    p.le = function (a) {
10465
        var b = l,
10466
            c = [O("SUBSCRIBE_SERVER_ERROR")];
10467
        try {
10468
            b = wg(a.responseText)
10469
        } catch (d) {}(a = b && b.response) ? this.Sb(this, a): this.b(this, c)
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
10470
    };
10471
    p.Qc = function (a, b) {
10472
        var c = b ? [b] : [O("SUBSCRIBE_SERVER_ERROR")];
10473
        try {
10474
            var d = wg(a.responseText)
10475
        } catch (e) {
10476
            this.b(this, c);
10477
            return
10478
        }
10479
        this.b(this, d.errors)
10480
    };
10481
    var Mo = l,
10482
        No = [];
10483
10484
    function Oo(a) {
10485
        No.push(a);
10486
        Mo || Po()
10487
    }
10488
10489
    function Po() {
10490
        if (No.length && !Mo) {
10491
            var a = No.shift();
10492
            if (a) {
10493
                var b = a.be();
10494
                b || (b = {});
10495
                b.session_token = Io;
10496
                try {
10497
                    var c = {
10498
                        method: "POST",
10499
                        postBody: Df(b),
10500
                        onComplete: Qo,
10501
                        onException: Ro,
10502
                        onError: Ro
10503
                    }
10504
                } catch (d) {
10505
                    a.Qc({}, O("SUBSCRIBE_JS_ERROR"));
10506
                    return
10507
                }
10508
                Mo = a;
10509
                Ho(a.ha, c)
10510
            }
10511
        }
10512
    }
10513
10514
    function Qo(a) {
10515
        var b = Mo;
10516
        Mo = l;
10517
        Po();
10518
        b && b.le(a)
10519
    }
10520
10521
    function Ro(a) {
10522
        var b = Mo;
10523
        Mo = l;
10524
        Po();
10525
        b && b.Qc(a)
10526
    };
10527
10528
    function So(a) {
10529
        var b = To(a);
10530
        "button" == Q(b, "subscription-menu-type") ? (b = nh.getInstance(), b = oh(b, a), K("subscription-menu-loader", b) && (a.loader = b.innerHTML), Uo(a)) : (b = To(a), b = F(Q(b, "subscription-expandable-id")), mf(b) ? (V(b), x(a, "yt-uix-expander-collapsed")) : (Uo(a), U(b), z(a, "yt-uix-expander-collapsed")))
10531
    }
10532
10533
    function Uo(a) {
10534
        if (!Q(a, "loaded")) {
10535
            var b = To(a),
10536
                c = Q(b, "subscription-type"),
10537
                d = Q(b, "subscription-xsrf") || "",
10538
                e = Q(b, "subscription-menu-type"),
10539
                f = {},
10540
                g = Q(b, "subscription-value");
10541
            "playlist" == c ? (f.action_get_subscription_form_for_playlist = 1, c = "p") : "topic" == c ? (f.action_get_subscription_form_for_topic = 1, c = "l") : (f.action_get_subscription_form_for_user = 1, c = "u");
10542
            Ho = Kg;
10543
            Io = d;
10544
            d = new Ko(Vo, function () {
10545
                Wo(b, k)
10546
            });
10547
            Lo(d, f);
10548
            f = {};
10549
            f[c] = g;
10550
            f.menu_type = e;
10551
            d.jb = f || {};
10552
            d.userData.eventTrigger = a;
10553
            d.userData.subscription = b;
10554
            Oo(d)
10555
        }
10556
    }
10557
10558
    function To(a) {
10559
        return Ac(a, l, "subscription-container")
10560
    }
10561
10562
    function Xo(a) {
10563
        var b = Ac(a, l, "subscription-menu-expandable");
10564
        if (b) return b.expandableMenuSubscription;
10565
        a = Ac(a, l, "yt-uix-button-menu");
10566
        b = nh.getInstance();
10567
        a = wh(b, a);
10568
        return To(a)
10569
    }
10570
10571
    function Yo(a) {
10572
        var b = I("subscription-container"),
10573
            c = Q(a, "subscription-type"),
10574
            d = Q(a, "subscription-value");
10575
        return b = Qa(b, function (a) {
10576
            if (Q(a, "subscription-type") == c && Q(a, "subscription-value") == d) return k
0 ignored issues
show
Complexity Best Practice introduced by
There is no return statement if Q(a, "subscription-type"...bscription-value") == d is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
10577
        })
10578
    }
10579
10580
    function Wo(a, b) {
10581
        var c = Q(a, "subscription-id"),
10582
            d = Yo(a);
10583
        w(d, function (a) {
10584
            if (b) {
10585
                "button" == Q(a, "subscription-menu-type") ? Zo(a) : $o(a, k);
10586
                var d = he(l, "subscription-subscribed-container", a),
10587
                    g = he(l, "subscribe-button", a),
10588
                    i = he(l, "subscription-options-button", a);
10589
                $d(a, "subscription-id");
10590
                V(d);
10591
                U(g);
10592
                $d(i, "loaded")
10593
            } else d = he(l, "subscription-subscribed-container", a), g = he(l, "subscribe-button", a), P(a, "subscription-id", c), V(g), U(d)
10594
        })
10595
    }
10596
10597
    function ap(a, b) {
10598
        if ("button" == Q(a, "subscription-menu-type")) {
10599
            var c = K("subscription-options-button", a),
10600
                d = nh.getInstance(),
10601
                e = oh(d, c);
10602
            e && (e.innerHTML = b, uh(d, c, e))
10603
        } else c = F(Q(a, "subscription-expandable-id")), d = K("subscription-menu-loader", c), e = K("subscription-menu-body", c), e.innerHTML = b, c.expandableMenuSubscription = a, V(d), U(e)
10604
    }
10605
10606
    function Zo(a) {
10607
        var a = K("subscription-options-button", a),
10608
            b = nh.getInstance();
10609
        oh(b, a);
10610
        qh(b, a);
10611
        if (a.loader) {
10612
            var c = a.loader,
10613
                d = oh(b, a);
10614
            d && (d.innerHTML = c, uh(b, a, d))
10615
        }
10616
        $d(a, "loaded")
10617
    }
10618
10619
    function $o(a, b) {
10620
        var c = xh.getInstance(),
10621
            d = K("yt-uix-expander", a),
10622
            e = F(Q(a, "subscription-expandable-id"));
10623
        if (b) {
10624
            var f = K("subscription-menu-loader", e),
10625
                g = K("subscription-menu-body", e);
10626
            $d(d, "loaded");
10627
            U(f);
10628
            V(g);
10629
            g.innerHTML = ""
10630
        }
10631
        mf(e) && zh(c, d)
10632
    }
10633
10634
    function bp(a, b) {
10635
        var c = a.userData.subscription,
10636
            d = b.html_content;
10637
        a.userData.eventTrigger.disabled = m;
10638
        P(c, "subscription-id", b.id);
10639
        Wo(c, m);
10640
        d && (ap(c, d), d = K("subscription-options-button", c), P(d, "loaded", "true"), So(d), "button" == Q(c, "subscription-menu-type") && nh.getInstance().Sc(d))
10641
    }
10642
10643
    function cp(a) {
10644
        mc(a.userData.collection)
10645
    }
10646
10647
    function dp(a) {
10648
        Wo(a.userData.subscription, k)
10649
    }
10650
10651
    function Vo(a, b) {
10652
        var c = a.userData.eventTrigger,
10653
            d = a.userData.subscription,
10654
            e = b.html_content;
10655
        P(d, "subscription-id", b.id);
10656
        ap(d, e);
10657
        P(c, "loaded", "true")
10658
    }
10659
10660
    function ep(a) {
10661
        var b = a.userData.subscription;
10662
        a.userData.eventTrigger.disabled = m;
10663
        a = Yo(b);
10664
        w(a, function (a) {
10665
            "button" == Q(a, "subscription-menu-type") ? Zo(a) : $o(a, k)
10666
        })
10667
    }
10668
10669
    function fp(a) {
10670
        if (a = a.userData.eventTrigger) a.disabled = m
10671
    };
10672
    u("yt.pubsub.publish", W);
10673
10674
    function gp(a) {
10675
        var b = {
10676
            channel: "c",
10677
            all: "a"
10678
        };
10679
        return b[a] || b.channel
10680
    };
10681
10682
    function hp(a, b, c) {
10683
        this.qa = a;
10684
        this.f = b;
10685
        this.b = !!c;
10686
        this.c = m;
10687
        this.e = [];
10688
        this.i = []
10689
    }
10690
    p = hp.prototype;
10691
    p.init = function () {
10692
        var a = Cc(this.qa, "yt-subscription-button-hovercard"),
10693
            b = t(this.jg, this),
10694
            c = t(this.kg, this),
10695
            b = R(a, "mouseenter", b);
10696
        this.e.push(b);
10697
        b = R(a, "mouseleave", c);
10698
        this.e.push(b)
10699
    };
10700
    p.jg = function () {
10701
        this.c = k;
10702
        if (this.b) {
10703
            var a = t(this.md, this),
10704
                a = N(a, 500);
10705
            this.i.push(a)
10706
        }
10707
    };
10708
    p.kg = function () {
10709
        this.c = m
10710
    };
10711
    p.md = function () {
10712
        var a = Al.getInstance(),
10713
            b;
10714
        if (b = !this.Kd) b = mh(a, this.qa), b = !b ? m : B(b, Y(a, "active"));
10715
        b && (this.Kd = k, b = {
10716
            session_token: M("subscription_ajax")
10717
        }, b[gp()] = this.f, X("/subscription_ajax", {
10718
            method: "POST",
10719
            o: {
10720
                hovercard: 1,
10721
                action_get_subscription_form_for_channel: 1
10722
            },
10723
            C: b,
10724
            B: this,
10725
            j: function (b, d) {
10726
                vl(a, this.qa, d.response.html_content);
10727
                this.qb()
10728
            },
10729
            onError: function () {
10730
                this.Kd = m
10731
            }
10732
        }))
10733
    };
10734
    p.qb = function () {
10735
        var a = Al.getInstance(),
10736
            b = mh(a, this.qa),
10737
            c = tl(a, b);
10738
        w(c.getElementsByTagName("input"), function (a) {
10739
            var b = t(function () {
10740
                    Jg(c.getElementsByTagName("form")[0])
10741
                }, this),
10742
                a = R(a, "change", b);
10743
            this.e.push(a)
10744
        }, this)
10745
    };
10746
10747
    function ip(a) {
10748
        this.G = a;
10749
        this.type = Q(a, "subscription-type") || "channel";
10750
        this.tb = Q(a, "subscription-value") || "";
10751
        this.c = !!Q(a, "enable-tooltip");
10752
        this.ga = Q(a, "enable-hovercard") ? new hp(this.G, this.tb) : l;
10753
        this.sb = m;
10754
        this.e = [];
10755
        this.b = [];
10756
        this.Ob = Q(this.G, "sessionlink") || "";
10757
        this.qb()
10758
    }
10759
10760
    function jp(a) {
10761
        a = I("yt-subscription-button-js-default", a);
10762
        w(a, function (a) {
10763
            Q(a, "subscription-initialized") || (new ip(a), P(a, "subscription-initialized", "true"))
10764
        })
10765
    }
10766
    var kp = [];
10767
    p = ip.prototype;
10768
    p.getId = function () {
10769
        return Q(this.G, "subscription-id") || l
10770
    };
10771
10772
    function lp(a, b) {
10773
        b ? P(a.G, "subscription-id", b) : $d(a.G, "subscription-id");
10774
        mp(a)
10775
    }
10776
10777
    function mp(a) {
10778
        if (ae(a.G, "subscription-button-type")) {
10779
            var b = "-" + Q(a.G, "subscription-button-type");
10780
            C(a.G, "yt-uix-button-subscribed" + b, !!a.getId());
10781
            C(a.G, "yt-uix-button-subscribe" + b, !a.getId())
10782
        } else C(a.G, "subscribed", !!a.getId());
10783
        a.getId() ? (b = Cc(a.G, "yt-uix-button-subscription-container"), re(b, "mouseleave", t(function () {
10784
            x(this.G, "hover-enabled")
10785
        }, a))) : z(a.G, "hover-enabled");
10786
        B(a.G, "yt-uix-button-link") && (a.getId() ? np(a) : op(a));
10787
        if (a.ga) {
10788
            var b = a.ga,
10789
                c = !!a.getId(),
10790
                d = Y(Al.getInstance(), "target");
10791
            C(b.qa, d,
10792
                c);
10793
            b = a.ga;
10794
            c = !!a.getId();
10795
            (b.b = c) || ul(Al.getInstance(), b.qa)
10796
        }
10797
        a.c && (b = (a.getId() ? "un" : "") + "subscribe-tooltip", b = Q(a.G, b) || "", Dh(Ah.getInstance(), a.G, b))
10798
    }
10799
    p.qb = function () {
10800
        this.e.push(R(this.G, "click", t(this.vf, this)));
10801
        this.b.push(ig("SUBSCRIBE", this.wf, this));
10802
        this.b.push(ig("UNSUBSCRIBE", this.xf, this));
10803
        this.ga && this.ga.init();
10804
        kp.push(this);
10805
        mp(this)
10806
    };
10807
10808
    function pp(a, b, c, d) {
10809
        c != a.getId() && a.tb == b && lp(a, c);
10810
        d == a && a.ga && (a = a.ga, ul(Al.getInstance(), a.qa))
10811
    }
10812
    p.vf = function (a) {
10813
        if (this.sb) return m;
10814
        a.preventDefault();
10815
        Ch(Ah.getInstance(), this.G);
10816
        this.getId() ? this.Vd() : this.ra()
10817
    };
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
10818
10819
    function np(a) {
10820
        "BUTTON" == a.G.tagName && x(a.G.parentNode, "yt-subscription-button-disabled-mask-container");
10821
        a.G.disabled = k
10822
    }
10823
10824
    function op(a) {
10825
        z(a.G.parentNode, "yt-subscription-button-disabled-mask-container");
10826
        a.G.disabled = m
10827
    }
10828
    p.ra = function () {
10829
        var a = this.type,
10830
            b = this.tb,
10831
            c = Q(this.G, "subscription-feature");
10832
        this.sb = k;
10833
        np(this);
10834
        if (M("subscription_ajax")) qp(b, a, c, this);
10835
        else if (!this.G.getAttribute("href")) {
10836
            var d = t(this.rg, this),
10837
                a = Ef("/signin?context=popup", "next", document.location.protocol + "//" + document.domain + "/post_login"),
10838
                a = Ef(a, "feature", "sub_button");
10839
            if (a = window.open(a, "loginPopup", "width=375,height=440,resizable=yes,scrollbars=yes", k)) b = ig("LOGGED_IN", function (a) {
10840
                var b = L("LOGGED_IN_PUBSUB_KEY", b);
10841
                jg(b);
10842
                d(a)
10843
            }), Pd("LOGGED_IN_PUBSUB_KEY",
10844
                b), a.moveTo((screen.width - 375) / 2, (screen.height - 440) / 2)
10845
        }
10846
    };
10847
    p.rg = function (a) {
10848
        Rd("subscription_ajax", a.subscription_ajax);
10849
        this.ra()
10850
    };
10851
10852
    function qp(a, b, c, d) {
10853
        var b = b || "channel",
10854
            e = {},
10855
            f = {
10856
                channel: "channel",
10857
                all: "all"
10858
            };
10859
        e["action_create_subscription_to_" + (f[b] || f.channel)] = 1;
10860
        c && (e.feature = c);
10861
        d && d.Ob && (c = Nf("/subscription_ajax", e), f = Hf(d.Ob), Vg(c, f));
10862
        c = gp(b);
10863
        b = {};
10864
        b.session_token = M("subscription_ajax");
10865
        b[c] = a;
10866
        (c = L("PLAYBACK_ID")) && (b.plid = c);
10867
        X("/subscription_ajax", {
10868
            method: "POST",
10869
            o: e,
10870
            C: b,
10871
            j: function (b, c) {
10872
                W("SUBSCRIBE", a, c, d)
10873
            },
10874
            S: function () {
10875
                d && (d.sb = m, B(d.G, "yt-uix-button-link") || op(d))
10876
            }
10877
        });
10878
        Kh("subscribe")
10879
    }
10880
    p.Vd = function () {
10881
        var a = {
10882
                s: this.getId(),
10883
                session_token: M("subscription_ajax")
10884
            },
10885
            b = {
10886
                action_remove_subscriptions: 1
10887
            },
10888
            c = Q(this.G, "subscription-feature");
10889
        c && (b.feature = c);
10890
        (c = L("PLAYBACK_ID")) && (a.plid = c);
10891
        this.sb = k;
10892
        np(this);
10893
        if (this.Ob) {
10894
            var c = Nf("/subscription_ajax", b),
10895
                d = Hf(this.Ob);
10896
            Vg(c, d)
10897
        }
10898
        X("/subscription_ajax", {
10899
            method: "POST",
10900
            B: this,
10901
            o: b,
10902
            C: a,
10903
            j: function (a, b) {
10904
                lp(this, l);
10905
                if (this.ga) {
10906
                    var c = this.ga;
10907
                    c.b = m;
10908
                    ul(Al.getInstance(), c.qa)
10909
                }
10910
                W("UNSUBSCRIBE", this.tb, b, this)
10911
            },
10912
            S: function () {
10913
                this.sb = m;
10914
                op(this)
10915
            }
10916
        });
10917
        Kh("unsubscribe")
10918
    };
10919
    p.wf = function (a, b, c) {
10920
        b = b.response.id;
10921
        pp(this, a, b, c);
10922
        a == this.tb && (lp(this, b), this.ga && (a = this.ga, a.c && (Al.getInstance().zb(a.qa), a.md())))
10923
    };
10924
    p.xf = function (a, b) {
10925
        pp(this, a, b.response.id, this)
10926
    };
10927
10928
    function rp(a, b, c) {
10929
        a = L("WATCH_CONTEXT_CONTAINER_TEMPLATE") || tj(a);
10930
        b = L("WATCH_CONTEXT_VIDEO_TEMPLATE") || tj(b);
10931
        c = L("WATCH_CONTEXT_PLAYLIST_TEMPLATE") || tj(c);
10932
        this.b = new qj(a, sp);
10933
        this.e = new qj(b, tp);
10934
        this.c = new qj(c, up)
10935
    }
10936
    rp.prototype.da = function (a, b) {
10937
        for (var c = a.contextList, d = [], e = 0, f = a.clickedIndex, g = 0; g < c.length; g++) {
10938
            var i = {},
10939
                n = {};
10940
            "video" == c[g].itemType ? (i.context_type = a.contextType, i.video_id = c[g].videoId, i.video_thumb_src = c[g].videoImg, i.video_title = c[g].videoName, i.view_count = c[g].videoViews, i.video_time = c[g].videoTime, i.user_thumb_src = c[g].userImg, i.user_name = c[g].userName, i.feed_action = c[g].feedAction, c[g].feedAction && (i.item_classes = " has-action"), g == f && (i.item_classes += " context-playing"), d.push(this.e.da(i)),
10941
                e++) : "playlist" == c[g].itemType && (n.context_type = a.contextType, n.playlist_video_id = c[g].videoId, n.playlist_id = c[g].playlistId, n.playlist_title = c[g].playlistName, n.video_thumb_src = c[g].playlistImg, n.video_count = c[g].playlistCount, n.user_thumb_src = c[g].userImg, n.feed_action = c[g].feedAction, c[g].feedAction && (n.item_classes = " has-action"), g == f && (n.item_classes += " context-playing"), d.push(this.c.da(n)), e++)
10942
        }
10943
        0 != e && (c = d.join(""), d = {}, d.more_from = a.contextSource, d.back_link = a.backLink, d.image_src = a.contextImage,
0 ignored issues
show
Best Practice introduced by
Comparing 0 to e using the != operator is not safe. Consider using !== instead.
Loading history...
10944
            d = this.b.da(d), b.innerHTML = d, d = "context-" + a.contextType, x(b, d), (e = K("context-icon")) && x(e, d), P(b, "context-type", a.contextType), P(b, "show-notification", a.showNotification), d = J("ul", l, b), d[0].innerHTML = c, P(d[0], "context-playing", f), f = F("watch-context"), f = K("context-title", f), c = yc(f), d = "", Xc(c) ? d = "rtl" : Xc(c) || (d = "ltr"), f.setAttribute("dir", d))
10945
    };
10946
    var sp = ["back_link", "context_videos", "more_from", "image_src"],
10947
        tp = "context_type video_id video_thumb_src video_title view_count video_time user_thumb_src user_name feed_action item_classes".split(" "),
10948
        up = "context_type playlist_video_id playlist_id playlist_title video_thumb_src video_count user_thumb_src feed_action item_classes".split(" ");
10949
10950
    function vp() {
10951
        this.b = F("watch-context-container");
10952
        this.ja = new rp(F("context-pane-template"), F("context-video-template"), F("context-playlist-template"))
10953
    };
10954
10955
    function wp() {
10956
        var a = new xi,
10957
            b;
10958
        if (b = a) a: {
10959
            try {
10960
                b = !!a.b && !!a.b.getItem;
10961
                break a
10962
            } catch (c) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
10963
            b = m
10964
        }
10965
        b && (this.b = new yi(a))
10966
    }
10967
    v(wp, eg);
10968
    wp.prototype.b = l;
10969
10970
    function xp(a) {
10971
        var b = {
10972
            volume: 100,
10973
            muted: m,
10974
            nonNormalized: 100
10975
        };
10976
        if (a.b) {
10977
            var c = {};
10978
            try {
10979
                c = a.b.get("yt-player-volume") || {}
10980
            } catch (d) {
10981
                a.b.Xb("yt-player-volume")
10982
            }
10983
            b.volume = isNaN(c.volume) ? 100 : Math.min(Math.max(c.volume, 0), 100);
10984
            b.nonNormalized = isNaN(c.nonNormalized) ? b.volume : c.nonNormalized;
10985
            b.muted = c.muted == j ? m : c.muted
10986
        }
10987
        return b
10988
    }
10989
    wp.prototype.T = function () {
10990
        this.b = l;
10991
        wp.J.T.call(this)
10992
    };
10993
    var yp = m,
10994
        zp = -1,
10995
        Ap = "",
10996
        Bp = {},
10997
        Cp = new gg,
10998
        Dp = l;
10999
11000
    function Ep() {
11001
        return L("RESUME_COOKIE_NAME")
11002
    }
11003
11004
    function Fp() {
11005
        var a = sk(),
11006
            b = a.getDuration(),
11007
            a = Math.floor(a.getCurrentTime()),
11008
            c = L("VIDEO_ID");
11009
        if (120 >= a || a + 120 >= b) {
11010
            if (b = Ep()) a = Fe(b, "").split(","), a = Qa(a, function (a) {
11011
                return 0 != a.indexOf(c)
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a.indexOf(c) using the != operator is not safe. Consider using !== instead.
Loading history...
11012
            }), 0 == a.length ? Ge(b) : Ee(b, a.join(","), 1814400)
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a.length using the == operator is not safe. Consider using === instead.
Loading history...
11013
        } else if (b = Math.floor(a), a = Ep()) {
11014
            var d = Fe(a, "").split(","),
11015
                d = Qa(d, function (a) {
11016
                    return 0 != a.indexOf(c) && !!a.length
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a.indexOf(c) using the != operator is not safe. Consider using !== instead.
Loading history...
11017
                });
11018
            4 <= d.length && d.shift();
11019
            d.push(c + ":" + b);
11020
            Ee(a, d.join(","), 1814400)
11021
        }
11022
    }
11023
11024
    function Gp() {
11025
        var a = sk();
11026
        if (a) {
11027
            var b = L("VIDEO_ID"),
11028
                c = a.getDuration(),
11029
                a = Math.floor(a.getCurrentTime());
11030
            0 == c || 20 >= a || Yg("/save_resume_204?" + Df({
0 ignored issues
show
Best Practice introduced by
Comparing 0 to c using the == operator is not safe. Consider using === instead.
Loading history...
11031
                v: b,
11032
                t: a.toString()
11033
            }))
11034
        }
11035
    }
11036
11037
    function Hp() {
11038
        yp = k;
11039
        var a = sk();
11040
        a && Ip(a)
11041
    }
11042
11043
    function Ip(a, b) {
11044
        if (Wd && !a.addEventListener) {
11045
            var c = b ? 2 * b : 50;
11046
            N(function () {
11047
                Ip(a, c)
11048
            }, c)
11049
        } else b && Zg("ael_delayed", "delay=" + b, j), a.addEventListener("onStateChange", Jp), a.addEventListener("onVolumeChange", Kp), a.addEventListener("RATE_SENTIMENT", Lp), a.addEventListener("SHARE_CLICKED", Mp), a.addEventListener("NEXT_CLICKED", Np), a.addEventListener("SIZE_CLICKED", Op), a.addEventListener("onError", Pp), Ep() && R(window, "beforeunload", Fp), Kf(window.location.hash).q && L("WIDE_PLAYER_STYLES") && (L("WATCH7_ENABLED") ? W("player-resize",
11050
            m) : kk(m)), gk(a), Dp = new wp, Cp.za("READY_STATE_TOPIC", a)
11051
    }
11052
11053
    function Jp(a) {
11054
        zp = a;
11055
        switch (a) {
11056
        case 0:
11057
            Mj(dk()) && Vj(dk(), m, "autoplay")
11058
        }
11059
    }
11060
11061
    function Pp(a) {
11062
        switch (a) {
11063
        case 5:
11064
            ek(5, "html5_ns")
11065
        }
11066
    }
11067
11068
    function Kp(a) {
11069
        var b = Dp;
11070
        if (b.b) {
11071
            var c = {};
11072
            c.volume = isNaN(a.volume) ? xp(b).volume : Math.min(Math.max(a.volume, 0), 100);
11073
            c.nonNormalized = a.nonNormalized;
11074
            c.muted = a.muted == j ? xp(b).muted : a.muted;
11075
            try {
11076
                b.b.gb("yt-player-volume", c)
11077
            } catch (d) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
11078
        }
11079
    }
11080
11081
    function Np() {
11082
        Vj(dk(), k, j)
11083
    }
11084
11085
    function Op(a) {
11086
        L("FULLSCREEN_EXPAND") ? C(document.body, "fullscreen", a) : (Ee("wide", a ? "1" : "0"), L("WATCH7_ENABLED") ? W("player-resize", a) : kk(a))
11087
    }
11088
11089
    function Lp(a) {
11090
        L("WATCH7_ENABLED") && W("player-sentiment", a)
11091
    }
11092
11093
    function Mp() {
11094
        L("WATCH7_ENABLED") ? W("player-share") : rn(F("watch-share"), k)
11095
    }
11096
11097
    function Qp(a, b) {
11098
        var c = b != l ? b : k,
11099
            d = sk();
11100
        d.seekTo(a, k);
11101
        c && (F("watch-video-container") ? window.scroll(0, 0) : window.location.href = "#movie_player");
11102
        d.playVideo()
11103
    }
11104
11105
    function Rp() {
11106
        if (yp) {
11107
            var a = window.location.hash;
11108
            a != Ap && (Ap = a, a = Kf(a), "t" in a && a.t != Bp.t && Qp(Sp(a.t), m), Bp = a)
11109
        }
11110
    }
11111
11112
    function Sp(a) {
11113
        var b = 0; - 1 != a.indexOf("h") && (a = a.split("h"), b = 3600 * a[0], a = a[1]); - 1 != a.indexOf("m") && (a = a.split("m"), b = 60 * a[0] + b, a = a[1]); - 1 != a.indexOf("s") ? (a = a.split("s"), b = 1 * a[0] + b) : b = 1 * a + b;
11114
        return b
11115
    };
11116
    var Tp = m,
11117
        Vp = l,
11118
        Yp = l,
11119
        Zp = l,
11120
        $p = l;
11121
11122
    function aq(a) {
11123
        a.addEventListener("onStateChange", bq);
11124
        a.addEventListener("onError", cq)
11125
    }
11126
11127
    function dq(a) {
11128
        var b = $p,
11129
            a = {
11130
                event: a,
11131
                aplid: Vp,
11132
                abt: Yp,
11133
                evtm: Math.round(qa() - b)
11134
            };
11135
        (b = L("PLAYER_CONFIG")) && (b.args && b.args.plid) && (a.plid = b.args.plid);
11136
        b && (b.args && b.args.video_id) && (a.v = b.args.video_id);
11137
        Yg("/player_204?" + Df(a))
11138
    }
11139
11140
    function bq(a) {
11141
        if (Zp) switch (a) {
11142
        case 1:
11143
            dq("play");
11144
            Ud(Zp);
11145
            Zp = l;
11146
            Tp = m;
11147
            break;
11148
        case 0:
11149
            dq("ended"), Ud(Zp), Zp = l, Tp = m
11150
        }
11151
    }
11152
11153
    function cq() {
11154
        Zp && (dq("error"), Ud(Zp), Zp = l, Tp = m)
11155
    }
11156
11157
    function eq() {
11158
        Zp && dq("userwaiting");
11159
        Zp = l
11160
    }
11161
11162
    function fq() {
11163
        Tp && dq("unload")
11164
    };
11165
11166
    function gq() {
11167
        var a = F("watch-video-annotation-editable"),
11168
            b = va(F("watch-video-annotation-content").innerHTML);
11169
        b ? A(a, ["unannotated", "editing"], ["annotated", "not-editing"]) : A(a, ["annotated", "not-editing"], ["unannotated", "editing"]);
11170
        F("watch-video-annotation-textarea").value = b
11171
    }
11172
11173
    function hq(a) {
11174
        if (!Q(a, "saving")) {
11175
            P(a, "saving", "true");
11176
            var b = F("watch-video-annotation-content"),
11177
                c = F("watch-video-annotation-textarea"),
11178
                d = va(c.value),
11179
                e = {};
11180
            d || (e["delete"] = 1);
11181
            X(a.action, {
11182
                format: "JSON",
11183
                method: "POST",
11184
                o: e,
11185
                Ra: Qc(a),
11186
                j: function () {
11187
                    b.innerHTML = za(d)
11188
                },
11189
                onError: function () {
11190
                    c.value = b.innerHTML
11191
                },
11192
                S: function () {
11193
                    $d(a, "saving");
11194
                    gq()
11195
                }
11196
            })
11197
        }
11198
    };
11199
11200
    function iq(a) {
11201
        var b = a.target;
11202
        if (!("INPUT" == b.tagName || "TEXTAREA" == b.tagName || "SELECT" == b.tagName)) switch (a.keyCode) {
11203
        case 78:
11204
            a.shiftKey && Vj(dk(), k, "keys");
11205
            break;
11206
        case 80:
11207
            a.shiftKey && Wj(dk(), "keys");
11208
            break;
11209
        case 106:
11210
            if (a = sk()) b = a.getCurrentTime(), a.seekTo(b - 10);
11211
            break;
11212
        case 108:
11213
            if (a = sk()) b = a.getCurrentTime(), a.seekTo(b + 10);
11214
            break;
11215
        case 107:
11216
            (a = sk()) && (2 == zp ? a.playVideo() : a.pauseVideo())
11217
        }
11218
    };
11219
11220
    function jq() {
11221
        He.getInstance();
11222
        Oe(Nh.he, k);
11223
        Pe();
11224
        V("watch_page_survey")
11225
    };
11226
    var kq = ["ypc-container", "ypc-unsubscribe-link", "ypc-rap-overlay-link"];
11227
11228
    function lq(a) {
11229
        var b = L("YPC_LOADER_CSS"),
11230
            c;
11231
        c = J("head", j, j)[0];
11232
        c = J("link", l, c);
11233
        w(c, function (a) {
11234
            if (a.href == b) return a
0 ignored issues
show
Complexity Best Practice introduced by
There is no return statement if a.href == b is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
11235
        });
11236
        l || (c = document.createElement("link"), c.rel = "stylesheet", c.href = b, J("head", j, j)[0].appendChild(c));
11237
        Ug(L("YPC_LOADER_JS"), function () {
11238
            w(L("YPC_LOADER_CALLBACKS"), function (a) {
11239
                (a = s(a)) && a()
11240
            });
11241
            a && a()
11242
        })
11243
    };
11244
11245
    function mq(a, b, c, d) {
11246
        c = Al.getInstance();
11247
        d.html ? (vl(c, b, d.html), jp()) : (c = Al.getInstance(), ul(c, b), z(a, "yt-uix-hovercard"), z(b, "yt-uix-hovercard-target"))
11248
    };
11249
11250
    function nq(a, b, c) {
11251
        var d = c || q,
11252
            e = a.serverUri || "//www.google.com/tools/feedback",
11253
            f = d.GOOGLE_FEEDBACK_START;
11254
        /iphone|ipad|ipod|android|blackberry|mini|windows\sce|windows\sphone|palm/i.test(navigator.userAgent) && (a.mobileWindow = window.open(""));
11255
        d.GOOGLE_FEEDBACK_START_ARGUMENTS = arguments;
11256
        f ? f.apply(d, arguments) : (d = d.document, f = d.createElement("script"), f.src = e + "/load.js", d.body.appendChild(f))
11257
    };
11258
    var oq = m,
11259
        pq = "";
11260
11261
    function qq(a) {
11262
        a = a.match(/[\d]+/g);
11263
        a.length = 3;
11264
        return a.join(".")
11265
    }
11266
    if (navigator.plugins && navigator.plugins.length) {
11267
        var rq = navigator.plugins["Shockwave Flash"];
11268
        rq && (oq = k, rq.description && (pq = qq(rq.description)));
11269
        navigator.plugins["Shockwave Flash 2.0"] && (oq = k, pq = "2.0.0.11")
11270
    } else if (navigator.mimeTypes && navigator.mimeTypes.length) {
11271
        var sq = navigator.mimeTypes["application/x-shockwave-flash"];
11272
        (oq = sq && sq.enabledPlugin) && (pq = qq(sq.enabledPlugin.description))
11273
    } else try {
11274
        var tq = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"),
11275
            oq = k,
11276
            pq = qq(tq.GetVariable("$version"))
11277
    } catch (uq) {
11278
        try {
11279
            tq =
11280
                new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"), oq = k, pq = "6.0.21"
11281
        } catch (vq) {
11282
            try {
11283
                tq = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), oq = k, pq = qq(tq.GetVariable("$version"))
11284
            } catch (wq) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
11285
        }
11286
    }
11287
    var xq = pq;
11288
11289
    function yq(a) {
11290
        return (a = a.exec(zb())) ? a[1] : ""
11291
    }
11292
    var zq = function () {
11293
        if (Sk) return yq(/Firefox\/([0-9.]+)/);
11294
        if (E || Db) return Qb;
11295
        if (Xk) return yq(/Chrome\/([0-9.]+)/);
11296
        if (Yk) return yq(/Version\/([0-9.]+)/);
11297
        if (Uk || Vk) {
11298
            var a = /Version\/(\S+).*Mobile\/(\S+)/.exec(zb());
11299
            if (a) return a[1] + "." + a[2]
11300
        } else {
11301
            if (Wk) return (a = yq(/Android\s+([0-9.]+)/)) ? a : yq(/Version\/([0-9.]+)/);
11302
            if (Tk) return yq(/Camino\/([0-9.]+)/)
11303
        }
11304
        return ""
11305
    }();
11306
11307
    function Aq() {
11308
        (E ? 0 <= Ma(zq, "7") && 0 <= Ma(xq, "9") : Sk ? 0 <= Ma(zq, "3.5") : Yk ? 0 <= Ma(zq, "5") : Xk) || V("reportbug")
11309
    };
11310
11311
    function Bq() {
11312
        re(F("help-button"), "click", Cq, k)
11313
    }
11314
11315
    function Cq() {
11316
        var a = F("help-button");
11317
        if (a) {
11318
            var b = Q(a, "iph-topic-id"),
11319
                c = Q(a, "help-center-host"),
11320
                d = Q(a, "locale"),
11321
                e = Q(a, "iph-title-text"),
11322
                f = Q(a, "iph-search-button-text"),
11323
                g = Q(a, "iph-search-input-text"),
11324
                i = Q(a, "iph-anchor-text"),
11325
                n = document.location.protocol + Q(a, "iph-js-url"),
11326
                r = document.location.protocol + Q(a, "iph-css-url");
11327
            n && r && (r = gc("link", {
11328
                href: r,
11329
                rel: "stylesheet"
11330
            }), document.getElementsByTagName("head")[0].appendChild(r), Ug(n, function () {
11331
                var n = s("yt.www.help.init"),
11332
                    r = s("yt.www.help.onButtonClick");
11333
                n(b,
11334
                    c, l, d, e, g, f, i);
11335
                R(a, "click", r);
11336
                r()
11337
            }))
11338
        }
11339
    };
11340
11341
    function Dq() {
11342
        Eq = N(function () {
11343
            document.getElementById("loading").style.display = ""
11344
        }, 1250)
11345
    }
11346
11347
    function Fq() {
11348
        W("dispose");
11349
        window.scroll(0, 0);
11350
        var a = document.getElementById("content");
11351
        a.style.height = a.clientHeight + "px"
11352
    }
11353
11354
    function Gq() {
11355
        Ud(Eq);
11356
        document.getElementById("loading").style.display = "none";
11357
        document.getElementById("content").style.height = "";
11358
        W("init")
11359
    }
11360
    var Eq = 0;
11361
    var Hq;
11362
11363
    function Iq(a, b, c) {
11364
        !c || !c.html ? V(a) : (P(a, "loaded", 1), a.innerHTML = c.html, Jq(a))
11365
    }
11366
11367
    function Jq(a, b) {
11368
        var c = K("yt-picker-content", a),
11369
            d = J(l, "yt-picker-section", c);
11370
        w(d, t(Kq, l, Math.floor((b || c.offsetWidth) / 180)))
11371
    }
11372
11373
    function Kq(a, b) {
11374
        for (var c = J(l, "yt-picker-item", b), d = Math.ceil(c.length / a), e, f = document.createElement("div"), g = 0; g < a; g++) {
11375
            e = document.createElement("div");
11376
            e.className = "yt-picker-grid";
11377
            for (var i = d * g; i < d * (g + 1); i++) c[i] && e.appendChild(c[i]);
11378
            e.children.length && f.appendChild(e)
11379
        }
11380
        b.innerHTML = f.innerHTML
11381
    };
11382
11383
    function Lq() {
11384
        (function () {
11385
            try {
11386
                for (var a = this; a.parent != a;) "$" == a.frameElement.src && h("odd"), a = a.parent;
11387
                a.frameElement != l && h("busted")
11388
            } catch (b) {
11389
                document.write("--\><plaintext style=display:none><\!--"), window.open("/", "_top"), top.location = "/"
11390
            }
11391
        })()
11392
    }
11393
11394
    function Mq(a) {
11395
        "block" == a.responseText && Lq()
11396
    }
11397
    if (window != window.top) {
11398
        var Nq = document.referrer;
11399
        if (window.parent != window.top) Lq();
11400
        else {
11401
            var Oq = Qf(Nq);
11402
            if (Of(Oq)) Lq();
11403
            else {
11404
                var Pq = Qf(Nq);
11405
                Pf(Pq) || Kg("/roger_rabbit?" + ("location=" + encodeURIComponent(Nq) + "&self=" + encodeURIComponent(window.location.href) + "&user_agent=" + encodeURIComponent(navigator.userAgent)), {
11406
                    onComplete: Mq
11407
                })
11408
            }
11409
        }
11410
    };
11411
    var Qq = m;
11412
11413
    function Rq() {
11414
        W("init")
11415
    }
11416
11417
    function Sq() {
11418
        W("dispose")
11419
    }
11420
11421
    function Tq(a, b, c) {
11422
        var d = F("www-core-js");
11423
        !Qq && (d && -1 != d.src.indexOf("/debug-")) && (c = Uq(c), Yg("/js_204?" + ("error=" + encodeURIComponent(a) + "&script=" + encodeURIComponent(b) + "&linenumber=" + encodeURIComponent(c) + "&url=" + encodeURIComponent(window.location.href))), Qq = k)
11424
    }
11425
11426
    function Uq(a) {
11427
        if (Eb) try {
11428
            eval("(0)()")
11429
        } catch (b) {
1 ignored issue
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
11430
            return b.stack.replace(/(.*):/g, "").replace(/\n/g, ",")
11431
        } else return a
11432
    };
11433
    var Vq = [];
11434
    var Wq = ra("You were shown..."),
11435
        Xq = ra("You just watched..."),
11436
        Yq = "";
11437
11438
    function Zq(a, b, c, d) {
11439
        window.google_ad_client = a;
11440
        window.google_ad_channel = b;
11441
        window.google_max_num_ads = 1;
11442
        window.google_ad_output = "js";
11443
        window.google_ad_type = "text";
11444
        window.google_only_pyv_ads = k;
11445
        c && (window.google_kw = c, window.google_kw_type = "broad");
11446
        window.dclk_language && (window.google_language = window.dclk_language);
11447
        window.google_ad_request_done = d;
11448
        Ug("//pagead2.googlesyndication.com/pagead/show_ads.js")
11449
    }
11450
11451
    function $q() {
11452
        window.dclk_language && (window.google_language = window.dclk_language);
11453
        window.google_ad_client = "pub-6219811747049371";
11454
        window.google_ad_channel = "1802068507";
11455
        window.google_ad_format = "300x250_as";
11456
        window.google_ad_type = "text_image";
11457
        window.google_ad_width = 300;
11458
        window.google_ad_height = 250;
11459
        window.google_alternate_color = "FFFFFF";
11460
        window.google_color_border = "FFFFFF";
11461
        window.google_color_bg = "FFFFFF";
11462
        window.google_color_link = "0033CC";
11463
        window.google_color_text = "444444";
11464
        window.google_color_url = "0033CC";
11465
        Ug("//pagead2.googlesyndication.com/pagead/show_ads.js")
11466
    }
11467
11468
    function ar() {
11469
        V("pyv-container");
11470
        F("ppv-placeholder") ? U("ppv-placeholder") : V("homepage-sidebar-ads")
11471
    }
11472
11473
    function br(a, b, c, d, e) {
11474
        var f = Sa(b.media_template_data, function (a) {
11475
            return !!a.imageUrl
11476
        });
11477
        f && (a = {
11478
            video_id: f.videoId,
11479
            ad_type: a,
11480
            headline: Ga(b.line1),
11481
            image_url: f.imageUrl,
11482
            description1: Ga(b.line2),
11483
            description2: Ga(b.line3),
11484
            channel_title: f.channelName,
11485
            test_mode: (!!e).toString()
11486
        }, Yq = Ga(b.url), Kg("/pyv?" + Df(a), {
11487
            method: "GET",
11488
            update: c,
11489
            onComplete: d
11490
        }))
11491
    }
11492
11493
    function cr(a) {
11494
        if (0 == a.length) dr(), L("PYV_TRACK_RELATED_CTR") && (er("watch-related", m), er("watch-channel-videos-panel", m));
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a.length using the == operator is not safe. Consider using === instead.
Loading history...
11495
        else {
11496
            var b = F("watch-channel-videos-panel");
11497
            b && !L("IS_BRANDED_WATCH") && x(b, "yt-uix-expander-collapsed");
11498
            br("watch_related", a[0], l, function (a) {
11499
                var a = Lg(Hg(a.responseXML), "html_content") || "",
11500
                    b = F(window.pyv_related_box_id || "watch-related");
11501
                b && (0 != b.innerHTML.indexOf(a) && (b.insertBefore(jc(a), b.firstChild), L("PYV_TRACK_RELATED_CTR") && (er("watch-related", k), er("watch-channel-videos-panel",
0 ignored issues
show
Best Practice introduced by
Comparing 0 to b.innerHTML.indexOf(a) using the != operator is not safe. Consider using !== instead.
Loading history...
11502
                    k))), (a = F("pyv-watch-related-dest-url")) && a.setAttribute("href", Yq))
11503
            }, window.google_adtest && "on" == window.google_adtest)
11504
        }
11505
    }
11506
11507
    function dr() {
11508
        var a = F("ppv-container");
11509
        a && U(a)
11510
    }
11511
11512
    function fr(a) {
11513
        a && of (a, k); of ("search-base-div", k)
11514
    }
11515
11516
    function gr(a, b, c) {
11517
        w(a, function (a) {
11518
            var b = a.media_template_data[0];
11519
            a.line1 = Ga(a.line1);
11520
            a.line2 = Ga(a.line2);
11521
            a.line3 = Ga(a.line3);
11522
            a.url = Ga(a.url);
11523
            b.imageUrl = Ga(b.imageUrl);
11524
            b.channelName = Ga(b.channelName)
11525
        });
11526
        X("/pyv", {
11527
            format: "XML",
11528
            method: "POST",
11529
            C: {
11530
                pyv_ads: zg(new yg(j), a),
11531
                ad_type: c
11532
            },
11533
            j: function (a, c) {
11534
                b.innerHTML = c.html_content;
11535
                fr(b)
11536
            }
11537
        })
11538
    }
11539
11540
    function hr() {
11541
        L("PYV_IS_ALLOWED") ? Zq("ca-youtube-homepage", L("PYV_AD_CHANNEL") || "", L("PYV_KW") || "", ir) : ar()
11542
    }
11543
11544
    function ir(a) {
11545
        var b = F("pyv-container");
11546
        0 == a.length || !b ? ar() : br("homepage", a[0], b, function () {
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a.length using the == operator is not safe. Consider using === instead.
Loading history...
11547
            var a = document.getElementById("pyv-large-dest-url-image"),
11548
                b = document.getElementById("pyv-large-dest-url");
11549
            a && a.setAttribute("href", Yq);
11550
            b && b.setAttribute("href", Yq)
11551
        })
11552
    }
11553
11554
    function jr() {
11555
        if (L("PYV_IS_ALLOWED")) {
11556
            var a = "pyvOnBrowse";
11557
            L("PYV_CATEGORY") && (a += " pyvBrowse_" + L("PYV_CATEGORY"));
11558
            Zq("ca-youtube-browse", a, "", kr)
11559
        } else $q()
11560
    }
11561
11562
    function kr(a) {
11563
        var b = F("pyv-container");
11564
        0 == a.length || !b ? $q() : br(L("PYV_NEW_BROWSE") ? "new_browse" : "browse", a[0], b, function () {
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a.length using the == operator is not safe. Consider using === instead.
Loading history...
11565
            V("ad_creative_1")
11566
        })
11567
    }
11568
11569
    function er(a, b) {
11570
        var c = F(a);
11571
        c && (c = J("li", "video-list-item", c), w(c, function (a, c) {
11572
            var f = J("a", l, a);
11573
            w(f, function (a) {
11574
                var d = a.getAttribute("href");
11575
                d && unescape(d).match(/\/watch(\?|#!)v=/) && (a.href = b ? a.href + ("&pvpos=" + c) : a.href + ("&pvnpos=" + c))
11576
            })
11577
        }))
11578
    }
11579
11580
    function lr(a) {
11581
        var b = window.location.href;
11582
        b.indexOf("#") == b.length - 1 && Fb && (window.location.hash = "#!");
11583
        var b = document.body,
11584
            c = Zb(b),
11585
            d = [];
11586
        d.push("<!DOCTYPE html>");
11587
        d.push("<html><head>", a, "</head><body>", j, "</body></html>");
11588
        a = c.Qd("iframe", {
11589
            frameborder: 0,
11590
            style: "border:0;vertical-align:bottom;",
11591
            src: 'javascript:""'
11592
        });
11593
        b.appendChild(a);
11594
        b = d.join("");
11595
        a = a.contentDocument || a.contentWindow.document;
11596
        a.open();
11597
        a.write(b);
11598
        a.close()
11599
    }
11600
11601
    function mr(a, b) {
11602
        var c = Lg(Hg(a.responseXML), "html_content") || "",
11603
            d = F(window.pyv_related_box_id || "watch-related");
11604
        d && 0 != d.innerHTML.indexOf(c) && (d.insertBefore(jc(c), d.firstChild), Yg(b))
0 ignored issues
show
Best Practice introduced by
Comparing 0 to d.innerHTML.indexOf(c) using the != operator is not safe. Consider using !== instead.
Loading history...
11605
    };
11606
    var nr = l,
11607
        or = l,
11608
        pr = l;
11609
11610
    function qr(a) {
11611
        a = a.replace(";dc_seed=", ";kmyd=watch-channel-brand-div;dc_seed=");
11612
        V("instream_google_companion_ad_div", "google_companion_ad_div");
11613
        U("ad300x250", "watch-channel-brand-div");
11614
        var b = F("ad300x250");
11615
        if (b !== l) {
11616
            var c = Math.round(1E4 * Math.random());
11617
            b.innerHTML = ['<iframe src="', a, '" name="ifr_300x250ad', c, '" id="ifr_300x250ad', c, '" width="300" height="250" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no"></iframe>'].join("")
11618
        }
11619
        rr()
11620
    }
11621
11622
    function sr(a) {
11623
        a = a.replace(";dc_seed=", ";kmyd=watch-longform-ad;dc_seed=");
11624
        V("instream_google_companion_ad_div");
11625
        U("watch-longform-ad");
11626
        U("watch-longform-text");
11627
        U("watch-longform-ad-placeholder");
11628
        var b = F("watch-longform-ad-placeholder"),
11629
            c = Math.round(1E4 * Math.random());
11630
        b.innerHTML = ['<iframe src="', a, '" name="ifr_300x60ad', c, '" id="ifr_300x60ad', c, '" width="300" height="60" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no"></iframe>'].join("");
11631
        rr()
11632
    }
11633
11634
    function tr(a) {
11635
        var b = F("watch-longform-ad-placeholder");
11636
        a ? (V("instream_google_companion_ad_div"), U("watch-longform-ad"), U("watch-longform-text"), U("watch-longform-ad-placeholder"), b.innerHTML = a) : V("watch-longform-ad");
11637
        rr()
11638
    }
11639
11640
    function ur(a, b) {
11641
        var c = "ad300x250",
11642
            d = 300,
11643
            e = 250;
11644
        "video" == a && (c = "watch-longform-ad-placeholder", d = 300, e = 60, V("instream_google_companion_ad_div"));
11645
        var f = decodeURIComponent(b);
11646
        F(c).innerHTML = ['<iframe name="fw_ad" id="fw_ad" ', 'width="' + d + '" height="' + e + '" ', 'marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no"></iframe>'].join("");
11647
        var g = F("fw_ad"),
11648
            g = g.contentWindow ? g.contentWindow : g.contentDocument.document ? g.contentDocument.document : g.contentDocument,
11649
            d = navigator.userAgent.toLowerCase(),
11650
            c = -1 != d.indexOf("msie"),
11651
            d = -1 != d.indexOf("opera");
11652
        g.document.open();
11653
        g.document.write(f);
11654
        c || d ? N(function () {
11655
            g.document.close()
11656
        }, 7500) : g.document.close();
11657
        "video" == a ? U("watch-longform-ad") : U("watch-channel-brand-div");
11658
        rr()
11659
    }
11660
11661
    function vr() {
11662
        U("watch-channel-brand-div");
11663
        V("ad300x250");
11664
        F("google_companion_ad_div").style.height = "250px";
11665
        rr()
11666
    }
11667
11668
    function wr() {
11669
        V("watch-longform-ad");
11670
        rr()
11671
    }
11672
11673
    function xr() {
11674
        V("watch-channel-brand-div");
11675
        rr()
11676
    }
11677
11678
    function rr() {
11679
        W("watchads-adLoad")
11680
    }
11681
11682
    function yr(a) {
11683
        Pd("POPOUT_AD_SLOTS", a)
11684
    }
11685
11686
    function zr() {
11687
        var a = F("watch-longform-popup");
11688
        a && (a.disabled = k)
11689
    }
11690
11691
    function Ar(a) {
11692
        var b = F("watch-longform-popup");
11693
        b && (b.disabled = m);
11694
        yr(a)
11695
    }
11696
11697
    function Cr(a) {
11698
        window.google_ad_output = "html";
11699
        a ? (window.google_ad_height = "60", window.google_ad_format = "300x60_as", window.google_container_id = "instream_google_companion_ad_div") : (window.google_ad_height = "250", window.google_ad_format = "300x250_as", window.google_container_id = "google_companion_ad_div")
11700
    }
11701
11702
    function Dr(a) {
11703
        a ? (V("watch-longform-ad-placeholder", "watch-channel-brand-div"), U("watch-longform-text", "watch-longform-ad", "instream_google_companion_ad_div")) : (V("ad300x250", "watch-longform-ad"), U("google_companion_ad_div", "watch-channel-brand-div"));
11704
        rr()
11705
    }
11706
11707
    function Er() {
11708
        V("instream_google_companion_ad_div", "watch-longform-text", "watch-longform-ad-placeholder");
11709
        rr()
11710
    };
11711
    u("yt.www.watch.ads.setAdId", function (a) {
11712
        window.ad_debug = a
11713
    });
11714
    u("yt.www.watch.ads.showForcedMpu", function (a) {
11715
        F("ad300x250").innerHTML = ['<iframe src="', a, '" name="ifr_300x250ad" id="ifr_300x250ad" width="300" height="250" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no"></iframe>'].join("");
11716
        U("ad300x250")
11717
    });
11718
    u("yt.www.watch.ads.createGutSlot", function (a) {
11719
        googletag && (nr = googletag.defineSlot(a, [
11720
            [300, 250],
11721
            [300, 60]
11722
        ], "yt-gut-content"), nr.set("ad_type", "flash"), nr.addService(googletag.companionAds()), googletag.enableServices(), a = nr.getSizes(), or = a[0], pr = a[1])
11723
    });
11724
    u("yt.www.watch.ads.handleMoveGutCompanion", function (a) {
11725
        var a = a ? F("instream_google_companion_ad_div") : F("google_companion_ad_div"),
11726
            b = F("yt-gut-content");
11727
        b ? b.innerHTML = "" : (b = document.createElement("div"), b.id = "yt-gut-content");
11728
        a && (a.innerHTML = "", a.appendChild(b));
11729
        rr()
11730
    });
11731
    u("yt.www.watch.ads.setGutSlotSizes", function (a, b) {
11732
        if (nr) {
11733
            var c = nr.getSizes();
11734
            Va(c);
11735
            b && c.push(or);
11736
            a && c.push(pr)
11737
        }
11738
    });
11739
    u("yt.www.watch.ads.handleSetCompanion", qr);
11740
    u("yt.www.watch.ads.handleSetCompanionForInstream", sr);
11741
    u("yt.www.watch.ads.handleSetCompanionForLongform", tr);
11742
    u("yt.www.watch.ads.handleSetCompanionForFreewheel", ur);
11743
    u("yt.www.watch.ads.handleHideCompanion", vr);
11744
    u("yt.www.watch.ads.handleHideCompanionForInstream", wr);
11745
    u("yt.www.watch.ads.disablePopoutButton", zr);
11746
    u("yt.www.watch.ads.enablePopoutButton", Ar);
11747
    u("yt.www.watch.ads.handleCloseMpuCompanion", xr);
11748
    u("yt.www.watch.ads.updatePopoutAds", yr);
11749
    u("yt.www.watch.ads.handleSetAfvCompanionVars", Cr);
11750
    u("yt.www.watch.ads.handleShowAfvCompanionAdDiv", Dr);
11751
    u("yt.www.watch.ads.handleHideAfvInstreamCompanionAdDiv", Er);
11752
    u("yt.www.watch.ads.AD_LOAD_TOPIC", "watchads-adLoad");
11753
    u("yt.www.ads.pyv.pyvWatchAfcWithPpvCallback", function (a) {
11754
        cr(a);
11755
        if (0 < a.length && (a = F("ppv-container"))) {
11756
            var b = Wb && a.children != j ? a.children : Qa(a.childNodes, function (a) {
11757
                return 1 == a.nodeType
0 ignored issues
show
Best Practice introduced by
Comparing 1 to a.nodeType using the == operator is not safe. Consider using === instead.
Loading history...
11758
            });
11759
            if (2 == b.length) {
11760
                var c = nc(b[0]);
11761
                c != j && "A" == c.tagName && (-1 != c.href.indexOf("feature=fvwbrel") || -1 != c.href.indexOf("feature=fvwberel")) ? V(b[0]) : V(b[1])
11762
            }
11763
            U(a)
11764
        }
11765
    });
11766
    u("yt.www.ads.pyv.pyvWatchAfcCallback", cr);
11767
    u("yt.www.ads.pyv.pyvSearchRhsAfcCallback", function (a) {
11768
        var b = F("pyv-ads");
11769
        0 != a.length && b && gr(a, b, "search_rhs")
0 ignored issues
show
Best Practice introduced by
Comparing 0 to a.length using the != operator is not safe. Consider using !== instead.
Loading history...
11770
    });
11771
    u("yt.www.ads.pyv.pyvSearchTopAfcCallback", function (a) {
11772
        var b = F("pyv-top-ads");
11773
        !a.length || !b ? fr(b) : gr(a, b, "search_top")
11774
    });
11775
    u("yt.www.ads.pyv.pyvHomeAfcCallback", ir);
11776
    u("yt.www.ads.pyv.showHomepagePpvAd", ar);
11777
    u("yt.www.ads.pyv.pyvHomeRequestAds", hr);
11778
    u("yt.www.ads.pyv.pyvBrowseRequestAds", jr);
11779
    u("yt.www.ads.pyv.showPpvOnWatch", dr);
11780
    u("yt.www.ads.pyv.loadPyvIframe", lr);
11781
    u("yt.www.ads.pyv.loadPyvAfsScript", function (a) {
11782
        Ug("/pyv_afs_ads?query=" + a)
11783
    });
11784
    u("yt.www.ads.pyv.hijackPyvSlotForCompanion", function (a, b) {
11785
        if (window.pyv_backfill_vars || window.pyv_backfill_with_ppv) window.pyv_backfill_vars = window.pyv_backfill_with_ppv = m, Kg("/pyv?" + Df({
11786
            video_id: a,
11787
            ad_type: "watch_related_companion",
11788
            test_mode: window.google_adtest && "on" == window.google_adtest
11789
        }), {
11790
            method: "GET",
11791
            onComplete: function (a) {
11792
                a && mr(a, b)
11793
            }
11794
        })
11795
    });
11796
    u("yt.www.ads.pyv.pyvSlotCompanionCallback", mr);
11797
    u("yt.www.ads.pyv.backfillCompanionWithPyv", function () {
11798
        window.pyv_backfill_vars ? lr(window.pyv_backfill_vars) : window.pyv_backfill_with_ppv && dr();
11799
        window.pyv_backfill_vars = window.pyv_backfill_with_ppv = m
11800
    });
11801
    u("yt.www.ads.pyv.updatePyvSlotCompanionLabel", function (a) {
11802
        var b = F("pyv-slot-companion-status-label");
11803
        b && (b.innerText = a ? Wq : Xq)
11804
    });
11805
    Sd("pyv_related_box_id");
11806
    u("setCompanion", qr);
11807
    u("setInstreamCompanion", sr);
11808
    u("setLongformCompanion", tr);
11809
    u("setFreewheelCompanion", ur);
11810
    u("closeInPageAdIframe", vr);
11811
    u("hideInstreamCompanion", wr);
11812
    u("disablePopout", zr);
11813
    u("enablePopout", Ar);
11814
    u("closeMpuCompanion", xr);
11815
    u("updatePopAds", yr);
11816
    u("setAfvCompanionVars", Cr);
11817
    u("showAfvCompanionAdDiv", Dr);
11818
    u("hideAfvInstreamCompanionAdDiv", Er);
11819
    u("requestPyvAds", hr);
11820
    u("pyvHomeRequestAds", hr);
11821
    u("pyvBrowseRequestAds", jr);
11822
    window.yt = window.yt || {};
11823
    u("_gel", F);
11824
    u("_hasclass", B);
11825
    u("_addclass", x);
11826
    u("_removeclass", z);
11827
    u("_toggleclass", ib);
11828
    u("_showdiv", U);
11829
    u("_hidediv", V);
11830
    u("_togglediv", qf);
11831
    u("_ajax", Gg);
11832
    u("goog.bind", t);
11833
    u("goog.dom.getElementsByTagNameAndClass", function (a, b, c) {
11834
        return J(a, b, c)
11835
    });
11836
    u("goog.dom.getFirstElementChild", nc);
11837
    u("goog.array.forEach", w);
11838
    u("goog.array.indexOf", Pa);
11839
    u("goog.array.contains", Ua);
11840
    u("yt.dom.hasAncestor", function (a, b, c) {
11841
        a = F(a);
11842
        b = F(b);
11843
        return !!Bc(a, function (a) {
11844
            return a === b
11845
        }, k, c)
11846
    });
11847
    u("yt.setConfig", Pd);
11848
    u("yt.getConfig", L);
11849
    u("yt.setAjaxToken", Rd);
11850
    u("yt.registerGlobal", Sd);
11851
    u("yt.setTimeout", N);
11852
    u("yt.setInterval", Td);
11853
    u("yt.clearTimeout", Ud);
11854
    u("yt.clearInterval", Vd);
11855
    u("yt.setMsg", function (a) {
11856
        Qd(Md, arguments)
11857
    });
11858
    u("yt.setGoogMsg", function (a) {
11859
        Qd(Md, arguments)
11860
    });
11861
    u("yt.getMsg", O);
11862
    u("yt.events.listen", R);
11863
    u("yt.events.unlisten", ue);
11864
    u("yt.events.stopPropagation", we);
11865
    u("yt.events.preventDefault", function (a) {
11866
        a = a || window.event;
11867
        a.returnValue = m;
11868
        a.preventDefault && a.preventDefault();
11869
        return m
11870
    });
11871
    u("yt.events.getTarget", ve);
11872
    u("yt.events.clear", function () {
11873
        for (var a in me) se(a)
11874
    });
11875
    u("yt.events.Event", ke);
11876
    ke.prototype.preventDefault = ke.prototype.preventDefault;
11877
    ke.prototype.stopPropagation = ke.prototype.stopPropagation;
11878
    u("yt.pubsub.subscribe", ig);
11879
    u("yt.pubsub.unsubscribeByKey", jg);
11880
    u("yt.pubsub.publish", W);
11881
    u("yt.www.init", Rq);
11882
    u("yt.www.dispose", Sq);
11883
    R(window, "load", Rq);
11884
    R(window, "unload", Sq);
11885
    u("yt.www.logError", Tq);
11886
    window.onerror = Tq;
11887
    u("yt.uix.FormInput.selectOnChangeActionIE", function (a) {
11888
        wk.getInstance().Ga(a)
11889
    });
11890
    ig("init", function () {
11891
        yk()
11892
    });
11893
    u("goog.i18n.bidi.isRtlText", Xc);
11894
    u("goog.i18n.bidi.setDirAttribute", function (a, b) {
11895
        var c = b.value,
11896
            d = "";
11897
        Xc(c) ? d = "rtl" : Xc(c) || (d = "ltr");
11898
        b.dir = d
11899
    });
11900
    u("yt.style.toggle", qf);
11901
    u("yt.style.setDisplayed", lf);
11902
    u("yt.style.isDisplayed", mf);
11903
    u("yt.style.setVisible", of );
11904
    u("yt.net.ajax.sendRequest", Kg);
11905
    u("yt.net.ajax.getRootNode", Hg);
11906
    u("yt.net.ajax.getNodeValue", Lg);
11907
    u("yt.net.delayed.register", Rg);
11908
    u("yt.net.delayed.load", Tg);
11909
    u("yt.net.delayed.markAsLoaded", function (a) {
11910
        a in Pg && (Qg[a] = k)
11911
    });
11912
    u("yt.net.scriptloader.load", Ug);
11913
    u("goog.dom.forms.getFormDataString", Qc);
11914
    u("yt.uri.buildQueryData", Df);
11915
    u("yt.uri.appendQueryData", Lf);
11916
    u("yt.www.feedback.start", function (a, b, c, d) {
11917
        try {
11918
            var c = (c || "59") + "",
11919
                b = b || {},
11920
                e = L("SESSION_INDEX");
11921
            try {
11922
                var f = sk();
11923
                f && f.pauseVideo();
11924
                var g = Vf.getInstance();
11925
                b.flashVersion = [g.R, g.Ha, g.hb].join(".")
11926
            } catch (i) {}
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
11927
            a = {
11928
                productId: c,
11929
                locale: a,
11930
                abuseLink: "https://support.google.com/youtube/bin/answer.py?answer=140536"
11931
            };
11932
            e && (a.authuser = e + "");
11933
            d && (a.bucket = d);
11934
            nq(a, b);
11935
            return m
11936
        } catch (n) {
11937
            return k
11938
        }
11939
    });
11940
    u("yt.www.feedback.startHelp", function (a, b, c, d) {
11941
        nq({
11942
            productId: (b || "59") + "",
11943
            flow: "help",
11944
            helpCenterPath: c || "/youtube",
11945
            helpCenterContext: d,
11946
            anchor: a
11947
        })
11948
    });
11949
    u("yt.www.feedback.displayLink", Aq);
11950
    ig("init", Aq);
11951
    u("yt.www.help.bootstrap.init", Bq);
11952
    ig("init", Bq);
11953
    u("yt.net.cookies.set", Ee);
11954
    u("yt.net.cookies.get", Fe);
11955
    u("yt.net.cookies.remove", Ge);
11956
    u("yt.window.redirect", Gh);
11957
    u("yt.window.popup", Ih);
11958
    ig("init", function () {
11959
        L("SBOX_JS_URL") && Ug(L("SBOX_JS_URL"), function () {
11960
            s("yt.www.masthead.searchbox.init")()
11961
        })
11962
    });
11963
    kh(nh);
11964
    kh(kl);
11965
    kh(wl);
11966
    kh(yl);
11967
    kh(wk);
11968
    kh(xh);
11969
    kh(Al);
11970
    kh(Lh);
11971
    kh(Cl);
11972
    kh(uj);
11973
    kh(Dl);
11974
    kh(xj);
11975
    kh(Fl);
11976
    kh(Ah);
11977
    u("yt.player.update", jl);
11978
    u("yt.player.embed", il);
11979
    u("yt.flash.embed", bg);
11980
    u("yt.www.watch.activity.getTimeSinceActive", uo);
11981
    u("yt.www.watch.activity.setTimestamp", to);
11982
    u("yt.www.watch.player.handleEndPreview", function (a) {
11983
        var b = sk();
11984
        b && b.stopVideo && b.stopVideo();
11985
        (b = F("watch-checkout-offers")) && W("ypc-init-purchase", b, a)
11986
    });
11987
    u("yt.www.watch.player.openPopup", function (a, b, c) {
11988
        var d = l,
11989
            e = sk(),
11990
            a = "/watch_popup?v=" + a;
11991
        e && (a += "&vq=" + e.getPlaybackQuality(), d = Math.round(e.getCurrentTime()), e.stopVideo());
11992
        L("POPOUT_AD_SLOTS") && (a += "&pop_ads=" + L("POPOUT_AD_SLOTS"));
11993
        d && 10 < d && (a += "#t=" + d);
11994
        Hh(a, {
11995
            width: b,
11996
            height: c,
11997
            resizable: k,
11998
            location: m,
11999
            statusbar: m,
12000
            menubar: m,
12001
            scrollbars: m,
12002
            toolbar: m
12003
        })
12004
    });
12005
    u("yt.www.watch.activity.init", qo);
12006
    u("yt.www.watch.player.updateConfig", function (a) {
12007
        var a = a instanceof Rf ? a.args : a.args,
12008
            b = m;
12009
        a.jsapicallback = Hp;
12010
        var c;
12011
        c = L("CONVERSION_CONFIG_DICT");
12012
        if (!c || !c.socialEnabled) c = l;
12013
        else {
12014
            var d, e = c.oeid,
12015
                f = window.location.hash;
12016
            d = Kf(f);
12017
            var g = window.location,
12018
                i, e = {
12019
                    oeid: e
12020
                },
12021
                n = "";
12022
            "#" == f.charAt(0) && (n = "!" == f.charAt(1) ? f.substr(0, 2) : f.substr(0, 1));
12023
            f = Kf(f);
12024
            for (i in e) f[i] = e[i];
12025
            i = n + Df(f);
12026
            g.hash = i;
12027
            d = d.oeid;
12028
            c = c.ieid = d
12029
        }
12030
        c && (a.ieid = c, b = k);
12031
        d = Kf(window.location.hash);
12032
        (c = d.t || d.at) ? (Bp.t = d.t, Bp.at = d.at, d = window.location.hash.replace(/\bat=[^&]*&?/,
12033
            ""), window.location.hash = d && "#" != d ? d : "#!", c = Sp(c)) : c = 0;
12034
        c && (a.start = c, a.resume = 1, b = k);
12035
        return b
12036
    });
12037
    u("yt.www.watch.player.init", function () {
12038
        Rp();
12039
        Td(Rp, 1E3)
12040
    });
12041
    u("yt.www.watch.player.seekTo", Qp);
12042
    u("openFull", function () {
12043
        Hh("/watch_popup?v=" + L("VIDEO_ID"), {
12044
            target: "FullScreenVideo",
12045
            width: screen.availWidth,
12046
            height: screen.availHeight,
12047
            resizable: k,
12048
            fullscreen: k
12049
        })
12050
    });
12051
    u("checkCurrentVideo", function (a, b, c) {
12052
        var d = L("VIDEO_ID"),
12053
            e = d == a,
12054
            f = ck ? dk().Qa() : l,
12055
            b = !b || b == f;
12056
        if (d && (!e || !b)) d = l, b && (d = dk(), e = Xh(d.g, [a])[0], d = e === j ? "" : Zh(d.g, e)), d || (d = c ? c : Nf(window.location.href, {
12057
            v: a,
12058
            feature: l
12059
        })), d && Gh(d)
12060
    });
12061
    u("trackAnnotationsEvent", function (a, b, c) {
12062
        var d = L("ANALYTICS_ANNOTATIONS_TRACKER");
12063
        window._gaq.push(function () {
12064
            d._trackEvent(a, b, c)
12065
        })
12066
    });
12067
    u("reportFlashTiming", aa);
12068
    u("reportTimingMaps", function (a, b) {
12069
        for (var c in a) $.ge(c, a[c]);
12070
        for (var d in b) $.info(d, b[d]);
12071
        $.Tc()
12072
    });
12073
    u("yt.www.watch.playlists.editAnnotation", function () {
12074
        A(F("watch-video-annotation-editable"), "not-editing", "editing");
12075
        F("watch-video-annotation-textarea").focus();
12076
        var a = F("watch-video-annotation-form");
12077
        Q(a, "setup") || (P(a, "setup", "true"), a = K("cancel-button", a), R(a, "click", function (a) {
12078
            a.preventDefault();
12079
            gq()
12080
        }))
12081
    });
12082
    u("yt.www.watch.playlists.removeAnnotation", function () {
12083
        var a = F("watch-video-annotation-form");
12084
        F("watch-video-annotation-textarea").value = "";
12085
        hq(a)
12086
    });
12087
    u("yt.www.watch.playlists.submitForm", function (a) {
12088
        hq(a)
12089
    });
12090
    u("yt.www.watch.abandonment.init", function (a, b) {
12091
        Vp = a;
12092
        Yp = b;
12093
        var c = L("PLAYER_CONFIG"),
12094
            c = new Rf(c);
12095
        cg(function (a) {
12096
            var e = $.timer || {};
12097
            e.start && Xf(a, c.minVersion) && ($p = e.start, yp ? aq(sk()) : Cp.ra("READY_STATE_TOPIC", aq), R(window, "beforeunload", fq), a = qa() - $p, a = b - a, 0 <= a && (Zp = N(eq, a), dq("attempt")));
12098
            Tp = k
12099
        })
12100
    });
12101
    u("yt.www.watch.player.addSaveResumeOnUnloadListener", function () {
12102
        R(window, "unload", Gp)
12103
    });
12104
    u("yt.history.enable", function (a, b) {
12105
        var c = ug(b);
12106
        c.setEnabled.call(c, k, a)
12107
    });
12108
    u("yt.history.disable", function () {
12109
        var a = ug();
12110
        a.setEnabled.call(a, m)
12111
    });
12112
    u("yt.www.lists.addto.toggleMenu", function (a, b) {
12113
        var c = Ah.getInstance(),
12114
            d = Y(c),
12115
            e = F("shared-addto-menu");
12116
        if (b) {
12117
            var f = K("addto-menu", e);
12118
            Ch(c, a);
12119
            vn = z(a, d);
12120
            un || (un = f.innerHTML);
12121
            c = Q(e, "video-ids");
12122
            d = Q(a, "video-ids");
12123
            wn && x(e, "lightweight-panel");
12124
            B(a, "flip") && x(e, "flip");
12125
            d && c != d && (P(e, "video-ids", d), f.innerHTML = un, new xn(a))
12126
        } else vn && x(a, d), z(e, "flip")
12127
    });
12128
    u("yt.www.lists.data.addto.saveToWatchLater", function (a, b) {
12129
        Bm({
12130
            $c: a,
12131
            Zc: "WL",
12132
            qc: b,
12133
            j: function (b, d) {
12134
                var e = d.list_id || "",
12135
                    f = d.video_count || 1,
12136
                    g = d.videos || [],
12137
                    i = [a],
12138
                    n = O("PLAYLIST_BAR_ADDED_TO_PLAYLIST");
12139
                fk("WL", e, n, g, f, i)
12140
            },
12141
            onError: j,
12142
            B: j
12143
        })
12144
    });
12145
    u("yt.www.lists.addtowatchlater.init", Fn);
12146
    ig("init", Fn);
12147
    u("yt.www.watch.watch5.enableWide", kk);
12148
    u("yt.www.watch.watch5.handleResize", function () {
12149
        Ud(ik);
12150
        ik = N(lk, 200)
12151
    });
12152
    u("yt.www.watch.watch5.updatePlayerSize", lk);
12153
    u("yt.www.watch.watch5.handleLoadMoreRelated", function () {
12154
        V("watch-more-related-button");
12155
        U("watch-more-related", "watch-more-related-loading");
12156
        X("/related_ajax", {
12157
            o: {
12158
                video_id: L("VIDEO_ID"),
12159
                action_more_related_videos: 1
12160
            },
12161
            j: function (a, b) {
12162
                var c = F("watch-more-related");
12163
                c.innerHTML = b.html;
12164
                Oi(c)
12165
            }
12166
        })
12167
    });
12168
    u("yt.www.watch.watch5.handleYouTubeMix", function () {
12169
        var a = F("youtube-mix-button");
12170
        a.disabled = k;
12171
        X("/music_ajax", {
12172
            o: {
12173
                video_id: L("VIDEO_ID"),
12174
                artist_id: L("ARTIST_ID"),
12175
                action_get_mix: 1
12176
            },
12177
            j: function (b, c) {
12178
                a.disabled = m;
12179
                if ("" != c.list_id) {
12180
                    var d = dk(),
12181
                        e = new Sh("TL", c.list_id);
12182
                    Kj(d, e);
12183
                    e.b = 0;
12184
                    d.bb(k);
12185
                    Nj(d, k);
12186
                    Lj(d)
12187
                }
12188
            }
12189
        })
12190
    });
12191
    u("yt.www.watch.watch5.handleToggleMoreFromUser", function (a) {
12192
        var b = B(a, "yt-uix-expander-collapsed"),
12193
            c = F("watch-more-from-user");
12194
        !b && "true" != Q(c, "loaded") && (a = {
12195
            user_id: Q(a, "video-user-id"),
12196
            video_id: Q(a, "video-id"),
12197
            action_channel_videos: 1
12198
        }, X("/watch_ajax", {
12199
            format: "XML",
12200
            method: "GET",
12201
            o: a,
12202
            j: function (a, b) {
12203
                c.innerHTML = b.html_content;
12204
                P(c, "loaded", "true");
12205
                Oi(c);
12206
                var f = parseInt(Q(F("watch-channel-discoverbox"), "slider-slide-selected"), 10);
12207
                J("button", "yt-uix-slider-num", j)[f].click()
12208
            }
12209
        }));
12210
        C(c, "collapsed", b)
12211
    });
12212
    u("yt.www.watch.watch5.handleToggleDescription", function (a) {
12213
        if (B(a, "yt-uix-expander-collapsed")) Zg("descriptionClosed", j, j);
12214
        else {
12215
            if ((a = F("watch-source-videos-list")) && "true" != Q(a, "loaded")) {
12216
                P(a, "loaded", "true");
12217
                var b = Lf("/watch_ajax", {
12218
                    action_get_video_attributions_component: 1,
12219
                    v: L("VIDEO_ID")
12220
                });
12221
                Kg(b, {
12222
                    method: "GET",
12223
                    update: a
12224
                })
12225
            }
12226
            Zg("descriptionOpened", j, j)
12227
        }
12228
    });
12229
    u("yt.www.watch.watch5.purchaseComplete", function () {
12230
        U(F("watch-player-rental-play-button"));
12231
        var a = F("watch-player-rental-still-frame");
12232
        V(ok());
12233
        U(a)
12234
    });
12235
    u("yt.www.watch.actions.init", function () {
12236
        var a = Kf(window.location.hash),
12237
            b = a.action;
12238
        if (b) {
12239
            switch (b) {
12240
            case "flag":
12241
                kn()
12242
            }
12243
            N(function () {
12244
                pn("watch-actions-area-container").scrollIntoView()
12245
            }, 0);
12246
            delete a.action;
12247
            a = Df(a) || "#!";
12248
            window.location.hash = a
12249
        }
12250
    });
12251
    u("yt.www.watch.actions.loadPlusoneLike", function (a, b, c, d, e) {
12252
        new Rm(F(a), b, c, d, e, {
0 ignored issues
show
Unused Code Best Practice introduced by
The object created with new Rm(F(a), b, c, d, e,...e:youtube:watch_exp))}) is not used but discarded. Consider invoking another function instead of a constructor if you are doing this purely for side effects.
Loading history...
12253
            size: "large",
12254
            source: "google:youtube:watch_exp"
12255
        })
12256
    });
12257
    u("yt.www.watch.shortcuts.init", function () {
12258
        R(document, "keypress", iq)
12259
    });
12260
    u("yt.www.watch.actions.flag", kn);
12261
    u("yt.www.watch.actions.hide", function () {
12262
        en()
12263
    });
12264
    u("yt.www.watch.actions.like", function () {
12265
        en();
12266
        var a = 0 == $m();
0 ignored issues
show
Best Practice introduced by
Comparing 0 to $m() using the == operator is not safe. Consider using === instead.
Loading history...
12267
        bn(a ? 2 : 0)
12268
    });
12269
    u("yt.www.watch.actions.share", rn);
12270
    u("yt.www.watch.actions.shareWithPlaylist", function () {
12271
        var a = on(),
12272
            b = qn();
12273
        sn(a, b)
12274
    });
12275
    u("yt.www.watch.actions.addto", function (a) {
12276
        if (ln(a) && !cn()) {
12277
            fn();
12278
            var a = F("watch-actions-addto"),
12279
                b = L("VIDEO_ID");
12280
            Zm && Zm.na();
12281
            Zm = new Km(a, b, function () {
12282
                dn("watch-actions-addto")
12283
            })
12284
        }
12285
    });
12286
    u("yt.www.watch.actions.stats", function (a) {
12287
        ln(a) && (fn(), X("/insight_ajax", {
12288
            format: "XML",
12289
            method: "GET",
12290
            o: {
12291
                action_get_statistics_and_data: 1,
12292
                v: L("VIDEO_ID")
12293
            },
12294
            j: function (a, c) {
12295
                hn(c.html_content);
12296
                var d = F("stats-opt-out-chbox");
12297
                d && R(d, "change", function () {
12298
                    Tm(!d.checked)
12299
                })
12300
            },
12301
            onError: jn
12302
        }))
12303
    });
12304
    u("yt.www.watch.actions.unlike", function () {
12305
        en();
12306
        var a = 1 == $m();
0 ignored issues
show
Best Practice introduced by
Comparing 1 to $m() using the == operator is not safe. Consider using === instead.
Loading history...
12307
        bn(a ? 2 : 1)
12308
    });
12309
    u("yt.www.watch.actions.transcript", function (a) {
12310
        ln(a) && (fn(), s("yt.www.watch.transcript.open")(function () {
12311
            V("watch-actions-loading");
12312
            dn("watch-actions-transcript")
12313
        }))
12314
    });
12315
    u("yt.www.watch.actions.dismissChannelSubscriptionPromo", function () {
12316
        var a = {
12317
            channel_id: Q(F("yt-subscription-on-watch-promo-channel"), "channel-id")
12318
        };
12319
        (new Sm("ob_subscription_on_watch_promo", 0)).write("write_dismiss", j, zg(new yg(j), a))
12320
    });
12321
    u("yt.www.comments.init", function () {
12322
        var a = F("comments-view");
12323
        new om(a);
0 ignored issues
show
Unused Code Best Practice introduced by
The object created with new om(a) is not used but discarded. Consider invoking another function instead of a constructor if you are doing this purely for side effects.
Loading history...
12324
        qm.push(T(a, "click", rm, "comment-action"));
12325
        L("COMMENT_OPEN_REPLY_BOX") && (a = I("comment", F("linked-comments-header")), um(a[a.length - 1]))
12326
    });
12327
    u("yt.www.comments.initForm", pm);
12328
    u("yt.www.lists.init", function () {
12329
        if (-1 < parseInt(L("PLAYLIST_BAR_PLAYING_INDEX"), 10)) {
12330
            dk();
12331
            var a = L("AUTOPLAY_DELAY");
12332
            a && ek(a)
12333
        }
12334
        ck = k
12335
    });
12336
    u("yt.www.lists.getState", function () {
12337
        var a = dk(),
12338
            b = l;
12339
        if (a) {
12340
            var b = Uh(a.g),
12341
                c = {};
12342
            w(b, function (a) {
12343
                c[a] = this.g.getVideoData(a)
12344
            }, a);
12345
            for (var d = a.fa(), e = Mj(a), f = a.Y() ? a.g.ma : 0, g = [], i = 0; i < b.length; i++) {
12346
                var n = Q(a.D, "start-time" + i) || "",
12347
                    r = Q(a.D, "end-time" + i) || "";
12348
                g[i] = {
12349
                    start: n,
12350
                    end: r
12351
                }
12352
            }
12353
            b = {
12354
                autoPlay: e,
12355
                clipRanges: g,
12356
                index: d,
12357
                shuffle: f,
12358
                videoData: c,
12359
                videoIds: b || []
12360
            };
12361
            b.autoPlayMax = L("PLAY_ALL_MAX")
12362
        }
12363
        return b
12364
    });
12365
    u("yt.www.lists.registerNearEndEventsWithPlayer", gk);
12366
    u("yt.www.lists.handleNearPlaybackEnd", function (a) {
12367
        if (ck && Mj(dk()) && "NEAR_END" == a.slice(0, -1)) {
12368
            var a = parseInt(a.slice(-1), 10),
12369
                b = dk();
12370
            if (5 == a && L("PRERENDER_EXPERIMENT")) {
12371
                var c = document.createElement("link");
12372
                c.rel = "prerender";
12373
                c.href = Yh(b.g, m, "autoplay");
12374
                document.getElementsByTagName("head")[0].appendChild(c)
12375
            }
12376
            $j(b, a)
12377
        }
12378
    });
12379
    u("yt.dom.datasets.get", Q);
12380
    u("yt.dom.datasets.set", P);
12381
    Sd("openFull", "checkCurrentVideo", "trackAnnotationsEvent", "reportFlashTiming", "shareVideoFromFlash", "setCompanion", "setInstreamCompanion", "setLongformCompanion", "setFreewheelCompanion", "closeInPageAdIframe", "hideInstreamCompanion", "disablePopout", "enablePopout", "closeMpuCompanion", "updatePopAds", "setAfvCompanionVars", "showAfvCompanionAdDiv", "hideAfvInstreamCompanionAdDiv", "requestPyvAds", "pyvHomeRequestAds", "pyvBrowseRequestAds", "showGutCompanion");
12382
    u("yt.www.picker.load", function (a) {
12383
        var b = Q(a, "picker-key"),
12384
            c = Q(a, "picker-position"),
12385
            c = "yt-picker-" + b + "-" + c,
12386
            a = Q(a, "button-menu-id") == c,
12387
            d = F(c);
12388
        d && (a || (Hq && Hq != d && V(Hq), Hq = d, qf(d)), Q(d, "loaded") || (a = {}, a["action_" + b] = 1, a.base_url = L("CURRENT_URL"), X("/picker_ajax", {
12389
            format: "JSON",
12390
            method: "GET",
12391
            o: a,
12392
            j: t(Iq, l, d),
12393
            onError: function () {
12394
                V(d)
12395
            }
12396
        })))
12397
    });
12398
    u("yt.www.picker.applyGrid", Jq);
12399
    u("yt.www.search.init", function () {
12400
        var a = I("group-container");
12401
        w(a, Eo)
12402
    });
12403
    u("yt.www.thumbnaildelayload.init", function (a) {
12404
        Hi = a || 0;
12405
        Gi = fc(document).y + cc(window).height + Hi;
12406
        Ki = k;
12407
        Qi(j, j);
12408
        Ni();
12409
        R(window, "scroll", Li);
12410
        R(window, "resize", Li)
12411
    });
12412
    u("yt.www.xsrf.populateSessionToken", function () {
12413
        for (var a = 0; a < document.forms.length; a++) {
12414
            for (var b = m, c = 0; c < Vq.length; c++) document.forms[a].name == Vq[c] && (b = k);
12415
            c = document.forms[a];
12416
            if ("post" == c.method.toLowerCase() && b == m) {
12417
                for (var b = m, d = 0; d < c.elements.length; d++) c.elements[d].name == L("XSRF_FIELD_NAME") && (b = k);
12418
                b || (b = j, b = L("XSRF_TOKEN"), d = document.createElement("input"), d.setAttribute("name", L("XSRF_FIELD_NAME")), d.setAttribute("type", "hidden"), d.setAttribute("value", b), c.appendChild(d))
12419
            }
12420
        }
12421
    });
12422
    u("yt.www.masthead.performSearch", function (a, b) {
12423
        var c = F("masthead-search"),
12424
            d = Q(b, a) || "";
12425
        "rentals" == d ? (c.rental.value = 1, c.search_type.value = "") : (c.search_type.value = d, c.rental.value = 0);
12426
        if (c.search_query.value) c.submit();
12427
        else {
12428
            var c = b.innerHTML,
12429
                e = F("search-btn"),
12430
                f = e.innerHTML,
12431
                g = Q(e, a) || "";
12432
            e.innerHTML = c;
12433
            P(e, a, d);
12434
            b.innerHTML = f;
12435
            P(b, a, g)
12436
        }
12437
        return m
12438
    });
12439
    u("yt.www.masthead.dismissGAPlusMessage", function () {
12440
        var a = Fe("FML", "").split(","),
12441
            b = new Date,
12442
            b = Math.round(b.getTime() / 1E3),
12443
            c = "",
12444
            c = 2 != a.length ? "1," + b : parseInt(a[0], 10) + 1 + "," + b;
12445
        Ee("FML", c, 31536E4)
12446
    });
12447
    u("yt.www.masthead.dismissPostLinkingMessage", function () {
12448
        Ge("FML")
12449
    });
12450
    u("yt.www.masthead.toggleExpandedMasthead", function () {
12451
        var a = F("masthead-expanded");
12452
        nf(a);
12453
        W("masthead-mastfeedr-toggle");
12454
        lf("masthead-expanded-menu", k);
12455
        lf("masthead-expanded-acct-sw-container", m);
12456
        Mn || z(F("masthead-expanded-container"), "accountswitch");
12457
        if (!Q(a, "loaded")) {
12458
            var b = F("masthead-expanded-menu-gaia-photo");
12459
            b && !b.src && (b.src = Q(b, "src"));
12460
            X("/playlist_bar_ajax", {
12461
                o: {
12462
                    action_get_playlists_masthead: 1,
12463
                    feature: "mhee"
12464
                },
12465
                format: "JSON",
12466
                pb: k,
12467
                j: function (b, d) {
12468
                    F("masthead-expanded-lists-container").innerHTML =
12469
                        d.html;
12470
                    P(a, "loaded", "true")
12471
                }
12472
            })
12473
        }
12474
    });
12475
    u("yt.www.masthead.accountswitch.init", function (a) {
12476
        Mn = a
12477
    });
12478
    u("yt.www.masthead.accountswitch.toggle", function () {
12479
        nf("masthead-expanded-acct-sw-container");
12480
        var a = F("masthead-expanded-container"),
12481
            b = F("masthead-expanded-acct-sw-container");
12482
        if (mf(b)) {
12483
            b.style.top = a.offsetTop + "px";
12484
            E && (Sb("7") && !Sb("8")) && (b.style.top = a.offsetTop - (b.offsetTop - a.offsetTop) + "px");
12485
            b = F("masthead-expanded-menu-acct-sw-list");
12486
            b.offsetHeight < a.offsetHeight && (b.style.height = a.offsetHeight - 11 + "px");
12487
            var c = F("masthead-expanded-acct-sw-iframe");
12488
            if (!c) {
12489
                var d = F("masthead-expanded-menu-acct-sw-list"),
12490
                    c = gc("iframe", {
12491
                        id: "masthead-expanded-acct-sw-iframe",
12492
                        frameborder: 0,
12493
                        src: 'javascript:""'
12494
                    });
12495
                d.parentNode && d.parentNode.insertBefore(c, d)
12496
            }
12497
            c.style.height = b.offsetHeight - 11 + "px";
12498
            Mn || x(a, "accountswitch")
12499
        } else Mn || z(a, "accountswitch")
12500
    });
12501
    ig("init", function () {
12502
        L("SANDBAR_ENABLED") && no("iframes", {
12503
            callback: function () {
12504
                var a = F("sb-button-notify"),
12505
                    b = F("sb-button-share"),
12506
                    c = new zo(L("SANDBAR_LOCALE"), L("SESSION_INDEX"), L("SANDBAR_DELEGATED_SESSION_ID"));
12507
                R(a, "click", t(c.ah, c));
12508
                R(b, "click", t(c.bh, c));
12509
                W("sandbar-init")
12510
            },
12511
            _c: {
12512
                jsl: {
12513
                    h: L("GAPI_HINT_PARAMS")
12514
                }
12515
            }
12516
        })
12517
    });
12518
    u("yt.www.ads.MastheadAd", cm);
12519
    cm.prototype.autoCollapsePremiumYva = cm.prototype.gh;
12520
    cm.prototype.collapse_ad = cm.prototype.kh;
12521
    cm.prototype.expand_ad = cm.prototype.lh;
12522
    cm.prototype.userCollapsePremiumYva = cm.prototype.rd;
12523
    cm.prototype.userExpandPremiumYva = cm.prototype.ih;
12524
    cm.prototype.userUnexpandPremiumYva = cm.prototype.jh;
12525
    u("yt.www.home.ads.workaroundIE", function (a) {
12526
        !Am && zm && (Am = k, N(function () {
12527
            a.focus()
12528
        }, 0))
12529
    });
12530
    u("yt.www.home.ads.workaroundLoad", function () {
12531
        zm = k
12532
    });
12533
    u("yt.www.home.ads.workaroundReset", function () {
12534
        Am = m
12535
    });
12536
    u("yt.www.home.ads.writeAdsContentToIframe", function (a, b) {
12537
        var c = F(a).contentDocument || F(a).contentWindow.document;
12538
        c.open();
12539
        c.write("<!DOCTYPE html><html><head></head><body>" + b + "</body></html>");
12540
        E || c.close()
12541
    });
12542
    u("yt.www.channelcard.show", function (a, b) {
12543
        var c = Q(b, "id"),
12544
            c = {
12545
                method: "POST",
12546
                S: pa(mq, a, b),
12547
                C: {
12548
                    external_channel_id: c,
12549
                    session_token: M("channel_details_ajax")
12550
                }
12551
            };
12552
        X("/channel_details_ajax", c);
12553
        P(a, "card-action", "");
12554
        P(b, "card-delegate-show", "");
12555
        P(b, "card-delay-show", "")
12556
    });
12557
    u("yt.tracking.doubleclick.trackActivity", function (a, b, c) {
12558
        a = ("https:" == document.location.protocol ? "https://" : "http://") + "fls.doubleclick.net/activityi;src=" + encodeURIComponent(String(L("DBLCLK_ADVERTISER_ID"))) + ";type=" + encodeURIComponent(String(a)) + ";cat=" + encodeURIComponent(String(b));
12559
        c && !c.ord && (a += ";ord=1");
12560
        for (var d in c) a += ";" + encodeURIComponent(String(d)) + "=" + encodeURIComponent(String(c[d]));
12561
        a += ";num=" + qa();
12562
        c = document.createElement("iframe");
12563
        c.src = a;
12564
        c.style.display = "none";
12565
        document.body.appendChild(c)
12566
    });
12567
    u("yt.tracking.track", function (a, b, c) {
12568
        Zg(a, b, c)
12569
    });
12570
    u("yt.tracking.resolution", function () {
12571
        var a = "CSS1Compat" == document.compatMode ? document.documentElement : document.body,
12572
            a = {
12573
                a: "resolution",
12574
                width: screen.width,
12575
                height: screen.height,
12576
                depth: screen.colorDepth,
12577
                win_width: a.clientWidth,
12578
                win_height: a.clientHeight
12579
            };
12580
        window.devicePixelRatio && (a.pixel_ratio = window.devicePixelRatio);
12581
        a = Df(a);
12582
        Yg("/gen_204?" + a, j)
12583
    });
12584
    u("yt.tracking.shareList", bh);
12585
    u("yt.tracking.shareVideo", ah);
12586
    u("yt.tracking.shareUrl", function (a, b, c, d) {
12587
        $g(a, {
12588
            url: b
12589
        }, c, d)
12590
    });
12591
    u("yt.analytics.urchinTracker", function () {});
12592
    u("yt.analytics.trackEvent", Yd);
12593
    u("yt.timing.report", $.kc);
12594
    u("yt.timing.maybeReport", $.Tc);
12595
    u("yt.timing.handlePageLoad", $.je);
12596
    ig("init", $.je);
12597
    Wd && (!document.documentMode || 8 > document.documentMode) && T(F("ie"), "click", tk, "video-thumb");
12598
    u("yt.www.subscriptions.edit.onUpdateSubscription", function (a, b, c, d) {
12599
        var c = c || "",
12600
            e = m;
12601
        (b = F("subscription_level_unsubscribe")) && b.checked && (e = k);
12602
        b = Qc(F("subscription_level_uploads" + c).form);
12603
        Kg("/ajax_subscriptions?" + b, {
12604
            postBody: "session_token=" + a,
12605
            onComplete: function (a) {
12606
                F("subscribeMessage" + c).innerHTML = Lg(Hg(a), "html_content");
12607
                V("edit_subscription_wrapper" + c);
12608
                V("edit_subscription_arrow" + c);
12609
                U("subscribeMessage" + c);
12610
                c && (F("edit_subscription_opener" + c).style.visibility = "", N(function () {
12611
                    V("subscribeMessage" +
12612
                        c)
12613
                }, 5E3));
12614
                if (e) {
12615
                    var b = F("channel-body"),
12616
                        a = J("div", "subscribe-div", b),
12617
                        b = J("div", "unsubscribe-div", b);
12618
                    w(a, function (a) {
12619
                        qf(a)
12620
                    });
12621
                    w(b, function (a) {
12622
                        qf(a)
12623
                    });
12624
                    d()
12625
                }
12626
            }
12627
        })
12628
    });
12629
    u("yt.www.subscriptions.edit.onCancelUpdateSubscription", function (a) {
12630
        a = a || "";
12631
        V("edit_subscription_wrapper" + a);
12632
        V("edit_subscription_arrow" + a);
12633
        a && (F("edit_subscription_opener" + a).style.visibility = "");
12634
        V("alerts")
12635
    });
12636
    u("yt.www.subscriptions.edit.onEditSubscriptionFromRecentActivity", function (a, b, c, d) {
12637
        window["edit_subscription_download_" + c] ? (V("subscribeMessage" + c), qf("edit_subscription_wrapper" + c), qf("edit_subscription_arrow" + c), a = F("edit_subscription_opener" + c), a.style.visibility = "visible" == a.style.visibility ? "" : "visible") : (window["edit_subscription_download_" + c] = k, Kg("/ajax_subscriptions?get_edit_subscription_form=" + b + "&i=" + c, {
12638
            postBody: "session_token=" + a,
12639
            onComplete: function (a) {
12640
                F("edit_subscription_opener" + c).style.visibility =
12641
                    "visible";
12642
                var b = document.createElement("div");
12643
                b.innerHTML = Lg(a.responseXML, "html_content");
12644
                d.parentNode.insertBefore(b, d);
12645
                U("edit_subscription_wrapper" + c);
12646
                U("edit_subscription_arrow" + c)
12647
            }
12648
        }))
12649
    });
12650
    u("yt.www.subscriptions.SubscriptionButton.init", jp);
12651
    u("yt.www.subscriptions.SubscriptionButton.delayedSubscribe", function (a, b) {
12652
        qp(a, b, "delayed-sub", l)
12653
    });
12654
    u("yt.www.subscriptions.button.subscribe", function (a) {
12655
        var b = To(a),
12656
            c = Q(b, "subscription-type"),
12657
            d = Q(b, "subscription-xsrf") || "",
12658
            e = Q(b, "subscription-menu-type"),
12659
            f = Q(b, "subscription-feature"),
12660
            g = Q(b, "subscription-value"),
12661
            i = {};
12662
        "playlist" == c ? (i.action_create_subscription_to_playlist = 1, c = "p") : "topic" == c ? (i.action_create_subscription_to_topic = 1, c = "l") : (i.action_create_subscription_to_channel = 1, c = "c");
12663
        f && (i.feature = f);
12664
        a.disabled = k;
12665
        Ho = Kg;
12666
        Io = d;
12667
        d = new Ko(bp, fp);
12668
        Lo(d, i);
12669
        i = {};
12670
        i[c] = g;
12671
        i.menu_type = e;
12672
        (e = L("PLAYBACK_ID")) &&
12673
        (i.plid = e);
12674
        d.jb = i || {};
12675
        d.userData.eventTrigger = a;
12676
        d.userData.subscription = b;
12677
        Oo(d);
12678
        Kh("subscribe")
12679
    });
12680
    u("yt.www.subscriptions.button.subscribeToCollection", function (a) {
12681
        for (var b = Xo(a), c = Cc(a, "subscription-recommendations"), d = Q(b, "subscription-xsrf") || "", e = [], f = J("input", "username", c), g = 0; g < f.length; g++) f[g].checked && e.push(f[g].value);
12682
        0 == e.length ? mc(c) : (a.disabled = k, Ho = Kg, Io = d, d = new Ko(cp, fp), Lo(d, {
0 ignored issues
show
Best Practice introduced by
Comparing 0 to e.length using the == operator is not safe. Consider using === instead.
Loading history...
12683
            action_create_subscription_to_users: 1
12684
        }), f = {}, f.usernames = e.join(","), d.jb = f || {}, d.userData.eventTrigger = a, d.userData.subscription = b, d.userData.collection = c, Oo(d))
12685
    });
12686
    u("yt.www.subscriptions.button.unsubscribe", function (a) {
12687
        var b = Xo(a),
12688
            c = Q(b, "subscription-id"),
12689
            d = Q(b, "subscription-xsrf") || "",
12690
            e = Q(b, "subscription-feature");
12691
        if (!a.disabled) {
12692
            a.disabled = k;
12693
            Ho = Kg;
12694
            Io = d;
12695
            var d = new Ko(dp, fp),
12696
                f = {
12697
                    action_remove_subscription: 1
12698
                };
12699
            e && (f.feature = e);
12700
            Lo(d, f);
12701
            e = {};
12702
            e.subscription_id = c;
12703
            (c = L("PLAYBACK_ID")) && (e.plid = c);
12704
            d.jb = e || {};
12705
            d.userData.eventTrigger = a;
12706
            d.userData.subscription = b;
12707
            Oo(d);
12708
            Kh("unsubscribe")
12709
        }
12710
    });
12711
    u("yt.www.subscriptions.button.update", function (a) {
12712
        var b = Xo(a),
12713
            c = Q(b, "subscription-id"),
12714
            d = Q(b, "subscription-xsrf") || "";
12715
        a.disabled = k;
12716
        Ho = Kg;
12717
        Io = d;
12718
        var d = new Ko(ep, fp),
12719
            e = Ac(a, l, "subscription-menu-form"),
12720
            e = Mc(Nc(e));
12721
        e.email_on_upload || (e.email_on_upload = m);
12722
        e.action_update_subscription_preferences = 1;
12723
        Lo(d, e);
12724
        d.jb = {
12725
            subscription_id: c
12726
        };
12727
        d.userData.eventTrigger = a;
12728
        d.userData.subscription = b;
12729
        Oo(d)
12730
    });
12731
    u("yt.www.subscriptions.button.toggleMenu", So);
12732
    u("yt.www.subscriptions.button.closeMenu", function (a) {
12733
        a = Xo(a);
12734
        "button" == Q(a, "subscription-menu-type") ? Zo(a) : $o(a)
12735
    });
12736
    u("yt.www.account.lightbox.init", function () {
12737
        var a = F("page");
12738
        T(a, "mousedown", Ol, "create-channel-lightbox");
12739
        T(a, "click", Sl, "create-channel-lightbox")
12740
    });
12741
    u("yt.www.account.lightbox.dismiss", function () {
12742
        Kl(Ml, "cancel")
12743
    });
12744
    u("yt.www.account.lightbox.gotoContentState", function () {
12745
        Hl(Ml, "content")
12746
    });
12747
    u("yt.www.account.lightbox.gotoWorkingState", function () {
12748
        Hl(Ml, "working")
12749
    });
12750
    u("yt.www.account.lightbox.show", function () {
12751
        Ol();
12752
        Sl(l)
12753
    });
12754
    u("yt.www.account.linkgplusloader.init", function () {
12755
        var a = F("page");
12756
        T(a, "mousedown", Zl, "link-gplus-lightbox");
12757
        T(a, "click", bm, "link-gplus-lightbox")
12758
    });
12759
    u("yt.www.account.linkgplusloader.dismiss", function () {
12760
        Kl(Tl, "cancel")
12761
    });
12762
    u("yt.www.account.linkgplusloader.gotoContentState", function () {
12763
        Hl(Tl, "content")
12764
    });
12765
    u("yt.www.account.linkgplusloader.gotoWorkingState", function () {
12766
        Hl(Tl, "working")
12767
    });
12768
    u("yt.www.account.linkgplusloader.show", function () {
12769
        Zl();
12770
        bm(l)
12771
    });
12772
    u("yt.www.account.linkgplusloader.showDialog", function () {
12773
        Hl(Tl, "content");
12774
        Jl(Tl);
12775
        var a = K("yt-dialog-fg", F("link-gplus-lb")),
12776
            b = pf(a);
12777
        a.style.position = "fixed";
12778
        a.style.top = "95px";
12779
        b.x && (a.style.left = b.x + "px")
12780
    });
12781
    u("yt.www.account.linkgplusloader.setWaitCursor", Yl);
12782
    ig("init", function () {
12783
        if (L("YPC_LOADER_ENABLED")) {
12784
            for (var a = 0; a < kq.length; a++)
12785
                if (K(kq[a])) {
12786
                    lq();
12787
                    break
12788
                } ig("ypc-delayedloader-load", lq)
12789
        }
12790
    });
12791
    Sd("yt", "goog", "_gel", "googleapisv0", "_hasclass", "_addclass", "_removeclass", "_showdiv", "_hidediv", "_ajax");
12792
    u("yt.www.masthead.extended.redirectWithNewParam", function (a, b) {
12793
        var c, d, e;
12794
        c = window.location.href;
12795
        c = c.split("#");
12796
        d = 2 == c.length ? "#" + c[1] : "";
12797
        c = c[0];
12798
        e = Jf(c);
12799
        e[b] = a;
12800
        e["persist_" + b] = "1";
12801
        c = c.split("?");
12802
        c = c[0];
12803
        Gh(c, e, d)
12804
    });
12805
    u("yt.www.insight.setOptOut", Tm);
12806
    u("yt.www.watch.survey.takeWatchPageSurvey", function () {
12807
        jq();
12808
        window.open("/watch_page_survey?r2=" + L("SURVEY_REFERER") + "&r1=" + L("SURVEY_SERVLET_NAME") + "&name=" + L("SURVEY_TYPE"), "YouTube_User_Happiness_Survey", "toolbar=no,width=800,height=768,status=no,resizable=yes,fullscreen=no,scrollbars=yes").focus()
12809
    });
12810
    u("yt.www.watch.survey.watchPageSurveyGoAway", jq);
12811
    u("yt.www.watch.survey.checkSurveyCompletedAndShow", function () {
12812
        Ne(He.getInstance(), Nh.he) || U("watch_page_survey")
12813
    });
12814
    u("yt.www.user.unblockUserLinkByExternalId", function (a, b) {
12815
        confirm(O("UNBLOCK_USER")) && X("/link_ajax?action_unblock_user=1", {
12816
            format: "XML",
12817
            method: "POST",
12818
            Ra: L("BLOCK_USER_AJAX_XSRF") + "&uid=" + a,
12819
            j: function () {
12820
                b && window.location.reload()
12821
            }
12822
        })
12823
    });
12824
    u("yt.www.user.blockUserLinkByExternalId", function (a, b) {
12825
        confirm(O("BLOCK_USER")) && X("/link_ajax?action_block_user=1", {
12826
            format: "XML",
12827
            method: "POST",
12828
            Ra: L("BLOCK_USER_AJAX_XSRF") + "&uid=" + a,
12829
            j: function () {
12830
                b && window.location.reload()
12831
            }
12832
        })
12833
    });
12834
    u("getNextVideoId", function (a) {
12835
        var b = dk(),
12836
            c = Mj(b),
12837
            d = a <= L("PLAY_ALL_MAX");
12838
        return c && d ? b.Jc(a) : ""
12839
    });
12840
    Sd("getNextVideoId");
12841
    window.yt.spf && Id({
12842
        "navigate-history-changed-callback": Dq,
12843
        "navigate-requested-callback": Fq,
12844
        "navigate-processed-callback": Gq
12845
    });
12846
    ig("init", function () {
12847
        L("WATCH_CONTEXT_CLIENTSIDE") && kh(zl)
12848
    });
12849
    u("yt.www.watch.context.init", function () {
12850
        var a = new vp,
12851
            b;
12852
        b = (b = (new Ei(new xi)).get(L("VIDEO_ID", "default_tag"))) ? wg(b) : l;
12853
        b ? (a.ja.da(b, a.b), b = k) : b = m;
12854
        if (b && (U(a.b, "context-icon"), !L("WATCH7_ENABLED") && (a = F("watch-context-item-list")))) b = Q(a, "context-playing"), (b = parseInt(b, 10)) && uj.getInstance().Ca(a, b);
12855
        var c = new Ei(new xi),
12856
            d = [];
12857
        Ic(c.fb.Sa(k), function (a) {
12858
            var b;
12859
            try {
12860
                b = Ei.prototype.b.call(c, a, k)
12861
            } catch (g) {
12862
                if ("Storage: Invalid value was encountered" == g) return;
12863
                h(g)
12864
            }
12865
            Di(b) && d.push(a)
12866
        });
12867
        w(d, function (a) {
12868
            Ei.prototype.Xb.call(c,
12869
                a)
12870
        })
12871
    });
12872
})();