summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2024-12-22 21:53:57 +0100
committererdgeist <erdgeist@erdgeist.org>2024-12-22 21:53:57 +0100
commite3481a4a35091b32b6fbee80c1c9ba2b6d7b50d6 (patch)
tree58f90b32cbd89599acfaab07377cc0447f1190c1
Rework of halfnarp and fullnarp into a self contained repository. Still WIP
-rw-r--r--Makefile20
-rw-r--r--config.json7
-rw-r--r--fullnarp.py157
-rwxr-xr-xhalfnarp2.py289
-rw-r--r--requirements.txt19
-rw-r--r--scripts/create_corr_array_pretalx.py50
-rwxr-xr-xscripts/gen_css_tables.py83
-rw-r--r--static/fullnarp.html78
-rw-r--r--static/fullnarp.js641
-rw-r--r--static/halfnarp.js510
-rw-r--r--static/jquery-1.11.1.min.js4
-rw-r--r--static/jquery-3.7.1.min.js2
-rw-r--r--static/jquery.qrcode.min.js28
-rw-r--r--static/style_38c3.css950
-rw-r--r--static/style_38c3_tables.css1048
-rw-r--r--templates/faq.html44
-rw-r--r--templates/index.html115
-rw-r--r--var/talks_local0
-rw-r--r--versions/fullnarp_00000.json1
-rw-r--r--wsgi.py4
20 files changed, 4050 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..5ae5aea
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,20 @@
1all: install
2
3import: venv
4 venv/bin/python3 ./halfnarp2.py -i
5
6do-export: venv
7 venv/bin/python3 ./halfnarp2.py -e
8
9run: venv
10 PYTHONIOENCODING=utf-8 venv/bin/python3 ./halfnarp2.py
11
12run: venv
13 PYTHONIOENCODING=utf-8 venv/bin/python3 ./fullnarp.py
14
15venv:
16 python3 -m venv ./venv
17
18install: venv
19 venv/bin/pip install --upgrade pip
20 venv/bin/pip install -r requirements.txt
diff --git a/config.json b/config.json
new file mode 100644
index 0000000..e139d93
--- /dev/null
+++ b/config.json
@@ -0,0 +1,7 @@
1{
2 "host": "127.0.0.1",
3 "port": 5023,
4 "pretalx-url": "https://cfp.example.de/",
5 "pretalx-token": "<YOUR API KEY HERE>",
6 "pretalx-conference": "38c3"
7}
diff --git a/fullnarp.py b/fullnarp.py
new file mode 100644
index 0000000..7c98785
--- /dev/null
+++ b/fullnarp.py
@@ -0,0 +1,157 @@
1import asyncio
2import json
3import websockets
4from os import listdir
5from websockets.exceptions import ConnectionClosedOK
6
7"""
8This is best served by an nginx block that should look a bit like this:
9
10 location /fullnarp/ {
11 root /home/halfnarp;
12 index index.html index.htm;
13 }
14
15 location /fullnarp/ws/ {
16 proxy_pass http://127.0.0.1:5009;
17 proxy_http_version 1.1;
18 proxy_set_header Upgrade $http_upgrade;
19 proxy_set_header Connection 'upgrade';
20 proxy_set_header Host $host;
21 proxy_set_header X-Real-IP $remote_addr;
22 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
23 proxy_set_header X-Forwarded-Proto $scheme;
24
25 # Set keepalive timeout
26 proxy_read_timeout 60; # Set a read timeout to prevent connection closures
27 proxy_send_timeout 60; # Set a send timeout to prevent connection closures
28 }
29
30When importing talks from pretalx with halfnarp2.py -i, it creates a file in
31var/talks_local_fullnarp which contains non-public lectures and privacy relevant
32speaker availibilities. It should only be served behind some auth.
33"""
34
35# Shared state
36current_version = {}
37newest_version = 0
38current_version_lock = asyncio.Lock() # Lock for managing access to the global state
39
40clients = {} # Key: websocket, Value: {'client_id': ..., 'last_version': ...}
41
42
43async def notify_clients():
44 """Notify all connected clients of the current state."""
45 async with current_version_lock:
46 # Prepare a full state update message with the current version
47 message = {"current_version": newest_version, "data": current_version}
48
49 # Notify each client about their relevant updates
50 for client, info in clients.items():
51 try:
52 # Send the state update
53 await client.send(json.dumps(message))
54 # Update the client's last known version
55 info["last_version"] = newest_version
56 except ConnectionClosedOK:
57 # Handle disconnected clients gracefully
58 pass
59
60
61async def handle_client(websocket):
62 """Handle incoming WebSocket connections."""
63
64 # Initialize per-connection state
65 clients[websocket] = {"client_id": id(websocket), "last_version": 0}
66
67 try:
68 # Send the current global state to the newly connected client
69 async with current_version_lock:
70 global newest_version
71 await websocket.send(
72 json.dumps({"current_version": newest_version, "data": current_version})
73 )
74 clients[websocket][
75 "last_version"
76 ] = newest_version # Update last known version
77
78 # Listen for updates from the client
79 async for message in websocket:
80 try:
81 # Parse incoming message
82 data = json.loads(message)
83
84 # Update global state with a lock to prevent race conditions
85 async with current_version_lock:
86 if "setevent" in data:
87 eventid = data["setevent"]
88 day = data["day"]
89 room = data["room"]
90 time = data["time"]
91 lastupdate = data["lastupdate"]
92
93 newest_version += 1 # Increment the version
94 print(
95 "Moving event: "
96 + eventid
97 + " to day "
98 + day
99 + " at "
100 + time
101 + " in room "
102 + room
103 + " newcurrentversion "
104 + str(newest_version)
105 )
106
107 if not eventid in current_version or int(
108 current_version[eventid]["lastupdate"]
109 ) <= int(lastupdate):
110 current_version[eventid] = {
111 "day": day,
112 "room": room,
113 "time": time,
114 "lastupdate": int(newest_version),
115 }
116 with open(
117 "versions/fullnarp_"
118 + str(newest_version).zfill(5)
119 + ".json",
120 "w",
121 ) as outfile:
122 json.dump(current_version, outfile)
123
124 # Notify all clients about the updated global state
125 await notify_clients()
126 except json.JSONDecodeError:
127 await websocket.send(json.dumps({"error": "Invalid JSON"}))
128 except websockets.exceptions.ConnectionClosedError as e:
129 print(f"Client disconnected abruptly: {e}")
130 except ConnectionClosedOK:
131 pass
132 finally:
133 # Cleanup when the client disconnects
134 del clients[websocket]
135
136
137async def main():
138 newest_file = sorted(listdir("versions/"))[-1]
139 global newest_version
140 global current_version
141
142 if newest_file:
143 newest_version = int(newest_file.replace("fullnarp_", "").replace(".json", ""))
144 print("Resuming from version: " + str(newest_version))
145 with open("versions/" + str(newest_file)) as data_file:
146 current_version = json.load(data_file)
147 else:
148 current_version = {}
149 newest_version = 0
150
151 async with websockets.serve(handle_client, "localhost", 5009):
152 print("WebSocket server started on ws://localhost:5009")
153 await asyncio.Future() # Run forever
154
155
156if __name__ == "__main__":
157 asyncio.run(main())
diff --git a/halfnarp2.py b/halfnarp2.py
new file mode 100755
index 0000000..ebd6f6b
--- /dev/null
+++ b/halfnarp2.py
@@ -0,0 +1,289 @@
1#!venv/bin/python
2
3from flask import Flask, render_template, jsonify, request, abort, send_file, url_for
4from flask_sqlalchemy import SQLAlchemy
5from flask_cors import CORS
6from lxml import etree
7from argparse import ArgumentParser
8import requests
9import json
10import uuid
11import markdown
12from html_sanitizer import Sanitizer
13from hashlib import sha256
14
15app = Flask(__name__)
16app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql://halfnarp@localhost:5432/halfnarp"
17app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
18app.config["SERVER_NAME"] = "halfnarp.events.ccc.de"
19app.config["SECRET_KEY"] = "<YOUR SERVER SECRET HERE>"
20app.jinja_env.trim_blocks = True
21app.jinja_env.lstrip_blocks = True
22CORS(app)
23
24db = SQLAlchemy(app)
25
26
27class TalkPreference(db.Model):
28 """A preference of halfnarp frontend. An array of strings"""
29
30 uid = db.Column(db.String, primary_key=True)
31 public_uid = db.Column(db.String, index=True)
32 talk_ids = db.Column(db.String)
33
34
35@app.route("/")
36def root():
37 return render_template("index.html")
38
39
40@app.route("/-/talkpreferences", methods=["GET"])
41def sessions():
42 return send_file("var/talks_local", mimetype="application/json")
43
44
45@app.route("/-/talkpreferences/<uid>", methods=["GET"])
46def get_own_preferences(uid):
47 pref = db.session.get(TalkPreference, uid)
48 if pref == None:
49 abort(404)
50
51 return jsonify(
52 {
53 "hashed_uid": pref.public_uid,
54 "public_url": url_for(
55 "get_preferences",
56 public_uid=public_uid,
57 _external=True,
58 _scheme="https",
59 ),
60 "talk_ids": json.loads(pref.talk_ids),
61 "uid": pref.uid,
62 }
63 )
64
65
66@app.route("/-/talkpreferences/", methods=["POST"])
67def store_preferences():
68 print(request.json)
69 try:
70 content = request.json
71 talk_ids = content["talk_ids"]
72 except:
73 abort(400)
74
75 if not all(isinstance(elem, str) for elem in talk_ids):
76 abort(400)
77
78 uid = str(uuid.uuid4())
79 public_uid = str(sha256(uid.encode("utf-8")).hexdigest())
80
81 db.session.add(
82 TalkPreference(uid=uid, public_uid=public_uid, talk_ids=json.dumps(talk_ids))
83 )
84 db.session.commit()
85 return jsonify(
86 {
87 "uid": uid,
88 "hashed_uid": str(public_uid),
89 "public_url": url_for(
90 "get_preferences",
91 public_uid=public_uid,
92 _external=True,
93 _scheme="https",
94 ),
95 "update_url": url_for(
96 "update_preferences", uid=uid, _external=True, _scheme="https"
97 ),
98 }
99 )
100
101
102@app.route("/-/talkpreferences/<uid>", methods=["POST", "PUT"])
103def update_preferences(uid):
104 pref = db.session.get(TalkPreference, uid)
105 if pref == None:
106 abort(404)
107
108 content = request.json
109 pref.talk_ids = json.dumps(content["talk_ids"])
110 db.session.commit()
111
112 return jsonify({"uid": pref.uid, "hashed_uid": pref.public_uid})
113
114
115@app.route("/-/talkpreferences/public/<public_uid>", methods=["GET"])
116def get_preferences(public_uid):
117 pref = (
118 db.session.query(TalkPreference)
119 .filter(TalkPreference.public_uid == public_uid)
120 .first()
121 )
122 if pref == None:
123 abort(404)
124
125 return jsonify({"hash": pref.public_uid, "talk_ids": json.loads(pref.talk_ids)})
126
127
128def filter_keys_halfnarp(session):
129 abstract_html = markdown.markdown(submission["abstract"], enable_attributes=False)
130 abstract_clean_html = Sanitizer().sanitize(abstract_html)
131 slot = submission["slot"]
132
133 return {
134 "title": submission.get("title", "!!! NO TITLE !!!"),
135 "duration": 60 * submission.get("duration", 40),
136 "event_id": submission["code"],
137 "language": submission.get("content_locale", "de"),
138 "track_id": submission["track_id"],
139 "speaker_names": ", ".join(
140 [
141 speaker.get("name", "unnamed")
142 for speaker in submission.get("speakers", {})
143 ]
144 ),
145 "abstract": abstract_clean_html,
146 "room_id": slot.get("room_id", "room_unknown"),
147 "start_time": slot.get("start", "1970-01-01"),
148 }
149
150
151def filter_keys_fullnarp(session, speakers):
152 abstract_html = markdown.markdown(session["abstract"], enable_attributes=False)
153 abstract_clean_html = Sanitizer().sanitize(abstract_html)
154 slot = submission["slot"]
155
156 speaker_info = []
157 for speaker in submission.get("speakers", {}):
158 speaker_info.append(speakers[speaker["code"]])
159 # if len(speakers[speaker['code']]['availabilities']) == 0:
160 # print ( "Track " + str(submission['track_id']) + ": Speaker " + speaker.get('name', 'unname') + " on session: " + session.get('title', '!!! NO TITLE !!!') + " without availability. https://cfp.cccv.de/orga/event/38c3/submissions/" + session['code'] )
161
162 """This fixes availabilites ranging to or from exactly midnight to the more likely start of availibility at 8am and end of availibility at 3am"""
163
164 for avail in speakers[speaker["code"]]["availabilities"]:
165 start_new = datetime.fromisoformat(avail["start"])
166 end_new = datetime.fromisoformat(avail["end"])
167
168 start = datetime.fromisoformat(avail["start"])
169 end = datetime.fromisoformat(avail["end"])
170 if start.time() == time(0, 0):
171 start_new = start + timedelta(hours=10)
172 if end.time() == time(0, 0):
173 end_new = end + timedelta(hours=3)
174
175 if start != start_new or end != end_new:
176 print(
177 "Fixing "
178 + str(start)
179 + " - "
180 + str(end)
181 + " to "
182 + str(start_new)
183 + " - "
184 + str(end_new)
185 )
186 avail["start"] = str(start_new)
187 avail["end"] = str(end_new)
188
189 return {
190 "title": submission.get("title", "!!! NO TITLE !!!"),
191 "duration": 60 * submission.get("duration", 40),
192 "event_id": submission["code"],
193 "language": submission.get("content_locale", "de"),
194 "track_id": submission["track_id"],
195 "speaker_names": ", ".join(
196 [
197 speaker.get("name", "unnamed")
198 for speaker in submission.get("speakers", {})
199 ]
200 ),
201 "abstract": abstract_clean_html,
202 "room_id": slot.get("room_id", "room_unknown"),
203 "start_time": slot.get("start", "1970-01-01"),
204 }
205
206
207def fetch_talks(config):
208 sess = requests.Session()
209
210 response = sess.get(
211 config["pretalx-api-url"] + "/submissions/?format=json&limit=20000",
212 stream=True,
213 headers={"Authorization": "Token " + config["pretalx-token"]},
214 )
215 # with open('dump.txt', mode='wb') as localfile:
216 # localfile.write(response.content)
217 talks_json = json.loads(response.text)
218
219 response = sess.get(
220 config["pretalx-api-url"] + "/speakers/?format=json&limit=20000",
221 stream=True,
222 headers={"Authorization": "Token " + config["pretalx-token"]},
223 )
224 speakers_json = json.loads(response.text)
225 speakers = dict((speaker["code"], speaker) for speaker in speakers_json["results"])
226
227 sessions = [
228 filter_keys(submission)
229 for submission in talks_json["results"]
230 if submission["state"] == "confirmed"
231 and not "non-public" in submission.get("tags", {})
232 ]
233 with open("var/talks_local", mode="w", encoding="utf8") as sessionsfile:
234 json.dump(sessions, sessionsfile)
235
236 sessions = [
237 filter_keys_fullnarp(submission, speakers)
238 for submission in talks_json["results"]
239 if submission["state"] == "confirmed" or submission["state"] == "accepted"
240 ]
241 with open("var/talks_local_fullnarp", mode="w", encoding="utf8") as sessionsfile:
242 json.dump(sessions, sessionsfile)
243
244
245def export_prefs(config):
246 print("[")
247 for preference in TalkPreference.query.all():
248 print(preference.talk_ids + ",")
249 print("[]]")
250
251
252if __name__ == "__main__":
253 parser = ArgumentParser(description="halfnarp2")
254 parser.add_argument(
255 "-i",
256 action="store_true",
257 dest="pretalx_import",
258 default=False,
259 help="import events from pretalx",
260 )
261 parser.add_argument(
262 "-e",
263 action="store_true",
264 dest="fullnarp_export",
265 default=False,
266 help="export preferences to json",
267 )
268 parser.add_argument(
269 "-c", "--config", help="Config file location", default="./config.json"
270 )
271 args = parser.parse_args()
272
273 with open(args.config, mode="r", encoding="utf-8") as json_file:
274 config = json.load(json_file)
275 config["pretalx-api-url"] = (
276 config["pretalx-url"] + "api/events/" + config["pretalx-conference"]
277 )
278
279 with app.app_context():
280 db.create_all()
281 if args.pretalx_import:
282 fetch_talks(config)
283 elif args.fullnarp_export:
284 export_prefs(config)
285 else:
286 app.run(
287 host=config.get("host", "127.0.0.1"),
288 port=int(config.get("port", "8080")),
289 )
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..e1d7367
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,19 @@
1certifi
2chardet
3click
4Flask
5Flask-SQLAlchemy
6flask-cors
7idna
8itsdangerous
9Jinja2
10lxml
11MarkupSafe
12requests
13SQLAlchemy
14urllib3
15Werkzeug
16html-sanitizer
17markdown
18psycopg2
19gunicorn
diff --git a/scripts/create_corr_array_pretalx.py b/scripts/create_corr_array_pretalx.py
new file mode 100644
index 0000000..dd9221d
--- /dev/null
+++ b/scripts/create_corr_array_pretalx.py
@@ -0,0 +1,50 @@
1#!venv/bin/python
2
3# convert halfnarp's output into the correlation array that can later
4# be served by halfnarp to show clusters of talks by your audience's
5# preferences
6#
7# Run this script with a single parameter, a file containing the output
8# of halfnarp2.py -e and place this script's output in a file that is
9# being served statically, e.g. corr_array_38c3.json
10
11import json
12import sys
13import itertools
14from collections import defaultdict
15
16# load in list of talk preferences, which is list of strings with talk ids
17with open(sys.argv[1]) as data_file:
18 corr = json.load(data_file)
19
20all_sums = dict(defaultdict())
21all_events = {}
22l = len(corr)
23
24for arr in corr:
25
26 for x in arr:
27 all_events[x] = 1
28
29 for x, y in itertools.combinations_with_replacement(sorted(arr), 2):
30 if x in all_sums.keys():
31 all_sums[x][y] = 1 + all_sums[x].get(y, 1)
32 else:
33 all_sums[x] = defaultdict()
34
35all_events = sorted(set(all_events))
36
37out_strings = defaultdict(str)
38
39for x, y in itertools.combinations(all_events, 2):
40 xyc = all_sums[x].get(y, 0)
41 xc = all_sums[x].get(x, 0)
42 yc = all_sums[y].get(y, 0)
43# print (x, y, both, xcount, ycount)
44 xy_corr = 4.0 * l * xyc * xyc * (xc + yc) / (xc*xc*yc*yc) if xc * yc > 0 else 0
45 if xy_corr > 9:
46 xy_corr = 9
47 out_strings[x] += str(int(xy_corr))
48
49out_dict = { 'event_ids': all_events, 'event_corrs': list(out_strings.values()) }
50print (json.dumps(out_dict, separators=(',', ':')))
diff --git a/scripts/gen_css_tables.py b/scripts/gen_css_tables.py
new file mode 100755
index 0000000..4bc5ea8
--- /dev/null
+++ b/scripts/gen_css_tables.py
@@ -0,0 +1,83 @@
1#!python3
2
3# This script generates the css tables needed for halfnarp to work
4# properly with different start and end dates, rooms and numers of
5# days. Adapt the to your conference's needs and place the result
6# in the css document, e.g. style_38c3_tables.css
7
8start_y = 400
9starttime = 10
10endtime = 28
11rooms = 3
12days = 4
13columns = days * rooms # how many columns does
14event_gap = { 'large': 5, 'medium': 3, 'small': 2 } # how much is an event shorter than what the grid would allow in px
15block_length = 210
16
17time_grid = 5 # what is the granularity of Fahrplan raster in minutes
18elem_per_hour = 60 / time_grid # how many sections does one hour get
19
20# how many pixels are in one hour vertically in LARGE, MEDIUM, SMALL
21hour_height={ 'large': 300, 'medium': 160, 'small': 120 }
22
23# What is the height of one grid element
24grid_height={ 'large': hour_height['large'] / elem_per_hour, 'medium': hour_height['medium'] / elem_per_hour, 'small': hour_height['small'] / elem_per_hour }
25
26for size in ['large', 'medium', 'small']:
27 y = start_y
28 for hour in range(starttime, endtime):
29 for minute in range(0,60,time_grid):
30 print ( '.size-' + size + ' .time_' + str(hour % 24).zfill(2) + str(minute).zfill(2) + ' { top: ' + str(y) + 'px; }' )
31 y += grid_height[size]
32
33for size in ['large', 'medium', 'small']:
34 for duration in range(300,12000,100):
35 height = hour_height[size] * duration / 3600 - event_gap[size]
36 print ( '.size-' + size + ' .duration_' + str(duration) + ' { min-height: ' + str(height) + 'px; max-height: ' + str(height) + 'px; }')
37 print ( '.size-' + size + ' .wholeblock { height: ' + str(hour_height[size] * block_length / 60) + 'px; }' )
38
39print ( '.size-large .grid { height: ' + str(grid_height['large']) + 'px; font-size: 1em; }' )
40print ( '.size-medium .grid { height: ' + str(grid_height['medium'])+ 'px; font-size: 0.5em; }' )
41print ( '.size-small .grid { height: ' + str(grid_height['small']) + 'px; font-size: 0.3em; }' )
42
43gap = 4
44width = ( 100 - gap * ( 1 + rooms ) ) / rooms
45for room in range(rooms):
46 print ( '.in-calendar .room' + str(room+1) +' { left: ' + str(gap * (room + 1) + width * room ) + '%; }' )
47
48print ('.in-calendar .event, .in-calendar .room-label, .in-calendar .grid { position: absolute; width: ' + str(width)+ '%; }' )
49print ('.in-calendar .r, .in-calendar .l { width: ' + str(width) + '%; }')
50print ('.in-calendar .rr, .in-calendar .ll { width: ' + str(2*width+gap) + '%; }')
51print ('.in-calendar .rrr, .in-calendar .lll { width: ' + str(3*width+2*gap) + '%; }')
52print ('.in-calendar .rrrr, .in-calendar .llll { width: ' + str(4*width+3*gap) + '%; }')
53print ('.in-calendar .r, .in-calendar .rr, .in-calendar .rrr, .in-calendar .rrrr { margin-left: ' + str(width / 2) + '% ; }')
54print ('.in-calendar .l { margin-left: -' + str(width / 2) + '% ; }')
55print ('.in-calendar .ll { margin-left: -' + str(width / 2 + gap + width) + '% ; }')
56print ('.in-calendar .lll { margin-left: -' + str(width / 2 + gap * 2 + width * 2) + '% ; }')
57print ('.in-calendar .llll { margin-left: -' + str(width / 2 + gap * 3 + width * 3) + '% ; }')
58
59gap = 0.5
60width = ( 100 - gap * ( 1 + columns ) ) / columns
61for day in range(days):
62 for room in range(rooms):
63 print ( '.in-calendar.alldays .day_' + str(day+1) + '.room' + str(room+1) +' { left: ' + str(gap * (day*rooms + room + 1) + width * (day * rooms + room ) ) + '%; }' )
64
65print ('.wholeday, .wholeblock { width: ' + str(100 / days)+ '% }')
66print ('.in-calendar.alldays .event, .in-calendar.alldays .room-label, .in-calendar.alldays .grid { width: ' + str(width)+ '%; }' )
67
68print ('.in-calendar.alldays .r, .in-calendar.alldays .l { width: ' + str(width) + '%; }')
69print ('.in-calendar.alldays .rr, .in-calendar.alldays .ll { width: ' + str(2*width+gap) + '%; }')
70print ('.in-calendar.alldays .rrr, .in-calendar.alldays .lll { width: ' + str(3*width+2*gap) + '%; }')
71print ('.in-calendar.alldays .rrrr, .in-calendar.alldays .llll { width: ' + str(4*width+3*gap) + '%; }')
72
73print ('.in-calendar.alldays .r, .in-calendar.alldays .rr, .in-calendar.alldays .rrr, .in-calendar.alldays .rrrr { margin-left: ' + str(width / 2) + '% ; }')
74print ('.in-calendar.alldays .l { margin-left: -' + str(width / 2) + '% ; }')
75print ('.in-calendar.alldays .ll { margin-left: -' + str(width / 2 + gap + width) + '% ; }')
76print ('.in-calendar.alldays .lll { margin-left: -' + str(width / 2 + gap * 2 + width * 2) + '% ; }')
77print ('.in-calendar.alldays .llll { margin-left: -' + str(width / 2 + gap * 3 + width * 3) + '% ; }')
78
79print ('.r, .rr, .rrr, .rrrr, .l, .ll, .lll, .llll { height: 4px; }')
80
81for size in ['large', 'medium', 'small']:
82 print ('.size-' + size +' .wholeday { height: ' + str( ( endtime - starttime ) * hour_height[size] ) + 'px; }' )
83 print ('.size-' + size +' .duration_inf { height: ' + str( 7 * hour_height[size] ) + 'px; }' )
diff --git a/static/fullnarp.html b/static/fullnarp.html
new file mode 100644
index 0000000..a00f89e
--- /dev/null
+++ b/static/fullnarp.html
@@ -0,0 +1,78 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <meta charset="utf-8">
5 <title>FULLnarp web scheduling helper app</title>
6 <link rel="stylesheet" href="style_38c3.css">
7 <link rel="stylesheet" href="style_38c3_tables.css">
8 <script src="fullnarp.js"></script>
9 <script>
10 document.addEventListener('DOMContentLoaded', () => { do_the_fullnarp(); });
11 </script>
12</head>
13<body class="size-small in-list fullnarp">
14<div style="display:none">
15 <div id="template">
16 <div class="title"></div>
17 <div class="speakers"></div>
18 <div class="abstract"></div>
19 </div>
20</div>
21<div class="trashbin">🗑️</div>
22<div class="version">version</div>
23<div class="headline">The 38C3 fullnarp</div>
24<div class="header">
25<div class="leftbox">
26<input id="filter" type="text" placeholder="Filter events"/>
27<div class="view-choser">
28<div class="views vlist" title="Display all events sorted by track (Hotkey: L)">list</div>
29<div class="views vdays" title="Display all events in a 4-day-view (Hotkey: 0)">days</div>
30<div class="views vday1" title="Display all events on Day 1 (Hotkey: 1)">day 1</div>
31<div class="views vday2" title="Display all events on Day 2 (Hotkey: 2)">day 2</div>
32<div class="views vday3" title="Display all events on Day 3 (Hotkey: 3)">day 3</div>
33<div class="views vday4" title="Display all events on Day 4 (Hotkey: 4)">day 4</div>
34
35<div class="views vleft" title="Show only events not yet in calendar (Hotkey: U)">unset</div>
36<div class="views vhalf" title="Display halfnarp votes (Hotkey: H)">half</div>
37<div class="views vcorr" title="Calculate correlations for currently selected talk (Hotkey: C)">corr</div>
38<div class="views vtrack" title="Color event by track (Hotkey: T)">track</div>
39<div class="views vlang" title="Color event by language (Hotkey: I)">lang</div>
40<div class="views vweb" title="Show correlation web">web</div>
41
42
43<div class="allboxes">
44<div class="vsmallboxes boxer">size</div><div class="vmediumboxes boxer">Size</div><div class="vlargeboxes boxer">SIZE</div>
45</div>
46</div>
47</div>
48</div>
49<div class="day_1 room-label room1">Saal 1</div><div class="day_1 room-label room2">Saal 2</div><div class="day_1 room-label room3">Saal 3</div></div>
50<div class="day_2 room-label room1">Saal 1</div><div class="day_2 room-label room2">Saal 2</div><div class="day_2 room-label room3">Saal 3</div></div>
51<div class="day_3 room-label room1">Saal 1</div><div class="day_3 room-label room2">Saal 2</div><div class="day_3 room-label room3">Saal 3</div></div>
52<div class="day_4 room-label room1">Saal 1</div><div class="day_4 room-label room2">Saal 2</div><div class="day_4 room-label room3">Saal 3</div></div>
53
54<div class=" time_1815 duration_3600 guide pause ">P A U S E</div>
55<div class=" time_1445 wholeblock room1 guide day_1"></div>
56<div class=" time_2300 wholeblock room1 guide day_1"></div>
57<div class=" time_1445 wholeblock room1 guide day_2"></div>
58<div class=" time_2300 wholeblock room1 guide day_2"></div>
59<div class=" time_1445 wholeblock room1 guide day_3"></div>
60<div class=" time_2300 wholeblock room1 guide day_3"></div>
61<div class=" time_1445 wholeblock room1 guide day_4"></div>
62
63<div class=" time_1820 duration_inf guide ende room1 day_4 "></div>
64
65<div class="wholeday room1 day_1 guide uneven"></div>
66<div class="wholeday room1 day_3 guide uneven"></div>
67
68<div class="track" id="6"><h2>Security</h2></div>
69<div class="track" id="4"><h2>Hardware &amp; Making</h2></div>
70<div class="track" id="7"><h2>Ethics, Society &amp; Politics</h2></div>
71<div class="track" id="2"><h2>CCC</h2></div>
72<div class="track" id="3"><h2>Entertainment</h2></div>
73<div class="track" id="5"><h2>Science</h2></div>
74<div class="track" id="1"><h2>Art &amp; Beauty</div>
75<div class="track" id="999"><h2>Other</div>
76
77</body>
78</html>
diff --git a/static/fullnarp.js b/static/fullnarp.js
new file mode 100644
index 0000000..8b7d36d
--- /dev/null
+++ b/static/fullnarp.js
@@ -0,0 +1,641 @@
1let ws; // WebSocket instance
2
3function toggle_grid(whichDay) {
4 var vclasses= [['in-list'], ['in-calendar', 'onlyday1'], ['in-calendar', 'onlyday2'], ['in-calendar', 'onlyday3'],
5 ['in-calendar', 'onlyday4'], ['in-calendar', 'alldays']];
6 document.body.classList.remove( 'alldays', 'onlyday1', 'onlyday2', 'onlyday3', 'onlyday4', 'in-list', 'in-calendar');
7 if( whichDay < 0 || whichDay > 5 ) return;
8 document.body.classList.add(...vclasses[whichDay]);
9}
10
11function distribute_votes() {
12 document.querySelectorAll('.event').forEach( function(element) {
13 var eid = element.getAttribute('event_id');
14 var abs = window.votes[eid];
15 var klasse = 5000;
16 if (abs < 2000) { klasse = 2000; }
17 if (abs < 1000) { klasse = 1000; }
18 if (abs < 500) { klasse = 500; }
19 if (abs < 200) { klasse = 200; }
20 if (abs < 100) { klasse = 100; }
21 if (abs < 50) { klasse = 50; }
22 if (abs < 20) { klasse = 20; }
23 if (abs < 10) { klasse = 10; }
24 if (!abs) klasse = 10;
25
26 var abselem = element.querySelector('.absval');
27 if (abselem)
28 abselem.textContent = '' + abs;
29 else {
30 var abselem = document.createElement('div');
31 abselem.textContent = '' + abs;
32 abselem.classList.add('absval');
33 element.insertBefore(abselem, element.firstChild);
34 }
35 element.classList.add('class_' + klasse);
36 });
37}
38
39function corr_for_eventids(id1, id2) {
40 var d = 0, c = 0, cd = 0, l = window.raw_votes.length;
41 for (item of window.raw_votes) {
42 var x = 0;
43 if( item.indexOf(id1) > -1 ) { ++d; x++;}
44 if( item.indexOf(id2) > -1 ) { ++c; cd+=x; }
45 }
46
47 var mid = 0;
48 // if ( d * c ) mid = Math.round( 4.0 * ( ( cd * l ) / ( c * d ) ) * ( cd / d + cd / c ) );
49 if ( d * c ) mid = Math.round( 4 * l * cd * cd * ( c + d ) / ( c * c * d * d ) )
50 if (mid>9) mid=9;
51 return mid;
52}
53
54function show_all_correlates(el) {
55 /* First identify the room to see what other rooms to consider
56 correlates always grow from the top slot to the right,
57 unless there's an overlapping event to the left that starts earlier
58 */
59 var event_room = el.getAttribute('fullnarp-room');
60 var event_day = el.getAttribute('fullnarp-day');
61 var event_time = el.getAttribute('fullnarp-time');
62
63 if (!event_time) return;
64
65 var event_start;
66 try { event_start = time_to_mins(event_time); } catch(e) { return; }
67 var event_duration = el.getAttribute('fullnarp-duration') / 60;
68
69 /* Only test events to the right, if they start at the exact same time */
70 document.querySelectorAll('.event.day_'+event_day).forEach( function(check_el, index) {
71 var check_room = check_el.getAttribute('fullnarp-room');
72 if (event_room == check_room) return;
73
74 var check_time = check_el.getAttribute('fullnarp-time');
75 if (!check_time) return;
76 var check_start = time_to_mins(check_time);
77 var check_duration = check_el.getAttribute('fullnarp-duration') / 60;
78 var dist = check_el.getAttribute('fullnarp-room') - event_room;
79 var overlap = check_start < event_start + event_duration && event_start < check_start + check_duration;
80
81 if (!overlap) return;
82 if (event_start == check_start && dist <= 0) return;
83 if (event_start < check_start) return;
84
85 var corr = corr_for_eventids(el.getAttribute('event_id'), check_el.getAttribute('event_id'));
86 var dir = dist > 0 ? 'r' : 'l';
87 var div = document.createElement('div');
88 div.classList.add('corrweb', dir.repeat(Math.abs(dist)), 'day_' + event_day, 'room' + event_room, 'time_' + event_time, 'corr_d_' + corr);
89 document.body.appendChild(div);
90 })
91}
92
93function display_correlation() {
94 var selected = document.querySelectorAll('.selected');
95 if( selected.length == 1 ) {
96 selected = selected[0];
97 document.querySelectorAll('.event').forEach(elem => mark_correlation(elem, selected));
98 }
99 if (document.body.classList.contains('correlate'))
100 distribute_votes();
101 document.body.classList.toggle('correlate');
102}
103
104function mark_correlation(dest, comp) {
105 var id1 = dest.getAttribute('event_id');
106 var id2 = comp.getAttribute('event_id');
107 var d = 0, c = 0, cd = 0, l = window.raw_votes.length;
108 for (vote of window.raw_votes) {
109 var x = 0;
110 if( vote.indexOf(id1) > -1 ) { ++d; x++;}
111 if( vote.indexOf(id2) > -1 ) { ++c; cd+=x; }
112 }
113
114 var mid = 0;
115 // if ( d * c ) mid = Math.round( 4.0 * ( ( cd * l ) / ( c * d ) ) * ( cd / d + cd / c ) );
116 if ( d * c ) mid = Math.round( 4 * l * cd * cd * ( c + d ) / ( c * c * d * d ) )
117 if (mid>9) mid=9;
118
119 dest.className = dest.className.replace(/\bcorr_\S+/g, '');
120 dest.setAttribute('corr', mid);
121 dest.querySelector('.absval').textContent = mid + ':' + Math.round( 100 * cd / d ) + '%:' + Math.round( 100 * cd / c ) + '%';
122
123}
124
125function mark_avail(el) {
126 el.classList.toggle('unavailable', !check_avail(el, el.getAttribute('fullnarp-day'), el.getAttribute('fullnarp-time')));
127}
128
129function time_to_mins(time) {
130 var hour_mins = /(\d\d)(\d\d)/.exec(time);
131 if( hour_mins[1] < 9 ) { hour_mins[1] = 24 + hour_mins[1]; }
132 return 60 * hour_mins[1] + 1 * hour_mins[2];
133}
134
135function check_avail(el, day, time ) {
136 var all_available = true;
137 var speakers = window.event_speakers[el.getAttribute('event_id')];
138
139 if (!speakers)
140 return false;
141
142 try {
143 var event_times = /(\d\d)(\d\d)/.exec(time);
144 var event_duration = el.getAttribute('fullnarp-duration') / 60;
145 var event_start = Number(event_times[1]);
146 if (event_start < 9) { event_start = 24 + event_start; }
147
148 var event_start_date = new Date("2024-12-27T00:00:00+01:00");
149 event_start_date.setTime(event_start_date.getTime() + 60000 * ( 24 * 60 * (day - 1) + event_start * 60 + 1 * Number(event_times[2])) );
150 var event_end_date = new Date();
151 event_end_date.setTime(event_start_date.getTime() + 60000 * event_duration);
152 } catch (error) {
153 return false;
154 }
155
156 /* Check availability of all speakers */
157 for (speaker of speakers) {
158 /* Now if at least one day is set, each missing
159 day means unavailable, */
160 var have_avails = false, unavail = true;
161 for (avail of speaker.availabilities) {
162 have_avails = true;
163
164 var availtime_start = new Date(avail.start);
165 var availtime_end = new Date(avail.end);
166
167 if( event_start_date >= availtime_start && event_end_date <= availtime_end )
168 unavail = false;
169 }
170
171 /* If at least one speaker is unavail, check fails */
172 if( have_avails && unavail ) {
173 all_available = false;
174 return false;
175 }
176 }
177
178 return all_available;
179}
180
181/* Needs to be done for each moved and all previously conflicting events */
182function mark_conflict(el) {
183 var event_start = time_to_mins(el.getAttribute('fullnarp-time'));
184 var event_duration = el.getAttribute('fullnarp-duration') / 60;
185
186 var conflict = false;
187
188 /* We do only need to check events in the same room at the same day for conflicts */
189 document.querySelectorAll('.event.day_'+el.getAttribute('fullnarp-day')+'.room'+el.getAttribute('fullnarp-room')).forEach( function(check_el) {
190
191 if( el.getAttribute('event_id') == check_el.getAttribute('event_id') ) { return true; }
192
193 var check_start = time_to_mins(check_el.getAttribute('fullnarp-time'));
194 var check_duration = check_el.getAttribute('fullnarp-duration') / 60;
195
196 if( check_start < event_start + event_duration &&
197 event_start < check_start + check_duration ) {
198 check_el.classList.add('conflict');
199 conflict = true;
200 }
201 });
202 el.classList.toggle('conflict', conflict);
203}
204
205/* remove day, room and time from an event */
206function remove_event(event_id) {
207 var el = document.getElementById(event_id);
208 el.classList.add('pending');
209 if (ws && ws.readyState === WebSocket.OPEN) {
210 var message = {
211 lastupdate: window.lastupdate,
212 removeevent: event_id
213 }
214 ws.send(JSON.stringify(message));
215 console.log('Sent:', message);
216 } else {
217 el.removeClass('pending');
218 el.addClass('failed');
219 }
220}
221
222/* provide time OR hour + minute, time overrides */
223function set_all_attributes(event_id, day, room, time, from_server) {
224 var el = document.getElementById(event_id);
225 el.className = el.className.replace( /\btime_\S+ ?/g, '').replace( /\broom\S+ ?/g, '').replace( /\bday_\S+ ?/g, '');
226 el.classList.add( time, day, room );
227 el.setAttribute('fullnarp-day', day.replace('day_',''));
228 el.setAttribute('fullnarp-time', time.replace('time_',''));
229 el.setAttribute('fullnarp-room', room.replace('room',''));
230 el.classList.remove('pending');
231
232 if (!from_server) {
233 el.classList.add('pending');
234 if (ws && ws.readyState === WebSocket.OPEN) {
235 var message = {
236 lastupdate: window.lastupdate,
237 setevent: event_id,
238 day: el.getAttribute('fullnarp-day'),
239 room: el.getAttribute('fullnarp-room'),
240 time: el.getAttribute('fullnarp-time')
241 }
242 ws.send(JSON.stringify(message));
243 console.log('Sent:', message);
244 } else {
245 el.classList.remove('pending');
246 el.classList.add('failed');
247 }
248 }
249
250 /* When moving an element, conflict may have been resolved ... */
251 document.querySelectorAll('.conflict').forEach(elem => mark_conflict(elem));
252
253 /* ... or introduced */
254 mark_conflict(el);
255 mark_avail(el);
256 if (document.body.classList.contains('showcorrweb')) {
257 document.querySelectorAll('.corrweb').forEach(elem => elem.remove());
258 document.querySelectorAll('.event').forEach(elem => show_all_correlates(elem));
259 }
260}
261
262function signalFullnarpConnect(state) {
263 document.body.classList.remove('fullnarp-connected', 'fullnarp-connecting', 'fullnarp-disconnected');
264 document.body.classList.add(state);
265}
266
267function getFullnarpData(lastupdate) {
268 signalFullnarpConnect('fullnarp-connecting');
269 ws = new WebSocket('wss://erdgeist.org/38C3/halfnarp/fullnarp-ws');
270
271 ws.onopen = () => {
272 console.log('Connected to WebSocket server');
273 //stateElement.textContent = 'Connected';
274 };
275
276 ws.onmessage = (event) => {
277 signalFullnarpConnect('fullnarp-connected');
278 const data = JSON.parse(event.data);
279 console.log('Received:', data);
280 for (const [eventid, event_new] of Object.entries(data.data)) {
281 if (document.getElementById(eventid))
282 set_all_attributes(eventid, 'day_'+event_new['day'], 'room'+event_new['room'], 'time_'+event_new['time'], true )
283 }
284 window.lastupdate = data.current_version;
285 current_version_string = ('00000'+data.current_version).slice(-5);
286 document.querySelector('.version').innerHTML = '<a href="https://erdgeist.org/38C3/halfnarp/versions/fullnarp_'+current_version_string+'.json">Version: '+data.current_version+'</a>';
287 };
288
289 ws.onerror = (error) => {
290 console.error('WebSocket error:', error);
291 };
292
293 ws.onclose = () => {
294 console.log('Disconnected from WebSocket server');
295 signalFullnarpConnect('fullnarp-disconnected');
296 // stateElement.textContent = 'Disconnected';
297 // Optionally attempt to reconnect after a delay
298 setTimeout(getFullnarpData, 5000);
299 };
300};
301
302function do_the_fullnarp() {
303 var halfnarpAPI = 'talks_38C3.json';
304 var fullnarpAPI = 'votes_38c3.json';
305 var allrooms = ['1','2','3']
306 var allminutes = ['00','05','10','15','20','25','30','35','40','45','50','55']
307 var allhours = ['10','11','12','13','14','15','16','17','18','19','20','21','22','23','00','01','02'];
308 var alldays = ['1','2','3','4'];
309 var voted = 0;
310 window.event_speakers = {};
311 window.votes = {};
312
313 /* Add handler for type ahead search input field */
314 var filter = document.getElementById('filter');
315
316 filter.onpaste = filter.oncut = filter.onkeypress = filter.onkeydown = filter.onkeyup = function() {
317 var cnt = this.value.toLowerCase();
318 if( cnt.length )
319 document.querySelectorAll('.event').forEach(elem => elem.style.display = (elem.textContent || elem.innerText || '').toLowerCase().includes(cnt) ? "block" : "none" );
320 else
321 document.querySelectorAll('.event').forEach(elem => elem.style.display = "block");
322 };
323
324 /* Add click handlers for event div sizers */
325 document.querySelector('.vsmallboxes').onclick = function() {
326 document.body.classList.remove('size-medium', 'size-large');
327 document.body.classList.add('size-small');
328 };
329
330 document.querySelector('.vmediumboxes').onclick = function() {
331 document.body.classList.remove('size-small', 'size-large');
332 document.body.classList.add('size-medium');
333 };
334
335 document.querySelector('.vlargeboxes').onclick = function() {
336 document.body.classList.remove('size-small', 'size-medium');
337 document.body.classList.add('size-large');
338 };
339
340 /* Add callbacks for view selector */
341 document.querySelector('.vlist').onclick = function() { toggle_grid(0); };
342 document.querySelector('.vday1').onclick = function() { toggle_grid(1); };
343 document.querySelector('.vday2').onclick = function() { toggle_grid(2); };
344 document.querySelector('.vday3').onclick = function() { toggle_grid(3); };
345 document.querySelector('.vday4').onclick = function() { toggle_grid(4); };
346 document.querySelector('.vdays').onclick = function() { toggle_grid(5); };
347
348 document.querySelector('.vleft').onclick = function() { document.body.classList.toggle('still-left'); };
349 document.querySelector('.vhalf').onclick = function() { document.body.classList.toggle('absolute'); };
350 document.querySelector('.vcorr').onclick = display_correlation;
351 document.querySelector('.vlang').onclick = function() { document.body.classList.toggle('languages'); };
352 document.querySelector('.vtrack').onclick = function() { document.body.classList.toggle('all-tracks'); };
353 document.querySelector('.vweb').onclick = function() {
354 if (document.body.classList.contains('showcorrweb'))
355 document.querySelectorAll('.corrweb').forEach(elem => elem.remove());
356 else
357 document.querySelectorAll('.event').forEach(elem => show_all_correlates(elem));
358 document.body.classList.toggle('showcorrweb');
359 };
360
361 /* Make the trashbin a drop target */
362 var trash = document.querySelector('.trashbin');
363 trash.setAttribute('dropzone','move');
364 trash.ondragover = function (event) {
365 event.preventDefault(); // allows us to drop
366 this.classList.add('over');
367 return false;
368 };
369 trash.ondragleave = function (event) { this.classList.remove('over'); };
370 trash.ondrop = function (event) {
371 event.stopPropagation();
372 set_all_attributes(event.dataTransfer.getData('Text'), 'day_0', 'room_0', 'time_0000', false);
373 return false;
374 };
375
376 /* Create hour guides */
377 for (hour of allhours) {
378 var elem = document.createElement('hr');
379 elem.classList.add('guide', 'time_' + hour + '00');
380 document.body.append(elem);
381 elem = document.createElement('div');
382 elem.textContent = hour + '00';
383 elem.classList.add('guide', 'time_' + hour + '00');
384 document.body.append(elem);
385
386 for (minute of allminutes) {
387 for (room of allrooms) {
388 for (day of alldays) {
389 elem = document.createElement('div');
390 elem.classList.add('grid', 'time_' + hour + minute, 'day_' + day, 'room' + room );
391 elem.textContent = minute;
392 elem.setAttribute('dropzone', 'move');
393 elem.setAttribute('hour', '' + hour + minute);
394 elem.setAttribute('day', '' + day);
395 elem.setAttribute('room', room);
396 document.body.append(elem);
397 elem.ondragover = function (event) {
398 event.preventDefault(); // allows us to drop
399 this.classList.add('over');
400 return false;
401 }
402 elem.ondragleave = function (event) { this.classList.remove('over'); }
403 elem.ondrop = function (event) {
404 event.stopPropagation();
405 set_all_attributes(event.dataTransfer.getData('Text'), 'day_' + this.getAttribute('day'), 'room' + this.getAttribute('room'), 'time_' + this.getAttribute('hour'), false );
406 /* Don't go back to list view on successful drop */
407 document.body.classList.remove('was-list');
408 return false;
409 }
410 }
411 }
412 }
413 }
414
415 /* Fetch list of votes to display */
416 fetch(`${fullnarpAPI}?format=json`)
417 .then(response => {
418 if (!response.ok) {
419 throw new Error(`HTTP error when fetching fullnarp data! status: ${response.status}`);
420 }
421 return response.json();
422 }).then(data => {
423 window.raw_votes = data;
424 for (eventidlist of data)
425 for (eventid of eventidlist)
426 window.votes[eventid] = 1 + (window.votes[eventid] || 0 );
427 if( ++voted == 2 ) {
428 window.lastupdate = 0;
429 distribute_votes();
430 getFullnarpData(0);
431 }
432 }).catch(error => {
433 console.error('Fetch error:', error);
434 });
435
436
437 /* Fetch list of lectures to display */
438 fetch(`${halfnarpAPI}?format=json`)
439 .then(response => {
440 if (!response.ok) {
441 throw new Error(`HTTP error when fetching halfnarp data! status: ${response.status}`);
442 }
443 return response.json();
444 }).then(data => {
445 for (item of data) {
446 /* Take copy of hidden event template div and select them, if they're in
447 list of previous prereferences */
448 var t = document.getElementById('template').cloneNode(true);
449 var event_id = item.event_id.toString();
450 t.classList.add('event', 'duration_' + item.duration, 'lang_' + (item.language || 'en'));
451 t.setAttribute('event_id', event_id);
452 t.setAttribute('id', 'event_' + event_id)
453 t.setAttribute( 'fullnarp-duration', item.duration);
454
455 /* Sort textual info into event div */
456 t.querySelector('.title').textContent = item.title;
457 t.querySelector('.speakers').textContent = item.speaker_names;
458 t.querySelector('.abstract').append(item.abstract);
459
460 /* Store speakers and their availabilities */
461 window.event_speakers[event_id] = item.speakers;
462 for (speaker of item.speakers) {
463 var have_avails = false;
464 if (!speaker.availabilities)
465 console.log("Foo");
466 for (avail of speaker.availabilities) {
467 if (avail.id ) {
468 have_avails = true;
469 break;
470 }
471 }
472 if (!have_avails)
473 t.classList.add('has_unavailable_speaker');
474 }
475
476 t.setAttribute('draggable', 'true');
477
478 /* Make the event drag&droppable */
479 t.ondragstart = function( event, ui ) {
480 event.stopPropagation();
481
482 event.dataTransfer.setData('text/plain', this.id );
483 event.dataTransfer.dropEffect = 'move';
484 event.dataTransfer.effectAllowed = 'move';
485 event.target.classList.add('is-dragged');
486 }
487
488 /* While dragging make source element small enough to allow
489 dropping below its original area */
490 t.ondrag = function( event, ui ) {
491 event.stopPropagation();
492 event.target.classList.add('is-dragged');
493
494 /* When drag starts in list view, switch to calendar view */
495 if( document.body.classList.contains('in-list') ) {
496 toggle_grid(5);
497 document.body.classList.add('was-list');
498 }
499 if( document.body.classList.contains('in-drag') )
500 return;
501
502 document.body.classList.add('in-drag');
503 /* mark all possible drop points regarding to availability */
504 for (hour of allhours)
505 for (minute of allminutes)
506 for (day of alldays)
507 document.querySelectorAll('.grid.day_'+day+'.time_'+hour+minute).forEach(elem => elem.classList.toggle('possible', check_avail(event.target, day, hour+minute)));
508
509 }
510
511 t.ondragend = function( event, ui ) {
512 event.stopPropagation();
513
514 /* We removed in-list and the drop did not succeed. Go back to list view */
515 if (document.body.classList.contains('was-list'))
516 toggle_grid(0);
517
518 document.querySelectorAll('.over').forEach(elem => elem.classList.remove('over'));
519 document.querySelectorAll('.is-dragged').forEach(elem => elem.classList.remove('id-dragged'));
520 document.querySelectorAll('.possible').forEach(elem => elem.classList.remove('possible'));
521 document.body.classList.remove('in-drag', 'was-list');
522 }
523
524 /* start_time: 2014-12-29T21:15:00+01:00" */
525 var start_time = new Date(item.start_time);
526
527 var day = start_time.getDate()-26;
528 var hour = start_time.getHours();
529 var mins = start_time.getMinutes();
530
531 /* After midnight: sort into yesterday */
532 if( hour < 9 )
533 day--;
534
535 /* Fix up room for 38c3 */
536 room = (item.room_id || 'room_unknown').toString().replace('471','room1').replace('472','room2').replace('473','room3');
537
538 /* Apply attributes to sort events into calendar */
539 t.classList.add(room, 'day_' + day, 'time_' + (hour<10?'0':'') + hour + (mins<10?'0':'') + mins);
540 t.setAttribute('fullnarp-day', day);
541 t.setAttribute('fullnarp-time', (hour<10?'0':'') + hour + (mins<10?'0':'') + mins );
542 t.setAttribute('fullnarp-room', room.replace('room',''));
543
544 mark_avail(t);
545
546 t.onclick = function(event) {
547 _this = this;
548 document.body.classList.remove('in-drag');
549 if (document.body.classList.contains('correlate')) {
550 document.querySelectorAll('.selected').forEach(elem => elem.classList.remove('selected'));
551 document.querySelectorAll('.event').forEach(elem => mark_correlation(elem, _this));
552 }
553 _this.classList.toggle('selected');
554 document.querySelectorAll('.info').forEach(elem => elem.classList.add('hidden'));
555 event.stopPropagation();
556 }
557
558 /* Put new event into DOM tree. Track defaults to 'Other' */
559 var track = item.track_id.toString();
560 t.classList.add('track_' + track );
561 var d = document.getElementById(track);
562 if (!d)
563 d = document.querySelector('#Other');
564 d.append(t);
565 };
566
567 if( ++voted == 2 ) {
568 window.lastupdate = 0;
569 distribute_votes();
570 getFullnarpData(0);
571 }
572 }).catch(error => {
573 console.error('Fetch error:', error);
574 });
575
576 document.onkeypress = function(e) {
577 document.body.classList.remove('in-drag');
578 if( document.activeElement.tagName == 'INPUT' || document.activeElement.tagName == 'TEXTAREA' )
579 return;
580 switch( e.charCode ) {
581 case 115: case 83: /* s */
582 var selected = document.querySelectorAll('.selected');
583 if( selected.length != 2 ) return;
584
585 var id0 = selected[0].getAttribute('id');
586 var day0 = selected[0].getAttribute('fullnarp-day');
587 var hour0 = selected[0].getAttribute('fullnarp-time');
588 var room0 = selected[0].getAttribute('fullnarp-room');
589
590 var id1 = selected[1].getAttribute('id');
591 var day1 = selected[1].getAttribute('fullnarp-day');
592 var hour1 = selected[1].getAttribute('fullnarp-time');
593 var room1 = selected[1].getAttribute('fullnarp-room');
594
595 set_all_attributes(id0, day1, room1, hour1, false);
596 set_all_attributes(id1, day0, room0, hour0, false);
597
598 break;
599 case 48: case 94: /* 0 */
600 toggle_grid(5);
601 break;
602 case 49: case 50: case 51: case 52: /* 1-4 */
603 toggle_grid(e.charCode-48);
604 break;
605 case 76: case 108: /* l */
606 toggle_grid(0);
607 break;
608 case 68: case 100: /* d */
609 toggle_grid(5);
610 break;
611 case 73: case 105: /* i */
612 document.body.classList.remove('all-tracks');
613 document.body.classList.toggle('languages');
614 break;
615 case 65: case 97: /* a */
616 case 72: case 104: /* h */
617 document.body.classList.toggle('absolute');
618 break;
619 case 81: case 113: /* q */
620 document.querySelectorAll('.selected').forEach(elem => elem.classList.remove('selected'));
621 break;
622 case 84: case 116: /* t */
623 document.body.classList.remove('languages');
624 document.body.classList.toggle('all-tracks');
625 break;
626 case 85: case 117: /* u */
627 document.body.classList.toggle('still-left');
628 break;
629 case 67: case 99: /* c */
630 display_correlation();
631 break;
632 case 87: case 119: /* w */
633 if (document.body.classList.contains('showcorrweb'))
634 document.querySelectorAll('.corrweb').forEach(elem => elem.remove());
635 else
636 document.querySelectorAll('.event').forEach(elem => show_all_correlates(elem));
637 document.body.classList.toggle('showcorrweb');
638 break;
639 }
640 };
641}
diff --git a/static/halfnarp.js b/static/halfnarp.js
new file mode 100644
index 0000000..878f3ab
--- /dev/null
+++ b/static/halfnarp.js
@@ -0,0 +1,510 @@
1function toggle_grid(whichDay) {
2 var vclasses= [['in-list'], ['in-calendar', 'onlyday1'], ['in-calendar', 'onlyday2'], ['in-calendar', 'onlyday3'],
3 ['in-calendar', 'onlyday4'], ['in-calendar', 'alldays']];
4 document.body.classList.remove( 'alldays', 'onlyday1', 'onlyday2', 'onlyday3', 'onlyday4', 'in-list', 'in-calendar');
5 if( whichDay < 0 || whichDay > 5 ) return;
6 document.body.classList.add(...vclasses[whichDay]);
7 document.getElementById('qrcode').classList.toggle('limit', whichDay == 0);
8}
9
10function toggle_corr_mode() {
11 if (!document.body.classList.contains('correlate'))
12 document.body.classList.remove('all-tracks', 'languages', 'classifiers');
13 document.querySelectorAll('.event').forEach(elem => elem.setAttribute('corr', ''));
14 }
15 document.body.classList.toggle('correlate');
16}
17
18function toggle_classifier(classifier, is_track, is_range) {
19 if (document.body.classList.contains('classifiers') && document.body.getAttribute('classifiers') == classifier) {
20 document.body.classList.remove('classifiers');
21 return;
22 }
23 var default_intensity = 0, prefix = '';
24 if (is_range) {
25 default_intensity = 5;
26 prefix = '+';
27 }
28 is_range = is_range ? '+' : '';
29 for (ev of window.top.all_events) {
30 if (ev.event_classifiers) {
31 var intensity = default_intensity;
32 // if track selector and empty, set to 80%
33 if (ev.event_classifiers[classifier])
34 intensity = Math.round(ev.event_classifiers[classifier] / 10);
35 $('#event_'+ev.event_id).attr('intensity', prefix + intensity);
36 }
37 }
38 document.body.classList.add('classifiers');
39 document.body.classList.remove('all-tracks', 'languages', 'correlate');
40 document.body.setAttribute('classifier', classifier);
41}
42
43function set_random_event() {
44 var keys = Object.keys(all_events).filter(function(event_id) {
45 return $('#event_'+event_id+'.selected').length == 0 &&
46 $('#event_'+event_id+'.rejected').length == 0;
47 });
48
49 if (keys.length == 0) {
50 $('.narpr').toggleClass('hidden');
51 return;
52 }
53
54 item = all_events[keys[ keys.length * Math.random() << 0]];
55 $('.narpr_title').text(item.title || '');
56 $('.narpr_track').text(item.track_name || '');
57 $('.narpr_subtitle').text(item.subtitle || '');
58 $('.narpr_speakers').text(item.speaker_names || '');
59 $('.narpr_abstract').html(item.abstract || '');
60 window.narpr_event = item.event_id;
61}
62
63function redraw_qrcode(ids) {
64 if (!ids)
65 ids = $('.selected').map( function() { return $(this).attr('event_id'); }).get();
66 if ($('#qrcode').hasClass('hidden') && ids.length == 0 )
67 return;
68 var request = JSON.stringify({'talk_ids': ids});
69 var size = 68;
70 if($('body').hasClass('qrcode-huge')) {
71 size = 400;
72 }
73
74 $('#qrcode').empty();
75 $('#qrcode').qrcode({width: size, height: size, text: request});
76 $('#qrcode').removeClass('hidden');
77}
78
79function redraw_calendar(myuid, ids) {
80 if (!ids)
81 ids = $('.selected').map( function() { return $(this).attr('event_id'); }).get();
82
83 var now = new Date();
84 var calendar = 'BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//events.ccc.de//halfnarp//EN\r\nX-WR-TIMEZONE:Europe/Berlin\r\n';
85 ids.forEach( function(id) {
86 var item = all_events[id];
87 if ('start_time' in item) {
88
89 var start = new Date(item.start_time);
90 calendar += 'BEGIN:VEVENT\r\n';
91 calendar += 'UID:'+myuid+item.event_id+'\r\n';
92 calendar += 'DTSTAMP:' + now.toISOString().replace(/-|;|:|\./g, '').replace(/...Z$/, 'Z') + '\r\n';
93 calendar += 'DTSTART:' + start.toISOString().replace(/-|;|:|\./g, '').replace(/...Z$/, 'Z') + '\r\n';
94 calendar += 'DURATION:PT' + item.duration + 'S\r\n';
95 calendar += 'LOCATION:' + item.room_name + '\r\n';
96 calendar += 'URL:http://events.ccc.de/congress/2023/Fahrplan/events/' + item.event_id + '.html\r\n';
97 calendar += 'SUMMARY:' + item.title + '\r\n';
98 calendar += 'DESCRIPTION:' + item.abstract.replace(/\n|\r/g, ' ') + '\r\n';
99 // console.log( 'id:' + id + ' ' + all_events[id] );
100 // console.log( all_events[id].title );
101 calendar += 'END:VEVENT\r\n';
102 }
103 });
104 calendar += 'END:VCALENDAR\r\n';
105 $('.export-url-a').attr( 'href', "data:text/calendar;filename=38C3.ics," + encodeURIComponent(calendar) );
106 $('.export-url').removeClass( 'hidden' );
107}
108
109function do_the_halfnarp() {
110// var halfnarpAPI = 'talks_36C3.json';
111 var halfnarpAPI = '/-/talkpreferences';
112 var halfnarpCorrs = 'corr_array_38c3.json';
113 var halfnarpPubAPI = halfnarpAPI + '/public/';
114 var isTouch = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0));
115 window.top.all_events = new Object();
116 window.top.narpr_rejected = new Array();
117 var myuid, mypid, newfriend = new Object();
118 var allhours = ['10', '11','12','13','14','15','16','17','18','19','20','21','22','23','00','01','02','03'];
119
120 $('.narpr_done').click( function(ev) {
121 $('.narpr').toggleClass('hidden', true);
122 if (!window.narpr_alerted) {
123 window.narpr_alerted = true;
124 alert("Thank you for using narpr(β). Don't forget to SUBMIT!");
125 }
126 });
127
128 $('.narpr').on({ 'touchstart' : function(ev) {
129 // alert("foo: " + ev.originalEvent.touches[0].clientX );
130 window.touch_startX = ev.originalEvent.touches[0].clientX;
131 window.touch_curX = ev.originalEvent.touches[0].clientX;
132 window.touch_valid = true;
133 $('.narpr').css('background', '#ddd');
134 } });
135
136 $('.narpr').on({ 'touchmove' : function(ev) {
137 var narp_view = $('.narpr');
138 if (ev.originalEvent.touches.length > 1) {
139 narp_view.css('background', 'white');
140 window.touch_valid = false;
141 }
142 if (!window.touch_valid)
143 return;
144 if (ev.originalEvent.touches[0].clientX > window.touch_startX + 100)
145 narp_view.css('background', 'green');
146 else if (ev.originalEvent.touches[0].clientX < window.touch_startX - 100)
147 narp_view.css('background', 'red');
148 else
149 narp_view.css('background', '#ddd');
150 window.touch_curX = ev.originalEvent.touches[0].clientX;
151
152 // console.log(narp_view[0].clientHeight + ':' + narp_view[0].scrollHeight);
153 if( narp_view[0].clientHeight >= narp_view[0].scrollHeight)
154 ev.preventDefault();
155 } });
156
157 $('.narpr').on({ 'touchend' : function(ev) {
158 if (!window.touch_valid)
159 return;
160 if (window.touch_curX > window.touch_startX + 100) {
161 $('#event_'+window.narpr_event).toggleClass('selected', true);
162 set_random_event();
163 }
164 if (window.touch_curX < window.touch_startX - 100) {
165 $('#event_'+window.narpr_event).toggleClass('selected', false);
166 $('#event_'+window.narpr_event).toggleClass('rejected', true);
167 set_random_event();
168 }
169
170 $('.narpr').css('background', 'white');
171 } });
172
173 /* Add callback for submit click */
174 $('.submit').click( function() {
175 var myapi;
176
177 /* Get user's preferences and try to save them locally */
178 var ids = $('.selected').map( function() {
179 return $(this).attr('event_id');
180 }).get();
181 try {
182 localStorage['38C3-halfnarp'] = ids;
183 myapi = localStorage.getItem('38C3-halfnarp-api');
184 if (myapi) {
185 myapi = myapi.replace(/.*?:\//g, "");
186 myapi = 'https:/' + myapi.replace(/.*?:\//g, "");
187 }
188 } catch(err) {
189 alert('Storing your choices locally is forbidden.');
190 }
191
192 /* Convert preferences to JSON and post them to backend */
193 var request = JSON.stringify({'talk_ids': ids});
194 if( !myapi || !myapi.length ) {
195 /* If we do not have resource URL, post data and get resource */
196 $.ajax({
197 type: 'POST',
198 url: halfnarpAPI + '/',
199 data: request,
200 headers: {
201 'Accept': 'application/json',
202 'Content-Type': 'application/json'
203 },
204 contentType: "text/plain",
205 dataType: 'json',
206 }).done(function(data) {
207 $('.info').text('submitted');
208 $('.info').removeClass('hidden');
209 try {
210 localStorage['38C3-halfnarp-api'] = data['update_url'];
211 localStorage['38C3-halfnarp-pid'] = mypid = data['hashed_uid'];
212 localStorage['38C3-halfnarp-uid'] = myuid = data['uid'];
213 window.location.hash = mypid;
214 } catch(err) {}
215 }, 'json' ).fail(function() {
216 $('.info').text('failed :(');
217 $('.info').removeClass('hidden');
218 });
219 } else {
220 /* If we do have a resource URL, update resource */
221 $.ajax({
222 type: 'PUT',
223 url: myapi,
224 data: request,
225 contentType: "application/json",
226 dataType: 'json',
227 }).done(function(data) {
228 localStorage['38C3-halfnarp-uid'] = myuid = data['uid'];
229 if( localStorage['38C3-halfnarp-pid'] ) {
230 window.location.hash = localStorage['38C3-halfnarp-pid'];
231 }
232 $('.info').text('updated');
233 $('.info').removeClass('hidden');
234 }).fail(function(msg) {
235 $('.info').text('failed :(');
236 $('.info').removeClass('hidden');
237 });
238 }
239
240 /* Tell QRCode library to update and/or display preferences for Apps */
241 redraw_qrcode(ids);
242
243 if (myuid)
244 redraw_calendar(myuid, ids);
245 });
246
247 /* Add handler for type ahead search input field */
248 var filter = document.getElementById('filter');
249 filter.onpaste = filter.oncut = filter.onkeypress = filter.onkeydown = filter.onkeyup = function() {
250 var cnt = this.value.toLowerCase();
251 if( cnt.length )
252 document.querySelectorAll('.event').forEach(elem => elem.style.display = (elem.textContent || elem.innerText || '').toLowerCase().includes(cnt) ? "initial" : "none" );
253 else
254 document.querySelectorAll('.event').forEach(elem => elem.style.display = "initial");
255 };
256
257 /* Add click handlers for event div sizers */
258 document.querySelector('.vsmallboxes').onclick = function() {
259 document.body.classList.remove('size-medium', 'size-large');
260 document.body.classList.add('size-small');
261 };
262
263 document.querySelector('.vmediumboxes').onclick = function() {
264 document.body.classList.remove('size-small', 'size-large');
265 document.body.classList.add('size-medium');
266 };
267
268 document.querySelector('.vlargeboxes').onclick = function() {
269 document.body.classList.remove('size-small', 'size-medium');
270 document.body.classList.add('size-large');
271 };
272
273 /* Add de-highlighter on touch interface devices */
274 if( isTouch ) {
275 document.body.onclick = function() {
276 document.querySelector('.highlighted').forEach(elem => elem.classList.remove('highlighted'));
277 };
278 document.querySelector('.touch-only').forEach(elem => elem.classList.remove('hidden'));
279 }
280
281 /* Add callbacks for view selector */
282 document.querySelector('.vlist').onclick = function() { toggle_grid(0); };
283 document.querySelector('.vday1').onclick = function() { toggle_grid(1); };
284 document.querySelector('.vday2').onclick = function() { toggle_grid(2); };
285 document.querySelector('.vday3').onclick = function() { toggle_grid(3); };
286 document.querySelector('.vday4').onclick = function() { toggle_grid(4); };
287 document.querySelector('.vdays').onclick = function() { toggle_grid(5); };
288
289 document.querySelector('.vlang').onclick = function() { document.body.classList.toggle('languages'); };
290 document.querySelector('.vtrack').onclick = function() { document.body.classList.toggle('all-tracks'); };
291 document.querySelector('.vnarpr').onclick = function() { $('.narpr').toggleClass('hidden'); set_random_event(); };
292
293 document.querySelector('.vcorr').onclick = toggle_corr_mode;
294
295 $('.vclass').click( function() { toggle_classifier( $(this).attr('classifier'), $(this).hasClass('track'), $(this).hasClass('two_poles')); });
296
297 /* Create hour guides */
298 for (hour of allhours) {
299 var elem = document.createElement('hr');
300 elem.classList.add('guide', 'time_' + hour + '00');
301 document.body.append(elem);
302 elem = document.createElement('div');
303 elem.textContent = hour + '00';
304 elem.classList.add('guide', 'time_' + hour + '00');
305 document.body.append(elem);
306 }
307
308 /* If we've been here before, try to get local preferences. They are authoratative */
309 var selection = [], friends = { };
310 try {
311 selection = localStorage['38C3-halfnarp'] || [];
312 friends = localStorage['38C3-halfnarp-friends'] || { };
313 myuid = localStorage['38C3-halfnarp-uid'] || '';
314 mypid = localStorage['38C3-halfnarp-pid'] || '';
315 } catch(err) {
316 }
317
318 /* Fetch list of lectures to display */
319 $.getJSON( halfnarpAPI, { format: 'json' })
320 .done(function( data ) {
321 $.each( data, function( i, item ) {
322 /* Save event to all_events hash */
323 all_events[item.event_id] = item;
324
325 /* Take copy of hidden event template div and select them, if they're in
326 list of previous prereferences */
327 var t = $( '#template' ).clone(true);
328 var event_id = item.event_id.toString();
329 t.addClass('event ' + ' lang_' + (item.language || 'en'));
330 t.attr('event_id', item.event_id.toString());
331 t.attr('id', 'event_' + item.event_id.toString());
332 if( selection && selection.indexOf(item.event_id) != -1 ) {
333 t.addClass( 'selected' );
334 }
335
336 /* Sort textual info into event div */
337 t.find('.title').text(item.title);
338 t.find('.speakers').text(item.speaker_names);
339 t.find('.abstract').append(item.abstract);
340
341 if (item.event_classifiers && item.event_classifiers['Foundations'] && item.event_classifiers['Foundations'] > 40.0)
342 t.addClass('foundation');
343
344 /* start_time: 2014-12-29T21:15:00+01:00" */
345 var start_time = new Date(item.start_time);
346
347 var day = start_time.getUTCDate() - 26;
348 var hour = start_time.getUTCHours() + 1;
349 var mins = start_time.getUTCMinutes();
350
351 /* After midnight: sort into yesterday */
352 if( hour < 9 )
353 day--;
354 if( hour > 23)
355 hour -= 24;
356
357 /* Fix up room for 38C3 */
358 room = (item.room_id || '').toString().replace('1','room1').replace('2','room2').replace('3','room3');
359
360 /* Apply attributes to sort events into calendar */
361 t.addClass(room + ' duration_' + item.duration + ' day_'+day + ' time_' + (hour<10?'0':'') + hour + '' + (mins<10?'0':'') + mins);
362
363 t.click( function(event) {
364 if ($('body').hasClass('correlate')) {
365 mark_corr($(this).attr('event_id'));
366 event.stopPropagation();
367 return;
368 }
369 /* Transition for touch devices is highlighted => selected => highlighted ... */
370 if( isTouch ) {
371 if ( $( this ).hasClass('highlighted') ) {
372 $( this ).toggleClass('selected');
373 $('.info').addClass('hidden');
374 } else {
375 $('.highlighted').removeClass('highlighted');
376 $( this ).addClass('highlighted');
377 }
378 } else {
379 $( this ).toggleClass('selected');
380 $('.info').addClass('hidden');
381 }
382 event.stopPropagation();
383 });
384 /* Put new event into DOM tree. Track defaults to 'Other' */
385 try {
386 var track = item.track_id.toString();
387 } catch(e) {
388 var track = "Other";
389 }
390 var d = $( '#' + track );
391 t.addClass('track_' + track );
392 if( !d.length ) {
393 d = $( '#Other' );
394 }
395 d.append(t);
396 if( newfriend.pid ) {
397 newfriend.prefs.forEach( function( eventid ) {
398 $( '#event_' + eventid ).addClass( 'friend' );
399 });
400 }
401 });
402
403 $.getJSON( halfnarpCorrs, { format: 'json' }).done(function(data) { window.top.all_votes = data; });
404 toggle_grid(5);
405
406 /* Check for a new friends public uid in location's #hash */
407 var shared = window.location.hash;
408 shared = shared ? shared.substr(1) : '';
409 if( shared.length ) {
410 if ( ( friends[shared] ) || ( shared === mypid ) ) {
411
412 } else {
413 $.getJSON( halfnarpPubAPI + shared, { format: 'json' })
414 .done(function( data ) {
415 newfriend.pid = shared;
416 newfriend.prefs = data.talk_ids;
417 newfriend.prefs.forEach( function( eventid ) {
418 $( '#event_' + eventid ).addClass( 'friend' );
419 });
420 });
421 }
422 }
423 // window.location.hash = '';
424
425 ids = $('.selected').map( function() { return $(this).attr('event_id'); }).get();
426 if (ids.length) {
427 redraw_qrcode(ids);
428 if (myuid)
429 redraw_calendar(myuid, ids);
430 }
431
432 $('#qrcode').click( function() {
433 $('body').toggleClass('qrcode-huge');
434 redraw_qrcode();
435 });
436
437 /* Update friends cache */
438 for( var friend in friends ) {
439 $.getJSON( halfnarpPubAPI + friends.pid, { format: 'json' })
440 .done(function( data ) {
441 friend.prefs = data.talk_ids;
442 localStorage['38C3-halfnarp-friends'] = friends;
443 update_friends();
444 });
445 }
446
447 });
448 document.onkeypress = function(e) {
449 if( document.activeElement.tagName == 'INPUT' || document.activeElement.tagName == 'TEXTAREA' )
450 return;
451 switch( e.keyCode ) {
452 case 48: case 94: /* 0 */
453 toggle_grid(5);
454 break;
455 case 49: case 50: case 51: case 52: /* 1-4 */
456/* toggle_grid(e.keyCode-48); */
457 break;
458 case 76: case 108: /* l */
459 toggle_grid(0);
460 break;
461 case 68: case 100: /* d */
462/* toggle_grid(5); */
463 break;
464 case 73: case 105: /* i */
465 document.body.classList.remove('all-tracks');
466 document.body.classList.toggle('languages');
467 break;
468 case 84: case 116: /* t */
469 document.body.classList.remove('languages');
470 document.body.classList.toggle('all-tracks');
471 break;
472 case 67: case 99: /* c */
473/* toggle_corr_mode(); */
474 break;
475 }
476 };
477}
478
479function mark_corr(eid) {
480 /* If JSON with votes is not there, bail */
481 if (!all_votes) return;
482
483 /* Reset correlation markers */
484 document.querySelectorAll('.event').forEach(elem => elem.setAttribute('corr', '');
485
486 /* Get index of reference event id */
487 var eoff = all_votes.event_ids.indexOf(eid);
488 if (eoff==-1) return;
489
490 document.querySelectorAll('.event').forEach( function(dest) {
491 var destid = dest.getAttribute('event_id');
492 /* mark reference event at another place */
493 if (destid == eid) {
494 dest.setAttribute('corr', 'x');
495 return;
496 }
497
498 var destoff = all_votes.event_ids.indexOf(destid);
499 if (destoff==-1) {
500 dest.setAttribute('corr', '0');
501 return;
502 }
503
504 /* Only the smaller event-id's string has the info */
505 if (eoff < destoff)
506 dest.setAttribute('corr', all_votes.event_corrs[eoff].charAt(destoff-eoff-1));
507 else
508 dest.setAttribute('corr', all_votes.event_corrs[destoff].charAt(eoff-destoff-1));
509 });
510}
diff --git a/static/jquery-1.11.1.min.js b/static/jquery-1.11.1.min.js
new file mode 100644
index 0000000..ab28a24
--- /dev/null
+++ b/static/jquery-1.11.1.min.js
@@ -0,0 +1,4 @@
1/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
2!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),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("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;
3if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
4},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/static/jquery-3.7.1.min.js b/static/jquery-3.7.1.min.js
new file mode 100644
index 0000000..7f37b5d
--- /dev/null
+++ b/static/jquery-3.7.1.min.js
@@ -0,0 +1,2 @@
1/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
2!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(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},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:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.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||v(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&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+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]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(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},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},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(c(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(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(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&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(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&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(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 U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);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&&C){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=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,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(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===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]||I.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]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(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(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(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=I.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(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(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:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?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=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!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 q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(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]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[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?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(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 Z(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 ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(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=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(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=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=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]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(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&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.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(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.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 ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.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&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.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){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.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},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.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 ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(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,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.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=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(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},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(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[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(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(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.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&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.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=z.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.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=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.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 ne={};function re(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]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={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 Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(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"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.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<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(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)Le(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=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.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),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.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)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.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<ce(i,this).index(l):ce.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(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(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[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,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&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.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:!0},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(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=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Me=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Me,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.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 $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(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&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(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&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",J.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="box-sizing:content-box;border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[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+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!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,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.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=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.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=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.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):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.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=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),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:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.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=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.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=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(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),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.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&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._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--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.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]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.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=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(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?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.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&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.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||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.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})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.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=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(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(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.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=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.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)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.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||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.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]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(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)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},zt="*/".concat("*"),Xt=C.createElement("a");function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.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 Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.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:{"*":zt,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":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),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=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.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=Wt.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($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+"//"+Xt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Mt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.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]?", "+zt+"; 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=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.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&&ie.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)),!i&&-1<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),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"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.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]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(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 v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!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(Yt[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&&ie.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()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.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 ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<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)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.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),v(t)&&(t=t.call(e,n,ce.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)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.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"===ce.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"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(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)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(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?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.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)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.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){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce});
diff --git a/static/jquery.qrcode.min.js b/static/jquery.qrcode.min.js
new file mode 100644
index 0000000..fe9680e
--- /dev/null
+++ b/static/jquery.qrcode.min.js
@@ -0,0 +1,28 @@
1(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
2write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
3for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
47,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
50<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
6setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
7j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
8b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
9c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
100,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
11(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
1278,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
13j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
14a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
15a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
162)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
17LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
18this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
19[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
20116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
2143,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
223,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
2355,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
2445,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
25(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
26correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
27j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
28d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery);
diff --git a/static/style_38c3.css b/static/style_38c3.css
new file mode 100644
index 0000000..33bb0f3
--- /dev/null
+++ b/static/style_38c3.css
@@ -0,0 +1,950 @@
1body {
2 font-family: "HelveticaNeueLight", "HelveticaNeue-Light", "Helvetica Neue Light", "HelveticaNeue", "Helvetica Neue", 'TeXGyreHerosRegular', "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; font-weight:300; font-stretch:normal;
3 padding-bottom: 12rem;
4 height: 1px;
5}
6
7body:after {
8 content: ".";
9 clear: both;
10 display: block;
11 visibility: hidden;
12 height: 12rem;
13}
14
15div, p, a, li, td { -webkit-text-size-adjust:none; }
16
17body,
18header {
19 min-width: 640px;
20}
21
22.narpr {
23 position: fixed;
24 top: 3em;
25 bottom: 9rem;
26 left: 3em;
27 border: 4px solid black;
28 background: white;
29 width: 88%;
30 padding: 1em;
31 min-height: 50em;
32 border-radius: 10px;
33 overflow-y:scroll;
34 overflow-x:hidden;
35
36 user-select: none;
37 -webkit-user-select: none;
38 -ms-user-select: none;
39 -webkit-touch-callout: none;
40 -o-user-select: none;
41 -moz-user-select: none;
42}
43.narpr_swpipy.large {
44 font-size: 20em;
45}
46.narpr_swipy {
47 background: linear-gradient(to right, #0084B0 00%, #00A356 100% );
48 background-size: 200% auto;
49 -webkit-background-clip: text;
50 -webkit-text-fill-color: transparent;
51 font-variant: small-caps;
52 font-size: 4em;
53 position: relative;
54 top: 20px;
55 text-align: center;
56 width: 100%;
57
58 color: #000;
59 background-clip: text;
60 text-fill-color: transparent;
61 -webkit-background-clip: text;
62 -webkit-text-fill-color: transparent;
63}
64
65.narpr-beta {
66 display: inline-block;
67 float: right;
68 width: 4em;
69 background: linear-gradient(to right, #0084B0 -100%, #00A356 200% );
70 border: 2px black solid;
71 margin-left: 2em;
72 margin-bottom: 2em;
73 padding-top: 1.0em;
74 padding-bottom: 1.5em;
75 text-align: center;
76 font-weight: bold;
77 color: white !important;
78 border-radius: 10px;
79 cursor: pointer;
80}
81
82.narpr_done {
83 float: right;
84 bottom: 0px;
85 margin-top: 1em;
86 padding: 0.2em;
87 font-size: 3em;
88 background: linear-gradient(to right, #0084B0 -100%, #00A356 200% );
89 border: 2px black solid;
90 font-color: white;
91 border-radius: 10px;
92 cursor: pointer;
93}
94
95.narpr_done:hover {
96 background: black;
97 color: white;
98}
99
100.narpr_track {
101 color: grey;
102 font-size: 3em;
103 font-variant: small-caps;
104 margin-top: 1em;
105}
106
107.narpr_title {
108 font-size: 4em;
109 font-weight: bold;
110}
111
112.narpr_subtitle {
113 font-size: 3em;
114}
115.narpr_speakers {
116 font-size: 3em;
117 font-style: italic;
118 padding: 0.2em 0.2em 0.2em 0.4em;
119 margin-bottom: 1em;
120}
121.narpr_abstract {
122 font-size: 2em;
123}
124
125.intro {
126 float: left;
127 font-size: 1em;
128 max-width: 50%;
129 width: auto;
130 padding-left: 0.5em;
131}
132
133.track-list {
134 padding-top: 1em;
135 float: right;
136 max-width: 40%;
137 width: auto;
138 text-align: right;
139 max-height: 300px;
140 overflow: hidden;
141}
142
143@media (max-width: 800px) {
144.footer,
145.track-list {
146 font-size: 0.8em;
147}
148}
149
150.headline {
151 font-size: 3em;
152 font-weight: bold;
153 text-align: center;
154 margin-bottom: 1em;
155}
156
157.rightbox {
158 float: right;
159 max-width: 50%;
160}
161
162.leftbox {
163 float: left;
164 max-width: 100%;
165}
166
167.submit {
168 font-size: 1em;
169 text-align: center;
170 text-transform: uppercase;
171 height: 1em;
172 background: green; color: white;
173
174 padding: 1em;
175 border-radius: 5px;
176 float: right;
177 cursor: pointer;
178 margin: 1rem;
179}
180
181.submit svg{
182 fill :#fff;
183 float: right;
184 height: 1em;
185 margin-left: 1em;
186}
187
188.export-url,
189.info {
190 font-size: 1em;
191 font-weight: bold;
192 text-align: center;
193 vertical-align: middle;
194
195 height: 1em;
196 background: lightblue;
197
198 margin: 1rem 0.5rem 1rem;
199 border-radius: 5px;
200 padding: 1em;
201 float: right;
202}
203
204.submit:hover {
205 background: #000;
206 transition: background 0.5s;
207}
208
209#filter {
210 font-size: 1em;
211 border-radius: 5px;
212 line-height: 1em;
213 height: 1em;
214 padding: 0.8em;
215 margin: 1em;
216 min-width: 250px;
217}
218
219.clear {
220 clear: both;
221}
222
223.explainer {
224 margin: 0 auto;
225 width: 50%;
226 max-width: 80em;
227 text-align: center;
228}
229
230.explainer ul {
231 list-style-type: none;
232 padding:0;
233 margin:0;
234 height: 8em;
235 overflow: hidden;
236}
237
238.boxer {
239 font-size: 1em;
240 float: left;
241 width: 2em;
242 height: 2em;
243 background: grey;
244 color: white;
245 text-align: center;
246 margin-right: 0.2em;
247 padding: 0.2em 0 0 0;
248 cursor: pointer;
249 border-radius: 5px;
250}
251
252.allboxes {
253 clear: left;
254}
255
256.vmediumboxes {
257 width: 3em;
258 height: 3em;
259}
260
261.vlargeboxes {
262 width: 4em;
263 height: 4em;
264}
265
266.inline-button {
267 display: block;
268 background: grey;
269 margin-right: 0.2em;
270 padding: 2em 0 0 0;
271 text-align: center;
272 color: white;
273 width: 5em;
274 height: 3em;
275 cursor: pointer;
276 border-radius: 5px;
277}
278
279.views {
280 display: inline-block;
281 background: grey;
282 margin-right: 0.2em;
283 padding: 0.2em 0 0 0;
284 text-align: center;
285 color: white;
286 width: 3em;
287 height: 2em;
288 cursor: pointer;
289 border-radius: 5px;
290}
291
292.inline-button:hover,
293.views:hover,
294.boxer:hover {
295 background: #eee;
296}
297
298.track h2 {
299 text-align: center;
300
301 border-bottom: 0.3em solid #4588ba;
302
303 margin: 2em 0 1em 0;
304 clear: both;
305}
306
307.version {
308 position: absolute;
309 top: 4px;
310 right: 4px;
311}
312.trashbin {
313 position: absolute;
314 top 4px;
315 left: 4px;
316 text-align: center;
317 border: 1px silver dotted;
318 border-radius: 0.2em;
319 background: #ddd;
320 padding: 1em;
321}
322.in-list .trashbin {
323 visibility: hidden;
324 display: none;
325}
326.trashbin.over {
327 background: red;
328}
329
330/* Our main event box */
331.event {
332 overflow: hidden;
333
334 background: #eee;
335 border-radius: 5px;
336
337 margin: 0 0.8em 0.8em 0;
338 cursor: pointer;
339}
340
341.event .speakers,
342.event .abstract {
343 font-size: 0.8em;
344}
345
346.event .abstract p:first-of-type {
347 margin-top: 0;
348 padding-top: 0.2em;
349}
350
351/* If tagged as in-list, display and stack them to the left */
352.in-list .event {
353 display: inline-block;
354 visibility: visible;
355 float: left;
356}
357
358.in-list .event:hover {
359 position: relative;
360 top: auto !important;
361}
362
363.event.selected {
364 background: green;
365}
366
367/* Outer glow for selected events in other display modes */
368.languages .event.selected,
369.all-tracks .event.selected,
370.correlate .event.selected {
371 box-shadow: 0px 0px 20px 5px rgba(100,200,40,1);
372}
373
374.foundation:before {
375 float: right;
376 content: ' ';
377 border: 0.8em red solid;
378 border-bottom-left-radius: 2em; margin-top: 0; margin-left: 0;
379 width: 0;
380 height: 0;
381 color: red;
382 background-color: red;
383}
384
385.selected.friend {
386 background-image:
387 repeating-linear-gradient(
388 45deg,
389 purple,
390 purple 20px,
391 green 20px,
392 green 40px /* determines size */
393 ) !important;
394 color: white;
395}
396.friend {
397 background: purple;
398 color: white;
399}
400
401.in-calendar .room-label {
402 font-size: 2em;
403}
404
405.in-calendar.alldays .room-label {
406 font-size: 1em;
407}
408
409/* Events in calendar view are only visible if the have a date */
410.in-calendar.alldays .event.day_1, .in-calendar.onlyday1 .event.day_1,
411.in-calendar.alldays .event.day_2, .in-calendar.onlyday2 .event.day_2,
412.in-calendar.alldays .event.day_3, .in-calendar.onlyday3 .event.day_3,
413.in-calendar.alldays .event.day_4, .in-calendar.onlyday4 .event.day_4 {
414 display: block;
415 visibility: visible;
416}
417
418/* span a grid */
419.grid {
420 position: absolute;
421 text-align: center;
422 z-index: -1;
423 opacity: 0.25;
424}
425
426.grid.possible {
427 background: blue;
428}
429
430.wholeday {
431 position: absolute;
432 text-align: center;
433 padding-top: 1em;
434 font-size: 2em;
435 top: 350px;
436 opacity: 0.3;
437 z-position: -3;
438}
439.wholeday.uneven {
440 background-color: cyan;
441}
442
443.wholeblock {
444 position: absolute;
445 background-color: yellow;
446 opacity: 0.4;
447 z-position: -3;
448}
449.in-calendar.onlyday1 .wholeblock,
450.in-calendar.onlyday2 .wholeblock,
451.in-calendar.onlyday3 .wholeblock,
452.in-calendar.onlyday4 .wholeblock
453{
454 width: 100%;
455}
456
457.grid.over {
458 background-color: lime;
459}
460
461.room-label {
462 text-align: center;
463 font-size: 2em;
464 font-weight: bold;
465 top: 350px;
466}
467
468.views.vday4 {
469 margin-right: 3em;
470}
471
472.guide {
473 position: absolute;
474 z-index: -1;
475 font-weight: bold;
476}
477
478hr.guide {
479 left: 4%;
480 width: 95%;
481}
482
483.ende, .pause {
484 background-color: pink;
485 color: white;
486 text-align: center;
487 left: 0;
488 right: 0;
489 z-position: -1;
490}
491
492.size-large .pause {
493 font-size: 9em;
494}
495
496.size-medium .pause {
497 font-size: 7em;
498}
499
500.size-small .pause {
501 font-size: 4em;
502}
503
504/* togglable view selectors */
505.absolute .vhalf { background: red; }
506.correlate .vcorr { background: red; }
507.still-left .vleft { background: red; }
508.languages .vlang { background: red; }
509.showcorrweb .vweb { background: red; }
510.all-tracks .vtrack { background: red; }
511.in-list .vlist { background: red; }
512.size-large .vlargeboxes { background: red; }
513.size-medium .vmediumboxes { background: red; }
514.size-small .vsmallboxes { background: red; }
515.in-calendar.alldays .vdays { background: red; }
516.in-calendar.onlyday1 .vday1 { background: red; }
517.in-calendar.onlyday2 .vday2 { background: red; }
518.in-calendar.onlyday3 .vday3 { background: red; }
519.in-calendar.onlyday4 .vday4 { background: red; }
520
521/* Rule for when stuff is hidden */
522.in-list .guide,
523.in-list .grid,
524.in-list .room-label,
525.in-calendar .track h2,
526.in-calendar .event:not(.day_1):not(.day_2):not(.day_3):not(.day_4),
527.in-list .corr-warn,
528.in-list.still-left .day_1,
529.in-list.still-left .day_2,
530.in-list.still-left .day_3,
531.in-list.still-left .day_4,
532.onlyday1 .day_2, .onlyday1 .day_3, .onlyday1 .day_4,
533.onlyday2 .day_1, .onlyday2 .day_3, .onlyday2 .day_4,
534.onlyday3 .day_1, .onlyday3 .day_2, .onlyday3 .day_4,
535.onlyday4 .day_1, .onlyday4 .day_2, .onlyday4 .day_3,
536.onlyday1 .wholeday, .onlyday2 .wholeday, .onlyday3 .wholeday, .onlyday4 .wholeday {
537 visibility: hidden !important;
538 display: none !important;
539}
540
541.in-calendar.alldays .event.workshop,
542.in-calendar.onlyday1 .event.workshop,
543.in-calendar.onlyday2 .event.workshop,
544.in-calendar.onlyday3 .event.workshop,
545.in-calendar.onlyday4 .event.workshop,
546.in-calendar.alldays .workshop.room-label,
547.in-calendar.onlyday1 .workshop.room-label,
548.in-calendar.onlyday2 .workshop.room-label,
549.in-calendar.onlyday3 .workshop.room-label,
550.in-calendar.onlyday4 .workshop.room-label
551 {
552 visibility: hidden;
553 display: none;
554}
555
556/* Events in list that have a date set, will be marked */
557.fullnarp.in-list .event.day_1,
558.fullnarp.in-list .event.day_2,
559.fullnarp.in-list .event.day_3,
560.fullnarp.in-list .event.day_4 {
561 background-color: blue;
562 color: white;
563}
564
565.title {
566 font-weight: bold;
567 font-size: 1.1em;
568 padding: 0.2em 0.2em 0 0.2em;
569 background-color: initial;
570}
571
572.speakers {
573 font-style: italic;
574 padding: 0.2em 0.2em 0.2em 0.4em;
575}
576
577.abstract {
578 padding: 0 0.2em 0.2em 0.2em;
579 border-radius: 0 0 5px 5px;
580}
581
582.title:hover,
583.abstract:hover,
584.speakers:hover,
585.event:hover .speakers,
586.event:hover .abstract,
587.event:hover .title,
588.speakers:hover + .abstract,
589.title:hover + .speakers + .abstract {
590 background: initial;
591 background-color: inherit;
592}
593
594.selected:hover,
595.friend:hover {
596 background: lime !important;
597 color: black !important;
598}
599
600/* Halfnarp results */
601.event .absval {
602 display: none;
603}
604
605.absolute .event .absval,
606.correlate .event .absval {
607 visibility: visible !important;
608 display: block !important;
609 text-align: center;
610 font-size: 2em;
611 color: white;
612 background: transparent;
613 top: 0;
614 width: 100%;
615 font-weight: bold;
616}
617
618.languages .lang_de { background: pink !important; }
619.languages .lang_en { background: cyan !important; }
620.corr-hint { display: none; font-weight: bold; }
621.correlate .corr-hint { display: initial !important; }
622
623.has_unavailable_speaker { border-style: dashed !important; }
624
625.in-calendar .class_2000.room6, .in-calendar .class_1000.room6, .in-calendar .class_500.room6,
626.in-calendar .class_2000.roomg, .in-calendar .class_1000.roomg,
627.in-calendar .class_2000.room2 {
628 background-image:
629 repeating-linear-gradient(
630 45deg,
631 #eee,
632 #eee 20px,
633 #ddd 20px,
634 #ddd 40px /* determines size */
635 );
636}
637
638/* Events in calendar where speakers are unavailable, will be marked */
639.in-calendar .unavailable {
640 background-image:
641 repeating-linear-gradient(
642 45deg,
643 black,
644 black 20px,
645 red 20px,
646 red 40px /* determines size */
647 ) !important;
648 color: white;
649}
650
651/* Events in calendar where speakers are unavailable, will be marked */
652.in-calendar .conflict {
653 background-image:
654 repeating-linear-gradient(
655 45deg,
656 black,
657 black 20px,
658 yellow 20px,
659 yellow 40px /* determines size */
660 ) !important;
661 color: red;
662}
663
664body.in-list .corrweb {
665 display: none !important;
666}
667
668.r, .rr, .rrr, .rrrr, .l, .ll, .lll, .llll {
669 position: absolute;
670 border: 8px solid;
671 height: 20px;
672 pointer-events: none;
673}
674
675.r, .rr, .l, .ll {
676 border-bottom: none;
677 border-top-right-radius: 50% 50%;
678 border-top-left-radius: 50% 50%;
679}
680
681.rrr, .rrrr, .lll, .llll {
682 border-top: none;
683 border-bottom-right-radius: 50%;
684 border-bottom-left-radius: 50%;
685}
686
687.corr_d_0 { border-color: #f0f0f0; }
688.corr_d_1 { border-color: #d0d0d0; }
689.corr_d_2 { border-color: #b0b0b0; }
690.corr_d_3 { border-color: #909090; }
691.corr_d_4 { border-color: #707070; }
692.corr_d_5 { border-color: #505050; }
693.corr_d_6 { border-color: #303030; }
694.corr_d_7 { border-color: #101010; }
695.corr_d_8 { border-color: #000000; }
696.corr_d_9 { border-color: #000000; }
697.corr_d_x { border-color: #0000ff; }
698
699.rr, .ll { margin-top: 15px; }
700.rr.room2, .rr.room4, .ll.room2, .ll.room4 { margin-top: 25px; }
701.rrr, .lll { margin-top: 35px; }
702.rrr.room2, .lll.room5 { margin-top: 45px; }
703.rrrr, .llll { margin-top: 55px; }
704
705/* FAQ */
706dt {
707 font-weight: bold;
708}
709
710dl {
711 width: 45em;
712 margin: auto;
713}
714
715/* to quickly hide elements */
716
717.hidden {
718 visibility: hidden !important;
719 display: none !important;
720}
721
722.pending {
723 -webkit-box-shadow: 0px 0px 20px 5px rgba(255,255,0,1);
724 -moz-box-shadow: 0px 0px 20px 5px rgba(255,255,0,1);
725 box-shadow: 0px 0px 20px 5px rgba(255,255,0,1);
726}
727.pending-delete {
728 opacity: 0.25;
729}
730.failed {
731 -webkit-box-shadow: 0px 0px 20px 5px rgba(255,0,0,1);
732 -moz-box-shadow: 0px 0px 20px 5px rgba(255,0,0,1);
733 box-shadow: 0px 0px 20px 5px rgba(255,0,0,1);
734}
735
736#qrcode {
737 display: inline-block;
738 float: right;
739 cursor: pointer;
740 margin: 5px 0.8em 0;
741 padding 0;
742 border: 0;
743 width: 68px;
744 height: 68px;
745}
746
747.qrcode-huge #qrcode {
748 position: fixed;
749 border: white 40px solid !important;
750 display: block;
751 top: 20%;
752 left: 50%;
753 margin-left: -200px;
754 width: 400px;
755 height: 400px;
756 padding: 0;
757}
758
759*[draggable=true] {
760 cursor: move;
761}
762
763/* Boring lists */
764
765body.absolute .class_5000 { background: #000000 !important; color: white !important; }
766body.absolute .class_2000 { background: #101010 !important; color: white !important; }
767body.absolute .class_1000 { background: #404040 !important; color: white !important; }
768body.absolute .class_500 { background: #707070 !important; color: white !important; }
769body.absolute .class_200 { background: #a0a0a0 !important; }
770body.absolute .class_100 { background: #c0c0c0 !important; }
771
772body.correlate .event[corr="0"] { background: #f0f0f0 !important; color: black !important; }
773body.correlate .event[corr="1"] { background: #d0d0d0 !important; color: black !important; }
774body.correlate .event[corr="2"] { background: #b0b0b0 !important; color: black !important; }
775body.correlate .event[corr="3"] { background: #909090 !important; color: black !important; }
776body.correlate .event[corr="4"] { background: #707070 !important; color: white !important; }
777body.correlate .event[corr="5"] { background: #505050 !important; color: white !important; }
778body.correlate .event[corr="6"] { background: #303030 !important; color: white !important; }
779body.correlate .event[corr="7"] { background: #101010 !important; color: white !important; }
780body.correlate .event[corr="8"] { background: #000000 !important; color: white !important; }
781body.correlate .event[corr="9"] { background: #000000 !important; color: white !important; }
782body.correlate .event[corr="x"] { background: #0000ff !important; color: white !important; }
783
784body.classifiers .event[intensity="10"] { background: #000000 !important; color: white !important; }
785body.classifiers .event[intensity="9"] { background: #1A1A1A !important; color: white !important; }
786body.classifiers .event[intensity="8"] { background: #333333 !important; color: white !important; }
787body.classifiers .event[intensity="7"] { background: #4D4D4D !important; color: white !important; }
788body.classifiers .event[intensity="6"] { background: #666666 !important; color: white !important; }
789body.classifiers .event[intensity="5"] { background: #808080 !important; color: black !important; }
790body.classifiers .event[intensity="4"] { background: #999999 !important; color: black !important; }
791body.classifiers .event[intensity="3"] { background: #B3B3B3 !important; color: black !important; }
792body.classifiers .event[intensity="2"] { background: #CCCCCC !important; color: black !important; }
793body.classifiers .event[intensity="1"] { background: #E6E6E6 !important; color: black !important; }
794body.classifiers .event[intensity="0"] { background: #FFFFFF !important; color: black !important; }
795
796body.classifiers .event[intensity="+0"] { background: #FF7F00 !important; color: white !important; }
797body.classifiers .event[intensity="+1"] { background: #E67F1A !important; color: white !important; }
798body.classifiers .event[intensity="+2"] { background: #CC7F33 !important; color: white !important; }
799body.classifiers .event[intensity="+3"] { background: #B37F4D !important; color: white !important; }
800body.classifiers .event[intensity="+4"] { background: #997F66 !important; color: white !important; }
801body.classifiers .event[intensity="+5"] { background: #807F80 !important; color: white !important; }
802body.classifiers .event[intensity="+6"] { background: #667F99 !important; color: white !important; }
803body.classifiers .event[intensity="+7"] { background: #4D7FB3 !important; color: white !important; }
804body.classifiers .event[intensity="+8"] { background: #337FCC !important; color: white !important; }
805body.classifiers .event[intensity="+9"] { background: #1A7FE6 !important; color: white !important; }
806body.classifiers .event[intensity="+10"] { background: #007FFF !important; color: white !important; }
807
808body.classifiers .legend,
809body.classifiers .vclass
810{ background: grey !important; border-color: grey; }
811
812body.classifiers[classifier="Ethics, Politics + Society"] .vclass[classifier="Ethics, Politics + Society"],
813body.classifiers[classifier="Entertainment"] .vclass[classifier="Entertainment"],
814body.classifiers[classifier="Art + Culture"] .vclass[classifier="Art + Culture"],
815body.classifiers[classifier="Security"] .vclass[classifier="Security"],
816body.classifiers[classifier="Resilience"] .vclass[classifier="Resilience"],
817body.classifiers[classifier="Science"] .vclass[classifier="Science"],
818body.classifiers[classifier="Hardware"] .vclass[classifier="Hardware"],
819body.classifiers[classifier="Foundations"] .vclass[classifier="Foundations"]
820{ background-color: red !important; border-color: red; }
821
822body.classifiers[classifier="Defense - Offense"] .vclass[classifier="Defense - Offense"],
823body.classifiers[classifier="Theory - Practice"] .vclass[classifier="Theory - Practice"],
824body.classifiers[classifier="Novelty"] .vclass[classifier="Novelty"]
825{
826 background: linear-gradient(left, #ff7f00, #007fff) !important;
827 background: -webkit-linear-gradient(left, #ff7f00, #007fff) !important;
828 background: -o-linear-gradient(left, #ff7f00, #007fff) !important;
829 background: -moz-linear-gradient(left, #ff7f00, #007fff) !important;
830 border: red 2px solid;
831}
832
833.in-calendar.size-large.alldays .event { font-size: 0.8em; }
834.in-calendar.size-medium.alldays .event { font-size: 0.6em; }
835.in-calendar.size-medium .event { font-size: 0.9em; }
836.in-calendar.size-small.alldays .event { font-size: 0.4em; }
837.in-calendar.size-small .event { font-size: 0.8em; }
838
839.size-medium .event { font-size: 1.2em; }
840.size-large .event { font-size: 1.5em; }
841.in-list.size-small .event { width: 10em; }
842.in-list.size-medium .event { width: 12em; }
843.in-list.size-large .event { width: 14em; }
844
845.halfnarp.size-small.in-list .event { min-height: 10em; max-height: 10em; }
846.halfnarp.size-medium.in-list .event { min-height: 12em; max-height: 12em; }
847.halfnarp.size-large.in-list .event { min-height: 14em; max-height: 14em; }
848
849.track_1 { border: 2px solid #b99745; } /* A&C */
850.track_2 { border: 2px solid #45b964; } /* CCC */
851.track_3 { border: 2px solid #45b964; } /* Entertainment */
852.track_4 { border: 2px solid #a8563f; } /* Hardware */
853.track_5 { border: 2px solid #45b9b3; } /* Science */
854.track_6 { border: 2px solid #5057af; } /* Security */
855.track_7 { border: 2px solid #b550bd; } /* ESP */
856
857.all-tracks .track_1 { background-color: #F9B000 !important; background-image: none !important; color: black; } /* A&C */
858.all-tracks .track_2 { background-color: #4d4d4c !important; background-image: none !important; } /* CCC */
859.all-tracks .track_3 { background-color: #4d4d4c !important; background-image: none !important; } /* Entertainment */
860.all-tracks .track_4 { background-color: #44357E !important; background-image: none !important; } /* Hardware */
861.all-tracks .track_5 { background-color: #00A356 !important; background-image: none !important; } /* Science */
862.all-tracks .track_6 { background-color: #18386B !important; background-image: none !important; color: white; } /* Security */
863.all-tracks .track_7 { background-color: #E40429 !important; background-image: none !important; } /* ESP */
864
865.vclass,
866.legend,
867.two_poles {
868 display: inline-block;
869 border-radius: 5px;
870 color: white;
871 margin-left: 1em;
872 margin-bottom: 0.2em;
873 padding: 0.3em;
874}
875.vclass {
876 background: orange;
877 cursor: pointer;
878}
879.two_poles {
880 border: solid white 2px;
881 background: linear-gradient(left, #ff7f00, #007fff);
882 background: -webkit-linear-gradient(left, #ff7f00, #007fff);
883 background: -o-linear-gradient(left, #ff7f00, #007fff);
884 background: -moz-linear-gradient(left, #ff7f00, #007fff);
885}
886.vclass:hover {
887 background: grey !important;
888 border-color: grey;
889}
890
891.in-calendar .event:hover,
892.highlighted {
893 max-height: initial !important;
894 /* overflow: visible; */
895 z-index: 1;
896 background: #333;
897 color: white;
898}
899
900.in-calendar.in-drag .event.is-dragged,
901.in-calendar.in-drag .highlighted {
902 max-height: 10px !important;
903 height: 10px !important;
904 overflow: hidden !important;
905 opacity: 0.5;
906 pointer-events: none;
907}
908
909.in-list .event:hover,
910.highlighted {
911 overflow: visible;
912 z-index: 1;
913 background: #333;
914 color: white;
915}
916
917.footer{
918 position: fixed;
919 background-color: #c3c3c3;
920 min-width: 640px;
921 width: 100%;
922 bottom: 0;
923 left:0;
924 right: 0;
925}
926
927.header{
928 width: 100%;
929 display: block;
930}
931
932.header__right{
933 float: right;
934}
935
936label{
937 display: block;
938 line-height: 1.5em;
939 padding: 1em;
940 padding-bottom: 0;
941 font-size: 0.75em;
942}
943
944.footer__filter-side{
945 float: left;
946}
947
948a{
949 color: #000;
950}
diff --git a/static/style_38c3_tables.css b/static/style_38c3_tables.css
new file mode 100644
index 0000000..1588f2c
--- /dev/null
+++ b/static/style_38c3_tables.css
@@ -0,0 +1,1048 @@
1.size-large .time_1000 { top: 400px; }
2.size-large .time_1005 { top: 425.0px; }
3.size-large .time_1010 { top: 450.0px; }
4.size-large .time_1015 { top: 475.0px; }
5.size-large .time_1020 { top: 500.0px; }
6.size-large .time_1025 { top: 525.0px; }
7.size-large .time_1030 { top: 550.0px; }
8.size-large .time_1035 { top: 575.0px; }
9.size-large .time_1040 { top: 600.0px; }
10.size-large .time_1045 { top: 625.0px; }
11.size-large .time_1050 { top: 650.0px; }
12.size-large .time_1055 { top: 675.0px; }
13.size-large .time_1100 { top: 700.0px; }
14.size-large .time_1105 { top: 725.0px; }
15.size-large .time_1110 { top: 750.0px; }
16.size-large .time_1115 { top: 775.0px; }
17.size-large .time_1120 { top: 800.0px; }
18.size-large .time_1125 { top: 825.0px; }
19.size-large .time_1130 { top: 850.0px; }
20.size-large .time_1135 { top: 875.0px; }
21.size-large .time_1140 { top: 900.0px; }
22.size-large .time_1145 { top: 925.0px; }
23.size-large .time_1150 { top: 950.0px; }
24.size-large .time_1155 { top: 975.0px; }
25.size-large .time_1200 { top: 1000.0px; }
26.size-large .time_1205 { top: 1025.0px; }
27.size-large .time_1210 { top: 1050.0px; }
28.size-large .time_1215 { top: 1075.0px; }
29.size-large .time_1220 { top: 1100.0px; }
30.size-large .time_1225 { top: 1125.0px; }
31.size-large .time_1230 { top: 1150.0px; }
32.size-large .time_1235 { top: 1175.0px; }
33.size-large .time_1240 { top: 1200.0px; }
34.size-large .time_1245 { top: 1225.0px; }
35.size-large .time_1250 { top: 1250.0px; }
36.size-large .time_1255 { top: 1275.0px; }
37.size-large .time_1300 { top: 1300.0px; }
38.size-large .time_1305 { top: 1325.0px; }
39.size-large .time_1310 { top: 1350.0px; }
40.size-large .time_1315 { top: 1375.0px; }
41.size-large .time_1320 { top: 1400.0px; }
42.size-large .time_1325 { top: 1425.0px; }
43.size-large .time_1330 { top: 1450.0px; }
44.size-large .time_1335 { top: 1475.0px; }
45.size-large .time_1340 { top: 1500.0px; }
46.size-large .time_1345 { top: 1525.0px; }
47.size-large .time_1350 { top: 1550.0px; }
48.size-large .time_1355 { top: 1575.0px; }
49.size-large .time_1400 { top: 1600.0px; }
50.size-large .time_1405 { top: 1625.0px; }
51.size-large .time_1410 { top: 1650.0px; }
52.size-large .time_1415 { top: 1675.0px; }
53.size-large .time_1420 { top: 1700.0px; }
54.size-large .time_1425 { top: 1725.0px; }
55.size-large .time_1430 { top: 1750.0px; }
56.size-large .time_1435 { top: 1775.0px; }
57.size-large .time_1440 { top: 1800.0px; }
58.size-large .time_1445 { top: 1825.0px; }
59.size-large .time_1450 { top: 1850.0px; }
60.size-large .time_1455 { top: 1875.0px; }
61.size-large .time_1500 { top: 1900.0px; }
62.size-large .time_1505 { top: 1925.0px; }
63.size-large .time_1510 { top: 1950.0px; }
64.size-large .time_1515 { top: 1975.0px; }
65.size-large .time_1520 { top: 2000.0px; }
66.size-large .time_1525 { top: 2025.0px; }
67.size-large .time_1530 { top: 2050.0px; }
68.size-large .time_1535 { top: 2075.0px; }
69.size-large .time_1540 { top: 2100.0px; }
70.size-large .time_1545 { top: 2125.0px; }
71.size-large .time_1550 { top: 2150.0px; }
72.size-large .time_1555 { top: 2175.0px; }
73.size-large .time_1600 { top: 2200.0px; }
74.size-large .time_1605 { top: 2225.0px; }
75.size-large .time_1610 { top: 2250.0px; }
76.size-large .time_1615 { top: 2275.0px; }
77.size-large .time_1620 { top: 2300.0px; }
78.size-large .time_1625 { top: 2325.0px; }
79.size-large .time_1630 { top: 2350.0px; }
80.size-large .time_1635 { top: 2375.0px; }
81.size-large .time_1640 { top: 2400.0px; }
82.size-large .time_1645 { top: 2425.0px; }
83.size-large .time_1650 { top: 2450.0px; }
84.size-large .time_1655 { top: 2475.0px; }
85.size-large .time_1700 { top: 2500.0px; }
86.size-large .time_1705 { top: 2525.0px; }
87.size-large .time_1710 { top: 2550.0px; }
88.size-large .time_1715 { top: 2575.0px; }
89.size-large .time_1720 { top: 2600.0px; }
90.size-large .time_1725 { top: 2625.0px; }
91.size-large .time_1730 { top: 2650.0px; }
92.size-large .time_1735 { top: 2675.0px; }
93.size-large .time_1740 { top: 2700.0px; }
94.size-large .time_1745 { top: 2725.0px; }
95.size-large .time_1750 { top: 2750.0px; }
96.size-large .time_1755 { top: 2775.0px; }
97.size-large .time_1800 { top: 2800.0px; }
98.size-large .time_1805 { top: 2825.0px; }
99.size-large .time_1810 { top: 2850.0px; }
100.size-large .time_1815 { top: 2875.0px; }
101.size-large .time_1820 { top: 2900.0px; }
102.size-large .time_1825 { top: 2925.0px; }
103.size-large .time_1830 { top: 2950.0px; }
104.size-large .time_1835 { top: 2975.0px; }
105.size-large .time_1840 { top: 3000.0px; }
106.size-large .time_1845 { top: 3025.0px; }
107.size-large .time_1850 { top: 3050.0px; }
108.size-large .time_1855 { top: 3075.0px; }
109.size-large .time_1900 { top: 3100.0px; }
110.size-large .time_1905 { top: 3125.0px; }
111.size-large .time_1910 { top: 3150.0px; }
112.size-large .time_1915 { top: 3175.0px; }
113.size-large .time_1920 { top: 3200.0px; }
114.size-large .time_1925 { top: 3225.0px; }
115.size-large .time_1930 { top: 3250.0px; }
116.size-large .time_1935 { top: 3275.0px; }
117.size-large .time_1940 { top: 3300.0px; }
118.size-large .time_1945 { top: 3325.0px; }
119.size-large .time_1950 { top: 3350.0px; }
120.size-large .time_1955 { top: 3375.0px; }
121.size-large .time_2000 { top: 3400.0px; }
122.size-large .time_2005 { top: 3425.0px; }
123.size-large .time_2010 { top: 3450.0px; }
124.size-large .time_2015 { top: 3475.0px; }
125.size-large .time_2020 { top: 3500.0px; }
126.size-large .time_2025 { top: 3525.0px; }
127.size-large .time_2030 { top: 3550.0px; }
128.size-large .time_2035 { top: 3575.0px; }
129.size-large .time_2040 { top: 3600.0px; }
130.size-large .time_2045 { top: 3625.0px; }
131.size-large .time_2050 { top: 3650.0px; }
132.size-large .time_2055 { top: 3675.0px; }
133.size-large .time_2100 { top: 3700.0px; }
134.size-large .time_2105 { top: 3725.0px; }
135.size-large .time_2110 { top: 3750.0px; }
136.size-large .time_2115 { top: 3775.0px; }
137.size-large .time_2120 { top: 3800.0px; }
138.size-large .time_2125 { top: 3825.0px; }
139.size-large .time_2130 { top: 3850.0px; }
140.size-large .time_2135 { top: 3875.0px; }
141.size-large .time_2140 { top: 3900.0px; }
142.size-large .time_2145 { top: 3925.0px; }
143.size-large .time_2150 { top: 3950.0px; }
144.size-large .time_2155 { top: 3975.0px; }
145.size-large .time_2200 { top: 4000.0px; }
146.size-large .time_2205 { top: 4025.0px; }
147.size-large .time_2210 { top: 4050.0px; }
148.size-large .time_2215 { top: 4075.0px; }
149.size-large .time_2220 { top: 4100.0px; }
150.size-large .time_2225 { top: 4125.0px; }
151.size-large .time_2230 { top: 4150.0px; }
152.size-large .time_2235 { top: 4175.0px; }
153.size-large .time_2240 { top: 4200.0px; }
154.size-large .time_2245 { top: 4225.0px; }
155.size-large .time_2250 { top: 4250.0px; }
156.size-large .time_2255 { top: 4275.0px; }
157.size-large .time_2300 { top: 4300.0px; }
158.size-large .time_2305 { top: 4325.0px; }
159.size-large .time_2310 { top: 4350.0px; }
160.size-large .time_2315 { top: 4375.0px; }
161.size-large .time_2320 { top: 4400.0px; }
162.size-large .time_2325 { top: 4425.0px; }
163.size-large .time_2330 { top: 4450.0px; }
164.size-large .time_2335 { top: 4475.0px; }
165.size-large .time_2340 { top: 4500.0px; }
166.size-large .time_2345 { top: 4525.0px; }
167.size-large .time_2350 { top: 4550.0px; }
168.size-large .time_2355 { top: 4575.0px; }
169.size-large .time_0000 { top: 4600.0px; }
170.size-large .time_0005 { top: 4625.0px; }
171.size-large .time_0010 { top: 4650.0px; }
172.size-large .time_0015 { top: 4675.0px; }
173.size-large .time_0020 { top: 4700.0px; }
174.size-large .time_0025 { top: 4725.0px; }
175.size-large .time_0030 { top: 4750.0px; }
176.size-large .time_0035 { top: 4775.0px; }
177.size-large .time_0040 { top: 4800.0px; }
178.size-large .time_0045 { top: 4825.0px; }
179.size-large .time_0050 { top: 4850.0px; }
180.size-large .time_0055 { top: 4875.0px; }
181.size-large .time_0100 { top: 4900.0px; }
182.size-large .time_0105 { top: 4925.0px; }
183.size-large .time_0110 { top: 4950.0px; }
184.size-large .time_0115 { top: 4975.0px; }
185.size-large .time_0120 { top: 5000.0px; }
186.size-large .time_0125 { top: 5025.0px; }
187.size-large .time_0130 { top: 5050.0px; }
188.size-large .time_0135 { top: 5075.0px; }
189.size-large .time_0140 { top: 5100.0px; }
190.size-large .time_0145 { top: 5125.0px; }
191.size-large .time_0150 { top: 5150.0px; }
192.size-large .time_0155 { top: 5175.0px; }
193.size-large .time_0200 { top: 5200.0px; }
194.size-large .time_0205 { top: 5225.0px; }
195.size-large .time_0210 { top: 5250.0px; }
196.size-large .time_0215 { top: 5275.0px; }
197.size-large .time_0220 { top: 5300.0px; }
198.size-large .time_0225 { top: 5325.0px; }
199.size-large .time_0230 { top: 5350.0px; }
200.size-large .time_0235 { top: 5375.0px; }
201.size-large .time_0240 { top: 5400.0px; }
202.size-large .time_0245 { top: 5425.0px; }
203.size-large .time_0250 { top: 5450.0px; }
204.size-large .time_0255 { top: 5475.0px; }
205.size-large .time_0300 { top: 5500.0px; }
206.size-large .time_0305 { top: 5525.0px; }
207.size-large .time_0310 { top: 5550.0px; }
208.size-large .time_0315 { top: 5575.0px; }
209.size-large .time_0320 { top: 5600.0px; }
210.size-large .time_0325 { top: 5625.0px; }
211.size-large .time_0330 { top: 5650.0px; }
212.size-large .time_0335 { top: 5675.0px; }
213.size-large .time_0340 { top: 5700.0px; }
214.size-large .time_0345 { top: 5725.0px; }
215.size-large .time_0350 { top: 5750.0px; }
216.size-large .time_0355 { top: 5775.0px; }
217.size-medium .time_1000 { top: 400px; }
218.size-medium .time_1005 { top: 413.3333333333333px; }
219.size-medium .time_1010 { top: 426.66666666666663px; }
220.size-medium .time_1015 { top: 439.99999999999994px; }
221.size-medium .time_1020 { top: 453.33333333333326px; }
222.size-medium .time_1025 { top: 466.6666666666666px; }
223.size-medium .time_1030 { top: 479.9999999999999px; }
224.size-medium .time_1035 { top: 493.3333333333332px; }
225.size-medium .time_1040 { top: 506.6666666666665px; }
226.size-medium .time_1045 { top: 519.9999999999999px; }
227.size-medium .time_1050 { top: 533.3333333333333px; }
228.size-medium .time_1055 { top: 546.6666666666666px; }
229.size-medium .time_1100 { top: 560.0px; }
230.size-medium .time_1105 { top: 573.3333333333334px; }
231.size-medium .time_1110 { top: 586.6666666666667px; }
232.size-medium .time_1115 { top: 600.0000000000001px; }
233.size-medium .time_1120 { top: 613.3333333333335px; }
234.size-medium .time_1125 { top: 626.6666666666669px; }
235.size-medium .time_1130 { top: 640.0000000000002px; }
236.size-medium .time_1135 { top: 653.3333333333336px; }
237.size-medium .time_1140 { top: 666.666666666667px; }
238.size-medium .time_1145 { top: 680.0000000000003px; }
239.size-medium .time_1150 { top: 693.3333333333337px; }
240.size-medium .time_1155 { top: 706.6666666666671px; }
241.size-medium .time_1200 { top: 720.0000000000005px; }
242.size-medium .time_1205 { top: 733.3333333333338px; }
243.size-medium .time_1210 { top: 746.6666666666672px; }
244.size-medium .time_1215 { top: 760.0000000000006px; }
245.size-medium .time_1220 { top: 773.3333333333339px; }
246.size-medium .time_1225 { top: 786.6666666666673px; }
247.size-medium .time_1230 { top: 800.0000000000007px; }
248.size-medium .time_1235 { top: 813.333333333334px; }
249.size-medium .time_1240 { top: 826.6666666666674px; }
250.size-medium .time_1245 { top: 840.0000000000008px; }
251.size-medium .time_1250 { top: 853.3333333333342px; }
252.size-medium .time_1255 { top: 866.6666666666675px; }
253.size-medium .time_1300 { top: 880.0000000000009px; }
254.size-medium .time_1305 { top: 893.3333333333343px; }
255.size-medium .time_1310 { top: 906.6666666666677px; }
256.size-medium .time_1315 { top: 920.000000000001px; }
257.size-medium .time_1320 { top: 933.3333333333344px; }
258.size-medium .time_1325 { top: 946.6666666666678px; }
259.size-medium .time_1330 { top: 960.0000000000011px; }
260.size-medium .time_1335 { top: 973.3333333333345px; }
261.size-medium .time_1340 { top: 986.6666666666679px; }
262.size-medium .time_1345 { top: 1000.0000000000013px; }
263.size-medium .time_1350 { top: 1013.3333333333346px; }
264.size-medium .time_1355 { top: 1026.6666666666679px; }
265.size-medium .time_1400 { top: 1040.0000000000011px; }
266.size-medium .time_1405 { top: 1053.3333333333344px; }
267.size-medium .time_1410 { top: 1066.6666666666677px; }
268.size-medium .time_1415 { top: 1080.000000000001px; }
269.size-medium .time_1420 { top: 1093.3333333333342px; }
270.size-medium .time_1425 { top: 1106.6666666666674px; }
271.size-medium .time_1430 { top: 1120.0000000000007px; }
272.size-medium .time_1435 { top: 1133.333333333334px; }
273.size-medium .time_1440 { top: 1146.6666666666672px; }
274.size-medium .time_1445 { top: 1160.0000000000005px; }
275.size-medium .time_1450 { top: 1173.3333333333337px; }
276.size-medium .time_1455 { top: 1186.666666666667px; }
277.size-medium .time_1500 { top: 1200.0000000000002px; }
278.size-medium .time_1505 { top: 1213.3333333333335px; }
279.size-medium .time_1510 { top: 1226.6666666666667px; }
280.size-medium .time_1515 { top: 1240.0px; }
281.size-medium .time_1520 { top: 1253.3333333333333px; }
282.size-medium .time_1525 { top: 1266.6666666666665px; }
283.size-medium .time_1530 { top: 1279.9999999999998px; }
284.size-medium .time_1535 { top: 1293.333333333333px; }
285.size-medium .time_1540 { top: 1306.6666666666663px; }
286.size-medium .time_1545 { top: 1319.9999999999995px; }
287.size-medium .time_1550 { top: 1333.3333333333328px; }
288.size-medium .time_1555 { top: 1346.666666666666px; }
289.size-medium .time_1600 { top: 1359.9999999999993px; }
290.size-medium .time_1605 { top: 1373.3333333333326px; }
291.size-medium .time_1610 { top: 1386.6666666666658px; }
292.size-medium .time_1615 { top: 1399.999999999999px; }
293.size-medium .time_1620 { top: 1413.3333333333323px; }
294.size-medium .time_1625 { top: 1426.6666666666656px; }
295.size-medium .time_1630 { top: 1439.9999999999989px; }
296.size-medium .time_1635 { top: 1453.3333333333321px; }
297.size-medium .time_1640 { top: 1466.6666666666654px; }
298.size-medium .time_1645 { top: 1479.9999999999986px; }
299.size-medium .time_1650 { top: 1493.333333333332px; }
300.size-medium .time_1655 { top: 1506.6666666666652px; }
301.size-medium .time_1700 { top: 1519.9999999999984px; }
302.size-medium .time_1705 { top: 1533.3333333333317px; }
303.size-medium .time_1710 { top: 1546.666666666665px; }
304.size-medium .time_1715 { top: 1559.9999999999982px; }
305.size-medium .time_1720 { top: 1573.3333333333314px; }
306.size-medium .time_1725 { top: 1586.6666666666647px; }
307.size-medium .time_1730 { top: 1599.999999999998px; }
308.size-medium .time_1735 { top: 1613.3333333333312px; }
309.size-medium .time_1740 { top: 1626.6666666666645px; }
310.size-medium .time_1745 { top: 1639.9999999999977px; }
311.size-medium .time_1750 { top: 1653.333333333331px; }
312.size-medium .time_1755 { top: 1666.6666666666642px; }
313.size-medium .time_1800 { top: 1679.9999999999975px; }
314.size-medium .time_1805 { top: 1693.3333333333308px; }
315.size-medium .time_1810 { top: 1706.666666666664px; }
316.size-medium .time_1815 { top: 1719.9999999999973px; }
317.size-medium .time_1820 { top: 1733.3333333333305px; }
318.size-medium .time_1825 { top: 1746.6666666666638px; }
319.size-medium .time_1830 { top: 1759.999999999997px; }
320.size-medium .time_1835 { top: 1773.3333333333303px; }
321.size-medium .time_1840 { top: 1786.6666666666636px; }
322.size-medium .time_1845 { top: 1799.9999999999968px; }
323.size-medium .time_1850 { top: 1813.33333333333px; }
324.size-medium .time_1855 { top: 1826.6666666666633px; }
325.size-medium .time_1900 { top: 1839.9999999999966px; }
326.size-medium .time_1905 { top: 1853.3333333333298px; }
327.size-medium .time_1910 { top: 1866.666666666663px; }
328.size-medium .time_1915 { top: 1879.9999999999964px; }
329.size-medium .time_1920 { top: 1893.3333333333296px; }
330.size-medium .time_1925 { top: 1906.6666666666629px; }
331.size-medium .time_1930 { top: 1919.9999999999961px; }
332.size-medium .time_1935 { top: 1933.3333333333294px; }
333.size-medium .time_1940 { top: 1946.6666666666626px; }
334.size-medium .time_1945 { top: 1959.999999999996px; }
335.size-medium .time_1950 { top: 1973.3333333333292px; }
336.size-medium .time_1955 { top: 1986.6666666666624px; }
337.size-medium .time_2000 { top: 1999.9999999999957px; }
338.size-medium .time_2005 { top: 2013.333333333329px; }
339.size-medium .time_2010 { top: 2026.6666666666622px; }
340.size-medium .time_2015 { top: 2039.9999999999955px; }
341.size-medium .time_2020 { top: 2053.333333333329px; }
342.size-medium .time_2025 { top: 2066.6666666666624px; }
343.size-medium .time_2030 { top: 2079.999999999996px; }
344.size-medium .time_2035 { top: 2093.3333333333294px; }
345.size-medium .time_2040 { top: 2106.666666666663px; }
346.size-medium .time_2045 { top: 2119.9999999999964px; }
347.size-medium .time_2050 { top: 2133.33333333333px; }
348.size-medium .time_2055 { top: 2146.6666666666633px; }
349.size-medium .time_2100 { top: 2159.999999999997px; }
350.size-medium .time_2105 { top: 2173.3333333333303px; }
351.size-medium .time_2110 { top: 2186.666666666664px; }
352.size-medium .time_2115 { top: 2199.9999999999973px; }
353.size-medium .time_2120 { top: 2213.3333333333308px; }
354.size-medium .time_2125 { top: 2226.6666666666642px; }
355.size-medium .time_2130 { top: 2239.9999999999977px; }
356.size-medium .time_2135 { top: 2253.333333333331px; }
357.size-medium .time_2140 { top: 2266.6666666666647px; }
358.size-medium .time_2145 { top: 2279.999999999998px; }
359.size-medium .time_2150 { top: 2293.3333333333317px; }
360.size-medium .time_2155 { top: 2306.666666666665px; }
361.size-medium .time_2200 { top: 2319.9999999999986px; }
362.size-medium .time_2205 { top: 2333.333333333332px; }
363.size-medium .time_2210 { top: 2346.6666666666656px; }
364.size-medium .time_2215 { top: 2359.999999999999px; }
365.size-medium .time_2220 { top: 2373.3333333333326px; }
366.size-medium .time_2225 { top: 2386.666666666666px; }
367.size-medium .time_2230 { top: 2399.9999999999995px; }
368.size-medium .time_2235 { top: 2413.333333333333px; }
369.size-medium .time_2240 { top: 2426.6666666666665px; }
370.size-medium .time_2245 { top: 2440.0px; }
371.size-medium .time_2250 { top: 2453.3333333333335px; }
372.size-medium .time_2255 { top: 2466.666666666667px; }
373.size-medium .time_2300 { top: 2480.0000000000005px; }
374.size-medium .time_2305 { top: 2493.333333333334px; }
375.size-medium .time_2310 { top: 2506.6666666666674px; }
376.size-medium .time_2315 { top: 2520.000000000001px; }
377.size-medium .time_2320 { top: 2533.3333333333344px; }
378.size-medium .time_2325 { top: 2546.666666666668px; }
379.size-medium .time_2330 { top: 2560.0000000000014px; }
380.size-medium .time_2335 { top: 2573.333333333335px; }
381.size-medium .time_2340 { top: 2586.6666666666683px; }
382.size-medium .time_2345 { top: 2600.000000000002px; }
383.size-medium .time_2350 { top: 2613.3333333333353px; }
384.size-medium .time_2355 { top: 2626.666666666669px; }
385.size-medium .time_0000 { top: 2640.0000000000023px; }
386.size-medium .time_0005 { top: 2653.3333333333358px; }
387.size-medium .time_0010 { top: 2666.6666666666692px; }
388.size-medium .time_0015 { top: 2680.0000000000027px; }
389.size-medium .time_0020 { top: 2693.333333333336px; }
390.size-medium .time_0025 { top: 2706.6666666666697px; }
391.size-medium .time_0030 { top: 2720.000000000003px; }
392.size-medium .time_0035 { top: 2733.3333333333367px; }
393.size-medium .time_0040 { top: 2746.66666666667px; }
394.size-medium .time_0045 { top: 2760.0000000000036px; }
395.size-medium .time_0050 { top: 2773.333333333337px; }
396.size-medium .time_0055 { top: 2786.6666666666706px; }
397.size-medium .time_0100 { top: 2800.000000000004px; }
398.size-medium .time_0105 { top: 2813.3333333333376px; }
399.size-medium .time_0110 { top: 2826.666666666671px; }
400.size-medium .time_0115 { top: 2840.0000000000045px; }
401.size-medium .time_0120 { top: 2853.333333333338px; }
402.size-medium .time_0125 { top: 2866.6666666666715px; }
403.size-medium .time_0130 { top: 2880.000000000005px; }
404.size-medium .time_0135 { top: 2893.3333333333385px; }
405.size-medium .time_0140 { top: 2906.666666666672px; }
406.size-medium .time_0145 { top: 2920.0000000000055px; }
407.size-medium .time_0150 { top: 2933.333333333339px; }
408.size-medium .time_0155 { top: 2946.6666666666724px; }
409.size-medium .time_0200 { top: 2960.000000000006px; }
410.size-medium .time_0205 { top: 2973.3333333333394px; }
411.size-medium .time_0210 { top: 2986.666666666673px; }
412.size-medium .time_0215 { top: 3000.0000000000064px; }
413.size-medium .time_0220 { top: 3013.33333333334px; }
414.size-medium .time_0225 { top: 3026.6666666666733px; }
415.size-medium .time_0230 { top: 3040.000000000007px; }
416.size-medium .time_0235 { top: 3053.3333333333403px; }
417.size-medium .time_0240 { top: 3066.666666666674px; }
418.size-medium .time_0245 { top: 3080.0000000000073px; }
419.size-medium .time_0250 { top: 3093.3333333333408px; }
420.size-medium .time_0255 { top: 3106.6666666666742px; }
421.size-medium .time_0300 { top: 3120.0000000000077px; }
422.size-medium .time_0305 { top: 3133.333333333341px; }
423.size-medium .time_0310 { top: 3146.6666666666747px; }
424.size-medium .time_0315 { top: 3160.000000000008px; }
425.size-medium .time_0320 { top: 3173.3333333333417px; }
426.size-medium .time_0325 { top: 3186.666666666675px; }
427.size-medium .time_0330 { top: 3200.0000000000086px; }
428.size-medium .time_0335 { top: 3213.333333333342px; }
429.size-medium .time_0340 { top: 3226.6666666666756px; }
430.size-medium .time_0345 { top: 3240.000000000009px; }
431.size-medium .time_0350 { top: 3253.3333333333426px; }
432.size-medium .time_0355 { top: 3266.666666666676px; }
433.size-small .time_1000 { top: 400px; }
434.size-small .time_1005 { top: 410.0px; }
435.size-small .time_1010 { top: 420.0px; }
436.size-small .time_1015 { top: 430.0px; }
437.size-small .time_1020 { top: 440.0px; }
438.size-small .time_1025 { top: 450.0px; }
439.size-small .time_1030 { top: 460.0px; }
440.size-small .time_1035 { top: 470.0px; }
441.size-small .time_1040 { top: 480.0px; }
442.size-small .time_1045 { top: 490.0px; }
443.size-small .time_1050 { top: 500.0px; }
444.size-small .time_1055 { top: 510.0px; }
445.size-small .time_1100 { top: 520.0px; }
446.size-small .time_1105 { top: 530.0px; }
447.size-small .time_1110 { top: 540.0px; }
448.size-small .time_1115 { top: 550.0px; }
449.size-small .time_1120 { top: 560.0px; }
450.size-small .time_1125 { top: 570.0px; }
451.size-small .time_1130 { top: 580.0px; }
452.size-small .time_1135 { top: 590.0px; }
453.size-small .time_1140 { top: 600.0px; }
454.size-small .time_1145 { top: 610.0px; }
455.size-small .time_1150 { top: 620.0px; }
456.size-small .time_1155 { top: 630.0px; }
457.size-small .time_1200 { top: 640.0px; }
458.size-small .time_1205 { top: 650.0px; }
459.size-small .time_1210 { top: 660.0px; }
460.size-small .time_1215 { top: 670.0px; }
461.size-small .time_1220 { top: 680.0px; }
462.size-small .time_1225 { top: 690.0px; }
463.size-small .time_1230 { top: 700.0px; }
464.size-small .time_1235 { top: 710.0px; }
465.size-small .time_1240 { top: 720.0px; }
466.size-small .time_1245 { top: 730.0px; }
467.size-small .time_1250 { top: 740.0px; }
468.size-small .time_1255 { top: 750.0px; }
469.size-small .time_1300 { top: 760.0px; }
470.size-small .time_1305 { top: 770.0px; }
471.size-small .time_1310 { top: 780.0px; }
472.size-small .time_1315 { top: 790.0px; }
473.size-small .time_1320 { top: 800.0px; }
474.size-small .time_1325 { top: 810.0px; }
475.size-small .time_1330 { top: 820.0px; }
476.size-small .time_1335 { top: 830.0px; }
477.size-small .time_1340 { top: 840.0px; }
478.size-small .time_1345 { top: 850.0px; }
479.size-small .time_1350 { top: 860.0px; }
480.size-small .time_1355 { top: 870.0px; }
481.size-small .time_1400 { top: 880.0px; }
482.size-small .time_1405 { top: 890.0px; }
483.size-small .time_1410 { top: 900.0px; }
484.size-small .time_1415 { top: 910.0px; }
485.size-small .time_1420 { top: 920.0px; }
486.size-small .time_1425 { top: 930.0px; }
487.size-small .time_1430 { top: 940.0px; }
488.size-small .time_1435 { top: 950.0px; }
489.size-small .time_1440 { top: 960.0px; }
490.size-small .time_1445 { top: 970.0px; }
491.size-small .time_1450 { top: 980.0px; }
492.size-small .time_1455 { top: 990.0px; }
493.size-small .time_1500 { top: 1000.0px; }
494.size-small .time_1505 { top: 1010.0px; }
495.size-small .time_1510 { top: 1020.0px; }
496.size-small .time_1515 { top: 1030.0px; }
497.size-small .time_1520 { top: 1040.0px; }
498.size-small .time_1525 { top: 1050.0px; }
499.size-small .time_1530 { top: 1060.0px; }
500.size-small .time_1535 { top: 1070.0px; }
501.size-small .time_1540 { top: 1080.0px; }
502.size-small .time_1545 { top: 1090.0px; }
503.size-small .time_1550 { top: 1100.0px; }
504.size-small .time_1555 { top: 1110.0px; }
505.size-small .time_1600 { top: 1120.0px; }
506.size-small .time_1605 { top: 1130.0px; }
507.size-small .time_1610 { top: 1140.0px; }
508.size-small .time_1615 { top: 1150.0px; }
509.size-small .time_1620 { top: 1160.0px; }
510.size-small .time_1625 { top: 1170.0px; }
511.size-small .time_1630 { top: 1180.0px; }
512.size-small .time_1635 { top: 1190.0px; }
513.size-small .time_1640 { top: 1200.0px; }
514.size-small .time_1645 { top: 1210.0px; }
515.size-small .time_1650 { top: 1220.0px; }
516.size-small .time_1655 { top: 1230.0px; }
517.size-small .time_1700 { top: 1240.0px; }
518.size-small .time_1705 { top: 1250.0px; }
519.size-small .time_1710 { top: 1260.0px; }
520.size-small .time_1715 { top: 1270.0px; }
521.size-small .time_1720 { top: 1280.0px; }
522.size-small .time_1725 { top: 1290.0px; }
523.size-small .time_1730 { top: 1300.0px; }
524.size-small .time_1735 { top: 1310.0px; }
525.size-small .time_1740 { top: 1320.0px; }
526.size-small .time_1745 { top: 1330.0px; }
527.size-small .time_1750 { top: 1340.0px; }
528.size-small .time_1755 { top: 1350.0px; }
529.size-small .time_1800 { top: 1360.0px; }
530.size-small .time_1805 { top: 1370.0px; }
531.size-small .time_1810 { top: 1380.0px; }
532.size-small .time_1815 { top: 1390.0px; }
533.size-small .time_1820 { top: 1400.0px; }
534.size-small .time_1825 { top: 1410.0px; }
535.size-small .time_1830 { top: 1420.0px; }
536.size-small .time_1835 { top: 1430.0px; }
537.size-small .time_1840 { top: 1440.0px; }
538.size-small .time_1845 { top: 1450.0px; }
539.size-small .time_1850 { top: 1460.0px; }
540.size-small .time_1855 { top: 1470.0px; }
541.size-small .time_1900 { top: 1480.0px; }
542.size-small .time_1905 { top: 1490.0px; }
543.size-small .time_1910 { top: 1500.0px; }
544.size-small .time_1915 { top: 1510.0px; }
545.size-small .time_1920 { top: 1520.0px; }
546.size-small .time_1925 { top: 1530.0px; }
547.size-small .time_1930 { top: 1540.0px; }
548.size-small .time_1935 { top: 1550.0px; }
549.size-small .time_1940 { top: 1560.0px; }
550.size-small .time_1945 { top: 1570.0px; }
551.size-small .time_1950 { top: 1580.0px; }
552.size-small .time_1955 { top: 1590.0px; }
553.size-small .time_2000 { top: 1600.0px; }
554.size-small .time_2005 { top: 1610.0px; }
555.size-small .time_2010 { top: 1620.0px; }
556.size-small .time_2015 { top: 1630.0px; }
557.size-small .time_2020 { top: 1640.0px; }
558.size-small .time_2025 { top: 1650.0px; }
559.size-small .time_2030 { top: 1660.0px; }
560.size-small .time_2035 { top: 1670.0px; }
561.size-small .time_2040 { top: 1680.0px; }
562.size-small .time_2045 { top: 1690.0px; }
563.size-small .time_2050 { top: 1700.0px; }
564.size-small .time_2055 { top: 1710.0px; }
565.size-small .time_2100 { top: 1720.0px; }
566.size-small .time_2105 { top: 1730.0px; }
567.size-small .time_2110 { top: 1740.0px; }
568.size-small .time_2115 { top: 1750.0px; }
569.size-small .time_2120 { top: 1760.0px; }
570.size-small .time_2125 { top: 1770.0px; }
571.size-small .time_2130 { top: 1780.0px; }
572.size-small .time_2135 { top: 1790.0px; }
573.size-small .time_2140 { top: 1800.0px; }
574.size-small .time_2145 { top: 1810.0px; }
575.size-small .time_2150 { top: 1820.0px; }
576.size-small .time_2155 { top: 1830.0px; }
577.size-small .time_2200 { top: 1840.0px; }
578.size-small .time_2205 { top: 1850.0px; }
579.size-small .time_2210 { top: 1860.0px; }
580.size-small .time_2215 { top: 1870.0px; }
581.size-small .time_2220 { top: 1880.0px; }
582.size-small .time_2225 { top: 1890.0px; }
583.size-small .time_2230 { top: 1900.0px; }
584.size-small .time_2235 { top: 1910.0px; }
585.size-small .time_2240 { top: 1920.0px; }
586.size-small .time_2245 { top: 1930.0px; }
587.size-small .time_2250 { top: 1940.0px; }
588.size-small .time_2255 { top: 1950.0px; }
589.size-small .time_2300 { top: 1960.0px; }
590.size-small .time_2305 { top: 1970.0px; }
591.size-small .time_2310 { top: 1980.0px; }
592.size-small .time_2315 { top: 1990.0px; }
593.size-small .time_2320 { top: 2000.0px; }
594.size-small .time_2325 { top: 2010.0px; }
595.size-small .time_2330 { top: 2020.0px; }
596.size-small .time_2335 { top: 2030.0px; }
597.size-small .time_2340 { top: 2040.0px; }
598.size-small .time_2345 { top: 2050.0px; }
599.size-small .time_2350 { top: 2060.0px; }
600.size-small .time_2355 { top: 2070.0px; }
601.size-small .time_0000 { top: 2080.0px; }
602.size-small .time_0005 { top: 2090.0px; }
603.size-small .time_0010 { top: 2100.0px; }
604.size-small .time_0015 { top: 2110.0px; }
605.size-small .time_0020 { top: 2120.0px; }
606.size-small .time_0025 { top: 2130.0px; }
607.size-small .time_0030 { top: 2140.0px; }
608.size-small .time_0035 { top: 2150.0px; }
609.size-small .time_0040 { top: 2160.0px; }
610.size-small .time_0045 { top: 2170.0px; }
611.size-small .time_0050 { top: 2180.0px; }
612.size-small .time_0055 { top: 2190.0px; }
613.size-small .time_0100 { top: 2200.0px; }
614.size-small .time_0105 { top: 2210.0px; }
615.size-small .time_0110 { top: 2220.0px; }
616.size-small .time_0115 { top: 2230.0px; }
617.size-small .time_0120 { top: 2240.0px; }
618.size-small .time_0125 { top: 2250.0px; }
619.size-small .time_0130 { top: 2260.0px; }
620.size-small .time_0135 { top: 2270.0px; }
621.size-small .time_0140 { top: 2280.0px; }
622.size-small .time_0145 { top: 2290.0px; }
623.size-small .time_0150 { top: 2300.0px; }
624.size-small .time_0155 { top: 2310.0px; }
625.size-small .time_0200 { top: 2320.0px; }
626.size-small .time_0205 { top: 2330.0px; }
627.size-small .time_0210 { top: 2340.0px; }
628.size-small .time_0215 { top: 2350.0px; }
629.size-small .time_0220 { top: 2360.0px; }
630.size-small .time_0225 { top: 2370.0px; }
631.size-small .time_0230 { top: 2380.0px; }
632.size-small .time_0235 { top: 2390.0px; }
633.size-small .time_0240 { top: 2400.0px; }
634.size-small .time_0245 { top: 2410.0px; }
635.size-small .time_0250 { top: 2420.0px; }
636.size-small .time_0255 { top: 2430.0px; }
637.size-small .time_0300 { top: 2440.0px; }
638.size-small .time_0305 { top: 2450.0px; }
639.size-small .time_0310 { top: 2460.0px; }
640.size-small .time_0315 { top: 2470.0px; }
641.size-small .time_0320 { top: 2480.0px; }
642.size-small .time_0325 { top: 2490.0px; }
643.size-small .time_0330 { top: 2500.0px; }
644.size-small .time_0335 { top: 2510.0px; }
645.size-small .time_0340 { top: 2520.0px; }
646.size-small .time_0345 { top: 2530.0px; }
647.size-small .time_0350 { top: 2540.0px; }
648.size-small .time_0355 { top: 2550.0px; }
649.size-large .duration_300 { min-height: 20.0px; max-height: 20.0px; }
650.size-large .duration_400 { min-height: 28.333333333333336px; max-height: 28.333333333333336px; }
651.size-large .duration_500 { min-height: 36.666666666666664px; max-height: 36.666666666666664px; }
652.size-large .duration_600 { min-height: 45.0px; max-height: 45.0px; }
653.size-large .duration_700 { min-height: 53.333333333333336px; max-height: 53.333333333333336px; }
654.size-large .duration_800 { min-height: 61.66666666666667px; max-height: 61.66666666666667px; }
655.size-large .duration_900 { min-height: 70.0px; max-height: 70.0px; }
656.size-large .duration_1000 { min-height: 78.33333333333333px; max-height: 78.33333333333333px; }
657.size-large .duration_1100 { min-height: 86.66666666666667px; max-height: 86.66666666666667px; }
658.size-large .duration_1200 { min-height: 95.0px; max-height: 95.0px; }
659.size-large .duration_1300 { min-height: 103.33333333333333px; max-height: 103.33333333333333px; }
660.size-large .duration_1400 { min-height: 111.66666666666667px; max-height: 111.66666666666667px; }
661.size-large .duration_1500 { min-height: 120.0px; max-height: 120.0px; }
662.size-large .duration_1600 { min-height: 128.33333333333334px; max-height: 128.33333333333334px; }
663.size-large .duration_1700 { min-height: 136.66666666666666px; max-height: 136.66666666666666px; }
664.size-large .duration_1800 { min-height: 145.0px; max-height: 145.0px; }
665.size-large .duration_1900 { min-height: 153.33333333333334px; max-height: 153.33333333333334px; }
666.size-large .duration_2000 { min-height: 161.66666666666666px; max-height: 161.66666666666666px; }
667.size-large .duration_2100 { min-height: 170.0px; max-height: 170.0px; }
668.size-large .duration_2200 { min-height: 178.33333333333334px; max-height: 178.33333333333334px; }
669.size-large .duration_2300 { min-height: 186.66666666666666px; max-height: 186.66666666666666px; }
670.size-large .duration_2400 { min-height: 195.0px; max-height: 195.0px; }
671.size-large .duration_2500 { min-height: 203.33333333333334px; max-height: 203.33333333333334px; }
672.size-large .duration_2600 { min-height: 211.66666666666666px; max-height: 211.66666666666666px; }
673.size-large .duration_2700 { min-height: 220.0px; max-height: 220.0px; }
674.size-large .duration_2800 { min-height: 228.33333333333334px; max-height: 228.33333333333334px; }
675.size-large .duration_2900 { min-height: 236.66666666666666px; max-height: 236.66666666666666px; }
676.size-large .duration_3000 { min-height: 245.0px; max-height: 245.0px; }
677.size-large .duration_3100 { min-height: 253.33333333333331px; max-height: 253.33333333333331px; }
678.size-large .duration_3200 { min-height: 261.6666666666667px; max-height: 261.6666666666667px; }
679.size-large .duration_3300 { min-height: 270.0px; max-height: 270.0px; }
680.size-large .duration_3400 { min-height: 278.3333333333333px; max-height: 278.3333333333333px; }
681.size-large .duration_3500 { min-height: 286.6666666666667px; max-height: 286.6666666666667px; }
682.size-large .duration_3600 { min-height: 295.0px; max-height: 295.0px; }
683.size-large .duration_3700 { min-height: 303.3333333333333px; max-height: 303.3333333333333px; }
684.size-large .duration_3800 { min-height: 311.6666666666667px; max-height: 311.6666666666667px; }
685.size-large .duration_3900 { min-height: 320.0px; max-height: 320.0px; }
686.size-large .duration_4000 { min-height: 328.3333333333333px; max-height: 328.3333333333333px; }
687.size-large .duration_4100 { min-height: 336.6666666666667px; max-height: 336.6666666666667px; }
688.size-large .duration_4200 { min-height: 345.0px; max-height: 345.0px; }
689.size-large .duration_4300 { min-height: 353.3333333333333px; max-height: 353.3333333333333px; }
690.size-large .duration_4400 { min-height: 361.6666666666667px; max-height: 361.6666666666667px; }
691.size-large .duration_4500 { min-height: 370.0px; max-height: 370.0px; }
692.size-large .duration_4600 { min-height: 378.3333333333333px; max-height: 378.3333333333333px; }
693.size-large .duration_4700 { min-height: 386.6666666666667px; max-height: 386.6666666666667px; }
694.size-large .duration_4800 { min-height: 395.0px; max-height: 395.0px; }
695.size-large .duration_4900 { min-height: 403.3333333333333px; max-height: 403.3333333333333px; }
696.size-large .duration_5000 { min-height: 411.6666666666667px; max-height: 411.6666666666667px; }
697.size-large .duration_5100 { min-height: 420.0px; max-height: 420.0px; }
698.size-large .duration_5200 { min-height: 428.3333333333333px; max-height: 428.3333333333333px; }
699.size-large .duration_5300 { min-height: 436.6666666666667px; max-height: 436.6666666666667px; }
700.size-large .duration_5400 { min-height: 445.0px; max-height: 445.0px; }
701.size-large .duration_5500 { min-height: 453.3333333333333px; max-height: 453.3333333333333px; }
702.size-large .duration_5600 { min-height: 461.6666666666667px; max-height: 461.6666666666667px; }
703.size-large .duration_5700 { min-height: 470.0px; max-height: 470.0px; }
704.size-large .duration_5800 { min-height: 478.3333333333333px; max-height: 478.3333333333333px; }
705.size-large .duration_5900 { min-height: 486.6666666666667px; max-height: 486.6666666666667px; }
706.size-large .duration_6000 { min-height: 495.0px; max-height: 495.0px; }
707.size-large .duration_6100 { min-height: 503.3333333333333px; max-height: 503.3333333333333px; }
708.size-large .duration_6200 { min-height: 511.66666666666663px; max-height: 511.66666666666663px; }
709.size-large .duration_6300 { min-height: 520.0px; max-height: 520.0px; }
710.size-large .duration_6400 { min-height: 528.3333333333334px; max-height: 528.3333333333334px; }
711.size-large .duration_6500 { min-height: 536.6666666666666px; max-height: 536.6666666666666px; }
712.size-large .duration_6600 { min-height: 545.0px; max-height: 545.0px; }
713.size-large .duration_6700 { min-height: 553.3333333333334px; max-height: 553.3333333333334px; }
714.size-large .duration_6800 { min-height: 561.6666666666666px; max-height: 561.6666666666666px; }
715.size-large .duration_6900 { min-height: 570.0px; max-height: 570.0px; }
716.size-large .duration_7000 { min-height: 578.3333333333334px; max-height: 578.3333333333334px; }
717.size-large .duration_7100 { min-height: 586.6666666666666px; max-height: 586.6666666666666px; }
718.size-large .duration_7200 { min-height: 595.0px; max-height: 595.0px; }
719.size-large .duration_7300 { min-height: 603.3333333333334px; max-height: 603.3333333333334px; }
720.size-large .duration_7400 { min-height: 611.6666666666666px; max-height: 611.6666666666666px; }
721.size-large .duration_7500 { min-height: 620.0px; max-height: 620.0px; }
722.size-large .duration_7600 { min-height: 628.3333333333334px; max-height: 628.3333333333334px; }
723.size-large .duration_7700 { min-height: 636.6666666666666px; max-height: 636.6666666666666px; }
724.size-large .duration_7800 { min-height: 645.0px; max-height: 645.0px; }
725.size-large .duration_7900 { min-height: 653.3333333333334px; max-height: 653.3333333333334px; }
726.size-large .duration_8000 { min-height: 661.6666666666666px; max-height: 661.6666666666666px; }
727.size-large .duration_8100 { min-height: 670.0px; max-height: 670.0px; }
728.size-large .duration_8200 { min-height: 678.3333333333334px; max-height: 678.3333333333334px; }
729.size-large .duration_8300 { min-height: 686.6666666666666px; max-height: 686.6666666666666px; }
730.size-large .duration_8400 { min-height: 695.0px; max-height: 695.0px; }
731.size-large .duration_8500 { min-height: 703.3333333333334px; max-height: 703.3333333333334px; }
732.size-large .duration_8600 { min-height: 711.6666666666666px; max-height: 711.6666666666666px; }
733.size-large .duration_8700 { min-height: 720.0px; max-height: 720.0px; }
734.size-large .duration_8800 { min-height: 728.3333333333334px; max-height: 728.3333333333334px; }
735.size-large .duration_8900 { min-height: 736.6666666666666px; max-height: 736.6666666666666px; }
736.size-large .duration_9000 { min-height: 745.0px; max-height: 745.0px; }
737.size-large .duration_9100 { min-height: 753.3333333333334px; max-height: 753.3333333333334px; }
738.size-large .duration_9200 { min-height: 761.6666666666666px; max-height: 761.6666666666666px; }
739.size-large .duration_9300 { min-height: 770.0px; max-height: 770.0px; }
740.size-large .duration_9400 { min-height: 778.3333333333334px; max-height: 778.3333333333334px; }
741.size-large .duration_9500 { min-height: 786.6666666666666px; max-height: 786.6666666666666px; }
742.size-large .duration_9600 { min-height: 795.0px; max-height: 795.0px; }
743.size-large .duration_9700 { min-height: 803.3333333333334px; max-height: 803.3333333333334px; }
744.size-large .duration_9800 { min-height: 811.6666666666666px; max-height: 811.6666666666666px; }
745.size-large .duration_9900 { min-height: 820.0px; max-height: 820.0px; }
746.size-large .duration_10000 { min-height: 828.3333333333334px; max-height: 828.3333333333334px; }
747.size-large .duration_10100 { min-height: 836.6666666666666px; max-height: 836.6666666666666px; }
748.size-large .duration_10200 { min-height: 845.0px; max-height: 845.0px; }
749.size-large .duration_10300 { min-height: 853.3333333333334px; max-height: 853.3333333333334px; }
750.size-large .duration_10400 { min-height: 861.6666666666666px; max-height: 861.6666666666666px; }
751.size-large .duration_10500 { min-height: 870.0px; max-height: 870.0px; }
752.size-large .duration_10600 { min-height: 878.3333333333334px; max-height: 878.3333333333334px; }
753.size-large .duration_10700 { min-height: 886.6666666666666px; max-height: 886.6666666666666px; }
754.size-large .duration_10800 { min-height: 895.0px; max-height: 895.0px; }
755.size-large .duration_10900 { min-height: 903.3333333333334px; max-height: 903.3333333333334px; }
756.size-large .duration_11000 { min-height: 911.6666666666666px; max-height: 911.6666666666666px; }
757.size-large .duration_11100 { min-height: 920.0px; max-height: 920.0px; }
758.size-large .duration_11200 { min-height: 928.3333333333334px; max-height: 928.3333333333334px; }
759.size-large .duration_11300 { min-height: 936.6666666666666px; max-height: 936.6666666666666px; }
760.size-large .duration_11400 { min-height: 945.0px; max-height: 945.0px; }
761.size-large .duration_11500 { min-height: 953.3333333333334px; max-height: 953.3333333333334px; }
762.size-large .duration_11600 { min-height: 961.6666666666666px; max-height: 961.6666666666666px; }
763.size-large .duration_11700 { min-height: 970.0px; max-height: 970.0px; }
764.size-large .duration_11800 { min-height: 978.3333333333334px; max-height: 978.3333333333334px; }
765.size-large .duration_11900 { min-height: 986.6666666666666px; max-height: 986.6666666666666px; }
766.size-large .wholeblock { height: 1050.0px; }
767.size-medium .duration_300 { min-height: 10.333333333333334px; max-height: 10.333333333333334px; }
768.size-medium .duration_400 { min-height: 14.777777777777779px; max-height: 14.777777777777779px; }
769.size-medium .duration_500 { min-height: 19.22222222222222px; max-height: 19.22222222222222px; }
770.size-medium .duration_600 { min-height: 23.666666666666668px; max-height: 23.666666666666668px; }
771.size-medium .duration_700 { min-height: 28.11111111111111px; max-height: 28.11111111111111px; }
772.size-medium .duration_800 { min-height: 32.55555555555556px; max-height: 32.55555555555556px; }
773.size-medium .duration_900 { min-height: 37.0px; max-height: 37.0px; }
774.size-medium .duration_1000 { min-height: 41.44444444444444px; max-height: 41.44444444444444px; }
775.size-medium .duration_1100 { min-height: 45.888888888888886px; max-height: 45.888888888888886px; }
776.size-medium .duration_1200 { min-height: 50.333333333333336px; max-height: 50.333333333333336px; }
777.size-medium .duration_1300 { min-height: 54.77777777777778px; max-height: 54.77777777777778px; }
778.size-medium .duration_1400 { min-height: 59.22222222222222px; max-height: 59.22222222222222px; }
779.size-medium .duration_1500 { min-height: 63.66666666666667px; max-height: 63.66666666666667px; }
780.size-medium .duration_1600 { min-height: 68.11111111111111px; max-height: 68.11111111111111px; }
781.size-medium .duration_1700 { min-height: 72.55555555555556px; max-height: 72.55555555555556px; }
782.size-medium .duration_1800 { min-height: 77.0px; max-height: 77.0px; }
783.size-medium .duration_1900 { min-height: 81.44444444444444px; max-height: 81.44444444444444px; }
784.size-medium .duration_2000 { min-height: 85.88888888888889px; max-height: 85.88888888888889px; }
785.size-medium .duration_2100 { min-height: 90.33333333333333px; max-height: 90.33333333333333px; }
786.size-medium .duration_2200 { min-height: 94.77777777777777px; max-height: 94.77777777777777px; }
787.size-medium .duration_2300 { min-height: 99.22222222222223px; max-height: 99.22222222222223px; }
788.size-medium .duration_2400 { min-height: 103.66666666666667px; max-height: 103.66666666666667px; }
789.size-medium .duration_2500 { min-height: 108.11111111111111px; max-height: 108.11111111111111px; }
790.size-medium .duration_2600 { min-height: 112.55555555555556px; max-height: 112.55555555555556px; }
791.size-medium .duration_2700 { min-height: 117.0px; max-height: 117.0px; }
792.size-medium .duration_2800 { min-height: 121.44444444444444px; max-height: 121.44444444444444px; }
793.size-medium .duration_2900 { min-height: 125.88888888888889px; max-height: 125.88888888888889px; }
794.size-medium .duration_3000 { min-height: 130.33333333333334px; max-height: 130.33333333333334px; }
795.size-medium .duration_3100 { min-height: 134.77777777777777px; max-height: 134.77777777777777px; }
796.size-medium .duration_3200 { min-height: 139.22222222222223px; max-height: 139.22222222222223px; }
797.size-medium .duration_3300 { min-height: 143.66666666666666px; max-height: 143.66666666666666px; }
798.size-medium .duration_3400 { min-height: 148.11111111111111px; max-height: 148.11111111111111px; }
799.size-medium .duration_3500 { min-height: 152.55555555555554px; max-height: 152.55555555555554px; }
800.size-medium .duration_3600 { min-height: 157.0px; max-height: 157.0px; }
801.size-medium .duration_3700 { min-height: 161.44444444444446px; max-height: 161.44444444444446px; }
802.size-medium .duration_3800 { min-height: 165.88888888888889px; max-height: 165.88888888888889px; }
803.size-medium .duration_3900 { min-height: 170.33333333333334px; max-height: 170.33333333333334px; }
804.size-medium .duration_4000 { min-height: 174.77777777777777px; max-height: 174.77777777777777px; }
805.size-medium .duration_4100 { min-height: 179.22222222222223px; max-height: 179.22222222222223px; }
806.size-medium .duration_4200 { min-height: 183.66666666666666px; max-height: 183.66666666666666px; }
807.size-medium .duration_4300 { min-height: 188.11111111111111px; max-height: 188.11111111111111px; }
808.size-medium .duration_4400 { min-height: 192.55555555555554px; max-height: 192.55555555555554px; }
809.size-medium .duration_4500 { min-height: 197.0px; max-height: 197.0px; }
810.size-medium .duration_4600 { min-height: 201.44444444444446px; max-height: 201.44444444444446px; }
811.size-medium .duration_4700 { min-height: 205.88888888888889px; max-height: 205.88888888888889px; }
812.size-medium .duration_4800 { min-height: 210.33333333333334px; max-height: 210.33333333333334px; }
813.size-medium .duration_4900 { min-height: 214.77777777777777px; max-height: 214.77777777777777px; }
814.size-medium .duration_5000 { min-height: 219.22222222222223px; max-height: 219.22222222222223px; }
815.size-medium .duration_5100 { min-height: 223.66666666666666px; max-height: 223.66666666666666px; }
816.size-medium .duration_5200 { min-height: 228.11111111111111px; max-height: 228.11111111111111px; }
817.size-medium .duration_5300 { min-height: 232.55555555555554px; max-height: 232.55555555555554px; }
818.size-medium .duration_5400 { min-height: 237.0px; max-height: 237.0px; }
819.size-medium .duration_5500 { min-height: 241.44444444444446px; max-height: 241.44444444444446px; }
820.size-medium .duration_5600 { min-height: 245.88888888888889px; max-height: 245.88888888888889px; }
821.size-medium .duration_5700 { min-height: 250.33333333333334px; max-height: 250.33333333333334px; }
822.size-medium .duration_5800 { min-height: 254.77777777777777px; max-height: 254.77777777777777px; }
823.size-medium .duration_5900 { min-height: 259.22222222222223px; max-height: 259.22222222222223px; }
824.size-medium .duration_6000 { min-height: 263.6666666666667px; max-height: 263.6666666666667px; }
825.size-medium .duration_6100 { min-height: 268.1111111111111px; max-height: 268.1111111111111px; }
826.size-medium .duration_6200 { min-height: 272.55555555555554px; max-height: 272.55555555555554px; }
827.size-medium .duration_6300 { min-height: 277.0px; max-height: 277.0px; }
828.size-medium .duration_6400 { min-height: 281.44444444444446px; max-height: 281.44444444444446px; }
829.size-medium .duration_6500 { min-height: 285.8888888888889px; max-height: 285.8888888888889px; }
830.size-medium .duration_6600 { min-height: 290.3333333333333px; max-height: 290.3333333333333px; }
831.size-medium .duration_6700 { min-height: 294.77777777777777px; max-height: 294.77777777777777px; }
832.size-medium .duration_6800 { min-height: 299.22222222222223px; max-height: 299.22222222222223px; }
833.size-medium .duration_6900 { min-height: 303.6666666666667px; max-height: 303.6666666666667px; }
834.size-medium .duration_7000 { min-height: 308.1111111111111px; max-height: 308.1111111111111px; }
835.size-medium .duration_7100 { min-height: 312.55555555555554px; max-height: 312.55555555555554px; }
836.size-medium .duration_7200 { min-height: 317.0px; max-height: 317.0px; }
837.size-medium .duration_7300 { min-height: 321.44444444444446px; max-height: 321.44444444444446px; }
838.size-medium .duration_7400 { min-height: 325.8888888888889px; max-height: 325.8888888888889px; }
839.size-medium .duration_7500 { min-height: 330.3333333333333px; max-height: 330.3333333333333px; }
840.size-medium .duration_7600 { min-height: 334.77777777777777px; max-height: 334.77777777777777px; }
841.size-medium .duration_7700 { min-height: 339.22222222222223px; max-height: 339.22222222222223px; }
842.size-medium .duration_7800 { min-height: 343.6666666666667px; max-height: 343.6666666666667px; }
843.size-medium .duration_7900 { min-height: 348.1111111111111px; max-height: 348.1111111111111px; }
844.size-medium .duration_8000 { min-height: 352.55555555555554px; max-height: 352.55555555555554px; }
845.size-medium .duration_8100 { min-height: 357.0px; max-height: 357.0px; }
846.size-medium .duration_8200 { min-height: 361.44444444444446px; max-height: 361.44444444444446px; }
847.size-medium .duration_8300 { min-height: 365.8888888888889px; max-height: 365.8888888888889px; }
848.size-medium .duration_8400 { min-height: 370.3333333333333px; max-height: 370.3333333333333px; }
849.size-medium .duration_8500 { min-height: 374.77777777777777px; max-height: 374.77777777777777px; }
850.size-medium .duration_8600 { min-height: 379.22222222222223px; max-height: 379.22222222222223px; }
851.size-medium .duration_8700 { min-height: 383.6666666666667px; max-height: 383.6666666666667px; }
852.size-medium .duration_8800 { min-height: 388.1111111111111px; max-height: 388.1111111111111px; }
853.size-medium .duration_8900 { min-height: 392.55555555555554px; max-height: 392.55555555555554px; }
854.size-medium .duration_9000 { min-height: 397.0px; max-height: 397.0px; }
855.size-medium .duration_9100 { min-height: 401.44444444444446px; max-height: 401.44444444444446px; }
856.size-medium .duration_9200 { min-height: 405.8888888888889px; max-height: 405.8888888888889px; }
857.size-medium .duration_9300 { min-height: 410.3333333333333px; max-height: 410.3333333333333px; }
858.size-medium .duration_9400 { min-height: 414.77777777777777px; max-height: 414.77777777777777px; }
859.size-medium .duration_9500 { min-height: 419.22222222222223px; max-height: 419.22222222222223px; }
860.size-medium .duration_9600 { min-height: 423.6666666666667px; max-height: 423.6666666666667px; }
861.size-medium .duration_9700 { min-height: 428.1111111111111px; max-height: 428.1111111111111px; }
862.size-medium .duration_9800 { min-height: 432.55555555555554px; max-height: 432.55555555555554px; }
863.size-medium .duration_9900 { min-height: 437.0px; max-height: 437.0px; }
864.size-medium .duration_10000 { min-height: 441.44444444444446px; max-height: 441.44444444444446px; }
865.size-medium .duration_10100 { min-height: 445.8888888888889px; max-height: 445.8888888888889px; }
866.size-medium .duration_10200 { min-height: 450.3333333333333px; max-height: 450.3333333333333px; }
867.size-medium .duration_10300 { min-height: 454.77777777777777px; max-height: 454.77777777777777px; }
868.size-medium .duration_10400 { min-height: 459.22222222222223px; max-height: 459.22222222222223px; }
869.size-medium .duration_10500 { min-height: 463.6666666666667px; max-height: 463.6666666666667px; }
870.size-medium .duration_10600 { min-height: 468.1111111111111px; max-height: 468.1111111111111px; }
871.size-medium .duration_10700 { min-height: 472.55555555555554px; max-height: 472.55555555555554px; }
872.size-medium .duration_10800 { min-height: 477.0px; max-height: 477.0px; }
873.size-medium .duration_10900 { min-height: 481.44444444444446px; max-height: 481.44444444444446px; }
874.size-medium .duration_11000 { min-height: 485.8888888888889px; max-height: 485.8888888888889px; }
875.size-medium .duration_11100 { min-height: 490.3333333333333px; max-height: 490.3333333333333px; }
876.size-medium .duration_11200 { min-height: 494.77777777777777px; max-height: 494.77777777777777px; }
877.size-medium .duration_11300 { min-height: 499.22222222222223px; max-height: 499.22222222222223px; }
878.size-medium .duration_11400 { min-height: 503.6666666666667px; max-height: 503.6666666666667px; }
879.size-medium .duration_11500 { min-height: 508.1111111111111px; max-height: 508.1111111111111px; }
880.size-medium .duration_11600 { min-height: 512.5555555555555px; max-height: 512.5555555555555px; }
881.size-medium .duration_11700 { min-height: 517.0px; max-height: 517.0px; }
882.size-medium .duration_11800 { min-height: 521.4444444444445px; max-height: 521.4444444444445px; }
883.size-medium .duration_11900 { min-height: 525.8888888888889px; max-height: 525.8888888888889px; }
884.size-medium .wholeblock { height: 560.0px; }
885.size-small .duration_300 { min-height: 8.0px; max-height: 8.0px; }
886.size-small .duration_400 { min-height: 11.333333333333334px; max-height: 11.333333333333334px; }
887.size-small .duration_500 { min-height: 14.666666666666668px; max-height: 14.666666666666668px; }
888.size-small .duration_600 { min-height: 18.0px; max-height: 18.0px; }
889.size-small .duration_700 { min-height: 21.333333333333332px; max-height: 21.333333333333332px; }
890.size-small .duration_800 { min-height: 24.666666666666668px; max-height: 24.666666666666668px; }
891.size-small .duration_900 { min-height: 28.0px; max-height: 28.0px; }
892.size-small .duration_1000 { min-height: 31.333333333333336px; max-height: 31.333333333333336px; }
893.size-small .duration_1100 { min-height: 34.666666666666664px; max-height: 34.666666666666664px; }
894.size-small .duration_1200 { min-height: 38.0px; max-height: 38.0px; }
895.size-small .duration_1300 { min-height: 41.333333333333336px; max-height: 41.333333333333336px; }
896.size-small .duration_1400 { min-height: 44.666666666666664px; max-height: 44.666666666666664px; }
897.size-small .duration_1500 { min-height: 48.0px; max-height: 48.0px; }
898.size-small .duration_1600 { min-height: 51.333333333333336px; max-height: 51.333333333333336px; }
899.size-small .duration_1700 { min-height: 54.666666666666664px; max-height: 54.666666666666664px; }
900.size-small .duration_1800 { min-height: 58.0px; max-height: 58.0px; }
901.size-small .duration_1900 { min-height: 61.333333333333336px; max-height: 61.333333333333336px; }
902.size-small .duration_2000 { min-height: 64.66666666666667px; max-height: 64.66666666666667px; }
903.size-small .duration_2100 { min-height: 68.0px; max-height: 68.0px; }
904.size-small .duration_2200 { min-height: 71.33333333333333px; max-height: 71.33333333333333px; }
905.size-small .duration_2300 { min-height: 74.66666666666667px; max-height: 74.66666666666667px; }
906.size-small .duration_2400 { min-height: 78.0px; max-height: 78.0px; }
907.size-small .duration_2500 { min-height: 81.33333333333333px; max-height: 81.33333333333333px; }
908.size-small .duration_2600 { min-height: 84.66666666666667px; max-height: 84.66666666666667px; }
909.size-small .duration_2700 { min-height: 88.0px; max-height: 88.0px; }
910.size-small .duration_2800 { min-height: 91.33333333333333px; max-height: 91.33333333333333px; }
911.size-small .duration_2900 { min-height: 94.66666666666667px; max-height: 94.66666666666667px; }
912.size-small .duration_3000 { min-height: 98.0px; max-height: 98.0px; }
913.size-small .duration_3100 { min-height: 101.33333333333333px; max-height: 101.33333333333333px; }
914.size-small .duration_3200 { min-height: 104.66666666666667px; max-height: 104.66666666666667px; }
915.size-small .duration_3300 { min-height: 108.0px; max-height: 108.0px; }
916.size-small .duration_3400 { min-height: 111.33333333333333px; max-height: 111.33333333333333px; }
917.size-small .duration_3500 { min-height: 114.66666666666667px; max-height: 114.66666666666667px; }
918.size-small .duration_3600 { min-height: 118.0px; max-height: 118.0px; }
919.size-small .duration_3700 { min-height: 121.33333333333333px; max-height: 121.33333333333333px; }
920.size-small .duration_3800 { min-height: 124.66666666666667px; max-height: 124.66666666666667px; }
921.size-small .duration_3900 { min-height: 128.0px; max-height: 128.0px; }
922.size-small .duration_4000 { min-height: 131.33333333333334px; max-height: 131.33333333333334px; }
923.size-small .duration_4100 { min-height: 134.66666666666666px; max-height: 134.66666666666666px; }
924.size-small .duration_4200 { min-height: 138.0px; max-height: 138.0px; }
925.size-small .duration_4300 { min-height: 141.33333333333334px; max-height: 141.33333333333334px; }
926.size-small .duration_4400 { min-height: 144.66666666666666px; max-height: 144.66666666666666px; }
927.size-small .duration_4500 { min-height: 148.0px; max-height: 148.0px; }
928.size-small .duration_4600 { min-height: 151.33333333333334px; max-height: 151.33333333333334px; }
929.size-small .duration_4700 { min-height: 154.66666666666666px; max-height: 154.66666666666666px; }
930.size-small .duration_4800 { min-height: 158.0px; max-height: 158.0px; }
931.size-small .duration_4900 { min-height: 161.33333333333334px; max-height: 161.33333333333334px; }
932.size-small .duration_5000 { min-height: 164.66666666666666px; max-height: 164.66666666666666px; }
933.size-small .duration_5100 { min-height: 168.0px; max-height: 168.0px; }
934.size-small .duration_5200 { min-height: 171.33333333333334px; max-height: 171.33333333333334px; }
935.size-small .duration_5300 { min-height: 174.66666666666666px; max-height: 174.66666666666666px; }
936.size-small .duration_5400 { min-height: 178.0px; max-height: 178.0px; }
937.size-small .duration_5500 { min-height: 181.33333333333334px; max-height: 181.33333333333334px; }
938.size-small .duration_5600 { min-height: 184.66666666666666px; max-height: 184.66666666666666px; }
939.size-small .duration_5700 { min-height: 188.0px; max-height: 188.0px; }
940.size-small .duration_5800 { min-height: 191.33333333333334px; max-height: 191.33333333333334px; }
941.size-small .duration_5900 { min-height: 194.66666666666666px; max-height: 194.66666666666666px; }
942.size-small .duration_6000 { min-height: 198.0px; max-height: 198.0px; }
943.size-small .duration_6100 { min-height: 201.33333333333334px; max-height: 201.33333333333334px; }
944.size-small .duration_6200 { min-height: 204.66666666666666px; max-height: 204.66666666666666px; }
945.size-small .duration_6300 { min-height: 208.0px; max-height: 208.0px; }
946.size-small .duration_6400 { min-height: 211.33333333333334px; max-height: 211.33333333333334px; }
947.size-small .duration_6500 { min-height: 214.66666666666666px; max-height: 214.66666666666666px; }
948.size-small .duration_6600 { min-height: 218.0px; max-height: 218.0px; }
949.size-small .duration_6700 { min-height: 221.33333333333334px; max-height: 221.33333333333334px; }
950.size-small .duration_6800 { min-height: 224.66666666666666px; max-height: 224.66666666666666px; }
951.size-small .duration_6900 { min-height: 228.0px; max-height: 228.0px; }
952.size-small .duration_7000 { min-height: 231.33333333333334px; max-height: 231.33333333333334px; }
953.size-small .duration_7100 { min-height: 234.66666666666666px; max-height: 234.66666666666666px; }
954.size-small .duration_7200 { min-height: 238.0px; max-height: 238.0px; }
955.size-small .duration_7300 { min-height: 241.33333333333334px; max-height: 241.33333333333334px; }
956.size-small .duration_7400 { min-height: 244.66666666666666px; max-height: 244.66666666666666px; }
957.size-small .duration_7500 { min-height: 248.0px; max-height: 248.0px; }
958.size-small .duration_7600 { min-height: 251.33333333333334px; max-height: 251.33333333333334px; }
959.size-small .duration_7700 { min-height: 254.66666666666669px; max-height: 254.66666666666669px; }
960.size-small .duration_7800 { min-height: 258.0px; max-height: 258.0px; }
961.size-small .duration_7900 { min-height: 261.3333333333333px; max-height: 261.3333333333333px; }
962.size-small .duration_8000 { min-height: 264.6666666666667px; max-height: 264.6666666666667px; }
963.size-small .duration_8100 { min-height: 268.0px; max-height: 268.0px; }
964.size-small .duration_8200 { min-height: 271.3333333333333px; max-height: 271.3333333333333px; }
965.size-small .duration_8300 { min-height: 274.6666666666667px; max-height: 274.6666666666667px; }
966.size-small .duration_8400 { min-height: 278.0px; max-height: 278.0px; }
967.size-small .duration_8500 { min-height: 281.3333333333333px; max-height: 281.3333333333333px; }
968.size-small .duration_8600 { min-height: 284.6666666666667px; max-height: 284.6666666666667px; }
969.size-small .duration_8700 { min-height: 288.0px; max-height: 288.0px; }
970.size-small .duration_8800 { min-height: 291.3333333333333px; max-height: 291.3333333333333px; }
971.size-small .duration_8900 { min-height: 294.6666666666667px; max-height: 294.6666666666667px; }
972.size-small .duration_9000 { min-height: 298.0px; max-height: 298.0px; }
973.size-small .duration_9100 { min-height: 301.3333333333333px; max-height: 301.3333333333333px; }
974.size-small .duration_9200 { min-height: 304.6666666666667px; max-height: 304.6666666666667px; }
975.size-small .duration_9300 { min-height: 308.0px; max-height: 308.0px; }
976.size-small .duration_9400 { min-height: 311.3333333333333px; max-height: 311.3333333333333px; }
977.size-small .duration_9500 { min-height: 314.6666666666667px; max-height: 314.6666666666667px; }
978.size-small .duration_9600 { min-height: 318.0px; max-height: 318.0px; }
979.size-small .duration_9700 { min-height: 321.3333333333333px; max-height: 321.3333333333333px; }
980.size-small .duration_9800 { min-height: 324.6666666666667px; max-height: 324.6666666666667px; }
981.size-small .duration_9900 { min-height: 328.0px; max-height: 328.0px; }
982.size-small .duration_10000 { min-height: 331.3333333333333px; max-height: 331.3333333333333px; }
983.size-small .duration_10100 { min-height: 334.6666666666667px; max-height: 334.6666666666667px; }
984.size-small .duration_10200 { min-height: 338.0px; max-height: 338.0px; }
985.size-small .duration_10300 { min-height: 341.3333333333333px; max-height: 341.3333333333333px; }
986.size-small .duration_10400 { min-height: 344.6666666666667px; max-height: 344.6666666666667px; }
987.size-small .duration_10500 { min-height: 348.0px; max-height: 348.0px; }
988.size-small .duration_10600 { min-height: 351.3333333333333px; max-height: 351.3333333333333px; }
989.size-small .duration_10700 { min-height: 354.6666666666667px; max-height: 354.6666666666667px; }
990.size-small .duration_10800 { min-height: 358.0px; max-height: 358.0px; }
991.size-small .duration_10900 { min-height: 361.3333333333333px; max-height: 361.3333333333333px; }
992.size-small .duration_11000 { min-height: 364.6666666666667px; max-height: 364.6666666666667px; }
993.size-small .duration_11100 { min-height: 368.0px; max-height: 368.0px; }
994.size-small .duration_11200 { min-height: 371.3333333333333px; max-height: 371.3333333333333px; }
995.size-small .duration_11300 { min-height: 374.6666666666667px; max-height: 374.6666666666667px; }
996.size-small .duration_11400 { min-height: 378.0px; max-height: 378.0px; }
997.size-small .duration_11500 { min-height: 381.3333333333333px; max-height: 381.3333333333333px; }
998.size-small .duration_11600 { min-height: 384.6666666666667px; max-height: 384.6666666666667px; }
999.size-small .duration_11700 { min-height: 388.0px; max-height: 388.0px; }
1000.size-small .duration_11800 { min-height: 391.3333333333333px; max-height: 391.3333333333333px; }
1001.size-small .duration_11900 { min-height: 394.6666666666667px; max-height: 394.6666666666667px; }
1002.size-small .wholeblock { height: 420.0px; }
1003.size-large .grid { height: 25.0px; font-size: 1em; }
1004.size-medium .grid { height: 13.333333333333334px; font-size: 0.5em; }
1005.size-small .grid { height: 10.0px; font-size: 0.3em; }
1006.in-calendar .room1 { left: 4.0%; }
1007.in-calendar .room2 { left: 36.0%; }
1008.in-calendar .room3 { left: 68.0%; }
1009.in-calendar .event, .in-calendar .room-label, .in-calendar .grid { position: absolute; width: 28.0%; }
1010.in-calendar .r, .in-calendar .l { width: 28.0%; }
1011.in-calendar .rr, .in-calendar .ll { width: 60.0%; }
1012.in-calendar .rrr, .in-calendar .lll { width: 92.0%; }
1013.in-calendar .rrrr, .in-calendar .llll { width: 124.0%; }
1014.in-calendar .r, .in-calendar .rr, .in-calendar .rrr, .in-calendar .rrrr { margin-left: 14.0% ; }
1015.in-calendar .l { margin-left: -14.0% ; }
1016.in-calendar .ll { margin-left: -46.0% ; }
1017.in-calendar .lll { margin-left: -78.0% ; }
1018.in-calendar .llll { margin-left: -110.0% ; }
1019.in-calendar.alldays .day_1.room1 { left: 0.5%; }
1020.in-calendar.alldays .day_1.room2 { left: 8.791666666666668%; }
1021.in-calendar.alldays .day_1.room3 { left: 17.083333333333336%; }
1022.in-calendar.alldays .day_2.room1 { left: 25.375%; }
1023.in-calendar.alldays .day_2.room2 { left: 33.66666666666667%; }
1024.in-calendar.alldays .day_2.room3 { left: 41.958333333333336%; }
1025.in-calendar.alldays .day_3.room1 { left: 50.25%; }
1026.in-calendar.alldays .day_3.room2 { left: 58.54166666666667%; }
1027.in-calendar.alldays .day_3.room3 { left: 66.83333333333334%; }
1028.in-calendar.alldays .day_4.room1 { left: 75.125%; }
1029.in-calendar.alldays .day_4.room2 { left: 83.41666666666667%; }
1030.in-calendar.alldays .day_4.room3 { left: 91.70833333333334%; }
1031.wholeday, .wholeblock { width: 25.0% }
1032.in-calendar.alldays .event, .in-calendar.alldays .room-label, .in-calendar.alldays .grid { width: 7.791666666666667%; }
1033.in-calendar.alldays .r, .in-calendar.alldays .l { width: 7.791666666666667%; }
1034.in-calendar.alldays .rr, .in-calendar.alldays .ll { width: 16.083333333333336%; }
1035.in-calendar.alldays .rrr, .in-calendar.alldays .lll { width: 24.375%; }
1036.in-calendar.alldays .rrrr, .in-calendar.alldays .llll { width: 32.66666666666667%; }
1037.in-calendar.alldays .r, .in-calendar.alldays .rr, .in-calendar.alldays .rrr, .in-calendar.alldays .rrrr { margin-left: 3.8958333333333335% ; }
1038.in-calendar.alldays .l { margin-left: -3.8958333333333335% ; }
1039.in-calendar.alldays .ll { margin-left: -12.1875% ; }
1040.in-calendar.alldays .lll { margin-left: -20.479166666666668% ; }
1041.in-calendar.alldays .llll { margin-left: -28.770833333333336% ; }
1042.r, .rr, .rrr, .rrrr, .l, .ll, .lll, .llll { height: 4px; }
1043.size-large .wholeday { height: 5400px; }
1044.size-large .duration_inf { height: 2100px; }
1045.size-medium .wholeday { height: 2880px; }
1046.size-medium .duration_inf { height: 1120px; }
1047.size-small .wholeday { height: 2160px; }
1048.size-small .duration_inf { height: 840px; }
diff --git a/templates/faq.html b/templates/faq.html
new file mode 100644
index 0000000..aefd03d
--- /dev/null
+++ b/templates/faq.html
@@ -0,0 +1,44 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <meta charset="utf-8">
5 <title>halfnarp FAQ</title>
6 <link rel="stylesheet" href="style.css">
7</head>
8<body>
9
10<div class="headline">The 38C3 halfnarp FAQ</div>
11
12<dl>
13<dt>Q: What is halfnarp?</dt>
14<dd>
15 <p>A: <a href="/">halfnarp</a> is a service by Chaos Communication Congress’ content crew. It shows a live preview of our conference lecture planning tool and allows conference attendees to store and share a list of events they plan to attend. When users submit their favorites to the halfnarp server, the numbers allow adjusting the conference’s Fahrplan.</p>
16
17 <p>Remember when some of the talks you most desperately wanted to see were scheduled at the same time? If we know about your preferences, the time table can be optimized for a minimal global amount of collisions. Remember when the lecture you wanted to get into was overcrowded because it was put into the smallest hall? Your numbers help to estimate demand and finding the right place for a talk.</p>
18</dd>
19<dt>Q: How does it work?</dt>
20<dd>
21 <p>A: 38C3 Fahrplan is curated by six teams each responsible for one track. By default, lectures are sorted by these tracks.</p>
22 <ul>
23 <li>On a desktop browser, hovering over an event’s description reveals the full abstract. Clicking on an event adds or removes events to/from your favorites list – they turn green.</li>
24 <li>On mobile browsers, tapping an event once selects it and reveals the whole content. Tapping a selected event adds or removes events to/from your favorites list – they turn green.</li>
25 </ul>
26 <p>Your choices will be stored locally in your browser for future visits. If you are done selecting and feel like helping to make the Fahrplan better, hit „Submit“. This will also reveal a download button for your personalized calendar in ical format and present a qrcode with a JSON dictionary of your preferences to import by mobile clients.</p>
27 <p>Once there is a preliminary timetable set, you can browse lectures by day using the day-view buttons.</p>
28 <p>The „Filter event“ text field allows you to filter events list by a type ahead search.</p>
29</dd>
30<dt>Q: How can I share my preferences?</dt>
31<dd>
32 <p>A: Once you hit „Submit“, your address bar reveals your public calendar URL. Share this URL with your friends, so they can get inspired by your preferences.</p>
33 <p>If you click on your friends’ public calendar URL, their favorited events appear purple, alongside yours in green.</p>
34</dd>
35<dt>Q: Can the halfnarp be used to hack the Fahrplan?</dt>
36<dd>
37 <p>A: The most important result is a conflict map showing how much all users do not want two certain lectures to happen at the same time. Absolute number are mostly ignored, making it hard to manipulate our Fahrplan. Also, results are being processed by actual humans, using their brains and halfnarps numbers as hints.</p>
38</dd>
39<dt>Q: How can I help?</dt>
40<dd>
41 <p>A: Submitting your preferences to the halfnarp servers helps a lot. You can find and create pull requests for <a href="https://github.com/tomster/halfnarp">halfnarp on its github home</a>.</p>
42</dd>
43
44</html>
diff --git a/templates/index.html b/templates/index.html
new file mode 100644
index 0000000..2e93fb3
--- /dev/null
+++ b/templates/index.html
@@ -0,0 +1,115 @@
1<!doctype html>
2<html lang="en">
3<head>
4 <meta charset="utf-8">
5 <title>halfnarp web scheduling helper app</title>
6 <link rel="stylesheet" href="/static/style_38c3.css">
7 <link rel="stylesheet" href="/static/style_38c3_tables.css">
8 <script src="/static/jquery-3.7.1.min.js"></script>
9 <script src="/static/jquery.qrcode.min.js"></script>
10 <script src="/static/halfnarp.js"></script>
11 <script>
12 $( document ).ready(function() { do_the_halfnarp(); });
13 </script>
14</head>
15<body class="size-small in-list halfnarp">
16 <header class="header">
17 <!--div class="views touch-only hidden vnarpr">narpr</div-->
18 <div class="views vlist" title="Display all events sorted by track (Hotkey: L)">list</div>
19 <div class="views vdays" title="Display all events in a 4-day-view (Hotkey: 0)">days</div>
20 <div class="views vday1" title="Display all events on Day 1 (Hotkey: 1)">day 1</div>
21 <div class="views vday2" title="Display all events on Day 2 (Hotkey: 2)">day 2</div>
22 <div class="views vday3" title="Display all events on Day 3 (Hotkey: 3)">day 3</div>
23 <div class="views vday4" title="Display all events on Day 4 (Hotkey: 4)">day 4</div>
24 <div class="views vcorr" title="Enter correlation view (Hotkey: C)">half</div>
25 <div class="views vtrack" title="Color event by track (Hotkey: T)">track</div>
26 <div class="views vlang" title="Color event by language (Hotkey: I)">lang</div>
27 <div class="header__right">
28 <div class="allboxes">
29 <div class="vsmallboxes boxer">size</div><div class="vmediumboxes boxer">Size</div><div class="vlargeboxes boxer">SIZE</div>
30 </div>
31 </div>
32 </header>
33
34<div style="display:none">
35 <div id="template">
36 <div class="title"></div>
37 <div class="speakers"></div>
38 <div class="abstract"></div>
39 </div>
40</div>
41
42<div class="narpr hidden">
43 <div class="narpr_swipy">swipe, hold, release</div>
44 <div class="narpr_swipy large">⟷</div>
45 <div class="narpr_track"></div>
46 <div class="narpr_title"></div>
47 <div class="narpr_subtitle"></div>
48 <div class="narpr_speakers"></div>
49 <div class="narpr_abstract"></div>
50 <div class="narpr_done">close</div>
51</div>
52
53 <div class="intro">
54 <h1>The 38C3 halfnarp</h1>
55 <div class="touch-only hidden vnarpr narpr-beta">narpr<sup>β</sup></div>
56 <p>Help us to reduce conflicts of scheduling 38C3's Fahrplan: Click on the talks you would like to watch and press submit.</p>
57 <p>For questions please read <a href="faq.html">our FAQ</a> and <a href="http://events.ccc.de/2014/11/25/lets-do-the-halfnarp/">our blogpost</a> for details. Please report problems to <a href="mailto:erdgeist@ccc.de">erdgeist@ccc.de</a>.</p>
58 <p class="corr-hint">Select an event below to display halfnarp correlations, the darker the stronger.</p>
59 <p class="touch-only hidden">NEW on mobile: Swipe the narpr!</p>
60 </div>
61<!--div class="all-tracks track-list">
62 <strong>classifiers:</strong>
63 <div class="legend track_378">CCC</div>
64 <div class="vclass legend track_379" classifier="Entertainment">Entertainment</div>
65 <div class="vclass legend track_382" classifier="Ethics, Politics + Society">Ethics, Society &amp; Politics</div>
66 <div class="vclass legend track_381" classifier="Security">Security</div>
67 <div class="vclass legend track_376" classifier="Art + Culture">Art &amp; Culture</div>
68 <div class="vclass legend track_380" classifier="Science">Science</div>
69 <div class="vclass legend track_377" classifier="Hardware">Hardware</div>
70 <div class="vclass legend track_383" classifier="Sustainability">Sustainability</div>
71 <div class="vclass" classifier="Foundations">Foundations</div>
72 <div class="vclass two_poles" classifier="Novelty">Summary - Novelty</div>
73 <div class="vclass two_poles" classifier="Defense - Offense">Defense - Offense</div>
74 <div class="vclass two_poles" classifier="Theory - Practice">Theory - Practice</div>
75</div-->
76<div style="clear:both"></div>
77
78<div class="day_1 room-label room1">Saal 1</div><div class="day_1 room-label room2">Saal GLITCH</div><div class="day_1 room-label room3">Saal ZIGZAG</div>
79<div class="day_2 room-label room1">Saal 1</div><div class="day_2 room-label room2">Saal GLITCH</div><div class="day_2 room-label room3">Saal ZIGZAG</div>
80<div class="day_3 room-label room1">Saal 1</div><div class="day_3 room-label room2">Saal GLITCH</div><div class="day_3 room-label room3">Saal ZIGZAG</div>
81<div class="day_4 room-label room1">Saal 1</div><div class="day_4 room-label room2">Saal GLITCH</div><div class="day_4 room-label room3">Saal ZIGZAG</div>
82
83<div class=" time_1815 duration_3600 guide pause pause1">P A U S E</div>
84<!--div class=" time_1950 duration_3600 guide pause ">P A U S E</div-->
85
86<div class=" time_1750 duration_inf guide ende room1 day_4 "></div>
87
88 <div class="wholeday room1 day_1 guide uneven">Day 1</div>
89 <div class="wholeday room1 day_2 guide">Day 2</div>
90 <div class="wholeday room1 day_3 guide uneven">Day 3</div>
91 <div class="wholeday room1 day_4 guide">Day 4</div>
92
93 <div class="track" id="6"><h2>Security</h2></div>
94 <div class="track" id="4"><h2>Hardware &amp; Making</h2></div>
95 <div class="track" id="7"><h2>Ethics, Society &amp; Politics</h2></div>
96 <div class="track" id="2"><h2>CCC</h2></div>
97 <div class="track" id="3"><h2>Entertainment</h2></div>
98 <div class="track" id="5"><h2>Science</h2></div>
99 <div class="track" id="1"><h2>Art &amp; Beauty</div>
100
101<footer class="footer">
102 <div class="footer__filter-side">
103 <!--label>You can reduce the listed events with a filter</label-->
104 <input id="filter" type="text" placeholder="Filter events"/>
105 </div>
106<div title="store your choices locally and – if possible – send them to the server" class="submit">Submit selection
107<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 28" enable-background="new 0 0 22 28"><style type="text/css">.st0{fill:none;}</style><path class="st0" d="M-854-2242h1400v3600h-1400v-3600z"/><path d="M0 0v28l22-14-22-14z"/><path class="st0" d="M-16-10h48v48h-48v-48z"/></svg>
108</div>
109 <div class="info hidden"></div>
110 <a class="export-url-a" download="38C3.ics" type="text/calendar" href="#"><div class="export-url hidden">38C3.ics</div></a>
111 <div id="qrcode" class="hidden"></div>
112</footer>
113
114</body>
115</html>
diff --git a/var/talks_local b/var/talks_local
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/var/talks_local
diff --git a/versions/fullnarp_00000.json b/versions/fullnarp_00000.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/versions/fullnarp_00000.json
@@ -0,0 +1 @@
{}
diff --git a/wsgi.py b/wsgi.py
new file mode 100644
index 0000000..2ad28d9
--- /dev/null
+++ b/wsgi.py
@@ -0,0 +1,4 @@
1from halfnarp2 import app
2
3if __name__ == "__main__":
4 app.run(debug=False)