vliny-labs.com
Open in
urlscan Pro
23.227.38.69
Public Scan
Submitted URL: https://au.vliny-labs.com/
Effective URL: https://vliny-labs.com/
Submission Tags: krdprod
Submission: On October 26 via api from JP — Scanned from DE
Effective URL: https://vliny-labs.com/
Submission Tags: krdprod
Submission: On October 26 via api from JP — Scanned from DE
Form analysis
4 forms found in the DOMGET /search
<form action="/search" method="get" id="HeaderSearchForm" class="site-header__search-form" role="search">
<input type="hidden" name="type" value="product,article,page">
<button type="submit" class="text-link site-header__search-btn">
<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-search" viewBox="0 0 64 64">
<path d="M47.16 28.58A18.58 18.58 0 1 1 28.58 10a18.58 18.58 0 0 1 18.58 18.58zM54 54L41.94 42"></path>
</svg>
<span class="icon__fallback-text">Search</span>
</button>
<input type="search" name="q" value="" placeholder="Search our store" class="site-header__search-input" aria-label="Search our store">
</form>
POST /cart/add
<form method="post" action="/cart/add" id="AddToCartForm-1602697257141" accept-charset="UTF-8" class="product-single__form" enctype="multipart/form-data" data-productid="5961070313621"><input type="hidden" name="form_type" value="product"><input
type="hidden" name="utf8" value="✓">
<!-- Begin ReCharge code -->
<!-- "snippets/subscription-product.liquid" was not rendered, the associated app was uninstalled -->
<!-- End ReCharge code -->
<div class="variant-wrapper variant-wrapper--button js">
<label class="variant__label hidden-label hidden-label" for="ProductSelect-1602697257141-option-0"> Title </label>
<fieldset class="variant-input-wrap" name="Title" data-index="option1" id="ProductSelect-1602697257141-option-0">
<div class="variant-input" data-index="option1" data-value="PACK TOPFACE®">
<input type="radio" checked="checked" value="PACK TOPFACE®" data-index="option1" name="Title" class="variant__input-1602697257141" id="ProductSelect-1602697257141-option-title-PACK+TOPFACE%C2%AE">
<label for="ProductSelect-1602697257141-option-title-PACK+TOPFACE%C2%AE">PACK TOPFACE®</label>
</div>
<div class="variant-input" data-index="option1" data-value="PACK LOWERFACE®">
<input type="radio" value="PACK LOWERFACE®" data-index="option1" name="Title" class="variant__input-1602697257141" id="ProductSelect-1602697257141-option-title-PACK+LOWERFACE%C2%AE">
<label for="ProductSelect-1602697257141-option-title-PACK+LOWERFACE%C2%AE">PACK LOWERFACE®</label>
</div>
<div class="variant-input" data-index="option1" data-value="PACK FULLFACE®">
<input type="radio" value="PACK FULLFACE®" data-index="option1" name="Title" class="variant__input-1602697257141" id="ProductSelect-1602697257141-option-title-PACK+FULLFACE%C2%AE">
<label for="ProductSelect-1602697257141-option-title-PACK+FULLFACE%C2%AE">PACK FULLFACE®</label>
</div>
</fieldset>
</div>
<select name="id" data-productid="5961070313621" id="ProductSelect-1602697257141" class="product-single__variants no-js">
<option selected="selected" value="36934262259861"> PACK TOPFACE® - £24.90 GBP </option>
<option value="36934335332501"> PACK LOWERFACE® - £29.90 GBP </option>
<option value="36934345982101"> PACK FULLFACE® - £59.90 GBP </option>
</select>
<span class="bold-ro__widget-loading" data-widget-loading="" style="display:none"><span class="bold-ro__loading-container">
<style>
.bold-ro__widget-loading {
margin-left: 45%;
}
.bold-ro__widget-loading-icon {
border: 10px solid #f3f3f3;
border-radius: 50%;
border-top: 10px solid #3498db;
width: 50px;
height: 50px;
-webkit-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
margin-bottom: 20px;
}
</style>
<div data-bold-widget-loading-icon="" class="bold-ro__widget-loading-icon"></div>
</span></span>
<div class="ro_widget"></div>
<button type="submit" name="add" id="AddToCart-1602697257141" class="btn btn--full btn--no-animate add-to-cart" style="visibility: visible;">
<span id="AddToCartText-1602697257141"> ADD TO CART </span>
</button>
<img src="//cdn.shopify.com/s/files/1/0355/2686/9125/files/sfesvsed-25_1000x_0242792f-0e70-41f7-8550-ca869e1a0858.png">
<style>
#apd-root,
#apd-root * {
animation: none;
animation-delay: 0;
animation-direction: normal;
animation-duration: 0;
animation-fill-mode: none;
animation-iteration-count: 1;
animation-name: none;
animation-play-state: running;
animation-timing-function: ease;
backface-visibility: visible;
background: 0;
background-attachment: scroll;
background-clip: border-box;
background-color: transparent;
background-image: none;
background-origin: padding-box;
background-position: 0 0;
background-position-x: 0;
background-position-y: 0;
background-repeat: repeat;
background-size: auto auto;
border: 0;
border-style: none;
border-width: medium;
border-color: inherit;
border-bottom: 0;
border-bottom-color: inherit;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
border-bottom-style: none;
border-bottom-width: medium;
border-collapse: separate;
border-image: none;
border-left: 0;
border-left-color: inherit;
border-left-style: none;
border-left-width: medium;
border-radius: 0;
border-right: 0;
border-right-color: inherit;
border-right-style: none;
border-right-width: medium;
border-spacing: 0;
border-top: 0;
border-top-color: inherit;
border-top-left-radius: 0;
border-top-right-radius: 0;
border-top-style: none;
border-top-width: medium;
bottom: auto;
box-shadow: none;
box-sizing: border-box;
caption-side: top;
clear: none;
clip: auto;
color: inherit;
columns: auto;
column-count: auto;
column-fill: balance;
column-gap: normal;
column-rule: medium none currentColor;
column-rule-color: currentColor;
column-rule-style: none;
column-rule-width: none;
column-span: 1;
column-width: auto;
content: normal;
counter-increment: none;
counter-reset: none;
cursor: auto;
direction: ltr;
display: inline;
empty-cells: show;
float: none;
font: normal;
font-family: inherit;
font-size: 16px;
font-style: normal;
font-variant: normal;
font-weight: normal;
height: auto;
hyphens: none;
left: auto;
letter-spacing: normal;
line-height: normal;
list-style: none;
list-style-image: none;
list-style-position: outside;
list-style-type: disc;
margin: 0;
margin-bottom: 0;
margin-left: 0;
margin-right: 0;
margin-top: 0;
max-height: none;
max-width: none;
min-height: 0;
min-width: 0;
opacity: 1;
orphans: 0;
outline: 0;
outline-color: invert;
outline-style: none;
outline-width: medium;
overflow: visible;
overflow-x: visible;
overflow-y: visible;
padding: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
page-break-after: auto;
page-break-before: auto;
page-break-inside: auto;
perspective: none;
perspective-origin: 50% 50%;
position: static;
quotes: '\201C' '\201D' '\2018' '\2019';
right: auto;
tab-size: 8;
table-layout: auto;
text-align: inherit;
text-align-last: auto;
text-decoration: none;
text-decoration-color: inherit;
text-decoration-line: none;
text-decoration-style: solid;
text-indent: 0;
text-shadow: none;
text-transform: none;
top: auto;
transform: none;
transform-style: flat;
transition: none;
transition-delay: 0s;
transition-duration: 0s;
transition-property: none;
transition-timing-function: ease;
unicode-bidi: normal;
vertical-align: baseline;
visibility: visible;
white-space: normal;
widows: 0;
width: auto;
word-spacing: normal;
z-index: auto;
}
#apd-root img,
#apd-root svg,
#apd-root h1,
#apd-root h2,
#apd-root h3,
#apd-root h4,
#apd-root h5,
#apd-root h6,
#apd-root p,
#apd-root blockquote,
#apd-root ul,
#apd-root ol,
#apd-root header,
#apd-root footer,
#apd-root div,
#apd-root section,
#apd-root blockquote,
#apd-root figure {
display: block;
}
#apd-root img,
#apd-root svg {
max-width: 100%;
}
#apd-root i,
#apd-root strong i,
#apd-root i strong,
#apd-root blockquote i,
#apd-root blockquote strong i,
#apd-root blockquote a i,
#apd-root blockquote strong i {
font-style: italic;
}
</style>
<style>
#apd-root,
#apd-root * {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji',
'Segoe UI Emoji', 'Segoe UI Symbol';
}
#apd-root .apd-content {
color: #5e5e5e;
}
#apd-root .apd-content>*:first-child {}
#apd-root .apd-content>*:last-child {
margin-bottom: 20px;
}
#apd-root .apd-content h2,
#apd-root .apd-content h2 i,
#apd-root .apd-content h3,
#apd-root .apd-content h3 i,
#apd-root .apd-content h4,
#apd-root .apd-content h4 i,
#apd-root .apd-content strong,
#apd-root .apd-content a,
#apd-root .apd-content a i {
font-weight: 600;
}
#apd-root .apd-content h2,
#apd-root .apd-content h2 i,
#apd-root .apd-content h2 strong,
#apd-root .apd-content h2 i strong,
#apd-root .apd-content h3,
#apd-root .apd-content h3 i,
#apd-root .apd-content h3 strong,
#apd-root .apd-content h3 i strong,
#apd-root .apd-content h4,
#apd-root .apd-content h4 i,
#apd-root .apd-content h4 strong,
#apd-root .apd-content h4 i strong {
line-height: 1.2;
color: #121212;
}
#apd-root .apd-content p,
#apd-root .apd-content blockquote,
#apd-root .apd-content li,
#apd-root .apd-content strong,
#apd-root .apd-content i strong {
color: #5e5e5e;
}
#apd-root .apd-content p,
#apd-root .apd-content blockquote,
#apd-root .apd-content li,
#apd-root .apd-content td,
#apd-root .apd-content th {
line-height: 1.65;
}
#apd-root .apd-content h2,
#apd-root .apd-content h2 i,
#apd-root .apd-content h2 strong,
#apd-root .apd-content h2 i strong {
font-size: 28px;
}
#apd-root .apd-content h3,
#apd-root .apd-content h3 i,
#apd-root .apd-content h3 strong,
#apd-root .apd-content h3 i strong {
font-size: 22px;
}
#apd-root .apd-content h4,
#apd-root .apd-content h4 i,
#apd-root .apd-content h4 strong,
#apd-root .apd-content h4 i strong {
font-size: 19px;
}
#apd-root .apd-content blockquote {
font-size: 16px;
padding-left: 24px;
border-left: 4px solid #557b97;
}
#apd-root .apd-content blockquote p {
font-size: 16px;
}
#apd-root .apd-content a,
#apd-root .apd-content a i,
#apd-root .apd-content a i strong,
#apd-root .apd-content a strong {
color: #557b97;
text-decoration: underline;
cursor: pointer;
transition: 0.2s color;
}
#apd-root .apd-content li {
display: list-item;
padding-left: 20px;
}
#apd-root .apd-content li+li {
margin-top: 10px;
}
#apd-root .apd-content ol li {
list-style-type: decimal;
padding: 0;
margin-left: 20px;
}
#apd-root .apd-content ol ol,
#apd-root .apd-content ul ol {
list-style-type: lower-latin;
list-style-position: inside;
}
#apd-root .apd-content ul ul,
#apd-root .apd-content ol ol,
#apd-root .apd-content ul ol,
#apd-root .apd-content ol ul {
margin-top: 10px;
}
#apd-root .apd-content ul li {
position: relative;
list-style: none;
}
#apd-root .apd-content ul li:after {
position: absolute;
top: 11px;
width: 5px;
height: 5px;
border-radius: 50%;
content: '';
left: 0;
background-color: #557b97;
}
#apd-root .apd-content a:hover,
#apd-root .apd-content a:hover i,
#apd-root .apd-content a:hover i strong,
#apd-root .apd-content a:hover strong {
color: #121212;
}
#apd-root .apd-content table {
width: 100%;
border-collapse: collapse;
display: table;
}
#apd-root .apd-content tbody,
#apd-root .apd-content thead {
display: table-row-group;
}
#apd-root .apd-content tr {
display: table-row;
}
#apd-root .apd-content td,
#apd-root .apd-content th {
display: table-cell;
padding: 10px;
border: 1px solid #e2e2e2;
}
#apd-root .apd-content th {
font-weight: 600;
}
#apd-root .apd-content img {
max-width: 100%;
margin: 0 auto;
}
#apd-root .apd-responsive-video {
position: relative;
width: 100%;
padding-bottom: 56.25%;
}
#apd-root .apd-responsive-video iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
#apd-root .apd-responsive-spotify iframe {
width: 100%;
height: 300px;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
if (typeof jQuery == 'undefined') {
! function(e, t) {
"use strict";
"object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) {
if (!e.document) throw new Error("jQuery requires a window with a document");
return t(e)
} : t(e)
}("undefined" != typeof window ? window : this, function(C, e) {
"use strict";
var t = [],
E = C.document,
r = Object.getPrototypeOf,
s = t.slice,
g = t.concat,
u = t.push,
i = t.indexOf,
n = {},
o = n.toString,
v = n.hasOwnProperty,
a = v.toString,
l = a.call(Object),
y = {},
m = function(e) {
return "function" == typeof e && "number" != typeof e.nodeType
},
x = function(e) {
return null != e && e === e.window
},
c = {
type: !0,
src: !0,
nonce: !0,
noModule: !0
};
function b(e, t, n) {
var r, i, o = (n = n || E).createElement("script");
if (o.text = e, t)
for (r in c)(i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i);
n.head.appendChild(o).parentNode.removeChild(o)
}
function w(e) {
return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[o.call(e)] || "object" : typeof e
}
var f = "3.4.1",
k = function(e, t) {
return new k.fn.init(e, t)
},
p = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
function d(e) {
var t = !!e && "length" in e && e.length,
n = w(e);
return !m(e) && !x(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e)
}
k.fn = k.prototype = {
jquery: f,
constructor: k,
length: 0,
toArray: function() {
return s.call(this)
},
get: function(e) {
return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e]
},
pushStack: function(e) {
var t = k.merge(this.constructor(), e);
return t.prevObject = this, t
},
each: function(e) {
return k.each(this, e)
},
map: function(n) {
return this.pushStack(k.map(this, function(e, t) {
return n.call(e, t, e)
}))
},
slice: function() {
return this.pushStack(s.apply(this, arguments))
},
first: function() {
return this.eq(0)
},
last: function() {
return this.eq(-1)
},
eq: function(e) {
var t = this.length,
n = +e + (e < 0 ? t : 0);
return this.pushStack(0 <= n && n < t ? [this[n]] : [])
},
end: function() {
return this.prevObject || this.constructor()
},
push: u,
sort: t.sort,
splice: t.splice
}, k.extend = k.fn.extend = function() {
var e, t, n, r, i, o, a = arguments[0] || {},
s = 1,
u = arguments.length,
l = !1;
for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || m(a) || (a = {}), s === u && (a = this, s--); s < u; s++)
if (null != (e = arguments[s]))
for (t in e) r = e[t], "__proto__" !== t && a !== r && (l && r && (k.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || k.isPlainObject(n) ? n : {}, i = !1, a[t] = k.extend(l, o,
r)) : void 0 !== r && (a[t] = r));
return a
}, k.extend({
expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""),
isReady: !0,
error: function(e) {
throw new Error(e)
},
noop: function() {},
isPlainObject: function(e) {
var t, n;
return !(!e || "[object Object]" !== o.call(e)) && (!(t = r(e)) || "function" == typeof(n = v.call(t, "constructor") && t.constructor) && a.call(n) === l)
},
isEmptyObject: function(e) {
var t;
for (t in e) return !1;
return !0
},
globalEval: function(e, t) {
b(e, {
nonce: t && t.nonce
})
},
each: function(e, t) {
var n, r = 0;
if (d(e)) {
for (n = e.length; r < n; r++)
if (!1 === t.call(e[r], r, e[r])) break
} else
for (r in e)
if (!1 === t.call(e[r], r, e[r])) break;
return e
},
trim: function(e) {
return null == e ? "" : (e + "").replace(p, "")
},
makeArray: function(e, t) {
var n = t || [];
return null != e && (d(Object(e)) ? k.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)), n
},
inArray: function(e, t, n) {
return null == t ? -1 : i.call(t, e, n)
},
merge: function(e, t) {
for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r];
return e.length = i, e
},
grep: function(e, t, n) {
for (var r = [], i = 0, o = e.length, a = !n; i < o; i++) !t(e[i], i) !== a && r.push(e[i]);
return r
},
map: function(e, t, n) {
var r, i, o = 0,
a = [];
if (d(e))
for (r = e.length; o < r; o++) null != (i = t(e[o], o, n)) && a.push(i);
else
for (o in e) null != (i = t(e[o], o, n)) && a.push(i);
return g.apply([], a)
},
guid: 1,
support: y
}), "function" == typeof Symbol && (k.fn[Symbol.iterator] = t[Symbol.iterator]), k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(e, t) {
n["[object " + t + "]"] = t.toLowerCase()
});
var h = function(n) {
var e, d, b, o, i, h, f, g, w, u, l, T, C, a, E, v, s, c, y, k = "sizzle" + 1 * new Date,
m = n.document,
S = 0,
r = 0,
p = ue(),
x = ue(),
N = ue(),
A = ue(),
D = function(e, t) {
return e === t && (l = !0), 0
},
j = {}.hasOwnProperty,
t = [],
q = t.pop,
L = t.push,
H = t.push,
O = t.slice,
P = function(e, t) {
for (var n = 0, r = e.length; n < r; n++)
if (e[n] === t) return n;
return -1
},
R = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
M = "[\\x20\\t\\r\\n\\f]",
I = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
W = "\\[" + M + "*(" + I + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + I + "))|)" + M + "*\\]",
$ = ":(" + I + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + W + ")*)|.*)\\)|)",
F = new RegExp(M + "+", "g"),
B = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"),
_ = new RegExp("^" + M + "*," + M + "*"),
z = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"),
U = new RegExp(M + "|>"),
X = new RegExp($),
V = new RegExp("^" + I + "$"),
G = {
ID: new RegExp("^#(" + I + ")"),
CLASS: new RegExp("^\\.(" + I + ")"),
TAG: new RegExp("^(" + I + "|[*])"),
ATTR: new RegExp("^" + W),
PSEUDO: new RegExp("^" + $),
CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"),
bool: new RegExp("^(?:" + R + ")$", "i"),
needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i")
},
Y = /HTML$/i,
Q = /^(?:input|select|textarea|button)$/i,
J = /^h\d$/i,
K = /^[^{]+\{\s*\[native \w/,
Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
ee = /[+~]/,
te = new RegExp("\\\\([\\da-f]{1,6}" + M + "?|(" + M + ")|.)", "ig"),
ne = function(e, t, n) {
var r = "0x" + t - 65536;
return r != r || n ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320)
},
re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
ie = function(e, t) {
return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e
},
oe = function() {
T()
},
ae = be(function(e) {
return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase()
}, {
dir: "parentNode",
next: "legend"
});
try {
H.apply(t = O.call(m.childNodes), m.childNodes), t[m.childNodes.length].nodeType
} catch (e) {
H = {
apply: t.length ? function(e, t) {
L.apply(e, O.call(t))
} : function(e, t) {
var n = e.length,
r = 0;
while (e[n++] = t[r++]);
e.length = n - 1
}
}
}
function se(t, e, n, r) {
var i, o, a, s, u, l, c, f = e && e.ownerDocument,
p = e ? e.nodeType : 9;
if (n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p) return n;
if (!r && ((e ? e.ownerDocument || e : m) !== C && T(e), e = e || C, E)) {
if (11 !== p && (u = Z.exec(t)))
if (i = u[1]) {
if (9 === p) {
if (!(a = e.getElementById(i))) return n;
if (a.id === i) return n.push(a), n
} else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i) return n.push(a), n
} else {
if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n;
if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName) return H.apply(n, e.getElementsByClassName(i)), n
} if (d.qsa && !A[t + " "] && (!v || !v.test(t)) && (1 !== p || "object" !== e.nodeName.toLowerCase())) {
if (c = t, f = e, 1 === p && U.test(t)) {
(s = e.getAttribute("id")) ? s = s.replace(re, ie): e.setAttribute("id", s = k), o = (l = h(t)).length;
while (o--) l[o] = "#" + s + " " + xe(l[o]);
c = l.join(","), f = ee.test(t) && ye(e.parentNode) || e
}
try {
return H.apply(n, f.querySelectorAll(c)), n
} catch (e) {
A(t, !0)
} finally {
s === k && e.removeAttribute("id")
}
}
}
return g(t.replace(B, "$1"), e, n, r)
}
function ue() {
var r = [];
return function e(t, n) {
return r.push(t + " ") > b.cacheLength && delete e[r.shift()], e[t + " "] = n
}
}
function le(e) {
return e[k] = !0, e
}
function ce(e) {
var t = C.createElement("fieldset");
try {
return !!e(t)
} catch (e) {
return !1
} finally {
t.parentNode && t.parentNode.removeChild(t), t = null
}
}
function fe(e, t) {
var n = e.split("|"),
r = n.length;
while (r--) b.attrHandle[n[r]] = t
}
function pe(e, t) {
var n = t && e,
r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;
if (r) return r;
if (n)
while (n = n.nextSibling)
if (n === t) return -1;
return e ? 1 : -1
}
function de(t) {
return function(e) {
return "input" === e.nodeName.toLowerCase() && e.type === t
}
}
function he(n) {
return function(e) {
var t = e.nodeName.toLowerCase();
return ("input" === t || "button" === t) && e.type === n
}
}
function ge(t) {
return function(e) {
return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && ae(e) === t : e.disabled === t :
"label" in e && e.disabled === t
}
}
function ve(a) {
return le(function(o) {
return o = +o, le(function(e, t) {
var n, r = a([], e.length, o),
i = r.length;
while (i--) e[n = r[i]] && (e[n] = !(t[n] = e[n]))
})
})
}
function ye(e) {
return e && "undefined" != typeof e.getElementsByTagName && e
}
for (e in d = se.support = {}, i = se.isXML = function(e) {
var t = e.namespaceURI,
n = (e.ownerDocument || e).documentElement;
return !Y.test(t || n && n.nodeName || "HTML")
}, T = se.setDocument = function(e) {
var t, n, r = e ? e.ownerDocument || e : m;
return r !== C && 9 === r.nodeType && r.documentElement && (a = (C = r).documentElement, E = !i(C), m !== C && (n = C.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", oe, !1) : n.attachEvent &&
n.attachEvent("onunload", oe)), d.attributes = ce(function(e) {
return e.className = "i", !e.getAttribute("className")
}), d.getElementsByTagName = ce(function(e) {
return e.appendChild(C.createComment("")), !e.getElementsByTagName("*").length
}), d.getElementsByClassName = K.test(C.getElementsByClassName), d.getById = ce(function(e) {
return a.appendChild(e).id = k, !C.getElementsByName || !C.getElementsByName(k).length
}), d.getById ? (b.filter.ID = function(e) {
var t = e.replace(te, ne);
return function(e) {
return e.getAttribute("id") === t
}
}, b.find.ID = function(e, t) {
if ("undefined" != typeof t.getElementById && E) {
var n = t.getElementById(e);
return n ? [n] : []
}
}) : (b.filter.ID = function(e) {
var n = e.replace(te, ne);
return function(e) {
var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
return t && t.value === n
}
}, b.find.ID = function(e, t) {
if ("undefined" != typeof t.getElementById && E) {
var n, r, i, o = t.getElementById(e);
if (o) {
if ((n = o.getAttributeNode("id")) && n.value === e) return [o];
i = t.getElementsByName(e), r = 0;
while (o = i[r++])
if ((n = o.getAttributeNode("id")) && n.value === e) return [o]
}
return []
}
}), b.find.TAG = d.getElementsByTagName ? function(e, t) {
return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : d.qsa ? t.querySelectorAll(e) : void 0
} : function(e, t) {
var n, r = [],
i = 0,
o = t.getElementsByTagName(e);
if ("*" === e) {
while (n = o[i++]) 1 === n.nodeType && r.push(n);
return r
}
return o
}, b.find.CLASS = d.getElementsByClassName && function(e, t) {
if ("undefined" != typeof t.getElementsByClassName && E) return t.getElementsByClassName(e)
}, s = [], v = [], (d.qsa = K.test(C.querySelectorAll)) && (ce(function(e) {
a.appendChild(e).innerHTML = "<a id='" + k + "'></a><select id='" + k + "-\r\\' msallowcapture=''><option selected=''></option></select>", e.querySelectorAll("[msallowcapture^='']").length && v.push("[*^$]=" + M +
"*(?:''|\"\")"), e.querySelectorAll("[selected]").length || v.push("\\[" + M + "*(?:value|" + R + ")"), e.querySelectorAll("[id~=" + k + "-]").length || v.push("~="), e.querySelectorAll(":checked").length || v
.push(":checked"), e.querySelectorAll("a#" + k + "+*").length || v.push(".#.+[+~]")
}), ce(function(e) {
e.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";
var t = C.createElement("input");
t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && v.push("name" + M + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && v.push(
":enabled", ":disabled"), a.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && v.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), v.push(",.*:")
})), (d.matchesSelector = K.test(c = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.msMatchesSelector)) && ce(function(e) {
d.disconnectedMatch = c.call(e, "*"), c.call(e, "[s!='']:x"), s.push("!=", $)
}), v = v.length && new RegExp(v.join("|")), s = s.length && new RegExp(s.join("|")), t = K.test(a.compareDocumentPosition), y = t || K.test(a.contains) ? function(e, t) {
var n = 9 === e.nodeType ? e.documentElement : e,
r = t && t.parentNode;
return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)))
} : function(e, t) {
if (t)
while (t = t.parentNode)
if (t === e) return !0;
return !1
}, D = t ? function(e, t) {
if (e === t) return l = !0, 0;
var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
return n || (1 & (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !d.sortDetached && t.compareDocumentPosition(e) === n ? e === C || e.ownerDocument === m && y(m, e) ? -1 :
t === C || t.ownerDocument === m && y(m, t) ? 1 : u ? P(u, e) - P(u, t) : 0 : 4 & n ? -1 : 1)
} : function(e, t) {
if (e === t) return l = !0, 0;
var n, r = 0,
i = e.parentNode,
o = t.parentNode,
a = [e],
s = [t];
if (!i || !o) return e === C ? -1 : t === C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0;
if (i === o) return pe(e, t);
n = e;
while (n = n.parentNode) a.unshift(n);
n = t;
while (n = n.parentNode) s.unshift(n);
while (a[r] === s[r]) r++;
return r ? pe(a[r], s[r]) : a[r] === m ? -1 : s[r] === m ? 1 : 0
}), C
}, se.matches = function(e, t) {
return se(e, null, null, t)
}, se.matchesSelector = function(e, t) {
if ((e.ownerDocument || e) !== C && T(e), d.matchesSelector && E && !A[t + " "] && (!s || !s.test(t)) && (!v || !v.test(t))) try {
var n = c.call(e, t);
if (n || d.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n
} catch (e) {
A(t, !0)
}
return 0 < se(t, C, null, [e]).length
}, se.contains = function(e, t) {
return (e.ownerDocument || e) !== C && T(e), y(e, t)
}, se.attr = function(e, t) {
(e.ownerDocument || e) !== C && T(e);
var n = b.attrHandle[t.toLowerCase()],
r = n && j.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0;
return void 0 !== r ? r : d.attributes || !E ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
}, se.escape = function(e) {
return (e + "").replace(re, ie)
}, se.error = function(e) {
throw new Error("Syntax error, unrecognized expression: " + e)
}, se.uniqueSort = function(e) {
var t, n = [],
r = 0,
i = 0;
if (l = !d.detectDuplicates, u = !d.sortStable && e.slice(0), e.sort(D), l) {
while (t = e[i++]) t === e[i] && (r = n.push(i));
while (r--) e.splice(n[r], 1)
}
return u = null, e
}, o = se.getText = function(e) {
var t, n = "",
r = 0,
i = e.nodeType;
if (i) {
if (1 === i || 9 === i || 11 === i) {
if ("string" == typeof e.textContent) return e.textContent;
for (e = e.firstChild; e; e = e.nextSibling) n += o(e)
} else if (3 === i || 4 === i) return e.nodeValue
} else
while (t = e[r++]) n += o(t);
return n
}, (b = se.selectors = {
cacheLength: 50,
createPseudo: le,
match: G,
attrHandle: {},
find: {},
relative: {
">": {
dir: "parentNode",
first: !0
},
" ": {
dir: "parentNode"
},
"+": {
dir: "previousSibling",
first: !0
},
"~": {
dir: "previousSibling"
}
},
preFilter: {
ATTR: function(e) {
return e[1] = e[1].replace(te, ne), e[3] = (e[3] || e[4] || e[5] || "").replace(te, ne), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4)
},
CHILD: function(e) {
return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || se.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] &&
se.error(e[0]), e
},
PSEUDO: function(e) {
var t, n = !e[6] && e[2];
return G.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && X.test(n) && (t = h(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0,
3))
}
},
filter: {
TAG: function(e) {
var t = e.replace(te, ne).toLowerCase();
return "*" === e ? function() {
return !0
} : function(e) {
return e.nodeName && e.nodeName.toLowerCase() === t
}
},
CLASS: function(e) {
var t = p[e + " "];
return t || (t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && p(e, function(e) {
return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "")
})
},
ATTR: function(n, r, i) {
return function(e) {
var t = se.attr(e, n);
return null == t ? "!=" === r : !r || (t += "", "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i :
"~=" === r ? -1 < (" " + t.replace(F, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-"))
}
},
CHILD: function(h, e, t, g, v) {
var y = "nth" !== h.slice(0, 3),
m = "last" !== h.slice(-4),
x = "of-type" === e;
return 1 === g && 0 === v ? function(e) {
return !!e.parentNode
} : function(e, t, n) {
var r, i, o, a, s, u, l = y !== m ? "nextSibling" : "previousSibling",
c = e.parentNode,
f = x && e.nodeName.toLowerCase(),
p = !n && !x,
d = !1;
if (c) {
if (y) {
while (l) {
a = e;
while (a = a[l])
if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) return !1;
u = l = "only" === h && !u && "nextSibling"
}
return !0
}
if (u = [m ? c.firstChild : c.lastChild], m && p) {
d = (s = (r = (i = (o = (a = c)[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === S && r[1]) && r[2], a = s && c.childNodes[s];
while (a = ++s && a && a[l] || (d = s = 0) || u.pop())
if (1 === a.nodeType && ++d && a === e) {
i[h] = [S, s, d];
break
}
} else if (p && (d = s = (r = (i = (o = (a = e)[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === S && r[1]), !1 === d)
while (a = ++s && a && a[l] || (d = s = 0) || u.pop())
if ((x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) && ++d && (p && ((i = (o = a[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] = [S, d]), a === e)) break;
return (d -= v) === g || d % g == 0 && 0 <= d / g
}
}
},
PSEUDO: function(e, o) {
var t, a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error("unsupported pseudo: " + e);
return a[k] ? a(o) : 1 < a.length ? (t = [e, e, "", o], b.setFilters.hasOwnProperty(e.toLowerCase()) ? le(function(e, t) {
var n, r = a(e, o),
i = r.length;
while (i--) e[n = P(e, r[i])] = !(t[n] = r[i])
}) : function(e) {
return a(e, 0, t)
}) : a
}
},
pseudos: {
not: le(function(e) {
var r = [],
i = [],
s = f(e.replace(B, "$1"));
return s[k] ? le(function(e, t, n, r) {
var i, o = s(e, null, r, []),
a = e.length;
while (a--)(i = o[a]) && (e[a] = !(t[a] = i))
}) : function(e, t, n) {
return r[0] = e, s(r, null, n, i), r[0] = null, !i.pop()
}
}),
has: le(function(t) {
return function(e) {
return 0 < se(t, e).length
}
}),
contains: le(function(t) {
return t = t.replace(te, ne),
function(e) {
return -1 < (e.textContent || o(e)).indexOf(t)
}
}),
lang: le(function(n) {
return V.test(n || "") || se.error("unsupported lang: " + n), n = n.replace(te, ne).toLowerCase(),
function(e) {
var t;
do {
if (t = E ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-")
} while ((e = e.parentNode) && 1 === e.nodeType);
return !1
}
}),
target: function(e) {
var t = n.location && n.location.hash;
return t && t.slice(1) === e.id
},
root: function(e) {
return e === a
},
focus: function(e) {
return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
},
enabled: ge(!1),
disabled: ge(!0),
checked: function(e) {
var t = e.nodeName.toLowerCase();
return "input" === t && !!e.checked || "option" === t && !!e.selected
},
selected: function(e) {
return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected
},
empty: function(e) {
for (e = e.firstChild; e; e = e.nextSibling)
if (e.nodeType < 6) return !1;
return !0
},
parent: function(e) {
return !b.pseudos.empty(e)
},
header: function(e) {
return J.test(e.nodeName)
},
input: function(e) {
return Q.test(e.nodeName)
},
button: function(e) {
var t = e.nodeName.toLowerCase();
return "input" === t && "button" === e.type || "button" === t
},
text: function(e) {
var t;
return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase())
},
first: ve(function() {
return [0]
}),
last: ve(function(e, t) {
return [t - 1]
}),
eq: ve(function(e, t, n) {
return [n < 0 ? n + t : n]
}),
even: ve(function(e, t) {
for (var n = 0; n < t; n += 2) e.push(n);
return e
}),
odd: ve(function(e, t) {
for (var n = 1; n < t; n += 2) e.push(n);
return e
}),
lt: ve(function(e, t, n) {
for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r;) e.push(r);
return e
}),
gt: ve(function(e, t, n) {
for (var r = n < 0 ? n + t : n; ++r < t;) e.push(r);
return e
})
}
}).pseudos.nth = b.pseudos.eq, {
radio: !0,
checkbox: !0,
file: !0,
password: !0,
image: !0
}) b.pseudos[e] = de(e);
for (e in {
submit: !0,
reset: !0
}) b.pseudos[e] = he(e);
function me() {}
function xe(e) {
for (var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value;
return r
}
function be(s, e, t) {
var u = e.dir,
l = e.next,
c = l || u,
f = t && "parentNode" === c,
p = r++;
return e.first ? function(e, t, n) {
while (e = e[u])
if (1 === e.nodeType || f) return s(e, t, n);
return !1
} : function(e, t, n) {
var r, i, o, a = [S, p];
if (n) {
while (e = e[u])
if ((1 === e.nodeType || f) && s(e, t, n)) return !0
} else
while (e = e[u])
if (1 === e.nodeType || f)
if (i = (o = e[k] || (e[k] = {}))[e.uniqueID] || (o[e.uniqueID] = {}), l && l === e.nodeName.toLowerCase()) e = e[u] || e;
else {
if ((r = i[c]) && r[0] === S && r[1] === p) return a[2] = r[2];
if ((i[c] = a)[2] = s(e, t, n)) return !0
} return !1
}
}
function we(i) {
return 1 < i.length ? function(e, t, n) {
var r = i.length;
while (r--)
if (!i[r](e, t, n)) return !1;
return !0
} : i[0]
}
function Te(e, t, n, r, i) {
for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)(o = e[s]) && (n && !n(o, r, i) || (a.push(o), l && t.push(s)));
return a
}
function Ce(d, h, g, v, y, e) {
return v && !v[k] && (v = Ce(v)), y && !y[k] && (y = Ce(y, e)), le(function(e, t, n, r) {
var i, o, a, s = [],
u = [],
l = t.length,
c = e || function(e, t, n) {
for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n);
return n
}(h || "*", n.nodeType ? [n] : n, []),
f = !d || !e && h ? c : Te(c, s, d, n, r),
p = g ? y || (e ? d : l || v) ? [] : t : f;
if (g && g(f, p, n, r), v) {
i = Te(p, u), v(i, [], n, r), o = i.length;
while (o--)(a = i[o]) && (p[u[o]] = !(f[u[o]] = a))
}
if (e) {
if (y || d) {
if (y) {
i = [], o = p.length;
while (o--)(a = p[o]) && i.push(f[o] = a);
y(null, p = [], i, r)
}
o = p.length;
while (o--)(a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a))
}
} else p = Te(p === t ? p.splice(l, p.length) : p), y ? y(null, t, p, r) : H.apply(t, p)
})
}
function Ee(e) {
for (var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = be(function(e) {
return e === i
}, a, !0), l = be(function(e) {
return -1 < P(i, e)
}, a, !0), c = [function(e, t, n) {
var r = !o && (n || t !== w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n));
return i = null, r
}]; s < r; s++)
if (t = b.relative[e[s].type]) c = [be(we(c), t)];
else {
if ((t = b.filter[e[s].type].apply(null, e[s].matches))[k]) {
for (n = ++s; n < r; n++)
if (b.relative[e[n].type]) break;
return Ce(1 < s && we(c), 1 < s && xe(e.slice(0, s - 1).concat({
value: " " === e[s - 2].type ? "*" : ""
})).replace(B, "$1"), t, s < n && Ee(e.slice(s, n)), n < r && Ee(e = e.slice(n)), n < r && xe(e))
}
c.push(t)
} return we(c)
}
return me.prototype = b.filters = b.pseudos, b.setFilters = new me, h = se.tokenize = function(e, t) {
var n, r, i, o, a, s, u, l = x[e + " "];
if (l) return t ? 0 : l.slice(0);
a = e, s = [], u = b.preFilter;
while (a) {
for (o in n && !(r = _.exec(a)) || (r && (a = a.slice(r[0].length) || a), s.push(i = [])), n = !1, (r = z.exec(a)) && (n = r.shift(), i.push({
value: n,
type: r[0].replace(B, " ")
}), a = a.slice(n.length)), b.filter) !(r = G[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(), i.push({
value: n,
type: o,
matches: r
}), a = a.slice(n.length));
if (!n) break
}
return t ? a.length : a ? se.error(e) : x(e, s).slice(0)
}, f = se.compile = function(e, t) {
var n, v, y, m, x, r, i = [],
o = [],
a = N[e + " "];
if (!a) {
t || (t = h(e)), n = t.length;
while (n--)(a = Ee(t[n]))[k] ? i.push(a) : o.push(a);
(a = N(e, (v = o, m = 0 < (y = i).length, x = 0 < v.length, r = function(e, t, n, r, i) {
var o, a, s, u = 0,
l = "0",
c = e && [],
f = [],
p = w,
d = e || x && b.find.TAG("*", i),
h = S += null == p ? 1 : Math.random() || .1,
g = d.length;
for (i && (w = t === C || t || i); l !== g && null != (o = d[l]); l++) {
if (x && o) {
a = 0, t || o.ownerDocument === C || (T(o), n = !E);
while (s = v[a++])
if (s(o, t || C, n)) {
r.push(o);
break
} i && (S = h)
}
m && ((o = !s && o) && u--, e && c.push(o))
}
if (u += l, m && l !== u) {
a = 0;
while (s = y[a++]) s(c, f, t, n);
if (e) {
if (0 < u)
while (l--) c[l] || f[l] || (f[l] = q.call(r));
f = Te(f)
}
H.apply(r, f), i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r)
}
return i && (S = h, w = p), c
}, m ? le(r) : r))).selector = e
}
return a
}, g = se.select = function(e, t, n, r) {
var i, o, a, s, u, l = "function" == typeof e && e,
c = !r && h(e = l.selector || e);
if (n = n || [], 1 === c.length) {
if (2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && E && b.relative[o[1].type]) {
if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n;
l && (t = t.parentNode), e = e.slice(o.shift().value.length)
}
i = G.needsContext.test(e) ? 0 : o.length;
while (i--) {
if (a = o[i], b.relative[s = a.type]) break;
if ((u = b.find[s]) && (r = u(a.matches[0].replace(te, ne), ee.test(o[0].type) && ye(t.parentNode) || t))) {
if (o.splice(i, 1), !(e = r.length && xe(o))) return H.apply(n, r), n;
break
}
}
}
return (l || f(e, c))(r, t, !E, n, !t || ee.test(e) && ye(t.parentNode) || t), n
}, d.sortStable = k.split("").sort(D).join("") === k, d.detectDuplicates = !!l, T(), d.sortDetached = ce(function(e) {
return 1 & e.compareDocumentPosition(C.createElement("fieldset"))
}), ce(function(e) {
return e.innerHTML = "<a href='#'></a>", "#" === e.firstChild.getAttribute("href")
}) || fe("type|href|height|width", function(e, t, n) {
if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2)
}), d.attributes && ce(function(e) {
return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value")
}) || fe("value", function(e, t, n) {
if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue
}), ce(function(e) {
return null == e.getAttribute("disabled")
}) || fe(R, function(e, t, n) {
var r;
if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
}), se
}(C);
k.find = h, k.expr = h.selectors, k.expr[":"] = k.expr.pseudos, k.uniqueSort = k.unique = h.uniqueSort, k.text = h.getText, k.isXMLDoc = h.isXML, k.contains = h.contains, k.escapeSelector = h.escape;
var T = function(e, t, n) {
var r = [],
i = void 0 !== n;
while ((e = e[t]) && 9 !== e.nodeType)
if (1 === e.nodeType) {
if (i && k(e).is(n)) break;
r.push(e)
} return r
},
S = function(e, t) {
for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
return n
},
N = k.expr.match.needsContext;
function A(e, t) {
return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
}
var D = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
function j(e, n, r) {
return m(n) ? k.grep(e, function(e, t) {
return !!n.call(e, t, e) !== r
}) : n.nodeType ? k.grep(e, function(e) {
return e === n !== r
}) : "string" != typeof n ? k.grep(e, function(e) {
return -1 < i.call(n, e) !== r
}) : k.filter(n, e, r)
}
k.filter = function(e, t, n) {
var r = t[0];
return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? k.find.matchesSelector(r, e) ? [r] : [] : k.find.matches(e, k.grep(t, function(e) {
return 1 === e.nodeType
}))
}, k.fn.extend({
find: function(e) {
var t, n, r = this.length,
i = this;
if ("string" != typeof e) return this.pushStack(k(e).filter(function() {
for (t = 0; t < r; t++)
if (k.contains(i[t], this)) return !0
}));
for (n = this.pushStack([]), t = 0; t < r; t++) k.find(e, i[t], n);
return 1 < r ? k.uniqueSort(n) : n
},
filter: function(e) {
return this.pushStack(j(this, e || [], !1))
},
not: function(e) {
return this.pushStack(j(this, e || [], !0))
},
is: function(e) {
return !!j(this, "string" == typeof e && N.test(e) ? k(e) : e || [], !1).length
}
});
var q, L = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
(k.fn.init = function(e, t, n) {
var r, i;
if (!e) return this;
if (n = n || q, "string" == typeof e) {
if (!(r = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : L.exec(e)) || !r[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);
if (r[1]) {
if (t = t instanceof k ? t[0] : t, k.merge(this, k.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)), D.test(r[1]) && k.isPlainObject(t))
for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);
return this
}
return (i = E.getElementById(r[2])) && (this[0] = i, this.length = 1), this
}
return e.nodeType ? (this[0] = e, this.length = 1, this) : m(e) ? void 0 !== n.ready ? n.ready(e) : e(k) : k.makeArray(e, this)
}).prototype = k.fn, q = k(E);
var H = /^(?:parents|prev(?:Until|All))/,
O = {
children: !0,
contents: !0,
next: !0,
prev: !0
};
function P(e, t) {
while ((e = e[t]) && 1 !== e.nodeType);
return e
}
k.fn.extend({
has: function(e) {
var t = k(e, this),
n = t.length;
return this.filter(function() {
for (var e = 0; e < n; e++)
if (k.contains(this, t[e])) return !0
})
},
closest: function(e, t) {
var n, r = 0,
i = this.length,
o = [],
a = "string" != typeof e && k(e);
if (!N.test(e))
for (; r < i; r++)
for (n = this[r]; n && n !== t; n = n.parentNode)
if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && k.find.matchesSelector(n, e))) {
o.push(n);
break
} return this.pushStack(1 < o.length ? k.uniqueSort(o) : o)
},
index: function(e) {
return e ? "string" == typeof e ? i.call(k(e), this[0]) : i.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
},
add: function(e, t) {
return this.pushStack(k.uniqueSort(k.merge(this.get(), k(e, t))))
},
addBack: function(e) {
return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
}
}), k.each({
parent: function(e) {
var t = e.parentNode;
return t && 11 !== t.nodeType ? t : null
},
parents: function(e) {
return T(e, "parentNode")
},
parentsUntil: function(e, t, n) {
return T(e, "parentNode", n)
},
next: function(e) {
return P(e, "nextSibling")
},
prev: function(e) {
return P(e, "previousSibling")
},
nextAll: function(e) {
return T(e, "nextSibling")
},
prevAll: function(e) {
return T(e, "previousSibling")
},
nextUntil: function(e, t, n) {
return T(e, "nextSibling", n)
},
prevUntil: function(e, t, n) {
return T(e, "previousSibling", n)
},
siblings: function(e) {
return S((e.parentNode || {}).firstChild, e)
},
children: function(e) {
return S(e.firstChild)
},
contents: function(e) {
return "undefined" != typeof e.contentDocument ? e.contentDocument : (A(e, "template") && (e = e.content || e), k.merge([], e.childNodes))
}
}, function(r, i) {
k.fn[r] = function(e, t) {
var n = k.map(this, i, e);
return "Until" !== r.slice(-5) && (t = e), t && "string" == typeof t && (n = k.filter(t, n)), 1 < this.length && (O[r] || k.uniqueSort(n), H.test(r) && n.reverse()), this.pushStack(n)
}
});
var R = /[^\x20\t\r\n\f]+/g;
function M(e) {
return e
}
function I(e) {
throw e
}
function W(e, t, n, r) {
var i;
try {
e && m(i = e.promise) ? i.call(e).done(t).fail(n) : e && m(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r))
} catch (e) {
n.apply(void 0, [e])
}
}
k.Callbacks = function(r) {
var e, n;
r = "string" == typeof r ? (e = r, n = {}, k.each(e.match(R) || [], function(e, t) {
n[t] = !0
}), n) : k.extend({}, r);
var i, t, o, a, s = [],
u = [],
l = -1,
c = function() {
for (a = a || r.once, o = i = !0; u.length; l = -1) {
t = u.shift();
while (++l < s.length) !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length, t = !1)
}
r.memory || (t = !1), i = !1, a && (s = t ? [] : "")
},
f = {
add: function() {
return s && (t && !i && (l = s.length - 1, u.push(t)), function n(e) {
k.each(e, function(e, t) {
m(t) ? r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== w(t) && n(t)
})
}(arguments), t && !i && c()), this
},
remove: function() {
return k.each(arguments, function(e, t) {
var n;
while (-1 < (n = k.inArray(t, s, n))) s.splice(n, 1), n <= l && l--
}), this
},
has: function(e) {
return e ? -1 < k.inArray(e, s) : 0 < s.length
},
empty: function() {
return s && (s = []), this
},
disable: function() {
return a = u = [], s = t = "", this
},
disabled: function() {
return !s
},
lock: function() {
return a = u = [], t || i || (s = t = ""), this
},
locked: function() {
return !!a
},
fireWith: function(e, t) {
return a || (t = [e, (t = t || []).slice ? t.slice() : t], u.push(t), i || c()), this
},
fire: function() {
return f.fireWith(this, arguments), this
},
fired: function() {
return !!o
}
};
return f
}, k.extend({
Deferred: function(e) {
var o = [
["notify", "progress", k.Callbacks("memory"), k.Callbacks("memory"), 2],
["resolve", "done", k.Callbacks("once memory"), k.Callbacks("once memory"), 0, "resolved"],
["reject", "fail", k.Callbacks("once memory"), k.Callbacks("once memory"), 1, "rejected"]
],
i = "pending",
a = {
state: function() {
return i
},
always: function() {
return s.done(arguments).fail(arguments), this
},
"catch": function(e) {
return a.then(null, e)
},
pipe: function() {
var i = arguments;
return k.Deferred(function(r) {
k.each(o, function(e, t) {
var n = m(i[t[4]]) && i[t[4]];
s[t[1]](function() {
var e = n && n.apply(this, arguments);
e && m(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments)
})
}), i = null
}).promise()
},
then: function(t, n, r) {
var u = 0;
function l(i, o, a, s) {
return function() {
var n = this,
r = arguments,
e = function() {
var e, t;
if (!(i < u)) {
if ((e = a.apply(n, r)) === o.promise()) throw new TypeError("Thenable self-resolution");
t = e && ("object" == typeof e || "function" == typeof e) && e.then, m(t) ? s ? t.call(e, l(u, o, M, s), l(u, o, I, s)) : (u++, t.call(e, l(u, o, M, s), l(u, o, I, s), l(u, o, M, o.notifyWith))) : (a !==
M && (n = void 0, r = [e]), (s || o.resolveWith)(n, r))
}
},
t = s ? e : function() {
try {
e()
} catch (e) {
k.Deferred.exceptionHook && k.Deferred.exceptionHook(e, t.stackTrace), u <= i + 1 && (a !== I && (n = void 0, r = [e]), o.rejectWith(n, r))
}
};
i ? t() : (k.Deferred.getStackHook && (t.stackTrace = k.Deferred.getStackHook()), C.setTimeout(t))
}
}
return k.Deferred(function(e) {
o[0][3].add(l(0, e, m(r) ? r : M, e.notifyWith)), o[1][3].add(l(0, e, m(t) ? t : M)), o[2][3].add(l(0, e, m(n) ? n : I))
}).promise()
},
promise: function(e) {
return null != e ? k.extend(e, a) : a
}
},
s = {};
return k.each(o, function(e, t) {
var n = t[2],
r = t[5];
a[t[1]] = n.add, r && n.add(function() {
i = r
}, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock), n.add(t[3].fire), s[t[0]] = function() {
return s[t[0] + "With"](this === s ? void 0 : this, arguments), this
}, s[t[0] + "With"] = n.fireWith
}), a.promise(s), e && e.call(s, s), s
},
when: function(e) {
var n = arguments.length,
t = n,
r = Array(t),
i = s.call(arguments),
o = k.Deferred(),
a = function(t) {
return function(e) {
r[t] = this, i[t] = 1 < arguments.length ? s.call(arguments) : e, --n || o.resolveWith(r, i)
}
};
if (n <= 1 && (W(e, o.done(a(t)).resolve, o.reject, !n), "pending" === o.state() || m(i[t] && i[t].then))) return o.then();
while (t--) W(i[t], a(t), o.reject);
return o.promise()
}
});
var $ = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
k.Deferred.exceptionHook = function(e, t) {
C.console && C.console.warn && e && $.test(e.name) && C.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t)
}, k.readyException = function(e) {
C.setTimeout(function() {
throw e
})
};
var F = k.Deferred();
function B() {
E.removeEventListener("DOMContentLoaded", B), C.removeEventListener("load", B), k.ready()
}
k.fn.ready = function(e) {
return F.then(e)["catch"](function(e) {
k.readyException(e)
}), this
}, k.extend({
isReady: !1,
readyWait: 1,
ready: function(e) {
(!0 === e ? --k.readyWait : k.isReady) || (k.isReady = !0) !== e && 0 < --k.readyWait || F.resolveWith(E, [k])
}
}), k.ready.then = F.then, "complete" === E.readyState || "loading" !== E.readyState && !E.documentElement.doScroll ? C.setTimeout(k.ready) : (E.addEventListener("DOMContentLoaded", B), C.addEventListener("load", B));
var _ = function(e, t, n, r, i, o, a) {
var s = 0,
u = e.length,
l = null == n;
if ("object" === w(n))
for (s in i = !0, n) _(e, t, s, n[s], !0, o, a);
else if (void 0 !== r && (i = !0, m(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function(e, t, n) {
return l.call(k(e), n)
})), t))
for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));
return i ? e : l ? t.call(e) : u ? t(e[0], n) : o
},
z = /^-ms-/,
U = /-([a-z])/g;
function X(e, t) {
return t.toUpperCase()
}
function V(e) {
return e.replace(z, "ms-").replace(U, X)
}
var G = function(e) {
return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType
};
function Y() {
this.expando = k.expando + Y.uid++
}
Y.uid = 1, Y.prototype = {
cache: function(e) {
var t = e[this.expando];
return t || (t = {}, G(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, {
value: t,
configurable: !0
}))), t
},
set: function(e, t, n) {
var r, i = this.cache(e);
if ("string" == typeof t) i[V(t)] = n;
else
for (r in t) i[V(r)] = t[r];
return i
},
get: function(e, t) {
return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][V(t)]
},
access: function(e, t, n) {
return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t)
},
remove: function(e, t) {
var n, r = e[this.expando];
if (void 0 !== r) {
if (void 0 !== t) {
n = (t = Array.isArray(t) ? t.map(V) : (t = V(t)) in r ? [t] : t.match(R) || []).length;
while (n--) delete r[t[n]]
}(void 0 === t || k.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando])
}
},
hasData: function(e) {
var t = e[this.expando];
return void 0 !== t && !k.isEmptyObject(t)
}
};
var Q = new Y,
J = new Y,
K = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
Z = /[A-Z]/g;
function ee(e, t, n) {
var r, i;
if (void 0 === n && 1 === e.nodeType)
if (r = "data-" + t.replace(Z, "-$&").toLowerCase(), "string" == typeof(n = e.getAttribute(r))) {
try {
n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : K.test(i) ? JSON.parse(i) : i)
} catch (e) {}
J.set(e, t, n)
} else n = void 0;
return n
}
k.extend({
hasData: function(e) {
return J.hasData(e) || Q.hasData(e)
},
data: function(e, t, n) {
return J.access(e, t, n)
},
removeData: function(e, t) {
J.remove(e, t)
},
_data: function(e, t, n) {
return Q.access(e, t, n)
},
_removeData: function(e, t) {
Q.remove(e, t)
}
}), k.fn.extend({
data: function(n, e) {
var t, r, i, o = this[0],
a = o && o.attributes;
if (void 0 === n) {
if (this.length && (i = J.get(o), 1 === o.nodeType && !Q.get(o, "hasDataAttrs"))) {
t = a.length;
while (t--) a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = V(r.slice(5)), ee(o, r, i[r]));
Q.set(o, "hasDataAttrs", !0)
}
return i
}
return "object" == typeof n ? this.each(function() {
J.set(this, n)
}) : _(this, function(e) {
var t;
if (o && void 0 === e) return void 0 !== (t = J.get(o, n)) ? t : void 0 !== (t = ee(o, n)) ? t : void 0;
this.each(function() {
J.set(this, n, e)
})
}, null, e, 1 < arguments.length, null, !0)
},
removeData: function(e) {
return this.each(function() {
J.remove(this, e)
})
}
}), k.extend({
queue: function(e, t, n) {
var r;
if (e) return t = (t || "fx") + "queue", r = Q.get(e, t), n && (!r || Array.isArray(n) ? r = Q.access(e, t, k.makeArray(n)) : r.push(n)), r || []
},
dequeue: function(e, t) {
t = t || "fx";
var n = k.queue(e, t),
r = n.length,
i = n.shift(),
o = k._queueHooks(e, t);
"inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, function() {
k.dequeue(e, t)
}, o)), !r && o && o.empty.fire()
},
_queueHooks: function(e, t) {
var n = t + "queueHooks";
return Q.get(e, n) || Q.access(e, n, {
empty: k.Callbacks("once memory").add(function() {
Q.remove(e, [t + "queue", n])
})
})
}
}), k.fn.extend({
queue: function(t, n) {
var e = 2;
return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? k.queue(this[0], t) : void 0 === n ? this : this.each(function() {
var e = k.queue(this, t, n);
k._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && k.dequeue(this, t)
})
},
dequeue: function(e) {
return this.each(function() {
k.dequeue(this, e)
})
},
clearQueue: function(e) {
return this.queue(e || "fx", [])
},
promise: function(e, t) {
var n, r = 1,
i = k.Deferred(),
o = this,
a = this.length,
s = function() {
--r || i.resolveWith(o, [o])
};
"string" != typeof e && (t = e, e = void 0), e = e || "fx";
while (a--)(n = Q.get(o[a], e + "queueHooks")) && n.empty && (r++, n.empty.add(s));
return s(), i.promise(t)
}
});
var te = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
ne = new RegExp("^(?:([+-])=|)(" + te + ")([a-z%]*)$", "i"),
re = ["Top", "Right", "Bottom", "Left"],
ie = E.documentElement,
oe = function(e) {
return k.contains(e.ownerDocument, e)
},
ae = {
composed: !0
};
ie.getRootNode && (oe = function(e) {
return k.contains(e.ownerDocument, e) || e.getRootNode(ae) === e.ownerDocument
});
var se = function(e, t) {
return "none" === (e = t || e).style.display || "" === e.style.display && oe(e) && "none" === k.css(e, "display")
},
ue = function(e, t, n, r) {
var i, o, a = {};
for (o in t) a[o] = e.style[o], e.style[o] = t[o];
for (o in i = n.apply(e, r || []), t) e.style[o] = a[o];
return i
};
function le(e, t, n, r) {
var i, o, a = 20,
s = r ? function() {
return r.cur()
} : function() {
return k.css(e, t, "")
},
u = s(),
l = n && n[3] || (k.cssNumber[t] ? "" : "px"),
c = e.nodeType && (k.cssNumber[t] || "px" !== l && +u) && ne.exec(k.css(e, t));
if (c && c[3] !== l) {
u /= 2, l = l || c[3], c = +u || 1;
while (a--) k.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0), c /= o;
c *= 2, k.style(e, t, c + l), n = n || []
}
return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i
}
var ce = {};
function fe(e, t) {
for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)(r = e[c]).style && (n = r.style.display, t ? ("none" === n && (l[c] = Q.get(r, "display") || null, l[c] || (r.style.display = "")), "" === r.style.display && se(
r) && (l[c] = (u = a = o = void 0, a = (i = r).ownerDocument, s = i.nodeName, (u = ce[s]) || (o = a.body.appendChild(a.createElement(s)), u = k.css(o, "display"), o.parentNode.removeChild(o), "none" === u && (u = "block"),
ce[s] = u)))) : "none" !== n && (l[c] = "none", Q.set(r, "display", n)));
for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]);
return e
}
k.fn.extend({
show: function() {
return fe(this, !0)
},
hide: function() {
return fe(this)
},
toggle: function(e) {
return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() {
se(this) ? k(this).show() : k(this).hide()
})
}
});
var pe = /^(?:checkbox|radio)$/i,
de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i,
he = /^$|^module$|\/(?:java|ecma)script/i,
ge = {
option: [1, "<select multiple='multiple'>", "</select>"],
thead: [1, "<table>", "</table>"],
col: [2, "<table><colgroup>", "</colgroup></table>"],
tr: [2, "<table><tbody>", "</tbody></table>"],
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
_default: [0, "", ""]
};
function ve(e, t) {
var n;
return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && A(e, t) ? k.merge([e], n) : n
}
function ye(e, t) {
for (var n = 0, r = e.length; n < r; n++) Q.set(e[n], "globalEval", !t || Q.get(t[n], "globalEval"))
}
ge.optgroup = ge.option, ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead, ge.th = ge.td;
var me, xe, be = /<|&#?\w+;/;
function we(e, t, n, r, i) {
for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++)
if ((o = e[d]) || 0 === o)
if ("object" === w(o)) k.merge(p, o.nodeType ? [o] : o);
else if (be.test(o)) {
a = a || f.appendChild(t.createElement("div")), s = (de.exec(o) || ["", ""])[1].toLowerCase(), u = ge[s] || ge._default, a.innerHTML = u[1] + k.htmlPrefilter(o) + u[2], c = u[0];
while (c--) a = a.lastChild;
k.merge(p, a.childNodes), (a = f.firstChild).textContent = ""
} else p.push(t.createTextNode(o));
f.textContent = "", d = 0;
while (o = p[d++])
if (r && -1 < k.inArray(o, r)) i && i.push(o);
else if (l = oe(o), a = ve(f.appendChild(o), "script"), l && ye(a), n) {
c = 0;
while (o = a[c++]) he.test(o.type || "") && n.push(o)
}
return f
}
me = E.createDocumentFragment().appendChild(E.createElement("div")), (xe = E.createElement("input")).setAttribute("type", "radio"), xe.setAttribute("checked", "checked"), xe.setAttribute("name", "t"), me.appendChild(xe), y
.checkClone = me.cloneNode(!0).cloneNode(!0).lastChild.checked, me.innerHTML = "<textarea>x</textarea>", y.noCloneChecked = !!me.cloneNode(!0).lastChild.defaultValue;
var Te = /^key/,
Ce = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
Ee = /^([^.]*)(?:\.(.+)|)/;
function ke() {
return !0
}
function Se() {
return !1
}
function Ne(e, t) {
return e === function() {
try {
return E.activeElement
} catch (e) {}
}() == ("focus" === t)
}
function Ae(e, t, n, r, i, o) {
var a, s;
if ("object" == typeof t) {
for (s in "string" != typeof n && (r = r || n, n = void 0), t) Ae(e, s, n, r, t[s], o);
return e
}
if (null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i) i = Se;
else if (!i) return e;
return 1 === o && (a = i, (i = function(e) {
return k().off(e), a.apply(this, arguments)
}).guid = a.guid || (a.guid = k.guid++)), e.each(function() {
k.event.add(this, t, i, r, n)
})
}
function De(e, i, o) {
o ? (Q.set(e, i, !1), k.event.add(e, i, {
namespace: !1,
handler: function(e) {
var t, n, r = Q.get(this, i);
if (1 & e.isTrigger && this[i]) {
if (r.length)(k.event.special[i] || {}).delegateType && e.stopPropagation();
else if (r = s.call(arguments), Q.set(this, i, r), t = o(this, i), this[i](), r !== (n = Q.get(this, i)) || t ? Q.set(this, i, !1) : n = {}, r !== n) return e.stopImmediatePropagation(), e.preventDefault(), n.value
} else r.length && (Q.set(this, i, {
value: k.event.trigger(k.extend(r[0], k.Event.prototype), r.slice(1), this)
}), e.stopImmediatePropagation())
}
})) : void 0 === Q.get(e, i) && k.event.add(e, i, ke)
}
k.event = {
global: {},
add: function(t, e, n, r, i) {
var o, a, s, u, l, c, f, p, d, h, g, v = Q.get(t);
if (v) {
n.handler && (n = (o = n).handler, i = o.selector), i && k.find.matchesSelector(ie, i), n.guid || (n.guid = k.guid++), (u = v.events) || (u = v.events = {}), (a = v.handle) || (a = v.handle = function(e) {
return "undefined" != typeof k && k.event.triggered !== e.type ? k.event.dispatch.apply(t, arguments) : void 0
}), l = (e = (e || "").match(R) || [""]).length;
while (l--) d = g = (s = Ee.exec(e[l]) || [])[1], h = (s[2] || "").split(".").sort(), d && (f = k.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = k.event.special[d] || {}, c = k.extend({
type: d,
origType: g,
data: r,
handler: n,
guid: n.guid,
selector: i,
needsContext: i && k.expr.match.needsContext.test(i),
namespace: h.join(".")
}, o), (p = u[d]) || ((p = u[d] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(t, r, h, a) || t.addEventListener && t.addEventListener(d, a)), f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n
.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), k.event.global[d] = !0)
}
},
remove: function(e, t, n, r, i) {
var o, a, s, u, l, c, f, p, d, h, g, v = Q.hasData(e) && Q.get(e);
if (v && (u = v.events)) {
l = (t = (t || "").match(R) || [""]).length;
while (l--)
if (d = g = (s = Ee.exec(t[l]) || [])[1], h = (s[2] || "").split(".").sort(), d) {
f = k.event.special[d] || {}, p = u[d = (r ? f.delegateType : f.bindType) || d] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = p.length;
while (o--) c = p[o], !i && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1), c.selector && p.delegateCount--, f.remove &&
f.remove.call(e, c));
a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || k.removeEvent(e, d, v.handle), delete u[d])
} else
for (d in u) k.event.remove(e, d + t[l], n, r, !0);
k.isEmptyObject(u) && Q.remove(e, "handle events")
}
},
dispatch: function(e) {
var t, n, r, i, o, a, s = k.event.fix(e),
u = new Array(arguments.length),
l = (Q.get(this, "events") || {})[s.type] || [],
c = k.event.special[s.type] || {};
for (u[0] = s, t = 1; t < arguments.length; t++) u[t] = arguments[t];
if (s.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, s)) {
a = k.event.handlers.call(this, s, l), t = 0;
while ((i = a[t++]) && !s.isPropagationStopped()) {
s.currentTarget = i.elem, n = 0;
while ((o = i.handlers[n++]) && !s.isImmediatePropagationStopped()) s.rnamespace && !1 !== o.namespace && !s.rnamespace.test(o.namespace) || (s.handleObj = o, s.data = o.data, void 0 !== (r = ((k.event.special[o
.origType] || {}).handle || o.handler).apply(i.elem, u)) && !1 === (s.result = r) && (s.preventDefault(), s.stopPropagation()))
}
return c.postDispatch && c.postDispatch.call(this, s), s.result
}
},
handlers: function(e, t) {
var n, r, i, o, a, s = [],
u = t.delegateCount,
l = e.target;
if (u && l.nodeType && !("click" === e.type && 1 <= e.button))
for (; l !== this; l = l.parentNode || this)
if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) {
for (o = [], a = {}, n = 0; n < u; n++) void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? -1 < k(i, this).index(l) : k.find(i, this, null, [l]).length), a[i] && o.push(r);
o.length && s.push({
elem: l,
handlers: o
})
} return l = this, u < t.length && s.push({
elem: l,
handlers: t.slice(u)
}), s
},
addProp: function(t, e) {
Object.defineProperty(k.Event.prototype, t, {
enumerable: !0,
configurable: !0,
get: m(e) ? function() {
if (this.originalEvent) return e(this.originalEvent)
} : function() {
if (this.originalEvent) return this.originalEvent[t]
},
set: function(e) {
Object.defineProperty(this, t, {
enumerable: !0,
configurable: !0,
writable: !0,
value: e
})
}
})
},
fix: function(e) {
return e[k.expando] ? e : new k.Event(e)
},
special: {
load: {
noBubble: !0
},
click: {
setup: function(e) {
var t = this || e;
return pe.test(t.type) && t.click && A(t, "input") && De(t, "click", ke), !1
},
trigger: function(e) {
var t = this || e;
return pe.test(t.type) && t.click && A(t, "input") && De(t, "click"), !0
},
_default: function(e) {
var t = e.target;
return pe.test(t.type) && t.click && A(t, "input") && Q.get(t, "click") || A(t, "a")
}
},
beforeunload: {
postDispatch: function(e) {
void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result)
}
}
}
}, k.removeEvent = function(e, t, n) {
e.removeEventListener && e.removeEventListener(t, n)
}, k.Event = function(e, t) {
if (!(this instanceof k.Event)) return new k.Event(e, t);
e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? ke : Se, this.target = e.target && 3 === e.target.nodeType ? e
.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && k.extend(this, t), this.timeStamp = e && e.timeStamp || Date.now(), this[k.expando] = !0
}, k.Event.prototype = {
constructor: k.Event,
isDefaultPrevented: Se,
isPropagationStopped: Se,
isImmediatePropagationStopped: Se,
isSimulated: !1,
preventDefault: function() {
var e = this.originalEvent;
this.isDefaultPrevented = ke, e && !this.isSimulated && e.preventDefault()
},
stopPropagation: function() {
var e = this.originalEvent;
this.isPropagationStopped = ke, e && !this.isSimulated && e.stopPropagation()
},
stopImmediatePropagation: function() {
var e = this.originalEvent;
this.isImmediatePropagationStopped = ke, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation()
}
}, k.each({
altKey: !0,
bubbles: !0,
cancelable: !0,
changedTouches: !0,
ctrlKey: !0,
detail: !0,
eventPhase: !0,
metaKey: !0,
pageX: !0,
pageY: !0,
shiftKey: !0,
view: !0,
"char": !0,
code: !0,
charCode: !0,
key: !0,
keyCode: !0,
button: !0,
buttons: !0,
clientX: !0,
clientY: !0,
offsetX: !0,
offsetY: !0,
pointerId: !0,
pointerType: !0,
screenX: !0,
screenY: !0,
targetTouches: !0,
toElement: !0,
touches: !0,
which: function(e) {
var t = e.button;
return null == e.which && Te.test(e.type) ? null != e.charCode ? e.charCode : e.keyCode : !e.which && void 0 !== t && Ce.test(e.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : e.which
}
}, k.event.addProp), k.each({
focus: "focusin",
blur: "focusout"
}, function(e, t) {
k.event.special[e] = {
setup: function() {
return De(this, e, Ne), !1
},
trigger: function() {
return De(this, e), !0
},
delegateType: t
}
}), k.each({
mouseenter: "mouseover",
mouseleave: "mouseout",
pointerenter: "pointerover",
pointerleave: "pointerout"
}, function(e, i) {
k.event.special[e] = {
delegateType: i,
bindType: i,
handle: function(e) {
var t, n = e.relatedTarget,
r = e.handleObj;
return n && (n === this || k.contains(this, n)) || (e.type = r.origType, t = r.handler.apply(this, arguments), e.type = i), t
}
}
}), k.fn.extend({
on: function(e, t, n, r) {
return Ae(this, e, t, n, r)
},
one: function(e, t, n, r) {
return Ae(this, e, t, n, r, 1)
},
off: function(e, t, n) {
var r, i;
if (e && e.preventDefault && e.handleObj) return r = e.handleObj, k(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this;
if ("object" == typeof e) {
for (i in e) this.off(i, t, e[i]);
return this
}
return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = Se), this.each(function() {
k.event.remove(this, e, n, t)
})
}
});
var je = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
qe = /<script|<style|<link/i,
Le = /checked\s*(?:[^=]|=\s*.checked.)/i,
He = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
function Oe(e, t) {
return A(e, "table") && A(11 !== t.nodeType ? t : t.firstChild, "tr") && k(e).children("tbody")[0] || e
}
function Pe(e) {
return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e
}
function Re(e) {
return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"), e
}
function Me(e, t) {
var n, r, i, o, a, s, u, l;
if (1 === t.nodeType) {
if (Q.hasData(e) && (o = Q.access(e), a = Q.set(t, o), l = o.events))
for (i in delete a.handle, a.events = {}, l)
for (n = 0, r = l[i].length; n < r; n++) k.event.add(t, i, l[i][n]);
J.hasData(e) && (s = J.access(e), u = k.extend({}, s), J.set(t, u))
}
}
function Ie(n, r, i, o) {
r = g.apply([], r);
var e, t, a, s, u, l, c = 0,
f = n.length,
p = f - 1,
d = r[0],
h = m(d);
if (h || 1 < f && "string" == typeof d && !y.checkClone && Le.test(d)) return n.each(function(e) {
var t = n.eq(e);
h && (r[0] = d.call(this, e, t.html())), Ie(t, r, i, o)
});
if (f && (t = (e = we(r, n[0].ownerDocument, !1, n, o)).firstChild, 1 === e.childNodes.length && (e = t), t || o)) {
for (s = (a = k.map(ve(e, "script"), Pe)).length; c < f; c++) u = e, c !== p && (u = k.clone(u, !0, !0), s && k.merge(a, ve(u, "script"))), i.call(n[c], u, c);
if (s)
for (l = a[a.length - 1].ownerDocument, k.map(a, Re), c = 0; c < s; c++) u = a[c], he.test(u.type || "") && !Q.access(u, "globalEval") && k.contains(l, u) && (u.src && "module" !== (u.type || "").toLowerCase() ? k._evalUrl && !u
.noModule && k._evalUrl(u.src, {
nonce: u.nonce || u.getAttribute("nonce")
}) : b(u.textContent.replace(He, ""), u, l))
}
return n
}
function We(e, t, n) {
for (var r, i = t ? k.filter(t, e) : e, o = 0; null != (r = i[o]); o++) n || 1 !== r.nodeType || k.cleanData(ve(r)), r.parentNode && (n && oe(r) && ye(ve(r, "script")), r.parentNode.removeChild(r));
return e
}
k.extend({
htmlPrefilter: function(e) {
return e.replace(je, "<$1></$2>")
},
clone: function(e, t, n) {
var r, i, o, a, s, u, l, c = e.cloneNode(!0),
f = oe(e);
if (!(y.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || k.isXMLDoc(e)))
for (a = ve(c), r = 0, i = (o = ve(e)).length; r < i; r++) s = o[r], u = a[r], void 0, "input" === (l = u.nodeName.toLowerCase()) && pe.test(s.type) ? u.checked = s.checked : "input" !== l && "textarea" !== l || (u
.defaultValue = s.defaultValue);
if (t)
if (n)
for (o = o || ve(e), a = a || ve(c), r = 0, i = o.length; r < i; r++) Me(o[r], a[r]);
else Me(e, c);
return 0 < (a = ve(c, "script")).length && ye(a, !f && ve(e, "script")), c
},
cleanData: function(e) {
for (var t, n, r, i = k.event.special, o = 0; void 0 !== (n = e[o]); o++)
if (G(n)) {
if (t = n[Q.expando]) {
if (t.events)
for (r in t.events) i[r] ? k.event.remove(n, r) : k.removeEvent(n, r, t.handle);
n[Q.expando] = void 0
}
n[J.expando] && (n[J.expando] = void 0)
}
}
}), k.fn.extend({
detach: function(e) {
return We(this, e, !0)
},
remove: function(e) {
return We(this, e)
},
text: function(e) {
return _(this, function(e) {
return void 0 === e ? k.text(this) : this.empty().each(function() {
1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e)
})
}, null, e, arguments.length)
},
append: function() {
return Ie(this, arguments, function(e) {
1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || Oe(this, e).appendChild(e)
})
},
prepend: function() {
return Ie(this, arguments, function(e) {
if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
var t = Oe(this, e);
t.insertBefore(e, t.firstChild)
}
})
},
before: function() {
return Ie(this, arguments, function(e) {
this.parentNode && this.parentNode.insertBefore(e, this)
})
},
after: function() {
return Ie(this, arguments, function(e) {
this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
})
},
empty: function() {
for (var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (k.cleanData(ve(e, !1)), e.textContent = "");
return this
},
clone: function(e, t) {
return e = null != e && e, t = null == t ? e : t, this.map(function() {
return k.clone(this, e, t)
})
},
html: function(e) {
return _(this, function(e) {
var t = this[0] || {},
n = 0,
r = this.length;
if (void 0 === e && 1 === t.nodeType) return t.innerHTML;
if ("string" == typeof e && !qe.test(e) && !ge[(de.exec(e) || ["", ""])[1].toLowerCase()]) {
e = k.htmlPrefilter(e);
try {
for (; n < r; n++) 1 === (t = this[n] || {}).nodeType && (k.cleanData(ve(t, !1)), t.innerHTML = e);
t = 0
} catch (e) {}
}
t && this.empty().append(e)
}, null, e, arguments.length)
},
replaceWith: function() {
var n = [];
return Ie(this, arguments, function(e) {
var t = this.parentNode;
k.inArray(this, n) < 0 && (k.cleanData(ve(this)), t && t.replaceChild(e, this))
}, n)
}
}), k.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function(e, a) {
k.fn[e] = function(e) {
for (var t, n = [], r = k(e), i = r.length - 1, o = 0; o <= i; o++) t = o === i ? this : this.clone(!0), k(r[o])[a](t), u.apply(n, t.get());
return this.pushStack(n)
}
});
var $e = new RegExp("^(" + te + ")(?!px)[a-z%]+$", "i"),
Fe = function(e) {
var t = e.ownerDocument.defaultView;
return t && t.opener || (t = C), t.getComputedStyle(e)
},
Be = new RegExp(re.join("|"), "i");
function _e(e, t, n) {
var r, i, o, a, s = e.style;
return (n = n || Fe(e)) && ("" !== (a = n.getPropertyValue(t) || n[t]) || oe(e) || (a = k.style(e, t)), !y.pixelBoxStyles() && $e.test(a) && Be.test(t) && (r = s.width, i = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s
.width = a, a = n.width, s.width = r, s.minWidth = i, s.maxWidth = o)), void 0 !== a ? a + "" : a
}
function ze(e, t) {
return {
get: function() {
if (!e()) return (this.get = t).apply(this, arguments);
delete this.get
}
}
}! function() {
function e() {
if (u) {
s.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", u.style.cssText =
"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", ie.appendChild(s).appendChild(u);
var e = C.getComputedStyle(u);
n = "1%" !== e.top, a = 12 === t(e.marginLeft), u.style.right = "60%", o = 36 === t(e.right), r = 36 === t(e.width), u.style.position = "absolute", i = 12 === t(u.offsetWidth / 3), ie.removeChild(s), u = null
}
}
function t(e) {
return Math.round(parseFloat(e))
}
var n, r, i, o, a, s = E.createElement("div"),
u = E.createElement("div");
u.style && (u.style.backgroundClip = "content-box", u.cloneNode(!0).style.backgroundClip = "", y.clearCloneStyle = "content-box" === u.style.backgroundClip, k.extend(y, {
boxSizingReliable: function() {
return e(), r
},
pixelBoxStyles: function() {
return e(), o
},
pixelPosition: function() {
return e(), n
},
reliableMarginLeft: function() {
return e(), a
},
scrollboxSize: function() {
return e(), i
}
}))
}();
var Ue = ["Webkit", "Moz", "ms"],
Xe = E.createElement("div").style,
Ve = {};
function Ge(e) {
var t = k.cssProps[e] || Ve[e];
return t || (e in Xe ? e : Ve[e] = function(e) {
var t = e[0].toUpperCase() + e.slice(1),
n = Ue.length;
while (n--)
if ((e = Ue[n] + t) in Xe) return e
}(e) || e)
}
var Ye = /^(none|table(?!-c[ea]).+)/,
Qe = /^--/,
Je = {
position: "absolute",
visibility: "hidden",
display: "block"
},
Ke = {
letterSpacing: "0",
fontWeight: "400"
};
function Ze(e, t, n) {
var r = ne.exec(t);
return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t
}
function et(e, t, n, r, i, o) {
var a = "width" === t ? 1 : 0,
s = 0,
u = 0;
if (n === (r ? "border" : "content")) return 0;
for (; a < 4; a += 2) "margin" === n && (u += k.css(e, n + re[a], !0, i)), r ? ("content" === n && (u -= k.css(e, "padding" + re[a], !0, i)), "margin" !== n && (u -= k.css(e, "border" + re[a] + "Width", !0, i))) : (u += k.css(e,
"padding" + re[a], !0, i), "padding" !== n ? u += k.css(e, "border" + re[a] + "Width", !0, i) : s += k.css(e, "border" + re[a] + "Width", !0, i));
return !r && 0 <= o && (u += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - u - s - .5)) || 0), u
}
function tt(e, t, n) {
var r = Fe(e),
i = (!y.boxSizingReliable() || n) && "border-box" === k.css(e, "boxSizing", !1, r),
o = i,
a = _e(e, t, r),
s = "offset" + t[0].toUpperCase() + t.slice(1);
if ($e.test(a)) {
if (!n) return a;
a = "auto"
}
return (!y.boxSizingReliable() && i || "auto" === a || !parseFloat(a) && "inline" === k.css(e, "display", !1, r)) && e.getClientRects().length && (i = "border-box" === k.css(e, "boxSizing", !1, r), (o = s in e) && (a = e[s])), (a =
parseFloat(a) || 0) + et(e, t, n || (i ? "border" : "content"), o, r, a) + "px"
}
function nt(e, t, n, r, i) {
return new nt.prototype.init(e, t, n, r, i)
}
k.extend({
cssHooks: {
opacity: {
get: function(e, t) {
if (t) {
var n = _e(e, "opacity");
return "" === n ? "1" : n
}
}
}
},
cssNumber: {
animationIterationCount: !0,
columnCount: !0,
fillOpacity: !0,
flexGrow: !0,
flexShrink: !0,
fontWeight: !0,
gridArea: !0,
gridColumn: !0,
gridColumnEnd: !0,
gridColumnStart: !0,
gridRow: !0,
gridRowEnd: !0,
gridRowStart: !0,
lineHeight: !0,
opacity: !0,
order: !0,
orphans: !0,
widows: !0,
zIndex: !0,
zoom: !0
},
cssProps: {},
style: function(e, t, n, r) {
if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
var i, o, a, s = V(t),
u = Qe.test(t),
l = e.style;
if (u || (t = Ge(s)), a = k.cssHooks[t] || k.cssHooks[s], void 0 === n) return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t];
"string" === (o = typeof n) && (i = ne.exec(n)) && i[1] && (n = le(e, t, i), o = "number"), null != n && n == n && ("number" !== o || u || (n += i && i[3] || (k.cssNumber[s] ? "" : "px")), y.clearCloneStyle || "" !== n ||
0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (u ? l.setProperty(t, n) : l[t] = n))
}
},
css: function(e, t, n, r) {
var i, o, a, s = V(t);
return Qe.test(t) || (t = Ge(s)), (a = k.cssHooks[t] || k.cssHooks[s]) && "get" in a && (i = a.get(e, !0, n)), void 0 === i && (i = _e(e, t, r)), "normal" === i && t in Ke && (i = Ke[t]), "" === n || n ? (o = parseFloat(i),
!0 === n || isFinite(o) ? o || 0 : i) : i
}
}), k.each(["height", "width"], function(e, u) {
k.cssHooks[u] = {
get: function(e, t, n) {
if (t) return !Ye.test(k.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? tt(e, u, n) : ue(e, Je, function() {
return tt(e, u, n)
})
},
set: function(e, t, n) {
var r, i = Fe(e),
o = !y.scrollboxSize() && "absolute" === i.position,
a = (o || n) && "border-box" === k.css(e, "boxSizing", !1, i),
s = n ? et(e, u, n, a, i) : 0;
return a && o && (s -= Math.ceil(e["offset" + u[0].toUpperCase() + u.slice(1)] - parseFloat(i[u]) - et(e, u, "border", !1, i) - .5)), s && (r = ne.exec(t)) && "px" !== (r[3] || "px") && (e.style[u] = t, t = k.css(e, u)),
Ze(0, t, s)
}
}
}), k.cssHooks.marginLeft = ze(y.reliableMarginLeft, function(e, t) {
if (t) return (parseFloat(_e(e, "marginLeft")) || e.getBoundingClientRect().left - ue(e, {
marginLeft: 0
}, function() {
return e.getBoundingClientRect().left
})) + "px"
}), k.each({
margin: "",
padding: "",
border: "Width"
}, function(i, o) {
k.cssHooks[i + o] = {
expand: function(e) {
for (var t = 0, n = {}, r = "string" == typeof e ? e.split(" ") : [e]; t < 4; t++) n[i + re[t] + o] = r[t] || r[t - 2] || r[0];
return n
}
}, "margin" !== i && (k.cssHooks[i + o].set = Ze)
}), k.fn.extend({
css: function(e, t) {
return _(this, function(e, t, n) {
var r, i, o = {},
a = 0;
if (Array.isArray(t)) {
for (r = Fe(e), i = t.length; a < i; a++) o[t[a]] = k.css(e, t[a], !1, r);
return o
}
return void 0 !== n ? k.style(e, t, n) : k.css(e, t)
}, e, t, 1 < arguments.length)
}
}), ((k.Tween = nt).prototype = {
constructor: nt,
init: function(e, t, n, r, i, o) {
this.elem = e, this.prop = n, this.easing = i || k.easing._default, this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = o || (k.cssNumber[n] ? "" : "px")
},
cur: function() {
var e = nt.propHooks[this.prop];
return e && e.get ? e.get(this) : nt.propHooks._default.get(this)
},
run: function(e) {
var t, n = nt.propHooks[this.prop];
return this.options.duration ? this.pos = t = k.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step &&
this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : nt.propHooks._default.set(this), this
}
}).init.prototype = nt.prototype, (nt.propHooks = {
_default: {
get: function(e) {
var t;
return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = k.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0
},
set: function(e) {
k.fx.step[e.prop] ? k.fx.step[e.prop](e) : 1 !== e.elem.nodeType || !k.cssHooks[e.prop] && null == e.elem.style[Ge(e.prop)] ? e.elem[e.prop] = e.now : k.style(e.elem, e.prop, e.now + e.unit)
}
}
}).scrollTop = nt.propHooks.scrollLeft = {
set: function(e) {
e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
}
}, k.easing = {
linear: function(e) {
return e
},
swing: function(e) {
return .5 - Math.cos(e * Math.PI) / 2
},
_default: "swing"
}, k.fx = nt.prototype.init, k.fx.step = {};
var rt, it, ot, at, st = /^(?:toggle|show|hide)$/,
ut = /queueHooks$/;
function lt() {
it && (!1 === E.hidden && C.requestAnimationFrame ? C.requestAnimationFrame(lt) : C.setTimeout(lt, k.fx.interval), k.fx.tick())
}
function ct() {
return C.setTimeout(function() {
rt = void 0
}), rt = Date.now()
}
function ft(e, t) {
var n, r = 0,
i = {
height: e
};
for (t = t ? 1 : 0; r < 4; r += 2 - t) i["margin" + (n = re[r])] = i["padding" + n] = e;
return t && (i.opacity = i.width = e), i
}
function pt(e, t, n) {
for (var r, i = (dt.tweeners[t] || []).concat(dt.tweeners["*"]), o = 0, a = i.length; o < a; o++)
if (r = i[o].call(n, t, e)) return r
}
function dt(o, e, t) {
var n, a, r = 0,
i = dt.prefilters.length,
s = k.Deferred().always(function() {
delete u.elem
}),
u = function() {
if (a) return !1;
for (var e = rt || ct(), t = Math.max(0, l.startTime + l.duration - e), n = 1 - (t / l.duration || 0), r = 0, i = l.tweens.length; r < i; r++) l.tweens[r].run(n);
return s.notifyWith(o, [l, n, t]), n < 1 && i ? t : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1)
},
l = s.promise({
elem: o,
props: k.extend({}, e),
opts: k.extend(!0, {
specialEasing: {},
easing: k.easing._default
}, t),
originalProperties: e,
originalOptions: t,
startTime: rt || ct(),
duration: t.duration,
tweens: [],
createTween: function(e, t) {
var n = k.Tween(o, l.opts, e, t, l.opts.specialEasing[e] || l.opts.easing);
return l.tweens.push(n), n
},
stop: function(e) {
var t = 0,
n = e ? l.tweens.length : 0;
if (a) return this;
for (a = !0; t < n; t++) l.tweens[t].run(1);
return e ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) : s.rejectWith(o, [l, e]), this
}
}),
c = l.props;
for (! function(e, t) {
var n, r, i, o, a;
for (n in e)
if (i = t[r = V(n)], o = e[n], Array.isArray(o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), (a = k.cssHooks[r]) && "expand" in a)
for (n in o = a.expand(o), delete e[r], o) n in e || (e[n] = o[n], t[n] = i);
else t[r] = i
}(c, l.opts.specialEasing); r < i; r++)
if (n = dt.prefilters[r].call(l, o, c, l.opts)) return m(n.stop) && (k._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), n;
return k.map(c, pt, l), m(l.opts.start) && l.opts.start.call(o, l), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always), k.fx.timer(k.extend(u, {
elem: o,
anim: l,
queue: l.opts.queue
})), l
}
k.Animation = k.extend(dt, {
tweeners: {
"*": [function(e, t) {
var n = this.createTween(e, t);
return le(n.elem, e, ne.exec(t), n), n
}]
},
tweener: function(e, t) {
m(e) ? (t = e, e = ["*"]) : e = e.match(R);
for (var n, r = 0, i = e.length; r < i; r++) n = e[r], dt.tweeners[n] = dt.tweeners[n] || [], dt.tweeners[n].unshift(t)
},
prefilters: [function(e, t, n) {
var r, i, o, a, s, u, l, c, f = "width" in t || "height" in t,
p = this,
d = {},
h = e.style,
g = e.nodeType && se(e),
v = Q.get(e, "fxshow");
for (r in n.queue || (null == (a = k._queueHooks(e, "fx")).unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function() {
a.unqueued || s()
}), a.unqueued++, p.always(function() {
p.always(function() {
a.unqueued--, k.queue(e, "fx").length || a.empty.fire()
})
})), t)
if (i = t[r], st.test(i)) {
if (delete t[r], o = o || "toggle" === i, i === (g ? "hide" : "show")) {
if ("show" !== i || !v || void 0 === v[r]) continue;
g = !0
}
d[r] = v && v[r] || k.style(e, r)
} if ((u = !k.isEmptyObject(t)) || !k.isEmptyObject(d))
for (r in f && 1 === e.nodeType && (n.overflow = [h.overflow, h.overflowX, h.overflowY], null == (l = v && v.display) && (l = Q.get(e, "display")), "none" === (c = k.css(e, "display")) && (l ? c = l : (fe([e], !0), l = e
.style.display || l, c = k.css(e, "display"), fe([e]))), ("inline" === c || "inline-block" === c && null != l) && "none" === k.css(e, "float") && (u || (p.done(function() {
h.display = l
}), null == l && (c = h.display, l = "none" === c ? "" : c)), h.display = "inline-block")), n.overflow && (h.overflow = "hidden", p.always(function() {
h.overflow = n.overflow[0], h.overflowX = n.overflow[1], h.overflowY = n.overflow[2]
})), u = !1, d) u || (v ? "hidden" in v && (g = v.hidden) : v = Q.access(e, "fxshow", {
display: l
}), o && (v.hidden = !g), g && fe([e], !0), p.done(function() {
for (r in g || fe([e]), Q.remove(e, "fxshow"), d) k.style(e, r, d[r])
})), u = pt(g ? v[r] : 0, r, p), r in v || (v[r] = u.start, g && (u.end = u.start, u.start = 0))
}],
prefilter: function(e, t) {
t ? dt.prefilters.unshift(e) : dt.prefilters.push(e)
}
}), k.speed = function(e, t, n) {
var r = e && "object" == typeof e ? k.extend({}, e) : {
complete: n || !n && t || m(e) && e,
duration: e,
easing: n && t || t && !m(t) && t
};
return k.fx.off ? r.duration = 0 : "number" != typeof r.duration && (r.duration in k.fx.speeds ? r.duration = k.fx.speeds[r.duration] : r.duration = k.fx.speeds._default), null != r.queue && !0 !== r.queue || (r.queue = "fx"), r
.old = r.complete, r.complete = function() {
m(r.old) && r.old.call(this), r.queue && k.dequeue(this, r.queue)
}, r
}, k.fn.extend({
fadeTo: function(e, t, n, r) {
return this.filter(se).css("opacity", 0).show().end().animate({
opacity: t
}, e, n, r)
},
animate: function(t, e, n, r) {
var i = k.isEmptyObject(t),
o = k.speed(e, n, r),
a = function() {
var e = dt(this, k.extend({}, t), o);
(i || Q.get(this, "finish")) && e.stop(!0)
};
return a.finish = a, i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a)
},
stop: function(i, e, o) {
var a = function(e) {
var t = e.stop;
delete e.stop, t(o)
};
return "string" != typeof i && (o = e, e = i, i = void 0), e && !1 !== i && this.queue(i || "fx", []), this.each(function() {
var e = !0,
t = null != i && i + "queueHooks",
n = k.timers,
r = Q.get(this);
if (t) r[t] && r[t].stop && a(r[t]);
else
for (t in r) r[t] && r[t].stop && ut.test(t) && a(r[t]);
for (t = n.length; t--;) n[t].elem !== this || null != i && n[t].queue !== i || (n[t].anim.stop(o), e = !1, n.splice(t, 1));
!e && o || k.dequeue(this, i)
})
},
finish: function(a) {
return !1 !== a && (a = a || "fx"), this.each(function() {
var e, t = Q.get(this),
n = t[a + "queue"],
r = t[a + "queueHooks"],
i = k.timers,
o = n ? n.length : 0;
for (t.finish = !0, k.queue(this, a, []), r && r.stop && r.stop.call(this, !0), e = i.length; e--;) i[e].elem === this && i[e].queue === a && (i[e].anim.stop(!0), i.splice(e, 1));
for (e = 0; e < o; e++) n[e] && n[e].finish && n[e].finish.call(this);
delete t.finish
})
}
}), k.each(["toggle", "show", "hide"], function(e, r) {
var i = k.fn[r];
k.fn[r] = function(e, t, n) {
return null == e || "boolean" == typeof e ? i.apply(this, arguments) : this.animate(ft(r, !0), e, t, n)
}
}), k.each({
slideDown: ft("show"),
slideUp: ft("hide"),
slideToggle: ft("toggle"),
fadeIn: {
opacity: "show"
},
fadeOut: {
opacity: "hide"
},
fadeToggle: {
opacity: "toggle"
}
}, function(e, r) {
k.fn[e] = function(e, t, n) {
return this.animate(r, e, t, n)
}
}), k.timers = [], k.fx.tick = function() {
var e, t = 0,
n = k.timers;
for (rt = Date.now(); t < n.length; t++)(e = n[t])() || n[t] !== e || n.splice(t--, 1);
n.length || k.fx.stop(), rt = void 0
}, k.fx.timer = function(e) {
k.timers.push(e), k.fx.start()
}, k.fx.interval = 13, k.fx.start = function() {
it || (it = !0, lt())
}, k.fx.stop = function() {
it = null
}, k.fx.speeds = {
slow: 600,
fast: 200,
_default: 400
}, k.fn.delay = function(r, e) {
return r = k.fx && k.fx.speeds[r] || r, e = e || "fx", this.queue(e, function(e, t) {
var n = C.setTimeout(e, r);
t.stop = function() {
C.clearTimeout(n)
}
})
}, ot = E.createElement("input"), at = E.createElement("select").appendChild(E.createElement("option")), ot.type = "checkbox", y.checkOn = "" !== ot.value, y.optSelected = at.selected, (ot = E.createElement("input")).value = "t", ot
.type = "radio", y.radioValue = "t" === ot.value;
var ht, gt = k.expr.attrHandle;
k.fn.extend({
attr: function(e, t) {
return _(this, k.attr, e, t, 1 < arguments.length)
},
removeAttr: function(e) {
return this.each(function() {
k.removeAttr(this, e)
})
}
}), k.extend({
attr: function(e, t, n) {
var r, i, o = e.nodeType;
if (3 !== o && 8 !== o && 2 !== o) return "undefined" == typeof e.getAttribute ? k.prop(e, t, n) : (1 === o && k.isXMLDoc(e) || (i = k.attrHooks[t.toLowerCase()] || (k.expr.match.bool.test(t) ? ht : void 0)), void 0 !== n ?
null === n ? void k.removeAttr(e, t) : i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : i && "get" in i && null !== (r = i.get(e, t)) ? r : null == (r = k.find.attr(e, t)) ?
void 0 : r)
},
attrHooks: {
type: {
set: function(e, t) {
if (!y.radioValue && "radio" === t && A(e, "input")) {
var n = e.value;
return e.setAttribute("type", t), n && (e.value = n), t
}
}
}
},
removeAttr: function(e, t) {
var n, r = 0,
i = t && t.match(R);
if (i && 1 === e.nodeType)
while (n = i[r++]) e.removeAttribute(n)
}
}), ht = {
set: function(e, t, n) {
return !1 === t ? k.removeAttr(e, n) : e.setAttribute(n, n), n
}
}, k.each(k.expr.match.bool.source.match(/\w+/g), function(e, t) {
var a = gt[t] || k.find.attr;
gt[t] = function(e, t, n) {
var r, i, o = t.toLowerCase();
return n || (i = gt[o], gt[o] = r, r = null != a(e, t, n) ? o : null, gt[o] = i), r
}
});
var vt = /^(?:input|select|textarea|button)$/i,
yt = /^(?:a|area)$/i;
function mt(e) {
return (e.match(R) || []).join(" ")
}
function xt(e) {
return e.getAttribute && e.getAttribute("class") || ""
}
function bt(e) {
return Array.isArray(e) ? e : "string" == typeof e && e.match(R) || []
}
k.fn.extend({
prop: function(e, t) {
return _(this, k.prop, e, t, 1 < arguments.length)
},
removeProp: function(e) {
return this.each(function() {
delete this[k.propFix[e] || e]
})
}
}), k.extend({
prop: function(e, t, n) {
var r, i, o = e.nodeType;
if (3 !== o && 8 !== o && 2 !== o) return 1 === o && k.isXMLDoc(e) || (t = k.propFix[t] || t, i = k.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i &&
null !== (r = i.get(e, t)) ? r : e[t]
},
propHooks: {
tabIndex: {
get: function(e) {
var t = k.find.attr(e, "tabindex");
return t ? parseInt(t, 10) : vt.test(e.nodeName) || yt.test(e.nodeName) && e.href ? 0 : -1
}
}
},
propFix: {
"for": "htmlFor",
"class": "className"
}
}), y.optSelected || (k.propHooks.selected = {
get: function(e) {
var t = e.parentNode;
return t && t.parentNode && t.parentNode.selectedIndex, null
},
set: function(e) {
var t = e.parentNode;
t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex)
}
}), k.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
k.propFix[this.toLowerCase()] = this
}), k.fn.extend({
addClass: function(t) {
var e, n, r, i, o, a, s, u = 0;
if (m(t)) return this.each(function(e) {
k(this).addClass(t.call(this, e, xt(this)))
});
if ((e = bt(t)).length)
while (n = this[u++])
if (i = xt(n), r = 1 === n.nodeType && " " + mt(i) + " ") {
a = 0;
while (o = e[a++]) r.indexOf(" " + o + " ") < 0 && (r += o + " ");
i !== (s = mt(r)) && n.setAttribute("class", s)
} return this
},
removeClass: function(t) {
var e, n, r, i, o, a, s, u = 0;
if (m(t)) return this.each(function(e) {
k(this).removeClass(t.call(this, e, xt(this)))
});
if (!arguments.length) return this.attr("class", "");
if ((e = bt(t)).length)
while (n = this[u++])
if (i = xt(n), r = 1 === n.nodeType && " " + mt(i) + " ") {
a = 0;
while (o = e[a++])
while (-1 < r.indexOf(" " + o + " ")) r = r.replace(" " + o + " ", " ");
i !== (s = mt(r)) && n.setAttribute("class", s)
} return this
},
toggleClass: function(i, t) {
var o = typeof i,
a = "string" === o || Array.isArray(i);
return "boolean" == typeof t && a ? t ? this.addClass(i) : this.removeClass(i) : m(i) ? this.each(function(e) {
k(this).toggleClass(i.call(this, e, xt(this), t), t)
}) : this.each(function() {
var e, t, n, r;
if (a) {
t = 0, n = k(this), r = bt(i);
while (e = r[t++]) n.hasClass(e) ? n.removeClass(e) : n.addClass(e)
} else void 0 !== i && "boolean" !== o || ((e = xt(this)) && Q.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === i ? "" : Q.get(this, "__className__") || ""))
})
},
hasClass: function(e) {
var t, n, r = 0;
t = " " + e + " ";
while (n = this[r++])
if (1 === n.nodeType && -1 < (" " + mt(xt(n)) + " ").indexOf(t)) return !0;
return !1
}
});
var wt = /\r/g;
k.fn.extend({
val: function(n) {
var r, e, i, t = this[0];
return arguments.length ? (i = m(n), this.each(function(e) {
var t;
1 === this.nodeType && (null == (t = i ? n.call(this, e, k(this).val()) : n) ? t = "" : "number" == typeof t ? t += "" : Array.isArray(t) && (t = k.map(t, function(e) {
return null == e ? "" : e + ""
})), (r = k.valHooks[this.type] || k.valHooks[this.nodeName.toLowerCase()]) && "set" in r && void 0 !== r.set(this, t, "value") || (this.value = t))
})) : t ? (r = k.valHooks[t.type] || k.valHooks[t.nodeName.toLowerCase()]) && "get" in r && void 0 !== (e = r.get(t, "value")) ? e : "string" == typeof(e = t.value) ? e.replace(wt, "") : null == e ? "" : e : void 0
}
}), k.extend({
valHooks: {
option: {
get: function(e) {
var t = k.find.attr(e, "value");
return null != t ? t : mt(k.text(e))
}
},
select: {
get: function(e) {
var t, n, r, i = e.options,
o = e.selectedIndex,
a = "select-one" === e.type,
s = a ? null : [],
u = a ? o + 1 : i.length;
for (r = o < 0 ? u : a ? o : 0; r < u; r++)
if (((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !A(n.parentNode, "optgroup"))) {
if (t = k(n).val(), a) return t;
s.push(t)
} return s
},
set: function(e, t) {
var n, r, i = e.options,
o = k.makeArray(t),
a = i.length;
while (a--)((r = i[a]).selected = -1 < k.inArray(k.valHooks.option.get(r), o)) && (n = !0);
return n || (e.selectedIndex = -1), o
}
}
}
}), k.each(["radio", "checkbox"], function() {
k.valHooks[this] = {
set: function(e, t) {
if (Array.isArray(t)) return e.checked = -1 < k.inArray(k(e).val(), t)
}
}, y.checkOn || (k.valHooks[this].get = function(e) {
return null === e.getAttribute("value") ? "on" : e.value
})
}), y.focusin = "onfocusin" in C;
var Tt = /^(?:focusinfocus|focusoutblur)$/,
Ct = function(e) {
e.stopPropagation()
};
k.extend(k.event, {
trigger: function(e, t, n, r) {
var i, o, a, s, u, l, c, f, p = [n || E],
d = v.call(e, "type") ? e.type : e,
h = v.call(e, "namespace") ? e.namespace.split(".") : [];
if (o = f = a = n = n || E, 3 !== n.nodeType && 8 !== n.nodeType && !Tt.test(d + k.event.triggered) && (-1 < d.indexOf(".") && (d = (h = d.split(".")).shift(), h.sort()), u = d.indexOf(":") < 0 && "on" + d, (e = e[k
.expando] ? e : new k.Event(d, "object" == typeof e && e)).isTrigger = r ? 2 : 3, e.namespace = h.join("."), e.rnamespace = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result =
void 0, e.target || (e.target = n), t = null == t ? [e] : k.makeArray(t, [e]), c = k.event.special[d] || {}, r || !c.trigger || !1 !== c.trigger.apply(n, t))) {
if (!r && !c.noBubble && !x(n)) {
for (s = c.delegateType || d, Tt.test(s + d) || (o = o.parentNode); o; o = o.parentNode) p.push(o), a = o;
a === (n.ownerDocument || E) && p.push(a.defaultView || a.parentWindow || C)
}
i = 0;
while ((o = p[i++]) && !e.isPropagationStopped()) f = o, e.type = 1 < i ? s : c.bindType || d, (l = (Q.get(o, "events") || {})[e.type] && Q.get(o, "handle")) && l.apply(o, t), (l = u && o[u]) && l.apply && G(o) && (e
.result = l.apply(o, t), !1 === e.result && e.preventDefault());
return e.type = d, r || e.isDefaultPrevented() || c._default && !1 !== c._default.apply(p.pop(), t) || !G(n) || u && m(n[d]) && !x(n) && ((a = n[u]) && (n[u] = null), k.event.triggered = d, e.isPropagationStopped() && f
.addEventListener(d, Ct), n[d](), e.isPropagationStopped() && f.removeEventListener(d, Ct), k.event.triggered = void 0, a && (n[u] = a)), e.result
}
},
simulate: function(e, t, n) {
var r = k.extend(new k.Event, n, {
type: e,
isSimulated: !0
});
k.event.trigger(r, null, t)
}
}), k.fn.extend({
trigger: function(e, t) {
return this.each(function() {
k.event.trigger(e, t, this)
})
},
triggerHandler: function(e, t) {
var n = this[0];
if (n) return k.event.trigger(e, t, n, !0)
}
}), y.focusin || k.each({
focus: "focusin",
blur: "focusout"
}, function(n, r) {
var i = function(e) {
k.event.simulate(r, e.target, k.event.fix(e))
};
k.event.special[r] = {
setup: function() {
var e = this.ownerDocument || this,
t = Q.access(e, r);
t || e.addEventListener(n, i, !0), Q.access(e, r, (t || 0) + 1)
},
teardown: function() {
var e = this.ownerDocument || this,
t = Q.access(e, r) - 1;
t ? Q.access(e, r, t) : (e.removeEventListener(n, i, !0), Q.remove(e, r))
}
}
});
var Et = C.location,
kt = Date.now(),
St = /\?/;
k.parseXML = function(e) {
var t;
if (!e || "string" != typeof e) return null;
try {
t = (new C.DOMParser).parseFromString(e, "text/xml")
} catch (e) {
t = void 0
}
return t && !t.getElementsByTagName("parsererror").length || k.error("Invalid XML: " + e), t
};
var Nt = /\[\]$/,
At = /\r?\n/g,
Dt = /^(?:submit|button|image|reset|file)$/i,
jt = /^(?:input|select|textarea|keygen)/i;
function qt(n, e, r, i) {
var t;
if (Array.isArray(e)) k.each(e, function(e, t) {
r || Nt.test(n) ? i(n, t) : qt(n + "[" + ("object" == typeof t && null != t ? e : "") + "]", t, r, i)
});
else if (r || "object" !== w(e)) i(n, e);
else
for (t in e) qt(n + "[" + t + "]", e[t], r, i)
}
k.param = function(e, t) {
var n, r = [],
i = function(e, t) {
var n = m(t) ? t() : t;
r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n)
};
if (null == e) return "";
if (Array.isArray(e) || e.jquery && !k.isPlainObject(e)) k.each(e, function() {
i(this.name, this.value)
});
else
for (n in e) qt(n, e[n], t, i);
return r.join("&")
}, k.fn.extend({
serialize: function() {
return k.param(this.serializeArray())
},
serializeArray: function() {
return this.map(function() {
var e = k.prop(this, "elements");
return e ? k.makeArray(e) : this
}).filter(function() {
var e = this.type;
return this.name && !k(this).is(":disabled") && jt.test(this.nodeName) && !Dt.test(e) && (this.checked || !pe.test(e))
}).map(function(e, t) {
var n = k(this).val();
return null == n ? null : Array.isArray(n) ? k.map(n, function(e) {
return {
name: t.name,
value: e.replace(At, "\r\n")
}
}) : {
name: t.name,
value: n.replace(At, "\r\n")
}
}).get()
}
});
var Lt = /%20/g,
Ht = /#.*$/,
Ot = /([?&])_=[^&]*/,
Pt = /^(.*?):[ \t]*([^\r\n]*)$/gm,
Rt = /^(?:GET|HEAD)$/,
Mt = /^\/\//,
It = {},
Wt = {},
$t = "*/".concat("*"),
Ft = E.createElement("a");
function Bt(o) {
return function(e, t) {
"string" != typeof e && (t = e, e = "*");
var n, r = 0,
i = e.toLowerCase().match(R) || [];
if (m(t))
while (n = i[r++]) "+" === n[0] ? (n = n.slice(1) || "*", (o[n] = o[n] || []).unshift(t)) : (o[n] = o[n] || []).push(t)
}
}
function _t(t, i, o, a) {
var s = {},
u = t === Wt;
function l(e) {
var r;
return s[e] = !0, k.each(t[e] || [], function(e, t) {
var n = t(i, o, a);
return "string" != typeof n || u || s[n] ? u ? !(r = n) : void 0 : (i.dataTypes.unshift(n), l(n), !1)
}), r
}
return l(i.dataTypes[0]) || !s["*"] && l("*")
}
function zt(e, t) {
var n, r, i = k.ajaxSettings.flatOptions || {};
for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]);
return r && k.extend(!0, e, r), e
}
Ft.href = Et.href, k.extend({
active: 0,
lastModified: {},
etag: {},
ajaxSettings: {
url: Et.href,
type: "GET",
isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),
global: !0,
processData: !0,
async: !0,
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
accepts: {
"*": $t,
text: "text/plain",
html: "text/html",
xml: "application/xml, text/xml",
json: "application/json, text/javascript"
},
contents: {
xml: /\bxml\b/,
html: /\bhtml/,
json: /\bjson\b/
},
responseFields: {
xml: "responseXML",
text: "responseText",
json: "responseJSON"
},
converters: {
"* text": String,
"text html": !0,
"text json": JSON.parse,
"text xml": k.parseXML
},
flatOptions: {
url: !0,
context: !0
}
},
ajaxSetup: function(e, t) {
return t ? zt(zt(e, k.ajaxSettings), t) : zt(k.ajaxSettings, e)
},
ajaxPrefilter: Bt(It),
ajaxTransport: Bt(Wt),
ajax: function(e, t) {
"object" == typeof e && (t = e, e = void 0), t = t || {};
var c, f, p, n, d, r, h, g, i, o, v = k.ajaxSetup({}, t),
y = v.context || v,
m = v.context && (y.nodeType || y.jquery) ? k(y) : k.event,
x = k.Deferred(),
b = k.Callbacks("once memory"),
w = v.statusCode || {},
a = {},
s = {},
u = "canceled",
T = {
readyState: 0,
getResponseHeader: function(e) {
var t;
if (h) {
if (!n) {
n = {};
while (t = Pt.exec(p)) n[t[1].toLowerCase() + " "] = (n[t[1].toLowerCase() + " "] || []).concat(t[2])
}
t = n[e.toLowerCase() + " "]
}
return null == t ? null : t.join(", ")
},
getAllResponseHeaders: function() {
return h ? p : null
},
setRequestHeader: function(e, t) {
return null == h && (e = s[e.toLowerCase()] = s[e.toLowerCase()] || e, a[e] = t), this
},
overrideMimeType: function(e) {
return null == h && (v.mimeType = e), this
},
statusCode: function(e) {
var t;
if (e)
if (h) T.always(e[T.status]);
else
for (t in e) w[t] = [w[t], e[t]];
return this
},
abort: function(e) {
var t = e || u;
return c && c.abort(t), l(0, t), this
}
};
if (x.promise(T), v.url = ((e || v.url || Et.href) + "").replace(Mt, Et.protocol + "//"), v.type = t.method || t.type || v.method || v.type, v.dataTypes = (v.dataType || "*").toLowerCase().match(R) || [""], null == v
.crossDomain) {
r = E.createElement("a");
try {
r.href = v.url, r.href = r.href, v.crossDomain = Ft.protocol + "//" + Ft.host != r.protocol + "//" + r.host
} catch (e) {
v.crossDomain = !0
}
}
if (v.data && v.processData && "string" != typeof v.data && (v.data = k.param(v.data, v.traditional)), _t(It, v, t, T), h) return T;
for (i in (g = k.event && v.global) && 0 == k.active++ && k.event.trigger("ajaxStart"), v.type = v.type.toUpperCase(), v.hasContent = !Rt.test(v.type), f = v.url.replace(Ht, ""), v.hasContent ? v.data && v.processData &&
0 === (v.contentType || "").indexOf("application/x-www-form-urlencoded") && (v.data = v.data.replace(Lt, "+")) : (o = v.url.slice(f.length), v.data && (v.processData || "string" == typeof v.data) && (f += (St.test(f) ?
"&" : "?") + v.data, delete v.data), !1 === v.cache && (f = f.replace(Ot, "$1"), o = (St.test(f) ? "&" : "?") + "_=" + kt++ + o), v.url = f + o), v.ifModified && (k.lastModified[f] && T.setRequestHeader(
"If-Modified-Since", k.lastModified[f]), k.etag[f] && T.setRequestHeader("If-None-Match", k.etag[f])), (v.data && v.hasContent && !1 !== v.contentType || t.contentType) && T.setRequestHeader("Content-Type", v
.contentType), T.setRequestHeader("Accept", v.dataTypes[0] && v.accepts[v.dataTypes[0]] ? v.accepts[v.dataTypes[0]] + ("*" !== v.dataTypes[0] ? ", " + $t + "; q=0.01" : "") : v.accepts["*"]), v.headers) T
.setRequestHeader(i, v.headers[i]);
if (v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h)) return T.abort();
if (u = "abort", b.add(v.complete), T.done(v.success), T.fail(v.error), c = _t(Wt, v, t, T)) {
if (T.readyState = 1, g && m.trigger("ajaxSend", [T, v]), h) return T;
v.async && 0 < v.timeout && (d = C.setTimeout(function() {
T.abort("timeout")
}, v.timeout));
try {
h = !1, c.send(a, l)
} catch (e) {
if (h) throw e;
l(-1, e)
}
} else l(-1, "No Transport");
function l(e, t, n, r) {
var i, o, a, s, u, l = t;
h || (h = !0, d && C.clearTimeout(d), c = void 0, p = r || "", T.readyState = 0 < e ? 4 : 0, i = 200 <= e && e < 300 || 304 === e, n && (s = function(e, t, n) {
var r, i, o, a, s = e.contents,
u = e.dataTypes;
while ("*" === u[0]) u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type"));
if (r)
for (i in s)
if (s[i] && s[i].test(r)) {
u.unshift(i);
break
} if (u[0] in n) o = u[0];
else {
for (i in n) {
if (!u[0] || e.converters[i + " " + u[0]]) {
o = i;
break
}
a || (a = i)
}
o = o || a
}
if (o) return o !== u[0] && u.unshift(o), n[o]
}(v, T, n)), s = function(e, t, n, r) {
var i, o, a, s, u, l = {},
c = e.dataTypes.slice();
if (c[1])
for (a in e.converters) l[a.toLowerCase()] = e.converters[a];
o = c.shift();
while (o)
if (e.responseFields[o] && (n[e.responseFields[o]] = t), !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), u = o, o = c.shift())
if ("*" === o) o = u;
else if ("*" !== u && u !== o) {
if (!(a = l[u + " " + o] || l["* " + o]))
for (i in l)
if ((s = i.split(" "))[1] === o && (a = l[u + " " + s[0]] || l["* " + s[0]])) {
!0 === a ? a = l[i] : !0 !== l[i] && (o = s[0], c.unshift(s[1]));
break
} if (!0 !== a)
if (a && e["throws"]) t = a(t);
else try {
t = a(t)
} catch (e) {
return {
state: "parsererror",
error: a ? e : "No conversion from " + u + " to " + o
}
}
}
return {
state: "success",
data: t
}
}(v, s, T, i), i ? (v.ifModified && ((u = T.getResponseHeader("Last-Modified")) && (k.lastModified[f] = u), (u = T.getResponseHeader("etag")) && (k.etag[f] = u)), 204 === e || "HEAD" === v.type ? l = "nocontent" :
304 === e ? l = "notmodified" : (l = s.state, o = s.data, i = !(a = s.error))) : (a = l, !e && l || (l = "error", e < 0 && (e = 0))), T.status = e, T.statusText = (t || l) + "", i ? x.resolveWith(y, [o, l, T]) : x
.rejectWith(y, [T, l, a]), T.statusCode(w), w = void 0, g && m.trigger(i ? "ajaxSuccess" : "ajaxError", [T, v, i ? o : a]), b.fireWith(y, [T, l]), g && (m.trigger("ajaxComplete", [T, v]), --k.active || k.event.trigger(
"ajaxStop")))
}
return T
},
getJSON: function(e, t, n) {
return k.get(e, t, n, "json")
},
getScript: function(e, t) {
return k.get(e, void 0, t, "script")
}
}), k.each(["get", "post"], function(e, i) {
k[i] = function(e, t, n, r) {
return m(t) && (r = r || n, n = t, t = void 0), k.ajax(k.extend({
url: e,
type: i,
dataType: r,
data: t,
success: n
}, k.isPlainObject(e) && e))
}
}), k._evalUrl = function(e, t) {
return k.ajax({
url: e,
type: "GET",
dataType: "script",
cache: !0,
async: !1,
global: !1,
converters: {
"text script": function() {}
},
dataFilter: function(e) {
k.globalEval(e, t)
}
})
}, k.fn.extend({
wrapAll: function(e) {
var t;
return this[0] && (m(e) && (e = e.call(this[0])), t = k(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function() {
var e = this;
while (e.firstElementChild) e = e.firstElementChild;
return e
}).append(this)), this
},
wrapInner: function(n) {
return m(n) ? this.each(function(e) {
k(this).wrapInner(n.call(this, e))
}) : this.each(function() {
var e = k(this),
t = e.contents();
t.length ? t.wrapAll(n) : e.append(n)
})
},
wrap: function(t) {
var n = m(t);
return this.each(function(e) {
k(this).wrapAll(n ? t.call(this, e) : t)
})
},
unwrap: function(e) {
return this.parent(e).not("body").each(function() {
k(this).replaceWith(this.childNodes)
}), this
}
}), k.expr.pseudos.hidden = function(e) {
return !k.expr.pseudos.visible(e)
}, k.expr.pseudos.visible = function(e) {
return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length)
}, k.ajaxSettings.xhr = function() {
try {
return new C.XMLHttpRequest
} catch (e) {}
};
var Ut = {
0: 200,
1223: 204
},
Xt = k.ajaxSettings.xhr();
y.cors = !!Xt && "withCredentials" in Xt, y.ajax = Xt = !!Xt, k.ajaxTransport(function(i) {
var o, a;
if (y.cors || Xt && !i.crossDomain) return {
send: function(e, t) {
var n, r = i.xhr();
if (r.open(i.type, i.url, i.async, i.username, i.password), i.xhrFields)
for (n in i.xhrFields) r[n] = i.xhrFields[n];
for (n in i.mimeType && r.overrideMimeType && r.overrideMimeType(i.mimeType), i.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"), e) r.setRequestHeader(n, e[n]);
o = function(e) {
return function() {
o && (o = a = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null, "abort" === e ? r.abort() : "error" === e ? "number" != typeof r.status ? t(0, "error") : t(r.status, r.statusText) : t(
Ut[r.status] || r.status, r.statusText, "text" !== (r.responseType || "text") || "string" != typeof r.responseText ? {
binary: r.response
} : {
text: r.responseText
}, r.getAllResponseHeaders()))
}
}, r.onload = o(), a = r.onerror = r.ontimeout = o("error"), void 0 !== r.onabort ? r.onabort = a : r.onreadystatechange = function() {
4 === r.readyState && C.setTimeout(function() {
o && a()
})
}, o = o("abort");
try {
r.send(i.hasContent && i.data || null)
} catch (e) {
if (o) throw e
}
},
abort: function() {
o && o()
}
}
}), k.ajaxPrefilter(function(e) {
e.crossDomain && (e.contents.script = !1)
}), k.ajaxSetup({
accepts: {
script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
},
contents: {
script: /\b(?:java|ecma)script\b/
},
converters: {
"text script": function(e) {
return k.globalEval(e), e
}
}
}), k.ajaxPrefilter("script", function(e) {
void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET")
}), k.ajaxTransport("script", function(n) {
var r, i;
if (n.crossDomain || n.scriptAttrs) return {
send: function(e, t) {
r = k("<script>").attr(n.scriptAttrs || {}).prop({
charset: n.scriptCharset,
src: n.url
}).on("load error", i = function(e) {
r.remove(), i = null, e && t("error" === e.type ? 404 : 200, e.type)
}), E.head.appendChild(r[0])
},
abort: function() {
i && i()
}
}
});
var Vt, Gt = [],
Yt = /(=)\?(?=&|$)|\?\?/;
k.ajaxSetup({
jsonp: "callback",
jsonpCallback: function() {
var e = Gt.pop() || k.expando + "_" + kt++;
return this[e] = !0, e
}
}), k.ajaxPrefilter("json jsonp", function(e, t, n) {
var r, i, o, a = !1 !== e.jsonp && (Yt.test(e.url) ? "url" : "string" == typeof e.data && 0 === (e.contentType || "").indexOf("application/x-www-form-urlencoded") && Yt.test(e.data) && "data");
if (a || "jsonp" === e.dataTypes[0]) return r = e.jsonpCallback = m(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback, a ? e[a] = e[a].replace(Yt, "$1" + r) : !1 !== e.jsonp && (e.url += (St.test(e.url) ? "&" : "?") + e
.jsonp + "=" + r), e.converters["script json"] = function() {
return o || k.error(r + " was not called"), o[0]
}, e.dataTypes[0] = "json", i = C[r], C[r] = function() {
o = arguments
}, n.always(function() {
void 0 === i ? k(C).removeProp(r) : C[r] = i, e[r] && (e.jsonpCallback = t.jsonpCallback, Gt.push(r)), o && m(i) && i(o[0]), o = i = void 0
}), "script"
}), y.createHTMLDocument = ((Vt = E.implementation.createHTMLDocument("").body).innerHTML = "<form></form><form></form>", 2 === Vt.childNodes.length), k.parseHTML = function(e, t, n) {
return "string" != typeof e ? [] : ("boolean" == typeof t && (n = t, t = !1), t || (y.createHTMLDocument ? ((r = (t = E.implementation.createHTMLDocument("")).createElement("base")).href = E.location.href, t.head.appendChild(r)) :
t = E), o = !n && [], (i = D.exec(e)) ? [t.createElement(i[1])] : (i = we([e], t, o), o && o.length && k(o).remove(), k.merge([], i.childNodes)));
var r, i, o
}, k.fn.load = function(e, t, n) {
var r, i, o, a = this,
s = e.indexOf(" ");
return -1 < s && (r = mt(e.slice(s)), e = e.slice(0, s)), m(t) ? (n = t, t = void 0) : t && "object" == typeof t && (i = "POST"), 0 < a.length && k.ajax({
url: e,
type: i || "GET",
dataType: "html",
data: t
}).done(function(e) {
o = arguments, a.html(r ? k("<div>").append(k.parseHTML(e)).find(r) : e)
}).always(n && function(e, t) {
a.each(function() {
n.apply(this, o || [e.responseText, t, e])
})
}), this
}, k.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) {
k.fn[t] = function(e) {
return this.on(t, e)
}
}), k.expr.pseudos.animated = function(t) {
return k.grep(k.timers, function(e) {
return t === e.elem
}).length
}, k.offset = {
setOffset: function(e, t, n) {
var r, i, o, a, s, u, l = k.css(e, "position"),
c = k(e),
f = {};
"static" === l && (e.style.position = "relative"), s = c.offset(), o = k.css(e, "top"), u = k.css(e, "left"), ("absolute" === l || "fixed" === l) && -1 < (o + u).indexOf("auto") ? (a = (r = c.position()).top, i = r.left) : (
a = parseFloat(o) || 0, i = parseFloat(u) || 0), m(t) && (t = t.call(e, n, k.extend({}, s))), null != t.top && (f.top = t.top - s.top + a), null != t.left && (f.left = t.left - s.left + i), "using" in t ? t.using.call(e,
f) : c.css(f)
}
}, k.fn.extend({
offset: function(t) {
if (arguments.length) return void 0 === t ? this : this.each(function(e) {
k.offset.setOffset(this, t, e)
});
var e, n, r = this[0];
return r ? r.getClientRects().length ? (e = r.getBoundingClientRect(), n = r.ownerDocument.defaultView, {
top: e.top + n.pageYOffset,
left: e.left + n.pageXOffset
}) : {
top: 0,
left: 0
} : void 0
},
position: function() {
if (this[0]) {
var e, t, n, r = this[0],
i = {
top: 0,
left: 0
};
if ("fixed" === k.css(r, "position")) t = r.getBoundingClientRect();
else {
t = this.offset(), n = r.ownerDocument, e = r.offsetParent || n.documentElement;
while (e && (e === n.body || e === n.documentElement) && "static" === k.css(e, "position")) e = e.parentNode;
e && e !== r && 1 === e.nodeType && ((i = k(e).offset()).top += k.css(e, "borderTopWidth", !0), i.left += k.css(e, "borderLeftWidth", !0))
}
return {
top: t.top - i.top - k.css(r, "marginTop", !0),
left: t.left - i.left - k.css(r, "marginLeft", !0)
}
}
},
offsetParent: function() {
return this.map(function() {
var e = this.offsetParent;
while (e && "static" === k.css(e, "position")) e = e.offsetParent;
return e || ie
})
}
}), k.each({
scrollLeft: "pageXOffset",
scrollTop: "pageYOffset"
}, function(t, i) {
var o = "pageYOffset" === i;
k.fn[t] = function(e) {
return _(this, function(e, t, n) {
var r;
if (x(e) ? r = e : 9 === e.nodeType && (r = e.defaultView), void 0 === n) return r ? r[i] : e[t];
r ? r.scrollTo(o ? r.pageXOffset : n, o ? n : r.pageYOffset) : e[t] = n
}, t, e, arguments.length)
}
}), k.each(["top", "left"], function(e, n) {
k.cssHooks[n] = ze(y.pixelPosition, function(e, t) {
if (t) return t = _e(e, n), $e.test(t) ? k(e).position()[n] + "px" : t
})
}), k.each({
Height: "height",
Width: "width"
}, function(a, s) {
k.each({
padding: "inner" + a,
content: s,
"": "outer" + a
}, function(r, o) {
k.fn[o] = function(e, t) {
var n = arguments.length && (r || "boolean" != typeof e),
i = r || (!0 === e || !0 === t ? "margin" : "border");
return _(this, function(e, t, n) {
var r;
return x(e) ? 0 === o.indexOf("outer") ? e["inner" + a] : e.document.documentElement["client" + a] : 9 === e.nodeType ? (r = e.documentElement, Math.max(e.body["scroll" + a], r["scroll" + a], e.body["offset" +
a], r["offset" + a], r["client" + a])) : void 0 === n ? k.css(e, t, i) : k.style(e, t, n, i)
}, s, n ? e : void 0, n)
}
})
}), k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function(e, n) {
k.fn[n] = function(e, t) {
return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n)
}
}), k.fn.extend({
hover: function(e, t) {
return this.mouseenter(e).mouseleave(t || e)
}
}), k.fn.extend({
bind: function(e, t, n) {
return this.on(e, null, t, n)
},
unbind: function(e, t) {
return this.off(e, null, t)
},
delegate: function(e, t, n, r) {
return this.on(t, e, n, r)
},
undelegate: function(e, t, n) {
return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
}
}), k.proxy = function(e, t) {
var n, r, i;
if ("string" == typeof t && (n = e[t], t = e, e = n), m(e)) return r = s.call(arguments, 2), (i = function() {
return e.apply(t || this, r.concat(s.call(arguments)))
}).guid = e.guid = e.guid || k.guid++, i
}, k.holdReady = function(e) {
e ? k.readyWait++ : k.ready(!0)
}, k.isArray = Array.isArray, k.parseJSON = JSON.parse, k.nodeName = A, k.isFunction = m, k.isWindow = x, k.camelCase = V, k.type = w, k.now = Date.now, k.isNumeric = function(e) {
var t = k.type(e);
return ("number" === t || "string" === t) && !isNaN(e - parseFloat(e))
}, "function" == typeof define && define.amd && define("jquery", [], function() {
return k
});
var Qt = C.jQuery,
Jt = C.$;
return k.noConflict = function(e) {
return C.$ === k && (C.$ = Jt), e && C.jQuery === k && (C.jQuery = Qt), k
}, e || (C.jQuery = C.$ = k), k
});
}
})
</script>
<script>
document.addEventListener("DOMContentLoaded", function() {
! function(factory) {
"function" == typeof define && define.amd && define.amd.jQuery ? define(["jquery"], factory) : factory("undefined" != typeof module && module.exports ? require("jquery") : jQuery)
}(function($) {
"use strict";
function init(options) {
return !options || void 0 !== options.allowPageScroll || void 0 === options.swipe && void 0 === options.swipeStatus || (options.allowPageScroll = NONE), void 0 !== options.click && void 0 === options.tap && (options.tap = options
.click), options || (options = {}), options = $.extend({}, $.fn.swipe.defaults, options), this.each(function() {
var $this = $(this),
plugin = $this.data(PLUGIN_NS);
plugin || (plugin = new TouchSwipe(this, options), $this.data(PLUGIN_NS, plugin))
})
}
function TouchSwipe(element, options) {
function touchStart(jqEvent) {
if (!(getTouchInProgress() || $(jqEvent.target).closest(options.excludedElements, $element).length > 0)) {
var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent;
if (!event.pointerType || "mouse" != event.pointerType || 0 != options.fallbackToMouseEvents) {
var ret, touches = event.touches,
evt = touches ? touches[0] : event;
return phase = PHASE_START, touches ? fingerCount = touches.length : options.preventDefaultEvents !== !1 && jqEvent.preventDefault(), distance = 0, direction = null, currentDirection = null, pinchDirection = null, duration = 0,
startTouchesDistance = 0, endTouchesDistance = 0, pinchZoom = 1, pinchDistance = 0, maximumsMap = createMaximumsData(), cancelMultiFingerRelease(), createFingerData(0, evt), !touches || fingerCount === options.fingers ||
options.fingers === ALL_FINGERS || hasPinches() ? (startTime = getTimeStamp(), 2 == fingerCount && (createFingerData(1, touches[1]), startTouchesDistance = endTouchesDistance = calculateTouchesDistance(fingerData[0].start,
fingerData[1].start)), (options.swipeStatus || options.pinchStatus) && (ret = triggerHandler(event, phase))) : ret = !1, ret === !1 ? (phase = PHASE_CANCEL, triggerHandler(event, phase), ret) : (options.hold && (
holdTimeout = setTimeout($.proxy(function() {
$element.trigger("hold", [event.target]), options.hold && (ret = options.hold.call($element, event, event.target))
}, this), options.longTapThreshold)), setTouchInProgress(!0), null)
}
}
}
function touchMove(jqEvent) {
var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent;
if (phase !== PHASE_END && phase !== PHASE_CANCEL && !inMultiFingerRelease()) {
var ret, touches = event.touches,
evt = touches ? touches[0] : event,
currentFinger = updateFingerData(evt);
if (endTime = getTimeStamp(), touches && (fingerCount = touches.length), options.hold && clearTimeout(holdTimeout), phase = PHASE_MOVE, 2 == fingerCount && (0 == startTouchesDistance ? (createFingerData(1, touches[1]),
startTouchesDistance = endTouchesDistance = calculateTouchesDistance(fingerData[0].start, fingerData[1].start)) : (updateFingerData(touches[1]), endTouchesDistance = calculateTouchesDistance(fingerData[0].end, fingerData[1]
.end), pinchDirection = calculatePinchDirection(fingerData[0].end, fingerData[1].end)), pinchZoom = calculatePinchZoom(startTouchesDistance, endTouchesDistance), pinchDistance = Math.abs(startTouchesDistance -
endTouchesDistance)), fingerCount === options.fingers || options.fingers === ALL_FINGERS || !touches || hasPinches()) {
if (direction = calculateDirection(currentFinger.start, currentFinger.end), currentDirection = calculateDirection(currentFinger.last, currentFinger.end), validateDefaultEvent(jqEvent, currentDirection), distance =
calculateDistance(currentFinger.start, currentFinger.end), duration = calculateDuration(), setMaxDistance(direction, distance), ret = triggerHandler(event, phase), !options.triggerOnTouchEnd || options.triggerOnTouchLeave) {
var inBounds = !0;
if (options.triggerOnTouchLeave) {
var bounds = getbounds(this);
inBounds = isInBounds(currentFinger.end, bounds)
}!options.triggerOnTouchEnd && inBounds ? phase = getNextPhase(PHASE_MOVE) : options.triggerOnTouchLeave && !inBounds && (phase = getNextPhase(PHASE_END)), phase != PHASE_CANCEL && phase != PHASE_END || triggerHandler(event,
phase)
}
} else phase = PHASE_CANCEL, triggerHandler(event, phase);
ret === !1 && (phase = PHASE_CANCEL, triggerHandler(event, phase))
}
}
function touchEnd(jqEvent) {
var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent,
touches = event.touches;
if (touches) {
if (touches.length && !inMultiFingerRelease()) return startMultiFingerRelease(event), !0;
if (touches.length && inMultiFingerRelease()) return !0
}
return inMultiFingerRelease() && (fingerCount = fingerCountAtRelease), endTime = getTimeStamp(), duration = calculateDuration(), didSwipeBackToCancel() || !validateSwipeDistance() ? (phase = PHASE_CANCEL, triggerHandler(event,
phase)) : options.triggerOnTouchEnd || options.triggerOnTouchEnd === !1 && phase === PHASE_MOVE ? (options.preventDefaultEvents !== !1 && jqEvent.preventDefault(), phase = PHASE_END, triggerHandler(event, phase)) : !options
.triggerOnTouchEnd && hasTap() ? (phase = PHASE_END, triggerHandlerForGesture(event, phase, TAP)) : phase === PHASE_MOVE && (phase = PHASE_CANCEL, triggerHandler(event, phase)), setTouchInProgress(!1), null
}
function touchCancel() {
fingerCount = 0, endTime = 0, startTime = 0, startTouchesDistance = 0, endTouchesDistance = 0, pinchZoom = 1, cancelMultiFingerRelease(), setTouchInProgress(!1)
}
function touchLeave(jqEvent) {
var event = jqEvent.originalEvent ? jqEvent.originalEvent : jqEvent;
options.triggerOnTouchLeave && (phase = getNextPhase(PHASE_END), triggerHandler(event, phase))
}
function removeListeners() {
$element.unbind(START_EV, touchStart), $element.unbind(CANCEL_EV, touchCancel), $element.unbind(MOVE_EV, touchMove), $element.unbind(END_EV, touchEnd), LEAVE_EV && $element.unbind(LEAVE_EV, touchLeave), setTouchInProgress(!1)
}
function getNextPhase(currentPhase) {
var nextPhase = currentPhase,
validTime = validateSwipeTime(),
validDistance = validateSwipeDistance(),
didCancel = didSwipeBackToCancel();
return !validTime || didCancel ? nextPhase = PHASE_CANCEL : !validDistance || currentPhase != PHASE_MOVE || options.triggerOnTouchEnd && !options.triggerOnTouchLeave ? !validDistance && currentPhase == PHASE_END && options
.triggerOnTouchLeave && (nextPhase = PHASE_CANCEL) : nextPhase = PHASE_END, nextPhase
}
function triggerHandler(event, phase) {
var ret, touches = event.touches;
return (didSwipe() || hasSwipes()) && (ret = triggerHandlerForGesture(event, phase, SWIPE)), (didPinch() || hasPinches()) && ret !== !1 && (ret = triggerHandlerForGesture(event, phase, PINCH)), didDoubleTap() && ret !== !1 ? ret =
triggerHandlerForGesture(event, phase, DOUBLE_TAP) : didLongTap() && ret !== !1 ? ret = triggerHandlerForGesture(event, phase, LONG_TAP) : didTap() && ret !== !1 && (ret = triggerHandlerForGesture(event, phase, TAP)), phase ===
PHASE_CANCEL && touchCancel(event), phase === PHASE_END && (touches ? touches.length || touchCancel(event) : touchCancel(event)), ret
}
function triggerHandlerForGesture(event, phase, gesture) {
var ret;
if (gesture == SWIPE) {
if ($element.trigger("swipeStatus", [phase, direction || null, distance || 0, duration || 0, fingerCount, fingerData, currentDirection]), options.swipeStatus && (ret = options.swipeStatus.call($element, event, phase, direction ||
null, distance || 0, duration || 0, fingerCount, fingerData, currentDirection), ret === !1)) return !1;
if (phase == PHASE_END && validateSwipe()) {
if (clearTimeout(singleTapTimeout), clearTimeout(holdTimeout), $element.trigger("swipe", [direction, distance, duration, fingerCount, fingerData, currentDirection]), options.swipe && (ret = options.swipe.call($element, event,
direction, distance, duration, fingerCount, fingerData, currentDirection), ret === !1)) return !1;
switch (direction) {
case LEFT:
$element.trigger("swipeLeft", [direction, distance, duration, fingerCount, fingerData, currentDirection]), options.swipeLeft && (ret = options.swipeLeft.call($element, event, direction, distance, duration, fingerCount,
fingerData, currentDirection));
break;
case RIGHT:
$element.trigger("swipeRight", [direction, distance, duration, fingerCount, fingerData, currentDirection]), options.swipeRight && (ret = options.swipeRight.call($element, event, direction, distance, duration, fingerCount,
fingerData, currentDirection));
break;
case UP:
$element.trigger("swipeUp", [direction, distance, duration, fingerCount, fingerData, currentDirection]), options.swipeUp && (ret = options.swipeUp.call($element, event, direction, distance, duration, fingerCount, fingerData,
currentDirection));
break;
case DOWN:
$element.trigger("swipeDown", [direction, distance, duration, fingerCount, fingerData, currentDirection]), options.swipeDown && (ret = options.swipeDown.call($element, event, direction, distance, duration, fingerCount,
fingerData, currentDirection))
}
}
}
if (gesture == PINCH) {
if ($element.trigger("pinchStatus", [phase, pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]), options.pinchStatus && (ret = options.pinchStatus.call($element, event, phase,
pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData), ret === !1)) return !1;
if (phase == PHASE_END && validatePinch()) switch (pinchDirection) {
case IN:
$element.trigger("pinchIn", [pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]), options.pinchIn && (ret = options.pinchIn.call($element, event, pinchDirection || null,
pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData));
break;
case OUT:
$element.trigger("pinchOut", [pinchDirection || null, pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData]), options.pinchOut && (ret = options.pinchOut.call($element, event, pinchDirection || null,
pinchDistance || 0, duration || 0, fingerCount, pinchZoom, fingerData))
}
}
return gesture == TAP ? phase !== PHASE_CANCEL && phase !== PHASE_END || (clearTimeout(singleTapTimeout), clearTimeout(holdTimeout), hasDoubleTap() && !inDoubleTap() ? (doubleTapStartTime = getTimeStamp(), singleTapTimeout =
setTimeout($.proxy(function() {
doubleTapStartTime = null, $element.trigger("tap", [event.target]), options.tap && (ret = options.tap.call($element, event, event.target))
}, this), options.doubleTapThreshold)) : (doubleTapStartTime = null, $element.trigger("tap", [event.target]), options.tap && (ret = options.tap.call($element, event, event.target)))) : gesture == DOUBLE_TAP ? phase !==
PHASE_CANCEL && phase !== PHASE_END || (clearTimeout(singleTapTimeout), clearTimeout(holdTimeout), doubleTapStartTime = null, $element.trigger("doubletap", [event.target]), options.doubleTap && (ret = options.doubleTap.call(
$element, event, event.target))) : gesture == LONG_TAP && (phase !== PHASE_CANCEL && phase !== PHASE_END || (clearTimeout(singleTapTimeout), doubleTapStartTime = null, $element.trigger("longtap", [event.target]), options
.longTap && (ret = options.longTap.call($element, event, event.target)))), ret
}
function validateSwipeDistance() {
var valid = !0;
return null !== options.threshold && (valid = distance >= options.threshold), valid
}
function didSwipeBackToCancel() {
var cancelled = !1;
return null !== options.cancelThreshold && null !== direction && (cancelled = getMaxDistance(direction) - distance >= options.cancelThreshold), cancelled
}
function validatePinchDistance() {
return null === options.pinchThreshold || pinchDistance >= options.pinchThreshold
}
function validateSwipeTime() {
var result;
return result = !options.maxTimeThreshold || !(duration >= options.maxTimeThreshold)
}
function validateDefaultEvent(jqEvent, direction) {
if (options.preventDefaultEvents !== !1)
if (options.allowPageScroll === NONE) jqEvent.preventDefault();
else {
var auto = options.allowPageScroll === AUTO;
switch (direction) {
case LEFT:
(options.swipeLeft && auto || !auto && options.allowPageScroll != HORIZONTAL) && jqEvent.preventDefault();
break;
case RIGHT:
(options.swipeRight && auto || !auto && options.allowPageScroll != HORIZONTAL) && jqEvent.preventDefault();
break;
case UP:
(options.swipeUp && auto || !auto && options.allowPageScroll != VERTICAL) && jqEvent.preventDefault();
break;
case DOWN:
(options.swipeDown && auto || !auto && options.allowPageScroll != VERTICAL) && jqEvent.preventDefault();
break;
case NONE:
}
}
}
function validatePinch() {
var hasCorrectFingerCount = validateFingers(),
hasEndPoint = validateEndPoint(),
hasCorrectDistance = validatePinchDistance();
return hasCorrectFingerCount && hasEndPoint && hasCorrectDistance
}
function hasPinches() {
return !!(options.pinchStatus || options.pinchIn || options.pinchOut)
}
function didPinch() {
return !(!validatePinch() || !hasPinches())
}
function validateSwipe() {
var hasValidTime = validateSwipeTime(),
hasValidDistance = validateSwipeDistance(),
hasCorrectFingerCount = validateFingers(),
hasEndPoint = validateEndPoint(),
didCancel = didSwipeBackToCancel(),
valid = !didCancel && hasEndPoint && hasCorrectFingerCount && hasValidDistance && hasValidTime;
return valid
}
function hasSwipes() {
return !!(options.swipe || options.swipeStatus || options.swipeLeft || options.swipeRight || options.swipeUp || options.swipeDown)
}
function didSwipe() {
return !(!validateSwipe() || !hasSwipes())
}
function validateFingers() {
return fingerCount === options.fingers || options.fingers === ALL_FINGERS || !SUPPORTS_TOUCH
}
function validateEndPoint() {
return 0 !== fingerData[0].end.x
}
function hasTap() {
return !!options.tap
}
function hasDoubleTap() {
return !!options.doubleTap
}
function hasLongTap() {
return !!options.longTap
}
function validateDoubleTap() {
if (null == doubleTapStartTime) return !1;
var now = getTimeStamp();
return hasDoubleTap() && now - doubleTapStartTime <= options.doubleTapThreshold
}
function inDoubleTap() {
return validateDoubleTap()
}
function validateTap() {
return (1 === fingerCount || !SUPPORTS_TOUCH) && (isNaN(distance) || distance < options.threshold)
}
function validateLongTap() {
return duration > options.longTapThreshold && distance < DOUBLE_TAP_THRESHOLD
}
function didTap() {
return !(!validateTap() || !hasTap())
}
function didDoubleTap() {
return !(!validateDoubleTap() || !hasDoubleTap())
}
function didLongTap() {
return !(!validateLongTap() || !hasLongTap())
}
function startMultiFingerRelease(event) {
previousTouchEndTime = getTimeStamp(), fingerCountAtRelease = event.touches.length + 1
}
function cancelMultiFingerRelease() {
previousTouchEndTime = 0, fingerCountAtRelease = 0
}
function inMultiFingerRelease() {
var withinThreshold = !1;
if (previousTouchEndTime) {
var diff = getTimeStamp() - previousTouchEndTime;
diff <= options.fingerReleaseThreshold && (withinThreshold = !0)
}
return withinThreshold
}
function getTouchInProgress() {
return !($element.data(PLUGIN_NS + "_intouch") !== !0)
}
function setTouchInProgress(val) {
$element && (val === !0 ? ($element.bind(MOVE_EV, touchMove), $element.bind(END_EV, touchEnd), LEAVE_EV && $element.bind(LEAVE_EV, touchLeave)) : ($element.unbind(MOVE_EV, touchMove, !1), $element.unbind(END_EV, touchEnd, !1),
LEAVE_EV && $element.unbind(LEAVE_EV, touchLeave, !1)), $element.data(PLUGIN_NS + "_intouch", val === !0))
}
function createFingerData(id, evt) {
var f = {
start: {
x: 0,
y: 0
},
last: {
x: 0,
y: 0
},
end: {
x: 0,
y: 0
}
};
return f.start.x = f.last.x = f.end.x = evt.pageX || evt.clientX, f.start.y = f.last.y = f.end.y = evt.pageY || evt.clientY, fingerData[id] = f, f
}
function updateFingerData(evt) {
var id = void 0 !== evt.identifier ? evt.identifier : 0,
f = getFingerData(id);
return null === f && (f = createFingerData(id, evt)), f.last.x = f.end.x, f.last.y = f.end.y, f.end.x = evt.pageX || evt.clientX, f.end.y = evt.pageY || evt.clientY, f
}
function getFingerData(id) {
return fingerData[id] || null
}
function setMaxDistance(direction, distance) {
direction != NONE && (distance = Math.max(distance, getMaxDistance(direction)), maximumsMap[direction].distance = distance)
}
function getMaxDistance(direction) {
if (maximumsMap[direction]) return maximumsMap[direction].distance
}
function createMaximumsData() {
var maxData = {};
return maxData[LEFT] = createMaximumVO(LEFT), maxData[RIGHT] = createMaximumVO(RIGHT), maxData[UP] = createMaximumVO(UP), maxData[DOWN] = createMaximumVO(DOWN), maxData
}
function createMaximumVO(dir) {
return {
direction: dir,
distance: 0
}
}
function calculateDuration() {
return endTime - startTime
}
function calculateTouchesDistance(startPoint, endPoint) {
var diffX = Math.abs(startPoint.x - endPoint.x),
diffY = Math.abs(startPoint.y - endPoint.y);
return Math.round(Math.sqrt(diffX * diffX + diffY * diffY))
}
function calculatePinchZoom(startDistance, endDistance) {
var percent = endDistance / startDistance * 1;
return percent.toFixed(2)
}
function calculatePinchDirection() {
return pinchZoom < 1 ? OUT : IN
}
function calculateDistance(startPoint, endPoint) {
return Math.round(Math.sqrt(Math.pow(endPoint.x - startPoint.x, 2) + Math.pow(endPoint.y - startPoint.y, 2)))
}
function calculateAngle(startPoint, endPoint) {
var x = startPoint.x - endPoint.x,
y = endPoint.y - startPoint.y,
r = Math.atan2(y, x),
angle = Math.round(180 * r / Math.PI);
return angle < 0 && (angle = 360 - Math.abs(angle)), angle
}
function calculateDirection(startPoint, endPoint) {
if (comparePoints(startPoint, endPoint)) return NONE;
var angle = calculateAngle(startPoint, endPoint);
return angle <= 45 && angle >= 0 ? LEFT : angle <= 360 && angle >= 315 ? LEFT : angle >= 135 && angle <= 225 ? RIGHT : angle > 45 && angle < 135 ? DOWN : UP
}
function getTimeStamp() {
var now = new Date;
return now.getTime()
}
function getbounds(el) {
el = $(el);
var offset = el.offset(),
bounds = {
left: offset.left,
right: offset.left + el.outerWidth(),
top: offset.top,
bottom: offset.top + el.outerHeight()
};
return bounds
}
function isInBounds(point, bounds) {
return point.x > bounds.left && point.x < bounds.right && point.y > bounds.top && point.y < bounds.bottom
}
function comparePoints(pointA, pointB) {
return pointA.x == pointB.x && pointA.y == pointB.y
}
var options = $.extend({}, options),
useTouchEvents = SUPPORTS_TOUCH || SUPPORTS_POINTER || !options.fallbackToMouseEvents,
START_EV = useTouchEvents ? SUPPORTS_POINTER ? SUPPORTS_POINTER_IE10 ? "MSPointerDown" : "pointerdown" : "touchstart" : "mousedown",
MOVE_EV = useTouchEvents ? SUPPORTS_POINTER ? SUPPORTS_POINTER_IE10 ? "MSPointerMove" : "pointermove" : "touchmove" : "mousemove",
END_EV = useTouchEvents ? SUPPORTS_POINTER ? SUPPORTS_POINTER_IE10 ? "MSPointerUp" : "pointerup" : "touchend" : "mouseup",
LEAVE_EV = useTouchEvents ? SUPPORTS_POINTER ? "mouseleave" : null : "mouseleave",
CANCEL_EV = SUPPORTS_POINTER ? SUPPORTS_POINTER_IE10 ? "MSPointerCancel" : "pointercancel" : "touchcancel",
distance = 0,
direction = null,
currentDirection = null,
duration = 0,
startTouchesDistance = 0,
endTouchesDistance = 0,
pinchZoom = 1,
pinchDistance = 0,
pinchDirection = 0,
maximumsMap = null,
$element = $(element),
phase = "start",
fingerCount = 0,
fingerData = {},
startTime = 0,
endTime = 0,
previousTouchEndTime = 0,
fingerCountAtRelease = 0,
doubleTapStartTime = 0,
singleTapTimeout = null,
holdTimeout = null;
try {
$element.bind(START_EV, touchStart), $element.bind(CANCEL_EV, touchCancel)
} catch (e) {
$.error("events not supported " + START_EV + "," + CANCEL_EV + " on jQuery.swipe")
}
this.enable = function() {
return this.disable(), $element.bind(START_EV, touchStart), $element.bind(CANCEL_EV, touchCancel), $element
}, this.disable = function() {
return removeListeners(), $element
}, this.destroy = function() {
removeListeners(), $element.data(PLUGIN_NS, null), $element = null
}, this.option = function(property, value) {
if ("object" == typeof property) options = $.extend(options, property);
else if (void 0 !== options[property]) {
if (void 0 === value) return options[property];
options[property] = value
} else {
if (!property) return options;
$.error("Option " + property + " does not exist on jQuery.swipe.options")
}
return null
}
}
var VERSION = "1.6.18",
LEFT = "left",
RIGHT = "right",
UP = "up",
DOWN = "down",
IN = "in",
OUT = "out",
NONE = "none",
AUTO = "auto",
SWIPE = "swipe",
PINCH = "pinch",
TAP = "tap",
DOUBLE_TAP = "doubletap",
LONG_TAP = "longtap",
HORIZONTAL = "horizontal",
VERTICAL = "vertical",
ALL_FINGERS = "all",
DOUBLE_TAP_THRESHOLD = 10,
PHASE_START = "start",
PHASE_MOVE = "move",
PHASE_END = "end",
PHASE_CANCEL = "cancel",
SUPPORTS_TOUCH = "ontouchstart" in window,
SUPPORTS_POINTER_IE10 = window.navigator.msPointerEnabled && !window.PointerEvent && !SUPPORTS_TOUCH,
SUPPORTS_POINTER = (window.PointerEvent || window.navigator.msPointerEnabled) && !SUPPORTS_TOUCH,
PLUGIN_NS = "TouchSwipe",
defaults = {
fingers: 1,
threshold: 75,
cancelThreshold: null,
pinchThreshold: 20,
maxTimeThreshold: null,
fingerReleaseThreshold: 250,
longTapThreshold: 500,
doubleTapThreshold: 200,
swipe: null,
swipeLeft: null,
swipeRight: null,
swipeUp: null,
swipeDown: null,
swipeStatus: null,
pinchIn: null,
pinchOut: null,
pinchStatus: null,
click: null,
tap: null,
doubleTap: null,
longTap: null,
hold: null,
triggerOnTouchEnd: !0,
triggerOnTouchLeave: !1,
allowPageScroll: "auto",
fallbackToMouseEvents: !0,
excludedElements: ".noSwipe",
preventDefaultEvents: !0
};
$.fn.swipe = function(method) {
var $this = $(this),
plugin = $this.data(PLUGIN_NS);
if (plugin && "string" == typeof method) {
if (plugin[method]) return plugin[method].apply(plugin, Array.prototype.slice.call(arguments, 1));
$.error("Method " + method + " does not exist on jQuery.swipe")
} else if (plugin && "object" == typeof method) plugin.option.apply(plugin, arguments);
else if (!(plugin || "object" != typeof method && method)) return init.apply(this, arguments);
return $this
}, $.fn.swipe.version = VERSION, $.fn.swipe.defaults = defaults, $.fn.swipe.phases = {
PHASE_START: PHASE_START,
PHASE_MOVE: PHASE_MOVE,
PHASE_END: PHASE_END,
PHASE_CANCEL: PHASE_CANCEL
}, $.fn.swipe.directions = {
LEFT: LEFT,
RIGHT: RIGHT,
UP: UP,
DOWN: DOWN,
IN: IN,
OUT: OUT
}, $.fn.swipe.pageScroll = {
NONE: NONE,
HORIZONTAL: HORIZONTAL,
VERTICAL: VERTICAL,
AUTO: AUTO
}, $.fn.swipe.fingers = {
ONE: 1,
TWO: 2,
THREE: 3,
FOUR: 4,
FIVE: 5,
ALL: ALL_FINGERS
}
});
})
</script>
<script>
function urlParser(a) {
if ("string" != typeof(a = void 0 === a ? window.location.href : a) || null === a.match(
/^(?:(?:https?|ftp):\/\/)( ?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,}))\.?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i
)) throw new TypeError(`'${a}' is not a valid url`);
const t = document.createElement("a");
t.href = a;
const e = new Map;
return t.search.length > 0 && t.search.split("?")[1].split("&").map(a => {
[key, value] = a.split("="), e.set(key, value)
}), {
url: t.href,
origin: t.origin,
protocol: t.protocol,
host: t.host,
hostname: t.hostname,
port: t.port,
pathname: t.pathname,
hash: t.hash,
query_params: e
}
}
function youtubeIframe(video_id) {
return `
<div class="apd-responsive-video youtube">
<iframe src="https://www.youtube.com/embed/${video_id}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
`
}
function vimeoIframe(video_id) {
return `
<div class="apd-responsive-video vimeo">
<iframe src="https://player.vimeo.com/video/${video_id}" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
</div>
`
}
function spotifyIframe(id) {
return `
<div class="apd-responsive-spotify">
<iframe src="https://open.spotify.com/embed/album/${id}" frameborder="0" allowtransparency="true" allow="encrypted-media"></iframe>
</div>
`
}
document.addEventListener("DOMContentLoaded", function() {
document.querySelectorAll('#apd-root oembed[url]').forEach(function(el) {
var urlString = el.getAttribute('url')
var url = urlParser(urlString)
var code;
// Youtube Short
if (url.host.indexOf('youtu.be') > -1) {
var video_id = url.pathname.split('/')[1]
code = youtubeIframe(video_id)
}
// Youtube
else if (url.host.indexOf('youtube.com') > -1) {
var video_id = url.query_params.get('v')
code = youtubeIframe(video_id)
}
// Vimeo
else if (url.host.indexOf('vimeo.com') > -1) {
var video_id = url.pathname.split('/')[1]
code = vimeoIframe(video_id)
}
// Spotify
else if (url.host.indexOf('spotify.com') > -1) {
var id = url.pathname.split('/')[2]
code = spotifyIframe(id)
}
el.innerHTML = code
})
})
</script>
<style>
#apd-root .apd-acc-section {
border-top: 1px solid #e2e2e2;
background-color: rgba(255, 255, 255, 0);
}
#apd-root .apd-acc-section:first-of-type {}
#apd-root .apd-acc-section:last-of-type {
border-bottom: 1px solid #e2e2e2;
}
#apd-root .apd-acc-section-header {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
padding: 20px 0;
}
#apd-root .apd-acc-section-header,
#apd-root .apd-acc-section-header h1,
#apd-root .apd-acc-section-header svg {
cursor: pointer;
user-select: none;
}
#apd-root .apd-acc-section-header h1 {
font-size: 17px;
color: #121212;
margin-right: 20px;
font-weight: 600;
}
#apd-root .apd-acc-section-header svg {
color: #5e5e5e;
}
#apd-root .apd-acc-section-header.apd-icon-plus-x svg {
transform: rotate(45deg);
transition: 0.3s transform;
}
#apd-root .apd-acc-section-header.apd-icon-plus-x.apd-active svg {
transform: none;
}
#apd-root .apd-acc-section-header.apd-icon-chevron svg {
transition: 0.3s transform;
}
#apd-root .apd-acc-section-header.apd-icon-chevron.apd-active svg {
transform: rotate(180deg);
}
#apd-root .apd-acc-section-header.apd-icon-plus-minus svg path:last-of-type {
transition: 0.3s opacity;
}
#apd-root .apd-acc-section-header.apd-icon-plus-minus.apd-active svg path:last-of-type {
opacity: 0;
}
#apd-root .apd-acc-content {
display: none;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
jQuery('.apd-acc-section-header').off('click')
jQuery('.apd-acc-section-header').on('click', function() {
jQuery(this).toggleClass('apd-active')
jQuery(this).next('.apd-content').slideToggle()
jQuery('.apd-acc-section-header').not(this).removeClass('apd-active')
jQuery('.apd-acc-section-header').not(this).next('.apd-content').slideUp()
})
})
</script>
<div id="apd-root">
<section class="apd-acc-section">
<header class="apd-acc-section-header apd-icon-plus-minus ">
<h1>PACK TOPFACE</h1>
<svg width="14" height="14" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<g stroke="currentColor" stroke-width="3" fill="none" fill-rule="evenodd" stroke-linecap="round">
<path d="M1.858 16h28.284"></path>
<path d="M16 1.858v28.284"></path>
</g>
</svg>
</header>
<div class="apd-content apd-acc-content">
<blockquote>
<p><strong>The Pack Topface was designed to illuminate your eyes thanks to the Y Mask in addition to the N Mask which will smooth the contours of your mouth.</strong></p>
</blockquote>
<figure class="image image-style-side"><img src="https://cdn.shopify.com/s/files/1/0355/2686/9125/t/7/assets/addda9c55106c3786b6b8f62edf511ab.jpeg?v=1605723879"></figure>
<p> </p>
<p>Includes: </p>
<ul>
<li><strong>1x VLINY</strong>®<strong> MASK N </strong>- NASOLABIAL FOLDS LIFTING</li>
<li><strong>1x VLINY</strong>® <strong>MASK Y </strong>-<strong> </strong>EYES LIFTING</li>
</ul>
</div>
</section>
<section class="apd-acc-section">
<header class="apd-acc-section-header apd-icon-plus-minus ">
<h1>PACK LOWERFACE</h1>
<svg width="14" height="14" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<g stroke="currentColor" stroke-width="3" fill="none" fill-rule="evenodd" stroke-linecap="round">
<path d="M1.858 16h28.284"></path>
<path d="M16 1.858v28.284"></path>
</g>
</svg>
</header>
<div class="apd-content apd-acc-content">
<blockquote>
<p><strong>The Pack Lowerface has been designed to reduce your double chin thanks to the V Mask in addition to the L Mask to obtain smooth, soft and full lips.</strong></p>
</blockquote>
<figure class="image image-style-side"><img src="https://cdn.shopify.com/s/files/1/0355/2686/9125/t/7/assets/3f246b4f05222da9e20c758d4b546d0d.jpeg?v=1605613628"></figure>
<p> </p>
<p>Includes: </p>
<ul>
<li><strong>1x VLINY® MASK V</strong> - V-LINE LIFTING</li>
<li><strong>1x VLINY® MASK L</strong> - LIPS LIFTING</li>
</ul>
</div>
</section>
<section class="apd-acc-section">
<header class="apd-acc-section-header apd-icon-plus-minus ">
<h1>PACK FULLFACE</h1>
<svg width="14" height="14" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<g stroke="currentColor" stroke-width="3" fill="none" fill-rule="evenodd" stroke-linecap="round">
<path d="M1.858 16h28.284"></path>
<path d="M16 1.858v28.284"></path>
</g>
</svg>
</header>
<div class="apd-content apd-acc-content">
<blockquote>
<p><strong>The Pack Fullface contains the 5 VLINY® Masks, from the eyes to the lips, including the contour of your mouth and your face. Enhance each area of your face!</strong></p>
</blockquote>
<figure class="image image-style-side"><img src="https://cdn.shopify.com/s/files/1/0355/2686/9125/t/7/assets/3f246b4f05222da9e20c758d4b546d0d.jpeg?v=1605613628"></figure>
<figure class="image image-style-side"><img src="https://cdn.shopify.com/s/files/1/0355/2686/9125/t/7/assets/78580aa4c93ad769542f21c1702ad414.jpeg?v=1605613944"></figure>
<figure class="image image-style-side"><img src="https://cdn.shopify.com/s/files/1/0355/2686/9125/t/7/assets/5551f760ddd371e2d978dae9283ca8bd.jpeg?v=1605723941"></figure>
<p> </p>
<p>Includes: </p>
<p> </p>
<ul>
<li><strong>1x VLINY® MASK V</strong> - V-LINE LIFTING</li>
<li><strong>1x VLINY® MASK L</strong> - LIPS LIFTING</li>
<li><strong>1x VLINY® MASK I</strong> - INTEGRAL FACE LIFTING</li>
<li><strong>1x VLINY® MASK N</strong> - NASOLABIAL FOLDS LIFTING</li>
<li><strong>1x VLINY® MASK Y</strong> - EYES LIFTING</li>
</ul>
</div>
</section>
</div>
<img src="//cdn.shopify.com/s/files/1/0355/2686/9125/files/3logo_480x480_1bceb23f-9332-4904-b4fb-3e87fb470906.jpg?v=1603232697" style="margin-top: 30px;">
<div id="VariantsJson-1602697257141" class="hide" aria-hidden="true"> [{"id":36934262259861,"title":"PACK TOPFACE®","option1":"PACK
TOPFACE®","option2":null,"option3":null,"sku":"TOPFACE","requires_shipping":true,"taxable":true,"featured_image":{"id":25384451866773,"product_id":5961070313621,"position":1,"created_at":"2020-12-07T11:13:38+01:00","updated_at":"2020-12-07T11:37:39+01:00","alt":null,"width":885,"height":885,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25384391442581.gif?v=1607337459","variant_ids":[36934262259861]},"available":true,"name":"Pack
VLINY® - PACK TOPFACE®","public_title":"PACK TOPFACE®","options":["PACK
TOPFACE®"],"price":2490,"weight":1000,"compare_at_price":2990,"inventory_management":null,"barcode":"","featured_media":{"alt":null,"id":17554860146837,"position":1,"preview_image":{"aspect_ratio":1.0,"height":885,"width":885,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25384391442581.gif?v=1607337459"}}},{"id":36934335332501,"title":"PACK
LOWERFACE®","option1":"PACK
LOWERFACE®","option2":null,"option3":null,"sku":"LOWERFACE","requires_shipping":true,"taxable":true,"featured_image":{"id":25384942928021,"product_id":5961070313621,"position":2,"created_at":"2020-12-07T11:25:37+01:00","updated_at":"2020-12-07T11:37:39+01:00","alt":null,"width":500,"height":500,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25384843083925.gif?v=1607337459","variant_ids":[36934335332501]},"available":true,"name":"Pack
VLINY® - PACK LOWERFACE®","public_title":"PACK LOWERFACE®","options":["PACK
LOWERFACE®"],"price":2990,"weight":1000,"compare_at_price":3490,"inventory_management":null,"barcode":"","featured_media":{"alt":null,"id":17555351175317,"position":2,"preview_image":{"aspect_ratio":1.0,"height":500,"width":500,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25384843083925.gif?v=1607337459"}}},{"id":36934345982101,"title":"PACK
FULLFACE®","option1":"PACK
FULLFACE®","option2":null,"option3":null,"sku":"FULLFACE","requires_shipping":true,"taxable":true,"featured_image":{"id":25385438347413,"product_id":5961070313621,"position":3,"created_at":"2020-12-07T11:37:38+01:00","updated_at":"2020-12-07T11:37:39+01:00","alt":null,"width":885,"height":885,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25385351643285.gif?v=1607337459","variant_ids":[36934345982101]},"available":true,"name":"Pack
VLINY® - PACK FULLFACE®","public_title":"PACK FULLFACE®","options":["PACK
FULLFACE®"],"price":5990,"weight":1000,"compare_at_price":8490,"inventory_management":null,"barcode":"","featured_media":{"alt":null,"id":17555846660245,"position":3,"preview_image":{"aspect_ratio":1.0,"height":885,"width":885,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25385351643285.gif?v=1607337459"}}}]
</div>
</form>
POST /contact#newsletter-1575678329569
<form method="post" action="/contact#newsletter-1575678329569" id="newsletter-1575678329569" accept-charset="UTF-8" class="contact-form"><input type="hidden" name="form_type" value="customer"><input type="hidden" name="utf8" value="✓">
<label for="Email-1575678329569" class="hidden-label">Enter your email</label>
<input type="hidden" name="contact[tags]" value="prospect,newsletter">
<input type="hidden" name="contact[context]" value="section">
<div class="input-group newsletter__input-group">
<input type="email" value="" placeholder="Enter your email" name="contact[email]" id="Email-1575678329569" class="input-group-field newsletter__input" autocorrect="off" autocapitalize="off">
<span class="input-group-btn">
<button type="submit" class="btn" name="commit">
<span class="form__submit--large">Subscribe</span>
<span class="form__submit--small">
<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-arrow-right" viewBox="0 0 50 15">
<path d="M0 9.63V5.38h35V0l15 7.5L35 15V9.63z"></path>
</svg>
</span>
</button>
</span>
</div>
</form>
GET https://tr.snapchat.com/cm/i
<form method="GET" action="https://tr.snapchat.com/cm/i" target="snap05851329936316303" accept-charset="utf-8" style="display: none;"><iframe id="snap05851329936316303" name="snap05851329936316303"></iframe><input name="pid"></form>
Text Content
Skip to content Close menu * Our Products * Our story * FAQ * Track your order * Contact us * Log in * * Facebook * Instagram 🌍 FREE SHIPPING WORLDWIDE 🌍 Site navigation VLINY UK Log in Cart Search "Close (esc)" USED BY CELEBRITIE5 ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ USED BY CELEBRITIES ★ 50.000+ SATISFIED CUSTOMERS ★ EACH ZONE OF THE FACE ✔︎ Non-surgical treatment ✔︎ Firming up any part of your face ✔︎ Long-term & natural effect EXTRA 50% OFF WITH CODE ♥️MEGA50♥️ Pack VLINY® (820) Regular price £29.90 Sale price £24.90 / -------------------------------------------------------------------------------- Title PACK TOPFACE® PACK LOWERFACE® PACK FULLFACE® PACK TOPFACE® - £24.90 GBP PACK LOWERFACE® - £29.90 GBP PACK FULLFACE® - £59.90 GBP ADD TO CART PACK TOPFACE > The Pack Topface was designed to illuminate your eyes thanks to the Y Mask in > addition to the N Mask which will smooth the contours of your mouth. Includes: * 1x VLINY® MASK N - NASOLABIAL FOLDS LIFTING * 1x VLINY® MASK Y - EYES LIFTING PACK LOWERFACE > The Pack Lowerface has been designed to reduce your double chin thanks to the > V Mask in addition to the L Mask to obtain smooth, soft and full lips. Includes: * 1x VLINY® MASK V - V-LINE LIFTING * 1x VLINY® MASK L - LIPS LIFTING PACK FULLFACE > The Pack Fullface contains the 5 VLINY® Masks, from the eyes to the lips, > including the contour of your mouth and your face. Enhance each area of your > face! Includes: * 1x VLINY® MASK V - V-LINE LIFTING * 1x VLINY® MASK L - LIPS LIFTING * 1x VLINY® MASK I - INTEGRAL FACE LIFTING * 1x VLINY® MASK N - NASOLABIAL FOLDS LIFTING * 1x VLINY® MASK Y - EYES LIFTING [{"id":36934262259861,"title":"PACK TOPFACE®","option1":"PACK TOPFACE®","option2":null,"option3":null,"sku":"TOPFACE","requires_shipping":true,"taxable":true,"featured_image":{"id":25384451866773,"product_id":5961070313621,"position":1,"created_at":"2020-12-07T11:13:38+01:00","updated_at":"2020-12-07T11:37:39+01:00","alt":null,"width":885,"height":885,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25384391442581.gif?v=1607337459","variant_ids":[36934262259861]},"available":true,"name":"Pack VLINY® - PACK TOPFACE®","public_title":"PACK TOPFACE®","options":["PACK TOPFACE®"],"price":2490,"weight":1000,"compare_at_price":2990,"inventory_management":null,"barcode":"","featured_media":{"alt":null,"id":17554860146837,"position":1,"preview_image":{"aspect_ratio":1.0,"height":885,"width":885,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25384391442581.gif?v=1607337459"}}},{"id":36934335332501,"title":"PACK LOWERFACE®","option1":"PACK LOWERFACE®","option2":null,"option3":null,"sku":"LOWERFACE","requires_shipping":true,"taxable":true,"featured_image":{"id":25384942928021,"product_id":5961070313621,"position":2,"created_at":"2020-12-07T11:25:37+01:00","updated_at":"2020-12-07T11:37:39+01:00","alt":null,"width":500,"height":500,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25384843083925.gif?v=1607337459","variant_ids":[36934335332501]},"available":true,"name":"Pack VLINY® - PACK LOWERFACE®","public_title":"PACK LOWERFACE®","options":["PACK LOWERFACE®"],"price":2990,"weight":1000,"compare_at_price":3490,"inventory_management":null,"barcode":"","featured_media":{"alt":null,"id":17555351175317,"position":2,"preview_image":{"aspect_ratio":1.0,"height":500,"width":500,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25384843083925.gif?v=1607337459"}}},{"id":36934345982101,"title":"PACK FULLFACE®","option1":"PACK FULLFACE®","option2":null,"option3":null,"sku":"FULLFACE","requires_shipping":true,"taxable":true,"featured_image":{"id":25385438347413,"product_id":5961070313621,"position":3,"created_at":"2020-12-07T11:37:38+01:00","updated_at":"2020-12-07T11:37:39+01:00","alt":null,"width":885,"height":885,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25385351643285.gif?v=1607337459","variant_ids":[36934345982101]},"available":true,"name":"Pack VLINY® - PACK FULLFACE®","public_title":"PACK FULLFACE®","options":["PACK FULLFACE®"],"price":5990,"weight":1000,"compare_at_price":8490,"inventory_management":null,"barcode":"","featured_media":{"alt":null,"id":17555846660245,"position":3,"preview_image":{"aspect_ratio":1.0,"height":885,"width":885,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/0355\/2686\/9125\/products\/vliny-pack-vliny-25385351643285.gif?v=1607337459"}}}] VLINY® Mask V (1671) Regular price £19.90 Sale price from £9.90 VLINY® Mask L (246) Regular price £19.90 Sale price from £14.90 VLINY® Mask I (168) from £19.90 VLINY® Mask N (116) from £14.90 VLINY® Mask Y (121) from £14.90 50.000+ SATISFIED CUSTOMERS > I tried the VLINY skincare routine, and it actually made a difference for my > skin. I love good face masks, and these one are the only one I’ve bought more > than once and have continuously recommended to friends. > > @chloe_sims > I got a pack of 5 face masks, so the price wasn’t something I really factored > in when I used the product. I think having one of these masks on hand for a > special event is worth it. My skin looked really healthy and I reused the mask > the next day (I used the left over liquid). My skin looked hydrated and > healthy. Someone thought I was 23... and I’m definitely not! > > @demsims > I did not want to like this masks as much as I do. I was thinking it was > overhyped, overpriced mask that was comparable to a cheaper version. I was > wrong, this masks are worth every penny. My skin looked flawless after I used > this. No signs of forehead lines after until I put on makeup later in the day. > Note to self...no more make up, lol. Will be buying more. > > @pajakmakeupartist > Recently bought the VLINY products and have been using them every day for the > past couple of weeks and I LOVE IT! I love the way my skin feels after using > them- not oily or greasy like some other products do. Will definitely be > purchasing more of this! 10/10. > > @katieprice > My favorite masks to date! The mask itself is a jelly like material that lays > very nice on your face! There is a very nice smell to the hydrating gel, and > it is cooling...AMAZING! My skin felt amazingly soft and clean after removal! > Also, I have very sensitive skin and the mask did not trigger any redness or > flare ups!! Will be buying more of these very soon!! > > @frankiesims > I tried the VLINY skincare routine, and it actually made a difference for my > skin. I love good face masks, and these one are the only one I’ve bought more > than once and have continuously recommended to friends. > > @chloe_sims > I got a pack of 5 face masks, so the price wasn’t something I really factored > in when I used the product. I think having one of these masks on hand for a > special event is worth it. My skin looked really healthy and I reused the mask > the next day (I used the left over liquid). My skin looked hydrated and > healthy. Someone thought I was 23... and I’m definitely not! > > @demsims > I did not want to like this masks as much as I do. I was thinking it was > overhyped, overpriced mask that was comparable to a cheaper version. I was > wrong, this masks are worth every penny. My skin looked flawless after I used > this. No signs of forehead lines after until I put on makeup later in the day. > Note to self...no more make up, lol. Will be buying more. > > @pajakmakeupartist > Recently bought the VLINY products and have been using them every day for the > past couple of weeks and I LOVE IT! I love the way my skin feels after using > them- not oily or greasy like some other products do. Will definitely be > purchasing more of this! 10/10. > > @katieprice > My favorite masks to date! The mask itself is a jelly like material that lays > very nice on your face! There is a very nice smell to the hydrating gel, and > it is cooling...AMAZING! My skin felt amazingly soft and clean after removal! > Also, I have very sensitive skin and the mask did not trigger any redness or > flare ups!! Will be buying more of these very soon!! > > @frankiesims > I tried the VLINY skincare routine, and it actually made a difference for my > skin. I love good face masks, and these one are the only one I’ve bought more > than once and have continuously recommended to friends. > > @chloe_sims * 1 * 2 PREMIUM INGREDIENTS VLINY's philosophy can be summarized in one sentence "health is beautiful", that is why our VLINY masks are made from premium ingredients such as collagen, aloe vera, hyaluronic acid and many others. I WANT TO TRY IT LOOKING FOR SMOOTH, SOFT AND FULL LIPS? ✔︎ NATURAL LIPS LIFTING WITHOUT SURGERY - The mask helps to lift and firm the lips without surgery. ✔︎ POWERFUL LIFTING EFFECT AT A LOWER COST - Not only your smile but your entire face will look rejuvenated. ✔︎ MOISTURIZING & PUSH-UP EFFECTS - Thanks to its unique moisturizing effect, the mask repair and stimulate lips cell regeneration and even temporarily increase their size. OUR PARTNERS "Driven by the knowledge that your skin is an organ that absorbs a high percentage of what you put on it, the new rising French beauty brand VLINY succeeded in creating revolutionary facelift products without surgery." - ELLE ABOUT OUR HISTORY Founded in Paris, VLINY is a French brand committed to taking care of sensitive skin. Our purpose is to revolutionize cosmetic and skincare industry. JOIN US Receive special offers, beauty tips, and insider exclusives. Enter your email Subscribe Information Information * Our story * Blog & Tips * Skin Test * Community * FAQ * Order tracking * Contact us * Our stores all over the world Terms Terms * Terms and conditions * Privacy policy * Return policy * Legal * Personal Data CONTACT US info@vliny-labs.com +44 1158 88 1470 * Facebook * Instagram * Facebook * Instagram * American Express * Mastercard * Visa © 2021 VLINY UK | ALL RIGHTS RESERVED. Previous Next "Close (esc)" CART Your cart is empty. X