Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(212)

Side by Side Diff: pkg/web_components/lib/platform.concat.js.map

Issue 147453004: update web_components (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: deletes polymer test script Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/web_components/lib/platform.concat.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 { 1 {
2 "version": 3, 2 "version": 3,
3 "file": "platform.concat.js", 3 "file": "platform.concat.js",
4 "sources": [ 4 "sources": [
5 "../WeakMap/weakmap.js", 5 "../WeakMap/weakmap.js",
6 "../observe-js/src/observe.js", 6 "../observe-js/src/observe.js",
7 "build/if-poly.js", 7 "build/if-poly.js",
8 "../ShadowDOM/src/wrappers.js", 8 "../ShadowDOM/src/wrappers.js",
9 "../ShadowDOM/src/microtask.js", 9 "../ShadowDOM/src/microtask.js",
10 "../ShadowDOM/src/MutationObserver.js", 10 "../ShadowDOM/src/MutationObserver.js",
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 "../PointerGestures/src/flick.js", 88 "../PointerGestures/src/flick.js",
89 "../PointerGestures/src/pinch.js", 89 "../PointerGestures/src/pinch.js",
90 "../PointerGestures/src/tap.js", 90 "../PointerGestures/src/tap.js",
91 "../NodeBind/src/NodeBind.js", 91 "../NodeBind/src/NodeBind.js",
92 "../TemplateBinding/src/TemplateBinding.js", 92 "../TemplateBinding/src/TemplateBinding.js",
93 "../polymer-expressions/third_party/esprima/esprima.js", 93 "../polymer-expressions/third_party/esprima/esprima.js",
94 "../polymer-expressions/src/polymer-expressions.js", 94 "../polymer-expressions/src/polymer-expressions.js",
95 "src/patches-mdv.js" 95 "src/patches-mdv.js"
96 ], 96 ],
97 "names": [], 97 "names": [],
98 "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;AC5kDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtDA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC1YA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChDA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnXA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;A;ACryBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;A;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;A;AC9sBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxEA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;A;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;A;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzCA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7IA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;A;AC1TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxCA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC1CA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;A;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtEA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;A;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzCA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9DA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9BA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACfA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7CA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACl EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjDA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9FA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;A;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;A;ACvpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClEA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;A;ACvTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;A;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA,oB;AC5lBA,Q;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA,K;AC1DA,C;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpjBA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA,oB;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;A;AC1JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACTA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7LA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;A;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA,W;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;A;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjiBA;AACA;AACA;AACA;AACA;AACA,s D;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;A;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;A;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzDA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;A;ACvDA;AACA;AACA;AACA;AACA;AACA,4D;ACLA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;A;ACvVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0B;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnEA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;A;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxFA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;A;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;A;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;A;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpHA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3GA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjVA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;A;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;A;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;A;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;A;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;A;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;A;AC7OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;A;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxMA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChIA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;A;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvXA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClnCA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5gCA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A", 98 "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;AC5kDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtDA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC1YA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChDA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnXA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;A;ACryBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;A;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;A;AC9sBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxEA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;A;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;A;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzCA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7IA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;A;AC1TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxCA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC1CA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;A;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtEA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;A;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzCA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9DA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9BA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACfA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7CA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACl EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjDA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9FA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;A;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;A;ACvpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClEA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;A;ACvTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;A;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oB;AClmBA,Q;ACAA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,K;AC1DA,C;ACAA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;A CpjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oB;AC1DA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC1JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA,E;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; A;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC1BA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,W;AC9CA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/BA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/GA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACj iBA;AACA;AACA;AACA;AACA;AACA,sD;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrJA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;A;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvDA;AACA;AACA;AACA;AACA;AAC A,4D;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvVA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjaA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0B;AC/DA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;A;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxFA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3FA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;A;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClKA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/DA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChUA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;A;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3GA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; A;ACjVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;A;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;A;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;A;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;A;ACxMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;A;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzJA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvX A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;A;AChrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5gCA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; A;AChqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;A",
99 "sourcesContent": [ 99 "sourcesContent": [
100 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nif (typeof WeakMap === 'undefined') {\n (function() {\n var defineProperty = Object.defineProperty;\n var counter = Date.now() % 1 e9;\n\n var WeakMap = function() {\n this.name = '__st' + (Math.random() * 1e9 >>> 0) + (counter++ + '__');\n };\n\n WeakMap.prototype = {\n set: function(key, value) {\n var entry = key[this.name];\n if (en try && entry[0] === key)\n entry[1] = value;\n else\n d efineProperty(key, this.name, {value: [key, value], writable: true});\n },\ n get: function(key) {\n var entry;\n return (entry = key[thi s.name]) && entry[0] === key ?\n entry[1] : undefined;\n },\n delete: function(key) {\n this.set(key, undefined);\n }\n };\n \n window.WeakMap = WeakMap;\n })();\n}\n", 100 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nif (typeof WeakMap === 'undefined') {\n (function() {\n var defineProperty = Object.defineProperty;\n var counter = Date.now() % 1 e9;\n\n var WeakMap = function() {\n this.name = '__st' + (Math.random() * 1e9 >>> 0) + (counter++ + '__');\n };\n\n WeakMap.prototype = {\n set: function(key, value) {\n var entry = key[this.name];\n if (en try && entry[0] === key)\n entry[1] = value;\n else\n d efineProperty(key, this.name, {value: [key, value], writable: true});\n },\ n get: function(key) {\n var entry;\n return (entry = key[thi s.name]) && entry[0] === key ?\n entry[1] : undefined;\n },\n delete: function(key) {\n this.set(key, undefined);\n }\n };\n \n window.WeakMap = WeakMap;\n })();\n}\n",
101 "// Copyright 2012 Google Inc.\n//\n// Licensed under the Apache License, Ve rsion 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http:/ /www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o r agreed to in writing, software\n// distributed under the License is distribute d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe r express or implied.\n// See the License for the specific language governing pe rmissions and\n// limitations under the License.\n\n(function(global) {\n 'use strict';\n\n var PROP_ADD_TYPE = 'add';\n var PROP_UPDATE_TYPE = 'update';\n var PROP_RECONFIGURE_TYPE = 'reconfigure';\n var PROP_DELETE_TYPE = 'delete';\n var ARRAY_SPLICE_TYPE = 'splice';\n\n // Detect and do basic sanity checking on Object/Array.observe.\n function detectObjectObserve() {\n if (typeof Obj ect.observe !== 'function' ||\n typeof Array.observe !== 'function') {\n return false;\n }\n\n var records = [];\n\n function callback(recs ) {\n records = recs;\n }\n\n var test = {};\n Object.observe(test , callback);\n test.id = 1;\n test.id = 2;\n delete test.id;\n Objec t.deliverChangeRecords(callback);\n if (records.length !== 3)\n return f alse;\n\n // TODO(rafaelw): Remove this when new change record type names mak e it to\n // chrome release.\n if (records[0].type == 'new' &&\n re cords[1].type == 'updated' &&\n records[2].type == 'deleted') {\n PR OP_ADD_TYPE = 'new';\n PROP_UPDATE_TYPE = 'updated';\n PROP_RECONFIGUR E_TYPE = 'reconfigured';\n PROP_DELETE_TYPE = 'deleted';\n } else if (re cords[0].type != 'add' ||\n records[1].type != 'update' ||\n records[2].type != 'delete') {\n console.error('Unexpected change record names for Object.observe. ' +\n 'Using dirty-checking instead');\n return false;\n }\n Object.unobserve(test, callback);\n\ n test = [0];\n Array.observe(test, callback);\n test[1] = 1;\n test .length = 0;\n Object.deliverChangeRecords(callback);\n if (records.length != 2)\n return false;\n if (records[0].type != ARRAY_SPLICE_TYPE ||\n records[1].type != ARRAY_SPLICE_TYPE) {\n return false;\n }\n A rray.unobserve(test, callback);\n\n return true;\n }\n\n var hasObserve = d etectObjectObserve();\n\n function detectEval() {\n // don't test for eval i f document has CSP securityPolicy object and we can see that\n // eval is not supported. This avoids an error message in console even when the exception\n // is caught\n if (global.document &&\n 'securityPolicy' in global.do cument &&\n !global.document.securityPolicy.allowsEval) {\n return f alse;\n }\n\n try {\n var f = new Function('', 'return true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasE val = detectEval();\n\n function isIndex(s) {\n return +s === s >>> 0;\n }\ n\n function toNumber(s) {\n return +s;\n }\n\n function isObject(obj) {\n return obj === Object(obj);\n }\n\n var numberIsNaN = global.Number.isNaN || function isNaN(value) {\n return typeof value === 'number' && global.isNaN (value);\n }\n\n function areSameValue(left, right) {\n if (left === right) \n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && numberIsNaN(right))\n return true;\n\n return left !== left && right !== right;\n }\n\n var createObject = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forEach(function(name) {\n Object.d efineProperty(newObject, name,\n Object.getOwnProper tyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var i dentStart = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var ident = identStart + '+' + identPart + '*';\n var elementIndex = '(?:[0-9]|[1-9]+[0-9] +)';\n var identOrElementIndex = '(?:' + ident + '|' + elementIndex + ')';\n v ar path = '(?:' + identOrElementIndex + ')(?:\\\\s*\\\\.\\\\s*' + identOrElement Index + ')*';\n var pathRegExp = new RegExp('^' + path + '$');\n\n function is PathValid(s) {\n if (typeof s != 'string')\n return false;\n s = s.tr im();\n\n if (s == '')\n return true;\n\n if (s[0] == '.')\n ret urn false;\n\n return pathRegExp.test(s);\n }\n\n var constructorIsPrivate = {};\n\n function Path(s, privateToken) {\n if (privateToken !== constructo rIsPrivate)\n throw Error('Use Path.get to retrieve path objects');\n\n if (s.trim() == '')\n return this;\n\n if (isIndex(s)) {\n this.pus h(s);\n return this;\n }\n\n s.split(/\\s*\\.\\s*/).filter(function(p art) {\n return part;\n }).forEach(function(part) {\n this.push(par t);\n }, this);\n\n if (hasEval && this.length) {\n this.getValueFrom = this.compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw): Make simple LRU cache\n var pathCache = {};\n\n function getPath(pathString) {\n if (p athString instanceof Path)\n return pathString;\n\n if (pathString == nu ll)\n pathString = '';\n\n if (typeof pathString !== 'string')\n pa thString = String(pathString);\n\n var path = pathCache[pathString];\n if (path)\n return path;\n if (!isPathValid(pathString))\n return inva lidPath;\n var path = new Path(pathString, constructorIsPrivate);\n pathCa che[pathString] = path;\n return path;\n }\n\n Path.get = getPath;\n\n Pat h.prototype = createObject({\n __proto__: [],\n valid: true,\n\n toStri ng: function() {\n return this.join('.');\n },\n\n getValueFrom: func tion(obj, directObserver) {\n for (var i = 0; i < this.length; i++) {\n if (obj == null)\n return;\n obj = obj[this[i]];\n }\n return obj;\n },\n\n iterateObjects: function(obj, observe) {\n for (var i = 0; i < this.length; i++) {\n if (i)\n obj = obj[thi s[i - 1]];\n if (!obj)\n return;\n observe(obj);\n } \n },\n\n compiledGetValueFromFn: function() {\n var accessors = this .map(function(ident) {\n return isIndex(ident) ? '[\"' + ident + '\"]' : '.' + ident;\n });\n\n var str = '';\n var pathString = 'obj';\n str += 'if (obj != null';\n var i = 0;\n for (; i < (this.length - 1); i++) {\n var ident = this[i];\n pathString += accessors[i];\ n str += ' &&\\n ' + pathString + ' != null';\n }\n str += ')\\n';\n\n pathString += accessors[i];\n\n str += ' return ' + pathS tring + ';\\nelse\\n return undefined;';\n return new Function('obj', str) ;\n },\n\n setValueFrom: function(obj, value) {\n if (!this.length)\n return false;\n\n for (var i = 0; i < this.length - 1; i++) {\n if (!isObject(obj))\n return false;\n obj = obj[this[i]];\n }\n\n if (!isObject(obj))\n return false;\n\n obj[this[i]] = value;\n return true;\n }\n });\n\n var invalidPath = new Path('', constructorIsPrivate);\n invalidPath.valid = false;\n invalidPath.getValueFrom = invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY_CHECK_CYCLES = 1 000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n while (cycle s < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\n }\n if (global.testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles; \n\n return cycles > 0;\n }\n\n function objectIsEmpty(object) {\n for ( var prop in object)\n return false;\n return true;\n }\n\n function di ffIsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n objectIsE mpty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\n\n functio n diffObjectFromOldObject(object, oldObject) {\n var added = {};\n var rem oved = {};\n var changed = {};\n\n for (var prop in oldObject) {\n va r newValue = object[prop];\n\n if (newValue !== undefined && newValue === o ldObject[prop])\n continue;\n\n if (!(prop in object)) {\n re moved[prop] = undefined;\n continue;\n }\n\n if (newValue !== o ldObject[prop])\n changed[prop] = newValue;\n }\n\n for (var prop i n object) {\n if (prop in oldObject)\n continue;\n\n added[prop ] = object[prop];\n }\n\n if (Array.isArray(object) && object.length !== o ldObject.length)\n changed.length = object.length;\n\n return {\n a dded: added,\n removed: removed,\n changed: changed\n };\n }\n\n var eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.length)\n return false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n eomTask s[i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong: true };\n var eomRu nScheduled = false;\n\n Object.observe(eomObj, function() {\n runEOMTask s();\n eomRunScheduled = false;\n });\n\n return function(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n eomRunScheduled = t rue;\n eomObj.pingPong = !eomObj.pingPong;\n }\n };\n })() :\n (function() {\n return function(fn) {\n eomTasks.push(fn);\n };\n }) ();\n\n var observedObjectCache = [];\n\n function newObservedObject() {\n var observer;\n var object;\n var discardRecords = false;\n var first = true;\n\n function callback(records) {\n if (observer && observer.state _ === OPENED && !discardRecords)\n observer.check_(records);\n }\n\n return {\n open: function(obs) {\n if (observer)\n throw Error('ObservedObject in use');\n\n if (!first)\n Object.deliver ChangeRecords(callback);\n\n observer = obs;\n first = false;\n },\n observe: function(obj, arrayObserve) {\n object = obj;\n if (arrayObserve)\n Array.observe(object, callback);\n else\ n Object.observe(object, callback);\n },\n deliver: function( discard) {\n discardRecords = discard;\n Object.deliverChangeRecor ds(callback);\n discardRecords = false;\n },\n close: function( ) {\n observer = undefined;\n Object.unobserve(object, callback);\ n observedObjectCache.push(this);\n }\n };\n }\n\n function get ObservedObject(observer, object, arrayObserve) {\n var dir = observedObjectCa che.pop() || newObservedObject();\n dir.open(observer);\n dir.observe(obje ct, arrayObserve);\n return dir;\n }\n\n var emptyArray = [];\n var observ edSetCache = [];\n\n function newObservedSet() {\n var observers = [];\n var observerCount = 0;\n var objects = [];\n var toRemove = emptyArray;\n var resetNeeded = false;\n var resetScheduled = false;\n\n function obs erve(obj) {\n if (!isObject(obj))\n return;\n\n var index = toR emove.indexOf(obj);\n if (index >= 0) {\n toRemove[index] = undefine d;\n objects.push(obj);\n } else if (objects.indexOf(obj) < 0) {\n objects.push(obj);\n Object.observe(obj, callback);\n }\n\n observe(Object.getPrototypeOf(obj));\n }\n\n function reset() {\n resetScheduled = false;\n if (!resetNeeded)\n return;\n\n var o bjs = toRemove === emptyArray ? [] : toRemove;\n toRemove = objects;\n objects = objs;\n\n var observer;\n for (var id in observers) {\n observer = observers[id];\n if (!observer || observer.state_ != OPENE D)\n continue;\n\n observer.iterateObjects_(observe);\n }\n \n for (var i = 0; i < toRemove.length; i++) {\n var obj = toRemove[ i];\n if (obj)\n Object.unobserve(obj, callback);\n }\n\n toRemove.length = 0;\n }\n\n function scheduleReset() {\n if (res etScheduled)\n return;\n\n resetNeeded = true;\n resetScheduled = true;\n runEOM(reset);\n }\n\n function callback() {\n var ob server;\n\n for (var id in observers) {\n observer = observers[id];\ n if (!observer || observer.state_ != OPENED)\n continue;\n\n observer.check_();\n }\n\n scheduleReset();\n }\n\n var rec ord = {\n object: undefined,\n objects: objects,\n open: function (obs) {\n observers[obs.id_] = obs;\n observerCount++;\n ob s.iterateObjects_(observe);\n },\n close: function(obs) {\n var anyLeft = false;\n\n observers[obs.id_] = undefined;\n observerCo unt--;\n\n if (observerCount) {\n scheduleReset();\n re turn;\n }\n resetNeeded = false;\n\n for (var i = 0; i < ob jects.length; i++) {\n Object.unobserve(objects[i], callback);\n Observer.unobservedCount++;\n }\n\n observers.length = 0;\n objects.length = 0;\n observedSetCache.push(this);\n },\n r eset: scheduleReset\n };\n\n return record;\n }\n\n var lastObservedSet; \n\n function getObservedSet(observer, obj) {\n if (!lastObservedSet || last ObservedSet.object !== obj) {\n lastObservedSet = observedSetCache.pop() || newObservedSet();\n lastObservedSet.object = obj;\n }\n lastObserved Set.open(observer);\n return lastObservedSet;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n var CLOSED = 2;\n var RESETTING = 3;\n\n var nextObserverId = 1;\n\n function Observer() {\n this.state_ = UNOPENED;\n this.callback _ = undefined;\n this.target_ = undefined; // TODO(rafaelw): Should be WeakRe f\n this.directObserver_ = undefined;\n this.value_ = undefined;\n this .id_ = nextObserverId++;\n }\n\n Observer.prototype = {\n open: function(ca llback, target) {\n if (this.state_ != UNOPENED)\n throw Error('Obse rver has already been opened.');\n\n addToAll(this);\n this.callback_ = callback;\n this.target_ = target;\n this.state_ = OPENED;\n th is.connect_();\n return this.value_;\n },\n\n close: function() {\n if (this.state_ != OPENED)\n return;\n\n removeFromAll(this);\n this.state_ = CLOSED;\n this.disconnect_();\n this.value_ = undef ined;\n this.callback_ = undefined;\n this.target_ = undefined;\n } ,\n\n deliver: function() {\n if (this.state_ != OPENED)\n return ;\n\n dirtyCheck(this);\n },\n\n report_: function(changes) {\n try {\n this.callback_.apply(this.target_, changes);\n } catch (ex) {\n Observer._errorThrownDuringCallback = true;\n console.error('E xception caught during observer callback: ' +\n (ex.stack || ex));\n }\n },\n\n discardChanges: function() {\n this.check_ (undefined, true);\n return this.value_;\n }\n }\n\n var collectObserv ers = !hasObserve;\n var allObservers;\n Observer._allObserversCount = 0;\n\n if (collectObservers) {\n allObservers = [];\n }\n\n function addToAll(obs erver) {\n Observer._allObserversCount++;\n if (!collectObservers)\n return;\n\n allObservers.push(observer);\n }\n\n function removeFromAll(obs erver) {\n Observer._allObserversCount--;\n }\n\n var runningMicrotaskCheck point = false;\n\n var hasDebugForceFullDelivery = typeof Object.deliverAllChan geRecords == 'function';\n\n global.Platform = global.Platform || {};\n\n glob al.Platform.performMicrotaskCheckpoint = function() {\n if (runningMicrotaskC heckpoint)\n return;\n\n if (hasDebugForceFullDelivery) {\n Object. deliverAllChangeRecords();\n return;\n }\n\n if (!collectObservers)\n return;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0;\n var anyChanged, toCheck;\n\n do {\n cycles++;\n toCheck = allOb servers;\n allObservers = [];\n anyChanged = false;\n\n for (var i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n i f (observer.state_ != OPENED)\n continue;\n\n if (observer.check _())\n anyChanged = true;\n\n allObservers.push(observer);\n }\n if (runEOMTasks())\n anyChanged = true;\n } while (cycles < MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (global.testingExposeCycleCoun t)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoin t = false;\n };\n\n if (collectObservers) {\n global.Platform.clearObserver s = function() {\n allObservers = [];\n };\n }\n\n function ObjectObse rver(object) {\n Observer.call(this);\n this.value_ = object;\n this.ol dObject_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n _ _proto__: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: funct ion(callback, target) {\n if (hasObserve) {\n this.directObserver_ = getObservedObject(this, this.value_,\n this.arrayObserve);\n } else {\n this.oldObject_ = this.copy Object(this.value_);\n }\n\n },\n\n copyObject: function(object) {\n var copy = Array.isArray(object) ? [] : {};\n for (var prop in object) {\n copy[prop] = object[prop];\n };\n if (Array.isArray(object ))\n copy.length = object.length;\n return copy;\n },\n\n chec k_: function(changeRecords, skipChanges) {\n var diff;\n var oldValues ;\n if (hasObserve) {\n if (!changeRecords)\n return false; \n\n oldValues = {};\n diff = diffObjectFromChangeRecords(this.val ue_, changeRecords,\n oldValues);\n } else {\n oldValues = this.oldObject_;\n diff = diffObjectFrom OldObject(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff) )\n return false;\n\n if (!hasObserve)\n this.oldObject_ = th is.copyObject(this.value_);\n\n this.report_([\n diff.added || {},\n diff.removed || {},\n diff.changed || {},\n function(prope rty) {\n return oldValues[property];\n }\n ]);\n\n ret urn true;\n },\n\n disconnect_: function() {\n if (hasObserve) {\n this.directObserver_.close();\n this.directObserver_ = undefined;\n } else {\n this.oldObject_ = undefined;\n }\n },\n\n deli ver: function() {\n if (this.state_ != OPENED)\n return;\n\n if (hasObserve)\n this.directObserver_.deliver(false);\n else\n dirtyCheck(this);\n },\n\n discardChanges: function() {\n if (this.d irectObserver_)\n this.directObserver_.deliver(true);\n else\n this.oldObject_ = this.copyObject(this.value_);\n\n return this.value_;\n }\n });\n\n function ArrayObserver(array) {\n if (!Array.isArray(array) )\n throw Error('Provided object is not an Array');\n ObjectObserver.cal l(this, array);\n }\n\n ArrayObserver.prototype = createObject({\n\n __prot o__: ObjectObserver.prototype,\n\n arrayObserve: true,\n\n copyObject: fun ction(arr) {\n return arr.slice();\n },\n\n check_: function(changeRe cords) {\n var splices;\n if (hasObserve) {\n if (!changeRecord s)\n return false;\n splices = projectArraySplices(this.value_, changeRecords);\n } else {\n splices = calcSplices(this.value_, 0, t his.value_.length,\n this.oldObject_, 0, this.oldOb ject_.length);\n }\n\n if (!splices || !splices.length)\n retur n false;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(th is.value_);\n\n this.report_([splices]);\n return true;\n }\n });\ n\n ArrayObserver.applySplices = function(previous, current, splices) {\n sp lices.forEach(function(splice) {\n var spliceArgs = [splice.index, splice.r emoved.length];\n var addIndex = splice.index;\n while (addIndex < spl ice.index + splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n addIndex++;\n }\n\n Array.prototype.splice.apply(previous, spli ceArgs);\n });\n };\n\n function PathObserver(object, path) {\n Observer .call(this);\n\n this.object_ = object;\n this.path_ = path instanceof Pat h ? path : getPath(path);\n this.directObserver_ = undefined;\n }\n\n PathO bserver.prototype = createObject({\n __proto__: Observer.prototype,\n\n co nnect_: function() {\n if (hasObserve)\n this.directObserver_ = getO bservedSet(this, this.object_);\n\n this.check_(undefined, true);\n },\n \n disconnect_: function() {\n this.value_ = undefined;\n\n if (thi s.directObserver_) {\n this.directObserver_.close(this);\n this.di rectObserver_ = undefined;\n }\n },\n\n iterateObjects_: function(obs erve) {\n this.path_.iterateObjects(this.object_, observe);\n },\n\n check_: function(changeRecords, skipChanges) {\n var oldValue = this.value_ ;\n this.value_ = this.path_.getValueFrom(this.object_);\n if (skipCha nges || areSameValue(this.value_, oldValue))\n return false;\n\n thi s.report_([this.value_, oldValue]);\n return true;\n },\n\n setValue: function(newValue) {\n if (this.path_)\n this.path_.setValueFrom(th is.object_, newValue);\n }\n });\n\n function CompoundObserver() {\n Obs erver.call(this);\n\n this.value_ = [];\n this.directObserver_ = undefined ;\n this.observed_ = [];\n }\n\n var observerSentinel = {};\n\n CompoundOb server.prototype = createObject({\n __proto__: Observer.prototype,\n\n con nect_: function() {\n this.check_(undefined, true);\n\n if (!hasObserv e)\n return;\n\n var object;\n var needsDirectObserver = false; \n for (var i = 0; i < this.observed_.length; i += 2) {\n object = t his.observed_[i]\n if (object !== observerSentinel) {\n needsDir ectObserver = true;\n break;\n }\n }\n\n if (this.dire ctObserver_) {\n if (needsDirectObserver) {\n this.directObserve r_.reset();\n return;\n }\n this.directObserver_.close(); \n this.directObserver_ = undefined;\n return;\n }\n\n i f (needsDirectObserver)\n this.directObserver_ = getObservedSet(this, obj ect);\n },\n\n closeObservers_: function() {\n for (var i = 0; i < th is.observed_.length; i += 2) {\n if (this.observed_[i] === observerSentin el)\n this.observed_[i + 1].close();\n }\n this.observed_.len gth = 0;\n },\n\n disconnect_: function() {\n this.value_ = undefined ;\n\n if (this.directObserver_) {\n this.directObserver_.close(this) ;\n this.directObserver_ = undefined;\n }\n\n this.closeObserve rs_();\n },\n\n addPath: function(object, path) {\n if (this.state_ ! = UNOPENED && this.state_ != RESETTING)\n throw Error('Cannot add paths o nce started.');\n\n this.observed_.push(object, path instanceof Path ? path : getPath(path));\n },\n\n addObserver: function(observer) {\n if (t his.state_ != UNOPENED && this.state_ != RESETTING)\n throw Error('Cannot add observers once started.');\n\n observer.open(this.deliver, this);\n this.observed_.push(observerSentinel, observer);\n },\n\n startReset: f unction() {\n if (this.state_ != OPENED)\n throw Error('Can only res et while open');\n\n this.state_ = RESETTING;\n this.closeObservers_() ;\n },\n\n finishReset: function() {\n if (this.state_ != RESETTING)\ n throw Error('Can only finishReset after startReset');\n this.state _ = OPENED;\n this.connect_();\n\n return this.value_;\n },\n\n iterateObjects_: function(observe) {\n var object;\n for (var i = 0; i < this.observed_.length; i += 2) {\n object = this.observed_[i]\n if (object !== observerSentinel)\n this.observed_[i + 1].iterateObject s(object, observe)\n }\n },\n\n check_: function(changeRecords, skipC hanges) {\n var oldValues;\n for (var i = 0; i < this.observed_.length ; i += 2) {\n var pathOrObserver = this.observed_[i+1];\n var obje ct = this.observed_[i];\n var value = object === observerSentinel ?\n pathOrObserver.discardChanges() :\n pathOrObserver.getValueFr om(object)\n\n if (skipChanges) {\n this.value_[i / 2] = value;\ n continue;\n }\n\n if (areSameValue(value, this.value_[i / 2]))\n continue;\n\n oldValues = oldValues || [];\n ol dValues[i / 2] = this.value_[i / 2];\n this.value_[i / 2] = value;\n }\n\n if (!oldValues)\n return false;\n\n // TODO(rafaelw): Ha ving observed_ as the third callback arg here is\n // pretty lame API. Fix. \n this.report_([this.value_, oldValues, this.observed_]);\n return tr ue;\n }\n });\n\n function identFn(value) { return value; }\n\n function O bserverTransform(observable, getValueFn, setValueFn,\n dontPassThroughSet) {\n this.callback_ = undefined;\n this.target_ = un defined;\n this.value_ = undefined;\n this.observable_ = observable;\n this.getValueFn_ = getValueFn || identFn;\n this.setValueFn_ = setValueFn || identFn;\n // TODO(rafaelw): This is a temporary hack. PolymerExpressions nee ds this\n // at the moment because of a bug in it's dependency tracking.\n this.dontPassThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransform.prot otype = {\n open: function(callback, target) {\n this.callback_ = callba ck;\n this.target_ = target;\n this.value_ =\n this.getValueF n_(this.observable_.open(this.observedCallback_, this));\n return this.valu e_;\n },\n\n observedCallback_: function(value) {\n value = this.getV alueFn_(value);\n if (areSameValue(value, this.value_))\n return;\n var oldValue = this.value_;\n this.value_ = value;\n this.callbac k_.call(this.target_, this.value_, oldValue);\n },\n\n discardChanges: fun ction() {\n this.value_ = this.getValueFn_(this.observable_.discardChanges( ));\n return this.value_;\n },\n\n deliver: function() {\n retur n this.observable_.deliver();\n },\n\n setValue: function(value) {\n value = this.setValueFn_(value);\n if (!this.dontPassThroughSet_ && this.ob servable_.setValue)\n return this.observable_.setValue(value);\n },\n\ n close: function() {\n if (this.observable_)\n this.observable_. close();\n this.callback_ = undefined;\n this.target_ = undefined;\n this.observable_ = undefined;\n this.value_ = undefined;\n this.ge tValueFn_ = undefined;\n this.setValueFn_ = undefined;\n }\n }\n\n var expectedRecordTypes = {};\n expectedRecordTypes[PROP_ADD_TYPE] = true;\n expe ctedRecordTypes[PROP_UPDATE_TYPE] = true;\n expectedRecordTypes[PROP_DELETE_TYP E] = true;\n\n function notifyFunction(object, name) {\n if (typeof Object.o bserve !== 'function')\n return;\n\n var notifier = Object.getNotifier(o bject);\n return function(type, oldValue) {\n var changeRecord = {\n object: object,\n type: type,\n name: name\n };\n if (arguments.length === 2)\n changeRecord.oldValue = oldValue;\n noti fier.notify(changeRecord);\n }\n }\n\n Observer.defineComputedProperty = fu nction(target, name, observable) {\n var notify = notifyFunction(target, name );\n var value = observable.open(function(newValue, oldValue) {\n value = newValue;\n if (notify)\n notify(PROP_UPDATE_TYPE, oldValue);\n });\n\n Object.defineProperty(target, name, {\n get: function() {\n observable.deliver();\n return value;\n },\n set: function( newValue) {\n observable.setValue(newValue);\n return newValue;\n },\n configurable: true\n });\n\n return {\n close: functio n() {\n observable.close();\n Object.defineProperty(target, name, {\n value: value,\n writable: true,\n configurable: t rue\n });\n }\n };\n }\n\n function diffObjectFromChangeRecords (object, changeRecords, oldValues) {\n var added = {};\n var removed = {}; \n\n for (var i = 0; i < changeRecords.length; i++) {\n var record = cha ngeRecords[i];\n if (!expectedRecordTypes[record.type]) {\n console. error('Unknown changeRecord type: ' + record.type);\n console.error(recor d);\n continue;\n }\n\n if (!(record.name in oldValues))\n oldValues[record.name] = record.oldValue;\n\n if (record.type == PROP_UP DATE_TYPE)\n continue;\n\n if (record.type == PROP_ADD_TYPE) {\n if (record.name in removed)\n delete removed[record.name];\n else\n added[record.name] = true;\n\n continue;\n }\n\n // type = 'delete'\n if (record.name in added) {\n delete added[r ecord.name];\n delete oldValues[record.name];\n } else {\n re moved[record.name] = true;\n }\n }\n\n for (var prop in added)\n added[prop] = object[prop];\n\n for (var prop in removed)\n removed[pro p] = undefined;\n\n var changed = {};\n for (var prop in oldValues) {\n if (prop in added || prop in removed)\n continue;\n\n var newValu e = object[prop];\n if (oldValues[prop] !== newValue)\n changed[prop ] = newValue;\n }\n\n return {\n added: added,\n removed: remove d,\n changed: changed\n };\n }\n\n function newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n }\n\n var EDIT_LEAVE = 0;\n var EDIT_UPDATE = 1;\n var EDIT_ADD = 2;\n var EDIT_DELETE = 3;\n\n function ArraySplice() { }\n\n ArraySplice.prototype = {\n\n // Note: This function is *based* on the computation of the Levenshtein\n // \"edit\" distance. The one change is tha t \"updates\" are treated as two\n // edits - not one. With Array splices, an update is really a delete\n // followed by an add. By retaining this, we opt imize for \"keeping\" the\n // maximum array items in the original array. For example:\n //\n // 'xxxx123' -> '123yyyy'\n //\n // With 1-edit u pdates, the shortest path would be just to update all seven\n // characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n // leaves the su bstring '123' intact.\n calcEditDistances: function(current, currentStart, cu rrentEnd,\n old, oldStart, oldEnd) {\n // \" Deletion\" columns\n var rowCount = oldEnd - oldStart + 1;\n var colum nCount = currentEnd - currentStart + 1;\n var distances = new Array(rowCoun t);\n\n // \"Addition\" rows. Initialize null column.\n for (var i = 0 ; i < rowCount; i++) {\n distances[i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n // Initialize null row\n for (var j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (var i = 1 ; i < rowCount; i++) {\n for (var j = 1; j < columnCount; j++) {\n if (this.equals(current[currentStart + j - 1], old[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n else {\n var north = distances[i - 1][j] + 1;\n var west = distances[i][j - 1 ] + 1;\n distances[i][j] = north < west ? north : west;\n }\ n }\n }\n\n return distances;\n },\n\n // This starts at the final weight, and walks \"backward\" by finding\n // the minimum previous weight recursively until the origin of the weight\n // matrix.\n spliceOp erationsFromEditDistances: function(distances) {\n var i = distances.length - 1;\n var j = distances[0].length - 1;\n var current = distances[i][ j];\n var edits = [];\n while (i > 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\n continue;\n }\n if (j == 0) {\n edits.push(EDIT_DELETE);\n i--;\n continue;\n }\n var northWest = distances[i - 1][j - 1];\ n var west = distances[i - 1][j];\n var north = distances[i][j - 1 ];\n\n var min;\n if (west < north)\n min = west < northW est ? west : northWest;\n else\n min = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == cur rent) {\n edits.push(EDIT_LEAVE);\n } else {\n ed its.push(EDIT_UPDATE);\n current = northWest;\n }\n i--;\n j--;\n } else if (min == west) {\n edits.push(E DIT_DELETE);\n i--;\n current = west;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edits;\n },\n\n /**\n * Splice Projection functions:\n *\n * A splice map is a representati on of how a previous array of items\n * was transformed into a new array of items. Conceptually it is a list of\n * tuples of\n *\n * <index, removed, addedCount>\n *\n * which are kept in ascending index order of. The tuple represents that at\n * the |index|, |removed| sequence of items w ere removed, and counting forward\n * from |index|, |addedCount| items were added.\n */\n\n /**\n * Lacking individual splice mutation informatio n, the minimal set of\n * splices can be synthesized given the previous stat e and final state of an\n * array. The basic approach is to calculate the ed it distance matrix and\n * choose the shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The length of the current array\n * p: The length of the old array\n */\n calcSplices: function(current, curr entStart, currentEnd,\n old, oldStart, oldEnd) {\n var prefixCount = 0;\n var suffixCount = 0;\n\n var minLength = Math. min(currentEnd - currentStart, oldEnd - oldStart);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = this.sharedPrefix(current, old, minLeng th);\n\n if (currentEnd == current.length && oldEnd == old.length)\n suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - current Start == 0 && oldEnd - oldStart == 0)\n return [];\n\n if (currentSt art == currentEnd) {\n var splice = newSplice(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.removed.push(old[oldStart++]);\n \n return [ splice ];\n } else if (oldStart == oldEnd)\n retu rn [ newSplice(currentStart, [], currentEnd - currentStart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\n this.calcEditDistances(curr ent, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n var splice = undefined;\n var splices = [];\n var i ndex = currentStart;\n var oldIndex = oldStart;\n for (var i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(splice);\n splice = undefined;\n }\n\n index++;\n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n case EDIT_ADD:\n if (!sp lice)\n splice = newSplice(index, [], 0);\n\n splice.add edCount++;\n index++;\n break;\n case EDIT_DELETE :\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splice) {\n splices.push(sp lice);\n }\n return splices;\n },\n\n sharedPrefix: function(cur rent, old, searchLength) {\n for (var i = 0; i < searchLength; i++)\n if (!this.equals(current[i], old[i]))\n return i;\n return searc hLength;\n },\n\n sharedSuffix: function(current, old, searchLength) {\n var index1 = current.length;\n var index2 = old.length;\n var coun t = 0;\n while (count < searchLength && this.equals(current[--index1], old[ --index2]))\n count++;\n\n return count;\n },\n\n calculateSpl ices: function(current, previous) {\n return this.calcSplices(current, 0, c urrent.length, previous, 0,\n previous.length);\n },\n\n equals: function(currentValue, previousValue) {\n return curren tValue === previousValue;\n }\n };\n\n var arraySplice = new ArraySplice(); \n\n function calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n return arraySplice.calcSplices(current, curr entStart, currentEnd,\n old, oldStart, oldEnd) ;\n }\n\n function intersect(start1, end1, start2, end2) {\n // Disjoint\n if (end1 < start2 || end2 < start1)\n return -1;\n\n // Adjacent\n if (end1 == start2 || end2 == start1)\n return 0;\n\n // Non-zero inter sect, span1 first\n if (start1 < start2) {\n if (end1 < end2)\n r eturn end1 - start2; // Overlap\n else\n return end2 - start2; // Co ntained\n } else {\n // Non-zero intersect, span2 first\n if (end2 < end1)\n return end2 - start1; // Overlap\n else\n return en d1 - start1; // Contained\n }\n }\n\n function mergeSplice(splices, index, removed, addedCount) {\n\n var splice = newSplice(index, removed, addedCount) ;\n\n var inserted = false;\n var insertionOffset = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var current = splices[i];\n current.i ndex += insertionOffset;\n\n if (inserted)\n continue;\n\n var intersectCount = intersect(splice.index,\n s plice.index + splice.removed.length,\n curre nt.index,\n current.index + current.addedCou nt);\n\n if (intersectCount >= 0) {\n // Merge the two splices\n\n splices.splice(i, 1);\n i--;\n\n insertionOffset -= current. addedCount - current.removed.length;\n\n splice.addedCount += current.add edCount - intersectCount;\n var deleteCount = splice.removed.length +\n current.removed.length - intersectCount;\n\n if ( !splice.addedCount && !deleteCount) {\n // merged splice is a noop. dis card.\n inserted = true;\n } else {\n var removed = cur rent.removed;\n\n if (splice.index < current.index) {\n // s ome prefix of splice.removed is prepended to current.removed.\n var p repend = splice.removed.slice(0, current.index - splice.index);\n Arr ay.prototype.push.apply(prepend, removed);\n removed = prepend;\n }\n\n if (splice.index + splice.removed.length > current.index + current.addedCount) {\n // some suffix of splice.removed is appended to current.removed.\n var append = splice.removed.slice(current.index + current.addedCount - splice.index);\n Array.prototype.push.apply(r emoved, append);\n }\n\n splice.removed = removed;\n if (current.index < splice.index) {\n splice.index = current.index;\n }\n }\n } else if (splice.index < current.index) {\n // Insert splice here.\n\n inserted = true;\n\n splices.splice(i , 0, splice);\n i++;\n\n var offset = splice.addedCount - splice.r emoved.length\n current.index += offset;\n insertionOffset += offs et;\n }\n }\n\n if (!inserted)\n splices.push(splice);\n }\n\n function createInitialSplices(array, changeRecords) {\n var splices = [];\n\ n for (var i = 0; i < changeRecords.length; i++) {\n var record = change Records[i];\n switch(record.type) {\n case ARRAY_SPLICE_TYPE:\n mergeSplice(splices, record.index, record.removed.slice(), record.addedCoun t);\n break;\n case PROP_ADD_TYPE:\n case PROP_UPDATE_TYP E:\n case PROP_DELETE_TYPE:\n if (!isIndex(record.name))\n continue;\n var index = toNumber(record.name);\n if (ind ex < 0)\n continue;\n mergeSplice(splices, index, [record.ol dValue], 1);\n break;\n default:\n console.error('Unexp ected record type: ' + JSON.stringify(record));\n break;\n }\n }\n\n return splices;\n }\n\n function projectArraySplices(array, changeRec ords) {\n var splices = [];\n\n createInitialSplices(array, changeRecords) .forEach(function(splice) {\n if (splice.addedCount == 1 && splice.removed. length == 1) {\n if (splice.removed[0] !== array[splice.index])\n splices.push(splice);\n\n return\n };\n\n splices = splices.c oncat(calcSplices(array, splice.index, splice.index + splice.addedCount,\n splice.removed, 0, splice.removed.length)); \n });\n\n return splices;\n }\n\n global.Observer = Observer;\n global .Observer.runEOM_ = runEOM;\n global.Observer.hasObjectObserve = hasObserve;\n global.ArrayObserver = ArrayObserver;\n global.ArrayObserver.calculateSplices = function(current, previous) {\n return arraySplice.calculateSplices(current , previous);\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserv er = ObjectObserver;\n global.PathObserver = PathObserver;\n global.CompoundOb server = CompoundObserver;\n global.Path = Path;\n global.ObserverTransform = ObserverTransform;\n\n // TODO(rafaelw): Only needed for testing until new chan ge record names\n // make it to release.\n global.Observer.changeRecordTypes = {\n add: PROP_ADD_TYPE,\n update: PROP_UPDATE_TYPE,\n reconfigure: PRO P_RECONFIGURE_TYPE,\n 'delete': PROP_DELETE_TYPE,\n splice: ARRAY_SPLICE_T YPE\n };\n})(typeof global !== 'undefined' && global && typeof module !== 'unde fined' && module ? global : this || window);\n", 101 "// Copyright 2012 Google Inc.\n//\n// Licensed under the Apache License, Ve rsion 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http:/ /www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o r agreed to in writing, software\n// distributed under the License is distribute d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe r express or implied.\n// See the License for the specific language governing pe rmissions and\n// limitations under the License.\n\n(function(global) {\n 'use strict';\n\n var PROP_ADD_TYPE = 'add';\n var PROP_UPDATE_TYPE = 'update';\n var PROP_RECONFIGURE_TYPE = 'reconfigure';\n var PROP_DELETE_TYPE = 'delete';\n var ARRAY_SPLICE_TYPE = 'splice';\n\n // Detect and do basic sanity checking on Object/Array.observe.\n function detectObjectObserve() {\n if (typeof Obj ect.observe !== 'function' ||\n typeof Array.observe !== 'function') {\n return false;\n }\n\n var records = [];\n\n function callback(recs ) {\n records = recs;\n }\n\n var test = {};\n Object.observe(test , callback);\n test.id = 1;\n test.id = 2;\n delete test.id;\n Objec t.deliverChangeRecords(callback);\n if (records.length !== 3)\n return f alse;\n\n // TODO(rafaelw): Remove this when new change record type names mak e it to\n // chrome release.\n if (records[0].type == 'new' &&\n re cords[1].type == 'updated' &&\n records[2].type == 'deleted') {\n PR OP_ADD_TYPE = 'new';\n PROP_UPDATE_TYPE = 'updated';\n PROP_RECONFIGUR E_TYPE = 'reconfigured';\n PROP_DELETE_TYPE = 'deleted';\n } else if (re cords[0].type != 'add' ||\n records[1].type != 'update' ||\n records[2].type != 'delete') {\n console.error('Unexpected change record names for Object.observe. ' +\n 'Using dirty-checking instead');\n return false;\n }\n Object.unobserve(test, callback);\n\ n test = [0];\n Array.observe(test, callback);\n test[1] = 1;\n test .length = 0;\n Object.deliverChangeRecords(callback);\n if (records.length != 2)\n return false;\n if (records[0].type != ARRAY_SPLICE_TYPE ||\n records[1].type != ARRAY_SPLICE_TYPE) {\n return false;\n }\n A rray.unobserve(test, callback);\n\n return true;\n }\n\n var hasObserve = d etectObjectObserve();\n\n function detectEval() {\n // don't test for eval i f document has CSP securityPolicy object and we can see that\n // eval is not supported. This avoids an error message in console even when the exception\n // is caught\n if (global.document &&\n 'securityPolicy' in global.do cument &&\n !global.document.securityPolicy.allowsEval) {\n return f alse;\n }\n\n try {\n var f = new Function('', 'return true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasE val = detectEval();\n\n function isIndex(s) {\n return +s === s >>> 0;\n }\ n\n function toNumber(s) {\n return +s;\n }\n\n function isObject(obj) {\n return obj === Object(obj);\n }\n\n var numberIsNaN = global.Number.isNaN || function isNaN(value) {\n return typeof value === 'number' && global.isNaN (value);\n }\n\n function areSameValue(left, right) {\n if (left === right) \n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && numberIsNaN(right))\n return true;\n\n return left !== left && right !== right;\n }\n\n var createObject = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forEach(function(name) {\n Object.d efineProperty(newObject, name,\n Object.getOwnProper tyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var i dentStart = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var ident = identStart + '+' + identPart + '*';\n var elementIndex = '(?:[0-9]|[1-9]+[0-9] +)';\n var identOrElementIndex = '(?:' + ident + '|' + elementIndex + ')';\n v ar path = '(?:' + identOrElementIndex + ')(?:\\\\s*\\\\.\\\\s*' + identOrElement Index + ')*';\n var pathRegExp = new RegExp('^' + path + '$');\n\n function is PathValid(s) {\n if (typeof s != 'string')\n return false;\n s = s.tr im();\n\n if (s == '')\n return true;\n\n if (s[0] == '.')\n ret urn false;\n\n return pathRegExp.test(s);\n }\n\n var constructorIsPrivate = {};\n\n function Path(s, privateToken) {\n if (privateToken !== constructo rIsPrivate)\n throw Error('Use Path.get to retrieve path objects');\n\n if (s.trim() == '')\n return this;\n\n if (isIndex(s)) {\n this.pus h(s);\n return this;\n }\n\n s.split(/\\s*\\.\\s*/).filter(function(p art) {\n return part;\n }).forEach(function(part) {\n this.push(par t);\n }, this);\n\n if (hasEval && this.length) {\n this.getValueFrom = this.compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw): Make simple LRU cache\n var pathCache = {};\n\n function getPath(pathString) {\n if (p athString instanceof Path)\n return pathString;\n\n if (pathString == nu ll)\n pathString = '';\n\n if (typeof pathString !== 'string')\n pa thString = String(pathString);\n\n var path = pathCache[pathString];\n if (path)\n return path;\n if (!isPathValid(pathString))\n return inva lidPath;\n var path = new Path(pathString, constructorIsPrivate);\n pathCa che[pathString] = path;\n return path;\n }\n\n Path.get = getPath;\n\n Pat h.prototype = createObject({\n __proto__: [],\n valid: true,\n\n toStri ng: function() {\n return this.join('.');\n },\n\n getValueFrom: func tion(obj, directObserver) {\n for (var i = 0; i < this.length; i++) {\n if (obj == null)\n return;\n obj = obj[this[i]];\n }\n return obj;\n },\n\n iterateObjects: function(obj, observe) {\n for (var i = 0; i < this.length; i++) {\n if (i)\n obj = obj[thi s[i - 1]];\n if (!obj)\n return;\n observe(obj);\n } \n },\n\n compiledGetValueFromFn: function() {\n var accessors = this .map(function(ident) {\n return isIndex(ident) ? '[\"' + ident + '\"]' : '.' + ident;\n });\n\n var str = '';\n var pathString = 'obj';\n str += 'if (obj != null';\n var i = 0;\n for (; i < (this.length - 1); i++) {\n var ident = this[i];\n pathString += accessors[i];\ n str += ' &&\\n ' + pathString + ' != null';\n }\n str += ')\\n';\n\n pathString += accessors[i];\n\n str += ' return ' + pathS tring + ';\\nelse\\n return undefined;';\n return new Function('obj', str) ;\n },\n\n setValueFrom: function(obj, value) {\n if (!this.length)\n return false;\n\n for (var i = 0; i < this.length - 1; i++) {\n if (!isObject(obj))\n return false;\n obj = obj[this[i]];\n }\n\n if (!isObject(obj))\n return false;\n\n obj[this[i]] = value;\n return true;\n }\n });\n\n var invalidPath = new Path('', constructorIsPrivate);\n invalidPath.valid = false;\n invalidPath.getValueFrom = invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY_CHECK_CYCLES = 1 000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n while (cycle s < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\n }\n if (global.testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles; \n\n return cycles > 0;\n }\n\n function objectIsEmpty(object) {\n for ( var prop in object)\n return false;\n return true;\n }\n\n function di ffIsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n objectIsE mpty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\n\n functio n diffObjectFromOldObject(object, oldObject) {\n var added = {};\n var rem oved = {};\n var changed = {};\n\n for (var prop in oldObject) {\n va r newValue = object[prop];\n\n if (newValue !== undefined && newValue === o ldObject[prop])\n continue;\n\n if (!(prop in object)) {\n re moved[prop] = undefined;\n continue;\n }\n\n if (newValue !== o ldObject[prop])\n changed[prop] = newValue;\n }\n\n for (var prop i n object) {\n if (prop in oldObject)\n continue;\n\n added[prop ] = object[prop];\n }\n\n if (Array.isArray(object) && object.length !== o ldObject.length)\n changed.length = object.length;\n\n return {\n a dded: added,\n removed: removed,\n changed: changed\n };\n }\n\n var eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.length)\n return false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n eomTask s[i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong: true };\n var eomRu nScheduled = false;\n\n Object.observe(eomObj, function() {\n runEOMTask s();\n eomRunScheduled = false;\n });\n\n return function(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n eomRunScheduled = t rue;\n eomObj.pingPong = !eomObj.pingPong;\n }\n };\n })() :\n (function() {\n return function(fn) {\n eomTasks.push(fn);\n };\n }) ();\n\n var observedObjectCache = [];\n\n function newObservedObject() {\n var observer;\n var object;\n var discardRecords = false;\n var first = true;\n\n function callback(records) {\n if (observer && observer.state _ === OPENED && !discardRecords)\n observer.check_(records);\n }\n\n return {\n open: function(obs) {\n if (observer)\n throw Error('ObservedObject in use');\n\n if (!first)\n Object.deliver ChangeRecords(callback);\n\n observer = obs;\n first = false;\n },\n observe: function(obj, arrayObserve) {\n object = obj;\n if (arrayObserve)\n Array.observe(object, callback);\n else\ n Object.observe(object, callback);\n },\n deliver: function( discard) {\n discardRecords = discard;\n Object.deliverChangeRecor ds(callback);\n discardRecords = false;\n },\n close: function( ) {\n observer = undefined;\n Object.unobserve(object, callback);\ n observedObjectCache.push(this);\n }\n };\n }\n\n function get ObservedObject(observer, object, arrayObserve) {\n var dir = observedObjectCa che.pop() || newObservedObject();\n dir.open(observer);\n dir.observe(obje ct, arrayObserve);\n return dir;\n }\n\n var emptyArray = [];\n var observ edSetCache = [];\n\n function newObservedSet() {\n var observers = [];\n var observerCount = 0;\n var objects = [];\n var toRemove = emptyArray;\n var resetNeeded = false;\n var resetScheduled = false;\n\n function obs erve(obj) {\n if (!isObject(obj))\n return;\n\n var index = toR emove.indexOf(obj);\n if (index >= 0) {\n toRemove[index] = undefine d;\n objects.push(obj);\n } else if (objects.indexOf(obj) < 0) {\n objects.push(obj);\n Object.observe(obj, callback);\n }\n\n observe(Object.getPrototypeOf(obj));\n }\n\n function reset() {\n resetScheduled = false;\n if (!resetNeeded)\n return;\n\n var o bjs = toRemove === emptyArray ? [] : toRemove;\n toRemove = objects;\n objects = objs;\n\n var observer;\n for (var id in observers) {\n observer = observers[id];\n if (!observer || observer.state_ != OPENE D)\n continue;\n\n observer.iterateObjects_(observe);\n }\n \n for (var i = 0; i < toRemove.length; i++) {\n var obj = toRemove[ i];\n if (obj)\n Object.unobserve(obj, callback);\n }\n\n toRemove.length = 0;\n }\n\n function scheduleReset() {\n if (res etScheduled)\n return;\n\n resetNeeded = true;\n resetScheduled = true;\n runEOM(reset);\n }\n\n function callback() {\n var ob server;\n\n for (var id in observers) {\n observer = observers[id];\ n if (!observer || observer.state_ != OPENED)\n continue;\n\n observer.check_();\n }\n\n scheduleReset();\n }\n\n var rec ord = {\n object: undefined,\n objects: objects,\n open: function (obs) {\n observers[obs.id_] = obs;\n observerCount++;\n ob s.iterateObjects_(observe);\n },\n close: function(obs) {\n var anyLeft = false;\n\n observers[obs.id_] = undefined;\n observerCo unt--;\n\n if (observerCount) {\n scheduleReset();\n re turn;\n }\n resetNeeded = false;\n\n for (var i = 0; i < ob jects.length; i++) {\n Object.unobserve(objects[i], callback);\n Observer.unobservedCount++;\n }\n\n observers.length = 0;\n objects.length = 0;\n observedSetCache.push(this);\n },\n r eset: scheduleReset\n };\n\n return record;\n }\n\n var lastObservedSet; \n\n function getObservedSet(observer, obj) {\n if (!lastObservedSet || last ObservedSet.object !== obj) {\n lastObservedSet = observedSetCache.pop() || newObservedSet();\n lastObservedSet.object = obj;\n }\n lastObserved Set.open(observer);\n return lastObservedSet;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n var CLOSED = 2;\n var RESETTING = 3;\n\n var nextObserverId = 1;\n\n function Observer() {\n this.state_ = UNOPENED;\n this.callback _ = undefined;\n this.target_ = undefined; // TODO(rafaelw): Should be WeakRe f\n this.directObserver_ = undefined;\n this.value_ = undefined;\n this .id_ = nextObserverId++;\n }\n\n Observer.prototype = {\n open: function(ca llback, target) {\n if (this.state_ != UNOPENED)\n throw Error('Obse rver has already been opened.');\n\n addToAll(this);\n this.callback_ = callback;\n this.target_ = target;\n this.state_ = OPENED;\n th is.connect_();\n return this.value_;\n },\n\n close: function() {\n if (this.state_ != OPENED)\n return;\n\n removeFromAll(this);\n this.state_ = CLOSED;\n this.disconnect_();\n this.value_ = undef ined;\n this.callback_ = undefined;\n this.target_ = undefined;\n } ,\n\n deliver: function() {\n if (this.state_ != OPENED)\n return ;\n\n dirtyCheck(this);\n },\n\n report_: function(changes) {\n try {\n this.callback_.apply(this.target_, changes);\n } catch (ex) {\n Observer._errorThrownDuringCallback = true;\n console.error('E xception caught during observer callback: ' +\n (ex.stack || ex));\n }\n },\n\n discardChanges: function() {\n this.check_ (undefined, true);\n return this.value_;\n }\n }\n\n var collectObserv ers = !hasObserve;\n var allObservers;\n Observer._allObserversCount = 0;\n\n if (collectObservers) {\n allObservers = [];\n }\n\n function addToAll(obs erver) {\n Observer._allObserversCount++;\n if (!collectObservers)\n return;\n\n allObservers.push(observer);\n }\n\n function removeFromAll(obs erver) {\n Observer._allObserversCount--;\n }\n\n var runningMicrotaskCheck point = false;\n\n var hasDebugForceFullDelivery = typeof Object.deliverAllChan geRecords == 'function';\n\n global.Platform = global.Platform || {};\n\n glob al.Platform.performMicrotaskCheckpoint = function() {\n if (runningMicrotaskC heckpoint)\n return;\n\n if (hasDebugForceFullDelivery) {\n Object. deliverAllChangeRecords();\n return;\n }\n\n if (!collectObservers)\n return;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0;\n var anyChanged, toCheck;\n\n do {\n cycles++;\n toCheck = allOb servers;\n allObservers = [];\n anyChanged = false;\n\n for (var i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n i f (observer.state_ != OPENED)\n continue;\n\n if (observer.check _())\n anyChanged = true;\n\n allObservers.push(observer);\n }\n if (runEOMTasks())\n anyChanged = true;\n } while (cycles < MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (global.testingExposeCycleCoun t)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoin t = false;\n };\n\n if (collectObservers) {\n global.Platform.clearObserver s = function() {\n allObservers = [];\n };\n }\n\n function ObjectObse rver(object) {\n Observer.call(this);\n this.value_ = object;\n this.ol dObject_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n _ _proto__: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: funct ion(callback, target) {\n if (hasObserve) {\n this.directObserver_ = getObservedObject(this, this.value_,\n this.arrayObserve);\n } else {\n this.oldObject_ = this.copy Object(this.value_);\n }\n\n },\n\n copyObject: function(object) {\n var copy = Array.isArray(object) ? [] : {};\n for (var prop in object) {\n copy[prop] = object[prop];\n };\n if (Array.isArray(object ))\n copy.length = object.length;\n return copy;\n },\n\n chec k_: function(changeRecords, skipChanges) {\n var diff;\n var oldValues ;\n if (hasObserve) {\n if (!changeRecords)\n return false; \n\n oldValues = {};\n diff = diffObjectFromChangeRecords(this.val ue_, changeRecords,\n oldValues);\n } else {\n oldValues = this.oldObject_;\n diff = diffObjectFrom OldObject(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff) )\n return false;\n\n if (!hasObserve)\n this.oldObject_ = th is.copyObject(this.value_);\n\n this.report_([\n diff.added || {},\n diff.removed || {},\n diff.changed || {},\n function(prope rty) {\n return oldValues[property];\n }\n ]);\n\n ret urn true;\n },\n\n disconnect_: function() {\n if (hasObserve) {\n this.directObserver_.close();\n this.directObserver_ = undefined;\n } else {\n this.oldObject_ = undefined;\n }\n },\n\n deli ver: function() {\n if (this.state_ != OPENED)\n return;\n\n if (hasObserve)\n this.directObserver_.deliver(false);\n else\n dirtyCheck(this);\n },\n\n discardChanges: function() {\n if (this.d irectObserver_)\n this.directObserver_.deliver(true);\n else\n this.oldObject_ = this.copyObject(this.value_);\n\n return this.value_;\n }\n });\n\n function ArrayObserver(array) {\n if (!Array.isArray(array) )\n throw Error('Provided object is not an Array');\n ObjectObserver.cal l(this, array);\n }\n\n ArrayObserver.prototype = createObject({\n\n __prot o__: ObjectObserver.prototype,\n\n arrayObserve: true,\n\n copyObject: fun ction(arr) {\n return arr.slice();\n },\n\n check_: function(changeRe cords) {\n var splices;\n if (hasObserve) {\n if (!changeRecord s)\n return false;\n splices = projectArraySplices(this.value_, changeRecords);\n } else {\n splices = calcSplices(this.value_, 0, t his.value_.length,\n this.oldObject_, 0, this.oldOb ject_.length);\n }\n\n if (!splices || !splices.length)\n retur n false;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(th is.value_);\n\n this.report_([splices]);\n return true;\n }\n });\ n\n ArrayObserver.applySplices = function(previous, current, splices) {\n sp lices.forEach(function(splice) {\n var spliceArgs = [splice.index, splice.r emoved.length];\n var addIndex = splice.index;\n while (addIndex < spl ice.index + splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n addIndex++;\n }\n\n Array.prototype.splice.apply(previous, spli ceArgs);\n });\n };\n\n function PathObserver(object, path) {\n Observer .call(this);\n\n this.object_ = object;\n this.path_ = path instanceof Pat h ? path : getPath(path);\n this.directObserver_ = undefined;\n }\n\n PathO bserver.prototype = createObject({\n __proto__: Observer.prototype,\n\n co nnect_: function() {\n if (hasObserve)\n this.directObserver_ = getO bservedSet(this, this.object_);\n\n this.check_(undefined, true);\n },\n \n disconnect_: function() {\n this.value_ = undefined;\n\n if (thi s.directObserver_) {\n this.directObserver_.close(this);\n this.di rectObserver_ = undefined;\n }\n },\n\n iterateObjects_: function(obs erve) {\n this.path_.iterateObjects(this.object_, observe);\n },\n\n check_: function(changeRecords, skipChanges) {\n var oldValue = this.value_ ;\n this.value_ = this.path_.getValueFrom(this.object_);\n if (skipCha nges || areSameValue(this.value_, oldValue))\n return false;\n\n thi s.report_([this.value_, oldValue]);\n return true;\n },\n\n setValue: function(newValue) {\n if (this.path_)\n this.path_.setValueFrom(th is.object_, newValue);\n }\n });\n\n function CompoundObserver() {\n Obs erver.call(this);\n\n this.value_ = [];\n this.directObserver_ = undefined ;\n this.observed_ = [];\n }\n\n var observerSentinel = {};\n\n CompoundOb server.prototype = createObject({\n __proto__: Observer.prototype,\n\n con nect_: function() {\n this.check_(undefined, true);\n\n if (!hasObserv e)\n return;\n\n var object;\n var needsDirectObserver = false; \n for (var i = 0; i < this.observed_.length; i += 2) {\n object = t his.observed_[i]\n if (object !== observerSentinel) {\n needsDir ectObserver = true;\n break;\n }\n }\n\n if (this.dire ctObserver_) {\n if (needsDirectObserver) {\n this.directObserve r_.reset();\n return;\n }\n this.directObserver_.close(); \n this.directObserver_ = undefined;\n return;\n }\n\n i f (needsDirectObserver)\n this.directObserver_ = getObservedSet(this, obj ect);\n },\n\n closeObservers_: function() {\n for (var i = 0; i < th is.observed_.length; i += 2) {\n if (this.observed_[i] === observerSentin el)\n this.observed_[i + 1].close();\n }\n this.observed_.len gth = 0;\n },\n\n disconnect_: function() {\n this.value_ = undefined ;\n\n if (this.directObserver_) {\n this.directObserver_.close(this) ;\n this.directObserver_ = undefined;\n }\n\n this.closeObserve rs_();\n },\n\n addPath: function(object, path) {\n if (this.state_ ! = UNOPENED && this.state_ != RESETTING)\n throw Error('Cannot add paths o nce started.');\n\n this.observed_.push(object, path instanceof Path ? path : getPath(path));\n },\n\n addObserver: function(observer) {\n if (t his.state_ != UNOPENED && this.state_ != RESETTING)\n throw Error('Cannot add observers once started.');\n\n observer.open(this.deliver, this);\n this.observed_.push(observerSentinel, observer);\n },\n\n startReset: f unction() {\n if (this.state_ != OPENED)\n throw Error('Can only res et while open');\n\n this.state_ = RESETTING;\n this.closeObservers_() ;\n },\n\n finishReset: function() {\n if (this.state_ != RESETTING)\ n throw Error('Can only finishReset after startReset');\n this.state _ = OPENED;\n this.connect_();\n\n return this.value_;\n },\n\n iterateObjects_: function(observe) {\n var object;\n for (var i = 0; i < this.observed_.length; i += 2) {\n object = this.observed_[i]\n if (object !== observerSentinel)\n this.observed_[i + 1].iterateObject s(object, observe)\n }\n },\n\n check_: function(changeRecords, skipC hanges) {\n var oldValues;\n for (var i = 0; i < this.observed_.length ; i += 2) {\n var pathOrObserver = this.observed_[i+1];\n var obje ct = this.observed_[i];\n var value = object === observerSentinel ?\n pathOrObserver.discardChanges() :\n pathOrObserver.getValueFr om(object)\n\n if (skipChanges) {\n this.value_[i / 2] = value;\ n continue;\n }\n\n if (areSameValue(value, this.value_[i / 2]))\n continue;\n\n oldValues = oldValues || [];\n ol dValues[i / 2] = this.value_[i / 2];\n this.value_[i / 2] = value;\n }\n\n if (!oldValues)\n return false;\n\n // TODO(rafaelw): Ha ving observed_ as the third callback arg here is\n // pretty lame API. Fix. \n this.report_([this.value_, oldValues, this.observed_]);\n return tr ue;\n }\n });\n\n function identFn(value) { return value; }\n\n function O bserverTransform(observable, getValueFn, setValueFn,\n dontPassThroughSet) {\n this.callback_ = undefined;\n this.target_ = un defined;\n this.value_ = undefined;\n this.observable_ = observable;\n this.getValueFn_ = getValueFn || identFn;\n this.setValueFn_ = setValueFn || identFn;\n // TODO(rafaelw): This is a temporary hack. PolymerExpressions nee ds this\n // at the moment because of a bug in it's dependency tracking.\n this.dontPassThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransform.prot otype = {\n open: function(callback, target) {\n this.callback_ = callba ck;\n this.target_ = target;\n this.value_ =\n this.getValueF n_(this.observable_.open(this.observedCallback_, this));\n return this.valu e_;\n },\n\n observedCallback_: function(value) {\n value = this.getV alueFn_(value);\n if (areSameValue(value, this.value_))\n return;\n var oldValue = this.value_;\n this.value_ = value;\n this.callbac k_.call(this.target_, this.value_, oldValue);\n },\n\n discardChanges: fun ction() {\n this.value_ = this.getValueFn_(this.observable_.discardChanges( ));\n return this.value_;\n },\n\n deliver: function() {\n retur n this.observable_.deliver();\n },\n\n setValue: function(value) {\n value = this.setValueFn_(value);\n if (!this.dontPassThroughSet_ && this.ob servable_.setValue)\n return this.observable_.setValue(value);\n },\n\ n close: function() {\n if (this.observable_)\n this.observable_. close();\n this.callback_ = undefined;\n this.target_ = undefined;\n this.observable_ = undefined;\n this.value_ = undefined;\n this.ge tValueFn_ = undefined;\n this.setValueFn_ = undefined;\n }\n }\n\n var expectedRecordTypes = {};\n expectedRecordTypes[PROP_ADD_TYPE] = true;\n expe ctedRecordTypes[PROP_UPDATE_TYPE] = true;\n expectedRecordTypes[PROP_DELETE_TYP E] = true;\n\n function notifyFunction(object, name) {\n if (typeof Object.o bserve !== 'function')\n return;\n\n var notifier = Object.getNotifier(o bject);\n return function(type, oldValue) {\n var changeRecord = {\n object: object,\n type: type,\n name: name\n };\n if (arguments.length === 2)\n changeRecord.oldValue = oldValue;\n noti fier.notify(changeRecord);\n }\n }\n\n Observer.defineComputedProperty = fu nction(target, name, observable) {\n var notify = notifyFunction(target, name );\n var value = observable.open(function(newValue, oldValue) {\n value = newValue;\n if (notify)\n notify(PROP_UPDATE_TYPE, oldValue);\n });\n\n Object.defineProperty(target, name, {\n get: function() {\n observable.deliver();\n return value;\n },\n set: function( newValue) {\n observable.setValue(newValue);\n return newValue;\n },\n configurable: true\n });\n\n return {\n close: functio n() {\n observable.close();\n Object.defineProperty(target, name, {\n value: value,\n writable: true,\n configurable: t rue\n });\n }\n };\n }\n\n function diffObjectFromChangeRecords (object, changeRecords, oldValues) {\n var added = {};\n var removed = {}; \n\n for (var i = 0; i < changeRecords.length; i++) {\n var record = cha ngeRecords[i];\n if (!expectedRecordTypes[record.type]) {\n console. error('Unknown changeRecord type: ' + record.type);\n console.error(recor d);\n continue;\n }\n\n if (!(record.name in oldValues))\n oldValues[record.name] = record.oldValue;\n\n if (record.type == PROP_UP DATE_TYPE)\n continue;\n\n if (record.type == PROP_ADD_TYPE) {\n if (record.name in removed)\n delete removed[record.name];\n else\n added[record.name] = true;\n\n continue;\n }\n\n // type = 'delete'\n if (record.name in added) {\n delete added[r ecord.name];\n delete oldValues[record.name];\n } else {\n re moved[record.name] = true;\n }\n }\n\n for (var prop in added)\n added[prop] = object[prop];\n\n for (var prop in removed)\n removed[pro p] = undefined;\n\n var changed = {};\n for (var prop in oldValues) {\n if (prop in added || prop in removed)\n continue;\n\n var newValu e = object[prop];\n if (oldValues[prop] !== newValue)\n changed[prop ] = newValue;\n }\n\n return {\n added: added,\n removed: remove d,\n changed: changed\n };\n }\n\n function newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n }\n\n var EDIT_LEAVE = 0;\n var EDIT_UPDATE = 1;\n var EDIT_ADD = 2;\n var EDIT_DELETE = 3;\n\n function ArraySplice() { }\n\n ArraySplice.prototype = {\n\n // Note: This function is *based* on the computation of the Levenshtein\n // \"edit\" distance. The one change is tha t \"updates\" are treated as two\n // edits - not one. With Array splices, an update is really a delete\n // followed by an add. By retaining this, we opt imize for \"keeping\" the\n // maximum array items in the original array. For example:\n //\n // 'xxxx123' -> '123yyyy'\n //\n // With 1-edit u pdates, the shortest path would be just to update all seven\n // characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n // leaves the su bstring '123' intact.\n calcEditDistances: function(current, currentStart, cu rrentEnd,\n old, oldStart, oldEnd) {\n // \" Deletion\" columns\n var rowCount = oldEnd - oldStart + 1;\n var colum nCount = currentEnd - currentStart + 1;\n var distances = new Array(rowCoun t);\n\n // \"Addition\" rows. Initialize null column.\n for (var i = 0 ; i < rowCount; i++) {\n distances[i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n // Initialize null row\n for (var j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (var i = 1 ; i < rowCount; i++) {\n for (var j = 1; j < columnCount; j++) {\n if (this.equals(current[currentStart + j - 1], old[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n else {\n var north = distances[i - 1][j] + 1;\n var west = distances[i][j - 1 ] + 1;\n distances[i][j] = north < west ? north : west;\n }\ n }\n }\n\n return distances;\n },\n\n // This starts at the final weight, and walks \"backward\" by finding\n // the minimum previous weight recursively until the origin of the weight\n // matrix.\n spliceOp erationsFromEditDistances: function(distances) {\n var i = distances.length - 1;\n var j = distances[0].length - 1;\n var current = distances[i][ j];\n var edits = [];\n while (i > 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\n continue;\n }\n if (j == 0) {\n edits.push(EDIT_DELETE);\n i--;\n continue;\n }\n var northWest = distances[i - 1][j - 1];\ n var west = distances[i - 1][j];\n var north = distances[i][j - 1 ];\n\n var min;\n if (west < north)\n min = west < northW est ? west : northWest;\n else\n min = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == cur rent) {\n edits.push(EDIT_LEAVE);\n } else {\n ed its.push(EDIT_UPDATE);\n current = northWest;\n }\n i--;\n j--;\n } else if (min == west) {\n edits.push(E DIT_DELETE);\n i--;\n current = west;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edits;\n },\n\n /**\n * Splice Projection functions:\n *\n * A splice map is a representati on of how a previous array of items\n * was transformed into a new array of items. Conceptually it is a list of\n * tuples of\n *\n * <index, removed, addedCount>\n *\n * which are kept in ascending index order of. The tuple represents that at\n * the |index|, |removed| sequence of items w ere removed, and counting forward\n * from |index|, |addedCount| items were added.\n */\n\n /**\n * Lacking individual splice mutation informatio n, the minimal set of\n * splices can be synthesized given the previous stat e and final state of an\n * array. The basic approach is to calculate the ed it distance matrix and\n * choose the shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The length of the current array\n * p: The length of the old array\n */\n calcSplices: function(current, curr entStart, currentEnd,\n old, oldStart, oldEnd) {\n var prefixCount = 0;\n var suffixCount = 0;\n\n var minLength = Math. min(currentEnd - currentStart, oldEnd - oldStart);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = this.sharedPrefix(current, old, minLeng th);\n\n if (currentEnd == current.length && oldEnd == old.length)\n suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - current Start == 0 && oldEnd - oldStart == 0)\n return [];\n\n if (currentSt art == currentEnd) {\n var splice = newSplice(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.removed.push(old[oldStart++]);\n \n return [ splice ];\n } else if (oldStart == oldEnd)\n retu rn [ newSplice(currentStart, [], currentEnd - currentStart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\n this.calcEditDistances(curr ent, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n var splice = undefined;\n var splices = [];\n var i ndex = currentStart;\n var oldIndex = oldStart;\n for (var i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(splice);\n splice = undefined;\n }\n\n index++;\n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n case EDIT_ADD:\n if (!sp lice)\n splice = newSplice(index, [], 0);\n\n splice.add edCount++;\n index++;\n break;\n case EDIT_DELETE :\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splice) {\n splices.push(sp lice);\n }\n return splices;\n },\n\n sharedPrefix: function(cur rent, old, searchLength) {\n for (var i = 0; i < searchLength; i++)\n if (!this.equals(current[i], old[i]))\n return i;\n return searc hLength;\n },\n\n sharedSuffix: function(current, old, searchLength) {\n var index1 = current.length;\n var index2 = old.length;\n var coun t = 0;\n while (count < searchLength && this.equals(current[--index1], old[ --index2]))\n count++;\n\n return count;\n },\n\n calculateSpl ices: function(current, previous) {\n return this.calcSplices(current, 0, c urrent.length, previous, 0,\n previous.length);\n },\n\n equals: function(currentValue, previousValue) {\n return curren tValue === previousValue;\n }\n };\n\n var arraySplice = new ArraySplice(); \n\n function calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n return arraySplice.calcSplices(current, curr entStart, currentEnd,\n old, oldStart, oldEnd) ;\n }\n\n function intersect(start1, end1, start2, end2) {\n // Disjoint\n if (end1 < start2 || end2 < start1)\n return -1;\n\n // Adjacent\n if (end1 == start2 || end2 == start1)\n return 0;\n\n // Non-zero inter sect, span1 first\n if (start1 < start2) {\n if (end1 < end2)\n r eturn end1 - start2; // Overlap\n else\n return end2 - start2; // Co ntained\n } else {\n // Non-zero intersect, span2 first\n if (end2 < end1)\n return end2 - start1; // Overlap\n else\n return en d1 - start1; // Contained\n }\n }\n\n function mergeSplice(splices, index, removed, addedCount) {\n\n var splice = newSplice(index, removed, addedCount) ;\n\n var inserted = false;\n var insertionOffset = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var current = splices[i];\n current.i ndex += insertionOffset;\n\n if (inserted)\n continue;\n\n var intersectCount = intersect(splice.index,\n s plice.index + splice.removed.length,\n curre nt.index,\n current.index + current.addedCou nt);\n\n if (intersectCount >= 0) {\n // Merge the two splices\n\n splices.splice(i, 1);\n i--;\n\n insertionOffset -= current. addedCount - current.removed.length;\n\n splice.addedCount += current.add edCount - intersectCount;\n var deleteCount = splice.removed.length +\n current.removed.length - intersectCount;\n\n if ( !splice.addedCount && !deleteCount) {\n // merged splice is a noop. dis card.\n inserted = true;\n } else {\n var removed = cur rent.removed;\n\n if (splice.index < current.index) {\n // s ome prefix of splice.removed is prepended to current.removed.\n var p repend = splice.removed.slice(0, current.index - splice.index);\n Arr ay.prototype.push.apply(prepend, removed);\n removed = prepend;\n }\n\n if (splice.index + splice.removed.length > current.index + current.addedCount) {\n // some suffix of splice.removed is appended to current.removed.\n var append = splice.removed.slice(current.index + current.addedCount - splice.index);\n Array.prototype.push.apply(r emoved, append);\n }\n\n splice.removed = removed;\n if (current.index < splice.index) {\n splice.index = current.index;\n }\n }\n } else if (splice.index < current.index) {\n // Insert splice here.\n\n inserted = true;\n\n splices.splice(i , 0, splice);\n i++;\n\n var offset = splice.addedCount - splice.r emoved.length\n current.index += offset;\n insertionOffset += offs et;\n }\n }\n\n if (!inserted)\n splices.push(splice);\n }\n\n function createInitialSplices(array, changeRecords) {\n var splices = [];\n\ n for (var i = 0; i < changeRecords.length; i++) {\n var record = change Records[i];\n switch(record.type) {\n case ARRAY_SPLICE_TYPE:\n mergeSplice(splices, record.index, record.removed.slice(), record.addedCoun t);\n break;\n case PROP_ADD_TYPE:\n case PROP_UPDATE_TYP E:\n case PROP_DELETE_TYPE:\n if (!isIndex(record.name))\n continue;\n var index = toNumber(record.name);\n if (ind ex < 0)\n continue;\n mergeSplice(splices, index, [record.ol dValue], 1);\n break;\n default:\n console.error('Unexp ected record type: ' + JSON.stringify(record));\n break;\n }\n }\n\n return splices;\n }\n\n function projectArraySplices(array, changeRec ords) {\n var splices = [];\n\n createInitialSplices(array, changeRecords) .forEach(function(splice) {\n if (splice.addedCount == 1 && splice.removed. length == 1) {\n if (splice.removed[0] !== array[splice.index])\n splices.push(splice);\n\n return\n };\n\n splices = splices.c oncat(calcSplices(array, splice.index, splice.index + splice.addedCount,\n splice.removed, 0, splice.removed.length)); \n });\n\n return splices;\n }\n\n global.Observer = Observer;\n global .Observer.runEOM_ = runEOM;\n global.Observer.hasObjectObserve = hasObserve;\n global.ArrayObserver = ArrayObserver;\n global.ArrayObserver.calculateSplices = function(current, previous) {\n return arraySplice.calculateSplices(current , previous);\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserv er = ObjectObserver;\n global.PathObserver = PathObserver;\n global.CompoundOb server = CompoundObserver;\n global.Path = Path;\n global.ObserverTransform = ObserverTransform;\n\n // TODO(rafaelw): Only needed for testing until new chan ge record names\n // make it to release.\n global.Observer.changeRecordTypes = {\n add: PROP_ADD_TYPE,\n update: PROP_UPDATE_TYPE,\n reconfigure: PRO P_RECONFIGURE_TYPE,\n 'delete': PROP_DELETE_TYPE,\n splice: ARRAY_SPLICE_T YPE\n };\n})(typeof global !== 'undefined' && global && typeof module !== 'unde fined' && module ? global : this || window);\n",
102 "// prepoulate window.Platform.flags for default controls\r\nwindow.Platform = window.Platform || {};\r\n// prepopulate window.logFlags if necessary\r\nwind ow.logFlags = window.logFlags || {};\r\n// process flags\r\n(function(scope){\r\ n // import\r\n var flags = scope.flags || {};\r\n // populate flags from loc ation\r\n location.search.slice(1).split('&').forEach(function(o) {\r\n o = o.split('=');\r\n o[0] && (flags[o[0]] = o[1] || true);\r\n });\r\n var ent ryPoint = document.currentScript || document.querySelector('script[src*=\"platfo rm.js\"]');\r\n if (entryPoint) {\r\n var a = entryPoint.attributes;\r\n for (var i = 0, n; i < a.length; i++) {\r\n n = a[i];\r\n if (n.name ! == 'src') {\r\n flags[n.name] = n.value || true;\r\n }\r\n }\r\n }\r\n if (flags.log) {\r\n flags.log.split(',').forEach(function(f) {\r\n window.logFlags[f] = true;\r\n });\r\n }\r\n // If any of these flags m atch 'native', then force native ShadowDOM; any\r\n // other truthy value, or f ailure to detect native\r\n // ShadowDOM, results in polyfill\r\n flags.shadow = (flags.shadow || flags.shadowdom || flags.polyfill);\r\n if (flags.shadow == = 'native') {\r\n flags.shadow = false;\r\n } else {\r\n flags.shadow = f lags.shadow || !HTMLElement.prototype.createShadowRoot;\r\n }\r\n\r\n // Custo mElements polyfill flag\r\n if (flags.register) {\r\n window.CustomElements = window.CustomElements || {flags: {}};\r\n window.CustomElements.flags.regis ter = flags.register;\r\n }\r\n\r\n if (flags.imports) {\r\n window.HTMLImp orts = window.HTMLImports || {flags: {}};\r\n window.HTMLImports.flags.import s = flags.imports;\r\n }\r\n\r\n // export\r\n scope.flags = flags;\r\n})(Pla tform);\r\n\r\n// select ShadowDOM impl\r\nif (Platform.flags.shadow) {\r\n", 102 "// prepoulate window.Platform.flags for default controls\r\nwindow.Platform = window.Platform || {};\r\n// prepopulate window.logFlags if necessary\r\nwind ow.logFlags = window.logFlags || {};\r\n// process flags\r\n(function(scope){\r\ n // import\r\n var flags = scope.flags || {};\r\n // populate flags from loc ation\r\n location.search.slice(1).split('&').forEach(function(o) {\r\n o = o.split('=');\r\n o[0] && (flags[o[0]] = o[1] || true);\r\n });\r\n var ent ryPoint = document.currentScript || document.querySelector('script[src*=\"platfo rm.js\"]');\r\n if (entryPoint) {\r\n var a = entryPoint.attributes;\r\n for (var i = 0, n; i < a.length; i++) {\r\n n = a[i];\r\n if (n.name ! == 'src') {\r\n flags[n.name] = n.value || true;\r\n }\r\n }\r\n }\r\n if (flags.log) {\r\n flags.log.split(',').forEach(function(f) {\r\n window.logFlags[f] = true;\r\n });\r\n }\r\n // If any of these flags m atch 'native', then force native ShadowDOM; any\r\n // other truthy value, or f ailure to detect native\r\n // ShadowDOM, results in polyfill\r\n flags.shadow = (flags.shadow || flags.shadowdom || flags.polyfill);\r\n if (flags.shadow == = 'native') {\r\n flags.shadow = false;\r\n } else {\r\n flags.shadow = f lags.shadow || !HTMLElement.prototype.createShadowRoot;\r\n }\r\n\r\n // Custo mElements polyfill flag\r\n if (flags.register) {\r\n window.CustomElements = window.CustomElements || {flags: {}};\r\n window.CustomElements.flags.regis ter = flags.register;\r\n }\r\n\r\n if (flags.imports) {\r\n window.HTMLImp orts = window.HTMLImports || {flags: {}};\r\n window.HTMLImports.flags.import s = flags.imports;\r\n }\r\n\r\n // export\r\n scope.flags = flags;\r\n})(Pla tform);\r\n\r\n// select ShadowDOM impl\r\nif (Platform.flags.shadow) {\r\n",
103 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\nwindow.ShadowDOMPolyfill = {};\n\n(function(scope) {\n 'use stri ct';\n\n var constructorTable = new WeakMap();\n var nativePrototypeTable = ne w WeakMap();\n var wrappers = Object.create(null);\n\n // Don't test for eval if document has CSP securityPolicy object and we can\n // see that eval is not supported. This avoids an error message in console\n // even when the exception is caught\n var hasEval = !('securityPolicy' in document) ||\n document.s ecurityPolicy.allowsEval;\n if (hasEval) {\n try {\n var f = new Functi on('', 'return true;');\n hasEval = f();\n } catch (ex) {\n hasEval = false;\n }\n }\n\n function assert(b) {\n if (!b)\n throw new Er ror('Assertion failed');\n };\n\n var defineProperty = Object.defineProperty;\ n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var getOwnPropertyDe scriptor = Object.getOwnPropertyDescriptor;\n\n function mixin(to, from) {\n getOwnPropertyNames(from).forEach(function(name) {\n defineProperty(to, na me, getOwnPropertyDescriptor(from, name));\n });\n return to;\n };\n\n f unction mixinStatics(to, from) {\n getOwnPropertyNames(from).forEach(function (name) {\n switch (name) {\n case 'arguments':\n case 'caller ':\n case 'length':\n case 'name':\n case 'prototype':\n case 'toString':\n return;\n }\n defineProperty(to, name , getOwnPropertyDescriptor(from, name));\n });\n return to;\n };\n\n fun ction oneOf(object, propertyNames) {\n for (var i = 0; i < propertyNames.leng th; i++) {\n if (propertyNames[i] in object)\n return propertyNames[ i];\n }\n }\n\n // Mozilla's old DOM bindings are bretty busted:\n // http s://bugzilla.mozilla.org/show_bug.cgi?id=855844\n // Make sure they are create before we start modifying things.\n getOwnPropertyNames(window);\n\n function getWrapperConstructor(node) {\n var nativePrototype = node.__proto__ || Objec t.getPrototypeOf(node);\n var wrapperConstructor = constructorTable.get(nativ ePrototype);\n if (wrapperConstructor)\n return wrapperConstructor;\n\n var parentWrapperConstructor = getWrapperConstructor(nativePrototype);\n\n var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructor);\n registerInternal(nativePrototype, GeneratedWrapper, node);\n\n return Genera tedWrapper;\n }\n\n function addForwardingProperties(nativePrototype, wrapperP rototype) {\n installProperty(nativePrototype, wrapperPrototype, true);\n }\ n\n function registerInstanceProperties(wrapperPrototype, instanceObject) {\n installProperty(instanceObject, wrapperPrototype, false);\n }\n\n var isFire fox = /Firefox/.test(navigator.userAgent);\n\n // This is used as a fallback wh en getting the descriptor fails in\n // installProperty.\n var dummyDescriptor = {\n get: function() {},\n set: function(v) {},\n configurable: true, \n enumerable: true\n };\n\n function isEventHandlerName(name) {\n retur n /^on[a-z]+$/.test(name);\n }\n\n function isIdentifierName(name) {\n retu rn /^\\w[a-zA-Z_0-9]*$/.test(name);\n }\n\n function getGetter(name) {\n re turn hasEval && isIdentifierName(name) ?\n new Function('return this.impl .' + name) :\n function() { return this.impl[name]; };\n }\n\n function getSetter(name) {\n return hasEval && isIdentifierName(name) ?\n new Function('v', 'this.impl.' + name + ' = v') :\n function(v) { this.impl[n ame] = v; };\n }\n\n function getMethod(name) {\n return hasEval && isIdent ifierName(name) ?\n new Function('return this.impl.' + name +\n '.apply(this.impl, arguments)') :\n function() { return this.i mpl[name].apply(this.impl, arguments); };\n }\n\n function getDescriptor(sourc e, name) {\n try {\n return Object.getOwnPropertyDescriptor(source, name );\n } catch (ex) {\n // JSC and V8 both use data properties instead of accessors which can\n // cause getting the property desciptor to throw an e xception.\n // https://bugs.webkit.org/show_bug.cgi?id=49739\n return dummyDescriptor;\n }\n }\n\n function installProperty(source, target, allow Method, opt_blacklist) {\n var names = getOwnPropertyNames(source);\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n if (name === 'polymerBlackList_')\n continue;\n\n if (name in target)\n continue;\n\n if (source.polymerBlackList_ && source.polymerBlackList_[n ame])\n continue;\n\n if (isFirefox) {\n // Tickle Firefox's old bindings.\n source.__lookupGetter__(name);\n }\n var descri ptor = getDescriptor(source, name);\n var getter, setter;\n if (allowM ethod && typeof descriptor.value === 'function') {\n target[name] = getMe thod(name);\n continue;\n }\n\n var isEvent = isEventHandlerNam e(name);\n if (isEvent)\n getter = scope.getEventHandlerGetter(name) ;\n else\n getter = getGetter(name);\n\n if (descriptor.writabl e || descriptor.set) {\n if (isEvent)\n setter = scope.getEventH andlerSetter(name);\n else\n setter = getSetter(name);\n }\ n\n defineProperty(target, name, {\n get: getter,\n set: sett er,\n configurable: descriptor.configurable,\n enumerable: descrip tor.enumerable\n });\n }\n }\n\n /**\n * @param {Function} nativeCon structor\n * @param {Function} wrapperConstructor\n * @param {Object=} opt_i nstance If present, this is used to extract\n * properties from an instanc e object.\n */\n function register(nativeConstructor, wrapperConstructor, opt _instance) {\n var nativePrototype = nativeConstructor.prototype;\n regist erInternal(nativePrototype, wrapperConstructor, opt_instance);\n mixinStatics (wrapperConstructor, nativeConstructor);\n }\n\n function registerInternal(nat ivePrototype, wrapperConstructor, opt_instance) {\n var wrapperPrototype = wr apperConstructor.prototype;\n assert(constructorTable.get(nativePrototype) == = undefined);\n\n constructorTable.set(nativePrototype, wrapperConstructor);\ n nativePrototypeTable.set(wrapperPrototype, nativePrototype);\n\n addForw ardingProperties(nativePrototype, wrapperPrototype);\n if (opt_instance)\n registerInstanceProperties(wrapperPrototype, opt_instance);\n defineProper ty(wrapperPrototype, 'constructor', {\n value: wrapperConstructor,\n c onfigurable: true,\n enumerable: false,\n writable: true\n });\n } \n\n function isWrapperFor(wrapperConstructor, nativeConstructor) {\n return constructorTable.get(nativeConstructor.prototype) ===\n wrapperConstruct or;\n }\n\n /**\n * Creates a generic wrapper constructor based on |object| and its\n * constructor.\n * @param {Node} object\n * @return {Function} T he generated constructor.\n */\n function registerObject(object) {\n var n ativePrototype = Object.getPrototypeOf(object);\n\n var superWrapperConstruct or = getWrapperConstructor(nativePrototype);\n var GeneratedWrapper = createW rapperConstructor(superWrapperConstructor);\n registerInternal(nativePrototyp e, GeneratedWrapper, object);\n\n return GeneratedWrapper;\n }\n\n function createWrapperConstructor(superWrapperConstructor) {\n function GeneratedWrap per(node) {\n superWrapperConstructor.call(this, node);\n }\n Generat edWrapper.prototype =\n Object.create(superWrapperConstructor.prototype); \n GeneratedWrapper.prototype.constructor = GeneratedWrapper;\n\n return G eneratedWrapper;\n }\n\n var OriginalDOMImplementation = window.DOMImplementat ion;\n var OriginalEventTarget = window.EventTarget;\n var OriginalEvent = win dow.Event;\n var OriginalNode = window.Node;\n var OriginalWindow = window.Win dow;\n var OriginalRange = window.Range;\n var OriginalCanvasRenderingContext2 D = window.CanvasRenderingContext2D;\n var OriginalWebGLRenderingContext = wind ow.WebGLRenderingContext;\n var OriginalSVGElementInstance = window.SVGElementI nstance;\n\n function isWrapper(object) {\n return object instanceof wrapper s.EventTarget ||\n object instanceof wrappers.Event ||\n obj ect instanceof wrappers.Range ||\n object instanceof wrappers.DOMImple mentation ||\n object instanceof wrappers.CanvasRenderingContext2D ||\ n wrappers.WebGLRenderingContext &&\n object instanceof wrappers.WebGLRenderingContext;\n }\n\n function isNative(object) {\n retur n OriginalEventTarget && object instanceof OriginalEventTarget ||\n ob ject instanceof OriginalNode ||\n object instanceof OriginalEvent ||\n object instanceof OriginalWindow ||\n object instanceof Ori ginalRange ||\n object instanceof OriginalDOMImplementation ||\n object instanceof OriginalCanvasRenderingContext2D ||\n OriginalW ebGLRenderingContext &&\n object instanceof OriginalWebGLRendering Context ||\n OriginalSVGElementInstance &&\n object inst anceof OriginalSVGElementInstance;\n }\n\n /**\n * Wraps a node in a Wrapper Node. If there already exists a wrapper for the\n * |node| that wrapper is ret urned instead.\n * @param {Node} node\n * @return {WrapperNode}\n */\n fu nction wrap(impl) {\n if (impl === null)\n return null;\n\n assert(is Native(impl));\n return impl.polymerWrapper_ ||\n (impl.polymerWrapper _ = new (getWrapperConstructor(impl))(impl));\n }\n\n /**\n * Unwraps a wrap per and returns the node it is wrapping.\n * @param {WrapperNode} wrapper\n * @return {Node}\n */\n function unwrap(wrapper) {\n if (wrapper === null) \n return null;\n assert(isWrapper(wrapper));\n return wrapper.impl;\ n }\n\n /**\n * Unwraps object if it is a wrapper.\n * @param {Object} obj ect\n * @return {Object} The native implementation object.\n */\n function unwrapIfNeeded(object) {\n return object && isWrapper(object) ? unwrap(object ) : object;\n }\n\n /**\n * Wraps object if it is not a wrapper.\n * @para m {Object} object\n * @return {Object} The wrapper for object.\n */\n funct ion wrapIfNeeded(object) {\n return object && !isWrapper(object) ? wrap(objec t) : object;\n }\n\n /**\n * Overrides the current wrapper (if any) for node .\n * @param {Node} node\n * @param {WrapperNode=} wrapper If left out the w rapper will be created as\n * needed next time someone wraps the node.\n */\n function rewrap(node, wrapper) {\n if (wrapper === null)\n return ;\n assert(isNative(node));\n assert(wrapper === undefined || isWrapper(wr apper));\n node.polymerWrapper_ = wrapper;\n }\n\n function defineGetter(co nstructor, name, getter) {\n defineProperty(constructor.prototype, name, {\n get: getter,\n configurable: true,\n enumerable: true\n });\n }\n\n function defineWrapGetter(constructor, name) {\n defineGetter(constru ctor, name, function() {\n return wrap(this.impl[name]);\n });\n }\n\n /**\n * Forwards existing methods on the native object to the wrapper methods .\n * This does not wrap any of the arguments or the return value since the\n * wrapper implementation already takes care of that.\n * @param {Array.<Func tion>} constructors\n * @parem {Array.<string>} names\n */\n function forwa rdMethodsToWrapper(constructors, names) {\n constructors.forEach(function(con structor) {\n names.forEach(function(name) {\n constructor.prototype [name] = function() {\n var w = wrapIfNeeded(this);\n return w [name].apply(w, arguments);\n };\n });\n });\n }\n\n scope.asse rt = assert;\n scope.constructorTable = constructorTable;\n scope.defineGetter = defineGetter;\n scope.defineWrapGetter = defineWrapGetter;\n scope.forwardM ethodsToWrapper = forwardMethodsToWrapper;\n scope.isWrapper = isWrapper;\n sc ope.isWrapperFor = isWrapperFor;\n scope.mixin = mixin;\n scope.nativePrototyp eTable = nativePrototypeTable;\n scope.oneOf = oneOf;\n scope.registerObject = registerObject;\n scope.registerWrapper = register;\n scope.rewrap = rewrap;\ n scope.unwrap = unwrap;\n scope.unwrapIfNeeded = unwrapIfNeeded;\n scope.wra p = wrap;\n scope.wrapIfNeeded = wrapIfNeeded;\n scope.wrappers = wrappers;\n\ n})(window.ShadowDOMPolyfill);\n", 103 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\nwindow.ShadowDOMPolyfill = {};\n\n(function(scope) {\n 'use stri ct';\n\n var constructorTable = new WeakMap();\n var nativePrototypeTable = ne w WeakMap();\n var wrappers = Object.create(null);\n\n // Don't test for eval if document has CSP securityPolicy object and we can\n // see that eval is not supported. This avoids an error message in console\n // even when the exception is caught\n var hasEval = !('securityPolicy' in document) ||\n document.s ecurityPolicy.allowsEval;\n if (hasEval) {\n try {\n var f = new Functi on('', 'return true;');\n hasEval = f();\n } catch (ex) {\n hasEval = false;\n }\n }\n\n function assert(b) {\n if (!b)\n throw new Er ror('Assertion failed');\n };\n\n var defineProperty = Object.defineProperty;\ n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var getOwnPropertyDe scriptor = Object.getOwnPropertyDescriptor;\n\n function mixin(to, from) {\n getOwnPropertyNames(from).forEach(function(name) {\n defineProperty(to, na me, getOwnPropertyDescriptor(from, name));\n });\n return to;\n };\n\n f unction mixinStatics(to, from) {\n getOwnPropertyNames(from).forEach(function (name) {\n switch (name) {\n case 'arguments':\n case 'caller ':\n case 'length':\n case 'name':\n case 'prototype':\n case 'toString':\n return;\n }\n defineProperty(to, name , getOwnPropertyDescriptor(from, name));\n });\n return to;\n };\n\n fun ction oneOf(object, propertyNames) {\n for (var i = 0; i < propertyNames.leng th; i++) {\n if (propertyNames[i] in object)\n return propertyNames[ i];\n }\n }\n\n // Mozilla's old DOM bindings are bretty busted:\n // http s://bugzilla.mozilla.org/show_bug.cgi?id=855844\n // Make sure they are create before we start modifying things.\n getOwnPropertyNames(window);\n\n function getWrapperConstructor(node) {\n var nativePrototype = node.__proto__ || Objec t.getPrototypeOf(node);\n var wrapperConstructor = constructorTable.get(nativ ePrototype);\n if (wrapperConstructor)\n return wrapperConstructor;\n\n var parentWrapperConstructor = getWrapperConstructor(nativePrototype);\n\n var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructor);\n registerInternal(nativePrototype, GeneratedWrapper, node);\n\n return Genera tedWrapper;\n }\n\n function addForwardingProperties(nativePrototype, wrapperP rototype) {\n installProperty(nativePrototype, wrapperPrototype, true);\n }\ n\n function registerInstanceProperties(wrapperPrototype, instanceObject) {\n installProperty(instanceObject, wrapperPrototype, false);\n }\n\n var isFire fox = /Firefox/.test(navigator.userAgent);\n\n // This is used as a fallback wh en getting the descriptor fails in\n // installProperty.\n var dummyDescriptor = {\n get: function() {},\n set: function(v) {},\n configurable: true, \n enumerable: true\n };\n\n function isEventHandlerName(name) {\n retur n /^on[a-z]+$/.test(name);\n }\n\n function isIdentifierName(name) {\n retu rn /^\\w[a-zA-Z_0-9]*$/.test(name);\n }\n\n function getGetter(name) {\n re turn hasEval && isIdentifierName(name) ?\n new Function('return this.impl .' + name) :\n function() { return this.impl[name]; };\n }\n\n function getSetter(name) {\n return hasEval && isIdentifierName(name) ?\n new Function('v', 'this.impl.' + name + ' = v') :\n function(v) { this.impl[n ame] = v; };\n }\n\n function getMethod(name) {\n return hasEval && isIdent ifierName(name) ?\n new Function('return this.impl.' + name +\n '.apply(this.impl, arguments)') :\n function() { return this.i mpl[name].apply(this.impl, arguments); };\n }\n\n function getDescriptor(sourc e, name) {\n try {\n return Object.getOwnPropertyDescriptor(source, name );\n } catch (ex) {\n // JSC and V8 both use data properties instead of accessors which can\n // cause getting the property desciptor to throw an e xception.\n // https://bugs.webkit.org/show_bug.cgi?id=49739\n return dummyDescriptor;\n }\n }\n\n function installProperty(source, target, allow Method, opt_blacklist) {\n var names = getOwnPropertyNames(source);\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n if (name === 'polymerBlackList_')\n continue;\n\n if (name in target)\n continue;\n\n if (source.polymerBlackList_ && source.polymerBlackList_[n ame])\n continue;\n\n if (isFirefox) {\n // Tickle Firefox's old bindings.\n source.__lookupGetter__(name);\n }\n var descri ptor = getDescriptor(source, name);\n var getter, setter;\n if (allowM ethod && typeof descriptor.value === 'function') {\n target[name] = getMe thod(name);\n continue;\n }\n\n var isEvent = isEventHandlerNam e(name);\n if (isEvent)\n getter = scope.getEventHandlerGetter(name) ;\n else\n getter = getGetter(name);\n\n if (descriptor.writabl e || descriptor.set) {\n if (isEvent)\n setter = scope.getEventH andlerSetter(name);\n else\n setter = getSetter(name);\n }\ n\n defineProperty(target, name, {\n get: getter,\n set: sett er,\n configurable: descriptor.configurable,\n enumerable: descrip tor.enumerable\n });\n }\n }\n\n /**\n * @param {Function} nativeCon structor\n * @param {Function} wrapperConstructor\n * @param {Object=} opt_i nstance If present, this is used to extract\n * properties from an instanc e object.\n */\n function register(nativeConstructor, wrapperConstructor, opt _instance) {\n var nativePrototype = nativeConstructor.prototype;\n regist erInternal(nativePrototype, wrapperConstructor, opt_instance);\n mixinStatics (wrapperConstructor, nativeConstructor);\n }\n\n function registerInternal(nat ivePrototype, wrapperConstructor, opt_instance) {\n var wrapperPrototype = wr apperConstructor.prototype;\n assert(constructorTable.get(nativePrototype) == = undefined);\n\n constructorTable.set(nativePrototype, wrapperConstructor);\ n nativePrototypeTable.set(wrapperPrototype, nativePrototype);\n\n addForw ardingProperties(nativePrototype, wrapperPrototype);\n if (opt_instance)\n registerInstanceProperties(wrapperPrototype, opt_instance);\n defineProper ty(wrapperPrototype, 'constructor', {\n value: wrapperConstructor,\n c onfigurable: true,\n enumerable: false,\n writable: true\n });\n } \n\n function isWrapperFor(wrapperConstructor, nativeConstructor) {\n return constructorTable.get(nativeConstructor.prototype) ===\n wrapperConstruct or;\n }\n\n /**\n * Creates a generic wrapper constructor based on |object| and its\n * constructor.\n * @param {Node} object\n * @return {Function} T he generated constructor.\n */\n function registerObject(object) {\n var n ativePrototype = Object.getPrototypeOf(object);\n\n var superWrapperConstruct or = getWrapperConstructor(nativePrototype);\n var GeneratedWrapper = createW rapperConstructor(superWrapperConstructor);\n registerInternal(nativePrototyp e, GeneratedWrapper, object);\n\n return GeneratedWrapper;\n }\n\n function createWrapperConstructor(superWrapperConstructor) {\n function GeneratedWrap per(node) {\n superWrapperConstructor.call(this, node);\n }\n Generat edWrapper.prototype =\n Object.create(superWrapperConstructor.prototype); \n GeneratedWrapper.prototype.constructor = GeneratedWrapper;\n\n return G eneratedWrapper;\n }\n\n var OriginalDOMImplementation = window.DOMImplementat ion;\n var OriginalEventTarget = window.EventTarget;\n var OriginalEvent = win dow.Event;\n var OriginalNode = window.Node;\n var OriginalWindow = window.Win dow;\n var OriginalRange = window.Range;\n var OriginalCanvasRenderingContext2 D = window.CanvasRenderingContext2D;\n var OriginalWebGLRenderingContext = wind ow.WebGLRenderingContext;\n var OriginalSVGElementInstance = window.SVGElementI nstance;\n\n function isWrapper(object) {\n return object instanceof wrapper s.EventTarget ||\n object instanceof wrappers.Event ||\n obj ect instanceof wrappers.Range ||\n object instanceof wrappers.DOMImple mentation ||\n object instanceof wrappers.CanvasRenderingContext2D ||\ n wrappers.WebGLRenderingContext &&\n object instanceof wrappers.WebGLRenderingContext;\n }\n\n function isNative(object) {\n retur n OriginalEventTarget && object instanceof OriginalEventTarget ||\n ob ject instanceof OriginalNode ||\n object instanceof OriginalEvent ||\n object instanceof OriginalWindow ||\n object instanceof Ori ginalRange ||\n object instanceof OriginalDOMImplementation ||\n object instanceof OriginalCanvasRenderingContext2D ||\n OriginalW ebGLRenderingContext &&\n object instanceof OriginalWebGLRendering Context ||\n OriginalSVGElementInstance &&\n object inst anceof OriginalSVGElementInstance;\n }\n\n /**\n * Wraps a node in a Wrapper Node. If there already exists a wrapper for the\n * |node| that wrapper is ret urned instead.\n * @param {Node} node\n * @return {WrapperNode}\n */\n fu nction wrap(impl) {\n if (impl === null)\n return null;\n\n assert(is Native(impl));\n return impl.polymerWrapper_ ||\n (impl.polymerWrapper _ = new (getWrapperConstructor(impl))(impl));\n }\n\n /**\n * Unwraps a wrap per and returns the node it is wrapping.\n * @param {WrapperNode} wrapper\n * @return {Node}\n */\n function unwrap(wrapper) {\n if (wrapper === null) \n return null;\n assert(isWrapper(wrapper));\n return wrapper.impl;\ n }\n\n /**\n * Unwraps object if it is a wrapper.\n * @param {Object} obj ect\n * @return {Object} The native implementation object.\n */\n function unwrapIfNeeded(object) {\n return object && isWrapper(object) ? unwrap(object ) : object;\n }\n\n /**\n * Wraps object if it is not a wrapper.\n * @para m {Object} object\n * @return {Object} The wrapper for object.\n */\n funct ion wrapIfNeeded(object) {\n return object && !isWrapper(object) ? wrap(objec t) : object;\n }\n\n /**\n * Overrides the current wrapper (if any) for node .\n * @param {Node} node\n * @param {WrapperNode=} wrapper If left out the w rapper will be created as\n * needed next time someone wraps the node.\n */\n function rewrap(node, wrapper) {\n if (wrapper === null)\n return ;\n assert(isNative(node));\n assert(wrapper === undefined || isWrapper(wr apper));\n node.polymerWrapper_ = wrapper;\n }\n\n function defineGetter(co nstructor, name, getter) {\n defineProperty(constructor.prototype, name, {\n get: getter,\n configurable: true,\n enumerable: true\n });\n }\n\n function defineWrapGetter(constructor, name) {\n defineGetter(constru ctor, name, function() {\n return wrap(this.impl[name]);\n });\n }\n\n /**\n * Forwards existing methods on the native object to the wrapper methods .\n * This does not wrap any of the arguments or the return value since the\n * wrapper implementation already takes care of that.\n * @param {Array.<Func tion>} constructors\n * @parem {Array.<string>} names\n */\n function forwa rdMethodsToWrapper(constructors, names) {\n constructors.forEach(function(con structor) {\n names.forEach(function(name) {\n constructor.prototype [name] = function() {\n var w = wrapIfNeeded(this);\n return w [name].apply(w, arguments);\n };\n });\n });\n }\n\n scope.asse rt = assert;\n scope.constructorTable = constructorTable;\n scope.defineGetter = defineGetter;\n scope.defineWrapGetter = defineWrapGetter;\n scope.forwardM ethodsToWrapper = forwardMethodsToWrapper;\n scope.isWrapper = isWrapper;\n sc ope.isWrapperFor = isWrapperFor;\n scope.mixin = mixin;\n scope.nativePrototyp eTable = nativePrototypeTable;\n scope.oneOf = oneOf;\n scope.registerObject = registerObject;\n scope.registerWrapper = register;\n scope.rewrap = rewrap;\ n scope.unwrap = unwrap;\n scope.unwrapIfNeeded = unwrapIfNeeded;\n scope.wra p = wrap;\n scope.wrapIfNeeded = wrapIfNeeded;\n scope.wrappers = wrappers;\n\ n})(window.ShadowDOMPolyfill);\n",
104 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(context) {\n 'use strict';\n\n var OriginalM utationObserver = window.MutationObserver;\n var callbacks = [];\n var pending = false;\n var timerFunc;\n\n function handle() {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks = [];\n for (var i = 0; i < c opies.length; i++) {\n (0, copies[i])();\n }\n }\n\n if (OriginalMutat ionObserver) {\n var counter = 1;\n var observer = new OriginalMutationObs erver(handle);\n var textNode = document.createTextNode(counter);\n observ er.observe(textNode, {characterData: true});\n\n timerFunc = function() {\n counter = (counter + 1) % 2;\n textNode.data = counter;\n };\n\n } else {\n timerFunc = window.setImmediate || window.setTimeout;\n }\n\n func tion setEndOfMicrotask(func) {\n callbacks.push(func);\n if (pending)\n return;\n pending = true;\n timerFunc(handle, 0);\n }\n\n context.set EndOfMicrotask = setEndOfMicrotask;\n\n})(window.ShadowDOMPolyfill);\n", 104 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(context) {\n 'use strict';\n\n var OriginalM utationObserver = window.MutationObserver;\n var callbacks = [];\n var pending = false;\n var timerFunc;\n\n function handle() {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks = [];\n for (var i = 0; i < c opies.length; i++) {\n (0, copies[i])();\n }\n }\n\n if (OriginalMutat ionObserver) {\n var counter = 1;\n var observer = new OriginalMutationObs erver(handle);\n var textNode = document.createTextNode(counter);\n observ er.observe(textNode, {characterData: true});\n\n timerFunc = function() {\n counter = (counter + 1) % 2;\n textNode.data = counter;\n };\n\n } else {\n timerFunc = window.setImmediate || window.setTimeout;\n }\n\n func tion setEndOfMicrotask(func) {\n callbacks.push(func);\n if (pending)\n return;\n pending = true;\n timerFunc(handle, 0);\n }\n\n context.set EndOfMicrotask = setEndOfMicrotask;\n\n})(window.ShadowDOMPolyfill);\n",
105 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var setEndOfMic rotask = scope.setEndOfMicrotask\n var wrapIfNeeded = scope.wrapIfNeeded\n var wrappers = scope.wrappers;\n\n var registrationsTable = new WeakMap();\n var globalMutationObservers = [];\n var isScheduled = false;\n\n function schedule Callback(observer) {\n if (isScheduled)\n return;\n setEndOfMicrotask (notifyObservers);\n isScheduled = true;\n }\n\n // http://dom.spec.whatwg. org/#mutation-observers\n function notifyObservers() {\n isScheduled = false ;\n\n do {\n var notifyList = globalMutationObservers.slice();\n va r anyNonEmpty = false;\n for (var i = 0; i < notifyList.length; i++) {\n var mo = notifyList[i];\n var queue = mo.takeRecords();\n rem oveTransientObserversFor(mo);\n if (queue.length) {\n mo.callbac k_(queue, mo);\n anyNonEmpty = true;\n }\n }\n } while ( anyNonEmpty);\n }\n\n /**\n * @param {string} type\n * @param {Node} targe t\n * @constructor\n */\n function MutationRecord(type, target) {\n this .type = type;\n this.target = target;\n this.addedNodes = new wrappers.Nod eList();\n this.removedNodes = new wrappers.NodeList();\n this.previousSib ling = null;\n this.nextSibling = null;\n this.attributeName = null;\n this.attributeNamespace = null;\n this.oldValue = null;\n }\n\n /**\n * R egisters transient observers to ancestor and its ancesors for the node\n * whi ch was removed.\n * @param {!Node} ancestor\n * @param {!Node} node\n */\n function registerTransientObservers(ancestor, node) {\n for (; ancestor; an cestor = ancestor.parentNode) {\n var registrations = registrationsTable.ge t(ancestor);\n if (!registrations)\n continue;\n for (var i = 0 ; i < registrations.length; i++) {\n var registration = registrations[i]; \n if (registration.options.subtree)\n registration.addTransient Observer(node);\n }\n }\n }\n\n function removeTransientObserversFor(o bserver) {\n for (var i = 0; i < observer.nodes_.length; i++) {\n var no de = observer.nodes_[i];\n var registrations = registrationsTable.get(node) ;\n if (!registrations)\n return;\n for (var j = 0; j < registr ations.length; j++) {\n var registration = registrations[j];\n if (registration.observer === observer)\n registration.removeTransientObse rvers();\n }\n }\n }\n\n // http://dom.spec.whatwg.org/#queue-a-mutati on-record\n function enqueueMutation(target, type, data) {\n // 1.\n var interestedObservers = Object.create(null);\n var associatedStrings = Object.c reate(null);\n\n // 2.\n for (var node = target; node; node = node.parentN ode) {\n // 3.\n var registrations = registrationsTable.get(node);\n if (!registrations)\n continue;\n for (var j = 0; j < registrati ons.length; j++) {\n var registration = registrations[j];\n var op tions = registration.options;\n // 1.\n if (node !== target && !op tions.subtree)\n continue;\n\n // 2.\n if (type === 'attr ibutes' && !options.attributes)\n continue;\n\n // 3. If type is \"attributes\", options's attributeFilter is present, and\n // either op tions's attributeFilter does not contain name or namespace\n // is non-nu ll, continue.\n if (type === 'attributes' && options.attributeFilter &&\n (data.namespace !== null ||\n options.attributeFilter.in dexOf(data.name) === -1)) {\n continue;\n }\n\n // 4.\n if (type === 'characterData' && !options.characterData)\n continu e;\n\n // 5.\n if (type === 'childList' && !options.childList)\n continue;\n\n // 6.\n var observer = registration.observer ;\n interestedObservers[observer.uid_] = observer;\n\n // 7. If ei ther type is \"attributes\" and options's attributeOldValue is\n // true, or type is \"characterData\" and options's characterDataOldValue\n // is true, set the paired string of registered observer's observer in\n // in terested observers to oldValue.\n if (type === 'attributes' && options.at tributeOldValue ||\n type === 'characterData' && options.characterDat aOldValue) {\n associatedStrings[observer.uid_] = data.oldValue;\n }\n }\n }\n\n var anyRecordsEnqueued = false;\n\n // 4.\n fo r (var uid in interestedObservers) {\n var observer = interestedObservers[u id];\n var record = new MutationRecord(type, target);\n\n // 2.\n if ('name' in data && 'namespace' in data) {\n record.attributeName = da ta.name;\n record.attributeNamespace = data.namespace;\n }\n\n // 3.\n if (data.addedNodes)\n record.addedNodes = data.addedNodes;\ n\n // 4.\n if (data.removedNodes)\n record.removedNodes = data .removedNodes;\n\n // 5.\n if (data.previousSibling)\n record.p reviousSibling = data.previousSibling;\n\n // 6.\n if (data.nextSiblin g)\n record.nextSibling = data.nextSibling;\n\n // 7.\n if (ass ociatedStrings[uid] !== undefined)\n record.oldValue = associatedStrings[ uid];\n\n // 8.\n observer.records_.push(record);\n\n anyRecordsE nqueued = true;\n }\n\n if (anyRecordsEnqueued)\n scheduleCallback(); \n }\n\n var slice = Array.prototype.slice;\n\n /**\n * @param {!Object} op tions\n * @constructor\n */\n function MutationObserverOptions(options) {\n this.childList = !!options.childList;\n this.subtree = !!options.subtree; \n\n // 1. If either options' attributeOldValue or attributeFilter is present \n // and options' attributes is omitted, set options' attributes to true.\n if (!('attributes' in options) &&\n ('attributeOldValue' in options || 'attributeFilter' in options)) {\n this.attributes = true;\n } else {\n this.attributes = !!options.attributes;\n }\n\n // 2. If options' ch aracterDataOldValue is present and options'\n // characterData is omitted, se t options' characterData to true.\n if ('characterDataOldValue' in options && !('characterData' in options))\n this.characterData = true;\n else\n this.characterData = !!options.characterData;\n\n // 3. & 4.\n if (!thi s.attributes &&\n (options.attributeOldValue || 'attributeFilter' in opti ons) ||\n // 5.\n !this.characterData && options.characterDataOldV alue) {\n throw new TypeError();\n }\n\n this.characterData = !!optio ns.characterData;\n this.attributeOldValue = !!options.attributeOldValue;\n this.characterDataOldValue = !!options.characterDataOldValue;\n if ('attrib uteFilter' in options) {\n if (options.attributeFilter == null ||\n typeof options.attributeFilter !== 'object') {\n throw new TypeError(); \n }\n this.attributeFilter = slice.call(options.attributeFilter);\n } else {\n this.attributeFilter = null;\n }\n }\n\n var uidCounter = 0;\n\n /**\n * The class that maps to the DOM MutationObserver interface.\n * @param {Function} callback.\n * @constructor\n */\n function MutationOb server(callback) {\n this.callback_ = callback;\n this.nodes_ = [];\n t his.records_ = [];\n this.uid_ = ++uidCounter;\n\n // This will leak. Ther e is no way to implement this without WeakRefs :'(\n globalMutationObservers. push(this);\n }\n\n MutationObserver.prototype = {\n // http://dom.spec.wha twg.org/#dom-mutationobserver-observe\n observe: function(target, options) {\ n target = wrapIfNeeded(target);\n\n var newOptions = new MutationObse rverOptions(options);\n\n // 6.\n var registration;\n var registr ations = registrationsTable.get(target);\n if (!registrations)\n reg istrationsTable.set(target, registrations = []);\n\n for (var i = 0; i < re gistrations.length; i++) {\n if (registrations[i].observer === this) {\n registration = registrations[i];\n // 6.1.\n registra tion.removeTransientObservers();\n // 6.2.\n registration.opti ons = newOptions;\n }\n }\n\n // 7.\n if (!registration) { \n registration = new Registration(this, target, newOptions);\n re gistrations.push(registration);\n this.nodes_.push(target);\n }\n },\n\n // http://dom.spec.whatwg.org/#dom-mutationobserver-disconnect\n d isconnect: function() {\n this.nodes_.forEach(function(node) {\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < regi strations.length; i++) {\n var registration = registrations[i];\n if (registration.observer === this) {\n registrations.splice(i, 1 );\n // Each node can only have one registered observer associated wi th\n // this observer.\n break;\n }\n }\n }, this);\n this.records_ = [];\n },\n\n takeRecords: function() {\n var copyOfRecords = this.records_;\n this.records_ = [];\n r eturn copyOfRecords;\n }\n };\n\n /**\n * Class used to represent a regis tered observer.\n * @param {MutationObserver} observer\n * @param {Node} tar get\n * @param {MutationObserverOptions} options\n * @constructor\n */\n function Registration(observer, target, options) {\n this.observer = observer ;\n this.target = target;\n this.options = options;\n this.transientObs ervedNodes = [];\n }\n\n Registration.prototype = {\n /**\n * Adds a tr ansient observer on node. The transient observer gets removed\n * next time we deliver the change records.\n * @param {Node} node\n */\n addTrans ientObserver: function(node) {\n // Don't add transient observers on the ta rget itself. We already have all\n // the required listeners set up on the target.\n if (node === this.target)\n return;\n\n this.transien tObservedNodes.push(node);\n var registrations = registrationsTable.get(nod e);\n if (!registrations)\n registrationsTable.set(node, registratio ns = []);\n\n // We know that registrations does not contain this because w e already\n // checked if node === this.target.\n registrations.push(t his);\n },\n\n removeTransientObservers: function() {\n var transient ObservedNodes = this.transientObservedNodes;\n this.transientObservedNodes = [];\n\n for (var i = 0; i < transientObservedNodes.length; i++) {\n var node = transientObservedNodes[i];\n var registrations = registratio nsTable.get(node);\n for (var j = 0; j < registrations.length; j++) {\n if (registrations[j] === this) {\n registrations.splice(j, 1) ;\n // Each node can only have one registered observer associated wit h\n // this observer.\n break;\n }\n }\n }\n }\n };\n\n scope.enqueueMutation = enqueueMutation;\n scope.regist erTransientObservers = registerTransientObservers;\n scope.wrappers.MutationObs erver = MutationObserver;\n scope.wrappers.MutationRecord = MutationRecord;\n\n })(window.ShadowDOMPolyfill);\n", 105 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var setEndOfMic rotask = scope.setEndOfMicrotask\n var wrapIfNeeded = scope.wrapIfNeeded\n var wrappers = scope.wrappers;\n\n var registrationsTable = new WeakMap();\n var globalMutationObservers = [];\n var isScheduled = false;\n\n function schedule Callback(observer) {\n if (isScheduled)\n return;\n setEndOfMicrotask (notifyObservers);\n isScheduled = true;\n }\n\n // http://dom.spec.whatwg. org/#mutation-observers\n function notifyObservers() {\n isScheduled = false ;\n\n do {\n var notifyList = globalMutationObservers.slice();\n va r anyNonEmpty = false;\n for (var i = 0; i < notifyList.length; i++) {\n var mo = notifyList[i];\n var queue = mo.takeRecords();\n rem oveTransientObserversFor(mo);\n if (queue.length) {\n mo.callbac k_(queue, mo);\n anyNonEmpty = true;\n }\n }\n } while ( anyNonEmpty);\n }\n\n /**\n * @param {string} type\n * @param {Node} targe t\n * @constructor\n */\n function MutationRecord(type, target) {\n this .type = type;\n this.target = target;\n this.addedNodes = new wrappers.Nod eList();\n this.removedNodes = new wrappers.NodeList();\n this.previousSib ling = null;\n this.nextSibling = null;\n this.attributeName = null;\n this.attributeNamespace = null;\n this.oldValue = null;\n }\n\n /**\n * R egisters transient observers to ancestor and its ancesors for the node\n * whi ch was removed.\n * @param {!Node} ancestor\n * @param {!Node} node\n */\n function registerTransientObservers(ancestor, node) {\n for (; ancestor; an cestor = ancestor.parentNode) {\n var registrations = registrationsTable.ge t(ancestor);\n if (!registrations)\n continue;\n for (var i = 0 ; i < registrations.length; i++) {\n var registration = registrations[i]; \n if (registration.options.subtree)\n registration.addTransient Observer(node);\n }\n }\n }\n\n function removeTransientObserversFor(o bserver) {\n for (var i = 0; i < observer.nodes_.length; i++) {\n var no de = observer.nodes_[i];\n var registrations = registrationsTable.get(node) ;\n if (!registrations)\n return;\n for (var j = 0; j < registr ations.length; j++) {\n var registration = registrations[j];\n if (registration.observer === observer)\n registration.removeTransientObse rvers();\n }\n }\n }\n\n // http://dom.spec.whatwg.org/#queue-a-mutati on-record\n function enqueueMutation(target, type, data) {\n // 1.\n var interestedObservers = Object.create(null);\n var associatedStrings = Object.c reate(null);\n\n // 2.\n for (var node = target; node; node = node.parentN ode) {\n // 3.\n var registrations = registrationsTable.get(node);\n if (!registrations)\n continue;\n for (var j = 0; j < registrati ons.length; j++) {\n var registration = registrations[j];\n var op tions = registration.options;\n // 1.\n if (node !== target && !op tions.subtree)\n continue;\n\n // 2.\n if (type === 'attr ibutes' && !options.attributes)\n continue;\n\n // 3. If type is \"attributes\", options's attributeFilter is present, and\n // either op tions's attributeFilter does not contain name or namespace\n // is non-nu ll, continue.\n if (type === 'attributes' && options.attributeFilter &&\n (data.namespace !== null ||\n options.attributeFilter.in dexOf(data.name) === -1)) {\n continue;\n }\n\n // 4.\n if (type === 'characterData' && !options.characterData)\n continu e;\n\n // 5.\n if (type === 'childList' && !options.childList)\n continue;\n\n // 6.\n var observer = registration.observer ;\n interestedObservers[observer.uid_] = observer;\n\n // 7. If ei ther type is \"attributes\" and options's attributeOldValue is\n // true, or type is \"characterData\" and options's characterDataOldValue\n // is true, set the paired string of registered observer's observer in\n // in terested observers to oldValue.\n if (type === 'attributes' && options.at tributeOldValue ||\n type === 'characterData' && options.characterDat aOldValue) {\n associatedStrings[observer.uid_] = data.oldValue;\n }\n }\n }\n\n var anyRecordsEnqueued = false;\n\n // 4.\n fo r (var uid in interestedObservers) {\n var observer = interestedObservers[u id];\n var record = new MutationRecord(type, target);\n\n // 2.\n if ('name' in data && 'namespace' in data) {\n record.attributeName = da ta.name;\n record.attributeNamespace = data.namespace;\n }\n\n // 3.\n if (data.addedNodes)\n record.addedNodes = data.addedNodes;\ n\n // 4.\n if (data.removedNodes)\n record.removedNodes = data .removedNodes;\n\n // 5.\n if (data.previousSibling)\n record.p reviousSibling = data.previousSibling;\n\n // 6.\n if (data.nextSiblin g)\n record.nextSibling = data.nextSibling;\n\n // 7.\n if (ass ociatedStrings[uid] !== undefined)\n record.oldValue = associatedStrings[ uid];\n\n // 8.\n observer.records_.push(record);\n\n anyRecordsE nqueued = true;\n }\n\n if (anyRecordsEnqueued)\n scheduleCallback(); \n }\n\n var slice = Array.prototype.slice;\n\n /**\n * @param {!Object} op tions\n * @constructor\n */\n function MutationObserverOptions(options) {\n this.childList = !!options.childList;\n this.subtree = !!options.subtree; \n\n // 1. If either options' attributeOldValue or attributeFilter is present \n // and options' attributes is omitted, set options' attributes to true.\n if (!('attributes' in options) &&\n ('attributeOldValue' in options || 'attributeFilter' in options)) {\n this.attributes = true;\n } else {\n this.attributes = !!options.attributes;\n }\n\n // 2. If options' ch aracterDataOldValue is present and options'\n // characterData is omitted, se t options' characterData to true.\n if ('characterDataOldValue' in options && !('characterData' in options))\n this.characterData = true;\n else\n this.characterData = !!options.characterData;\n\n // 3. & 4.\n if (!thi s.attributes &&\n (options.attributeOldValue || 'attributeFilter' in opti ons) ||\n // 5.\n !this.characterData && options.characterDataOldV alue) {\n throw new TypeError();\n }\n\n this.characterData = !!optio ns.characterData;\n this.attributeOldValue = !!options.attributeOldValue;\n this.characterDataOldValue = !!options.characterDataOldValue;\n if ('attrib uteFilter' in options) {\n if (options.attributeFilter == null ||\n typeof options.attributeFilter !== 'object') {\n throw new TypeError(); \n }\n this.attributeFilter = slice.call(options.attributeFilter);\n } else {\n this.attributeFilter = null;\n }\n }\n\n var uidCounter = 0;\n\n /**\n * The class that maps to the DOM MutationObserver interface.\n * @param {Function} callback.\n * @constructor\n */\n function MutationOb server(callback) {\n this.callback_ = callback;\n this.nodes_ = [];\n t his.records_ = [];\n this.uid_ = ++uidCounter;\n\n // This will leak. Ther e is no way to implement this without WeakRefs :'(\n globalMutationObservers. push(this);\n }\n\n MutationObserver.prototype = {\n // http://dom.spec.wha twg.org/#dom-mutationobserver-observe\n observe: function(target, options) {\ n target = wrapIfNeeded(target);\n\n var newOptions = new MutationObse rverOptions(options);\n\n // 6.\n var registration;\n var registr ations = registrationsTable.get(target);\n if (!registrations)\n reg istrationsTable.set(target, registrations = []);\n\n for (var i = 0; i < re gistrations.length; i++) {\n if (registrations[i].observer === this) {\n registration = registrations[i];\n // 6.1.\n registra tion.removeTransientObservers();\n // 6.2.\n registration.opti ons = newOptions;\n }\n }\n\n // 7.\n if (!registration) { \n registration = new Registration(this, target, newOptions);\n re gistrations.push(registration);\n this.nodes_.push(target);\n }\n },\n\n // http://dom.spec.whatwg.org/#dom-mutationobserver-disconnect\n d isconnect: function() {\n this.nodes_.forEach(function(node) {\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < regi strations.length; i++) {\n var registration = registrations[i];\n if (registration.observer === this) {\n registrations.splice(i, 1 );\n // Each node can only have one registered observer associated wi th\n // this observer.\n break;\n }\n }\n }, this);\n this.records_ = [];\n },\n\n takeRecords: function() {\n var copyOfRecords = this.records_;\n this.records_ = [];\n r eturn copyOfRecords;\n }\n };\n\n /**\n * Class used to represent a regis tered observer.\n * @param {MutationObserver} observer\n * @param {Node} tar get\n * @param {MutationObserverOptions} options\n * @constructor\n */\n function Registration(observer, target, options) {\n this.observer = observer ;\n this.target = target;\n this.options = options;\n this.transientObs ervedNodes = [];\n }\n\n Registration.prototype = {\n /**\n * Adds a tr ansient observer on node. The transient observer gets removed\n * next time we deliver the change records.\n * @param {Node} node\n */\n addTrans ientObserver: function(node) {\n // Don't add transient observers on the ta rget itself. We already have all\n // the required listeners set up on the target.\n if (node === this.target)\n return;\n\n this.transien tObservedNodes.push(node);\n var registrations = registrationsTable.get(nod e);\n if (!registrations)\n registrationsTable.set(node, registratio ns = []);\n\n // We know that registrations does not contain this because w e already\n // checked if node === this.target.\n registrations.push(t his);\n },\n\n removeTransientObservers: function() {\n var transient ObservedNodes = this.transientObservedNodes;\n this.transientObservedNodes = [];\n\n for (var i = 0; i < transientObservedNodes.length; i++) {\n var node = transientObservedNodes[i];\n var registrations = registratio nsTable.get(node);\n for (var j = 0; j < registrations.length; j++) {\n if (registrations[j] === this) {\n registrations.splice(j, 1) ;\n // Each node can only have one registered observer associated wit h\n // this observer.\n break;\n }\n }\n }\n }\n };\n\n scope.enqueueMutation = enqueueMutation;\n scope.regist erTransientObservers = registerTransientObservers;\n scope.wrappers.MutationObs erver = MutationObserver;\n scope.wrappers.MutationRecord = MutationRecord;\n\n })(window.ShadowDOMPolyfill);\n",
106 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var forwardMethodsToWrap per = scope.forwardMethodsToWrapper;\n var mixin = scope.mixin;\n var register Wrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = sco pe.wrap;\n var wrappers = scope.wrappers;\n\n var wrappedFuns = new WeakMap(); \n var listenersTable = new WeakMap();\n var handledEventsTable = new WeakMap( );\n var currentlyDispatchingEvents = new WeakMap();\n var targetTable = new W eakMap();\n var currentTargetTable = new WeakMap();\n var relatedTargetTable = new WeakMap();\n var eventPhaseTable = new WeakMap();\n var stopPropagationTa ble = new WeakMap();\n var stopImmediatePropagationTable = new WeakMap();\n va r eventHandlersTable = new WeakMap();\n var eventPathTable = new WeakMap();\n\n function isShadowRoot(node) {\n return node instanceof wrappers.ShadowRoot; \n }\n\n function isInsertionPoint(node) {\n var localName = node.localName ;\n return localName === 'content' || localName === 'shadow';\n }\n\n funct ion isShadowHost(node) {\n return !!node.shadowRoot;\n }\n\n function getEv entParent(node) {\n var dv;\n return node.parentNode || (dv = node.default View) && wrap(dv) || null;\n }\n\n // https://dvcs.w3.org/hg/webcomponents/raw -file/tip/spec/shadow/index.html#dfn-adjusted-parent\n function calculateParent s(node, context, ancestors) {\n if (ancestors.length)\n return ancestors .shift();\n\n // 1.\n if (isShadowRoot(node))\n return getInsertionPa rent(node) || node.host;\n\n // 2.\n var eventParents = scope.eventParents Table.get(node);\n if (eventParents) {\n // Copy over the remaining even t parents for next iteration.\n for (var i = 1; i < eventParents.length; i+ +) {\n ancestors[i - 1] = eventParents[i];\n }\n return eventPa rents[0];\n }\n\n // 3.\n if (context && isInsertionPoint(node)) {\n var parentNode = node.parentNode;\n if (parentNode && isShadowHost(paren tNode)) {\n var trees = scope.getShadowTrees(parentNode);\n var p = getInsertionParent(context);\n for (var i = 0; i < trees.length; i++) { \n if (trees[i].contains(p))\n return p;\n }\n } \n }\n\n return getEventParent(node);\n }\n\n // https://dvcs.w3.org/hg/ webcomponents/raw-file/tip/spec/shadow/index.html#event-retargeting\n function retarget(node) {\n var stack = []; // 1.\n var ancestor = node; // 2.\n var targets = [];\n var ancestors = [];\n while (ancestor) { // 3.\n var context = null; // 3.2.\n // TODO(arv): Change order of these. If the stack is empty we always end\n // up pushing ancestor, no matter what.\ n if (isInsertionPoint(ancestor)) { // 3.1.\n context = topMostNotI nsertionPoint(stack); // 3.1.1.\n var top = stack[stack.length - 1] || a ncestor; // 3.1.2.\n stack.push(top);\n } else if (!stack.length) { \n stack.push(ancestor); // 3.3.\n }\n var target = stack[stac k.length - 1]; // 3.4.\n targets.push({target: target, currentTarget: ance stor}); // 3.5.\n if (isShadowRoot(ancestor)) // 3.6.\n stack.pop( ); // 3.6.1.\n\n ancestor = calculateParents(ancestor, context, ancestors) ; // 3.7.\n }\n return targets;\n }\n\n function topMostNotInsertionPoi nt(stack) {\n for (var i = stack.length - 1; i >= 0; i--) {\n if (!isIns ertionPoint(stack[i]))\n return stack[i];\n }\n return null;\n }\n \n // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html# dfn-adjusted-related-target\n function adjustRelatedTarget(target, related) {\n var ancestors = [];\n while (target) { // 3.\n var stack = []; // 3.1.\n var ancestor = related; // 3.2.\n var last = undefined; // 3. 3. Needs to be reset every iteration.\n while (ancestor) {\n var con text = null;\n if (!stack.length) {\n stack.push(ancestor);\n } else {\n if (isInsertionPoint(ancestor)) { // 3.4.3.\n context = topMostNotInsertionPoint(stack);\n // isDistributed is m ore general than checking whether last is\n // assigned into ancestor .\n if (isDistributed(last)) { // 3.4.3.2.\n var head = stack[stack.length - 1];\n stack.push(head);\n }\n }\n }\n\n if (inSameTree(ancestor, target)) // 3.4.4.\n return stack[stack.length - 1];\n\n if (isShadowRoot(ancestor)) // 3.4.5.\n stack.pop();\n\n last = ancestor; // 3.4.6.\n a ncestor = calculateParents(ancestor, context, ancestors); // 3.4.7.\n }\n if (isShadowRoot(target)) // 3.5.\n target = target.host;\n el se\n target = target.parentNode; // 3.6.\n }\n }\n\n function getIn sertionParent(node) {\n return scope.insertionParentTable.get(node);\n }\n\n function isDistributed(node) {\n return getInsertionParent(node);\n }\n\n function rootOfNode(node) {\n var p;\n while (p = node.parentNode) {\n node = p;\n }\n return node;\n }\n\n function inSameTree(a, b) {\n return rootOfNode(a) === rootOfNode(b);\n }\n\n function enclosedBy(a, b) {\n if (a === b)\n return true;\n if (a instanceof wrappers.ShadowRoot)\ n return enclosedBy(rootOfNode(a.host), b);\n return false;\n }\n\n\n function dispatchOriginalEvent(originalEvent) {\n // Make sure this event is only dispatched once.\n if (handledEventsTable.get(originalEvent))\n ret urn;\n handledEventsTable.set(originalEvent, true);\n\n return dispatchEve nt(wrap(originalEvent), wrap(originalEvent.target));\n }\n\n function dispatch Event(event, originalWrapperTarget) {\n if (currentlyDispatchingEvents.get(ev ent))\n throw new Error('InvalidStateError')\n currentlyDispatchingEvent s.set(event, true);\n\n // Render to ensure that the event path is correct.\n scope.renderAllPending();\n var eventPath = retarget(originalWrapperTarge t);\n\n // For window load events the load event is dispatched at the window but\n // the target is set to the document.\n //\n // http://www.whatwg .org/specs/web-apps/current-work/multipage/the-end.html#the-end\n //\n // TODO(arv): Find a less hacky way to do this.\n if (event.type === 'load' &&\n eventPath.length === 2 &&\n eventPath[0].target instanceof wrappe rs.Document) {\n eventPath.shift();\n }\n\n eventPathTable.set(event, eventPath);\n\n if (dispatchCapturing(event, eventPath)) {\n if (dispat chAtTarget(event, eventPath)) {\n dispatchBubbling(event, eventPath);\n }\n }\n\n eventPhaseTable.set(event, Event.NONE);\n currentTargetTa ble.delete(event, null);\n currentlyDispatchingEvents.delete(event);\n\n r eturn event.defaultPrevented;\n }\n\n function dispatchCapturing(event, eventP ath) {\n var phase;\n\n for (var i = eventPath.length - 1; i > 0; i--) {\n var target = eventPath[i].target;\n var currentTarget = eventPath[i]. currentTarget;\n if (target === currentTarget)\n continue;\n\n phase = Event.CAPTURING_PHASE;\n if (!invoke(eventPath[i], event, phase))\n return false;\n }\n\n return true;\n }\n\n function dispatchAtTa rget(event, eventPath) {\n var phase = Event.AT_TARGET;\n return invoke(ev entPath[0], event, phase);\n }\n\n function dispatchBubbling(event, eventPath) {\n var bubbles = event.bubbles;\n var phase;\n\n for (var i = 1; i < eventPath.length; i++) {\n var target = eventPath[i].target;\n var cur rentTarget = eventPath[i].currentTarget;\n if (target === currentTarget)\n phase = Event.AT_TARGET;\n else if (bubbles && !stopImmediatePropaga tionTable.get(event))\n phase = Event.BUBBLING_PHASE;\n else\n continue;\n\n if (!invoke(eventPath[i], event, phase))\n return;\n }\n }\n\n function invoke(tuple, event, phase) {\n var target = tuple.t arget;\n var currentTarget = tuple.currentTarget;\n\n var listeners = list enersTable.get(currentTarget);\n if (!listeners)\n return true;\n\n i f ('relatedTarget' in event) {\n var originalEvent = unwrap(event);\n // X-Tag sets relatedTarget on a CustomEvent. If they do that there is no\n // way to have relatedTarget return the adjusted target but worse is that\n // the originalEvent might not have a relatedTarget so we hit an assert\n // when we try to wrap it.\n if (originalEvent.relatedTarget) {\n v ar relatedTarget = wrap(originalEvent.relatedTarget);\n\n var adjusted = adjustRelatedTarget(currentTarget, relatedTarget);\n if (adjusted === tar get)\n return true;\n\n relatedTargetTable.set(event, adjusted); \n }\n }\n\n eventPhaseTable.set(event, phase);\n var type = event .type;\n\n var anyRemoved = false;\n targetTable.set(event, target);\n currentTargetTable.set(event, currentTarget);\n\n for (var i = 0; i < listene rs.length; i++) {\n var listener = listeners[i];\n if (listener.remove d) {\n anyRemoved = true;\n continue;\n }\n\n if (listen er.type !== type ||\n !listener.capture && phase === Event.CAPTURING_PH ASE ||\n listener.capture && phase === Event.BUBBLING_PHASE) {\n continue;\n }\n\n try {\n if (typeof listener.handler === 'fun ction')\n listener.handler.call(currentTarget, event);\n else\n listener.handler.handleEvent(event);\n\n if (stopImmediatePropag ationTable.get(event))\n return false;\n\n } catch (ex) {\n if (window.onerror)\n window.onerror(ex.message);\n else\n console.error(ex, ex.stack);\n }\n }\n\n if (anyRemoved) {\n var copy = listeners.slice();\n listeners.length = 0;\n for (var i = 0; i < copy.length; i++) {\n if (!copy[i].removed)\n listeners. push(copy[i]);\n }\n }\n\n return !stopPropagationTable.get(event);\n }\n\n function Listener(type, handler, capture) {\n this.type = type;\n this.handler = handler;\n this.capture = Boolean(capture);\n }\n Listener. prototype = {\n equals: function(that) {\n return this.handler === that. handler && this.type === that.type &&\n this.capture === that.capture;\ n },\n get removed() {\n return this.handler === null;\n },\n r emove: function() {\n this.handler = null;\n }\n };\n\n var OriginalEv ent = window.Event;\n OriginalEvent.prototype.polymerBlackList_ = {\n return Value: true,\n // TODO(arv): keyLocation is part of KeyboardEvent but Firefox does not\n // support constructable KeyboardEvent so we keep it here for now .\n keyLocation: true\n };\n\n /**\n * Creates a new Event wrapper or wra ps an existin native Event object.\n * @param {string|Event} type\n * @param {Object=} options\n * @constructor\n */\n function Event(type, options) {\ n if (type instanceof OriginalEvent)\n this.impl = type;\n else\n return wrap(constructEvent(OriginalEvent, 'Event', type, options));\n }\n Ev ent.prototype = {\n get target() {\n return targetTable.get(this);\n },\n get currentTarget() {\n return currentTargetTable.get(this);\n } ,\n get eventPhase() {\n return eventPhaseTable.get(this);\n },\n get path() {\n var nodeList = new wrappers.NodeList();\n var eventPath = eventPathTable.get(this);\n if (eventPath) {\n var index = 0;\n var lastIndex = eventPath.length - 1;\n var baseRoot = rootOfNode(c urrentTargetTable.get(this));\n\n for (var i = 0; i <= lastIndex; i++) {\ n var currentTarget = eventPath[i].currentTarget;\n var curren tRoot = rootOfNode(currentTarget);\n if (enclosedBy(baseRoot, currentRo ot) &&\n // Make sure we do not add Window to the path.\n (i !== lastIndex || currentTarget instanceof wrappers.Node)) {\n nodeList[index++] = currentTarget;\n }\n }\n nodeList.len gth = index;\n }\n return nodeList;\n },\n stopPropagation: func tion() {\n stopPropagationTable.set(this, true);\n },\n stopImmediate Propagation: function() {\n stopPropagationTable.set(this, true);\n st opImmediatePropagationTable.set(this, true);\n }\n };\n registerWrapper(Ori ginalEvent, Event, document.createEvent('Event'));\n\n function unwrapOptions(o ptions) {\n if (!options || !options.relatedTarget)\n return options;\n return Object.create(options, {\n relatedTarget: {value: unwrap(options. relatedTarget)}\n });\n }\n\n function registerGenericEvent(name, SuperEven t, prototype) {\n var OriginalEvent = window[name];\n var GenericEvent = f unction(type, options) {\n if (type instanceof OriginalEvent)\n this .impl = type;\n else\n return wrap(constructEvent(OriginalEvent, nam e, type, options));\n };\n GenericEvent.prototype = Object.create(SuperEve nt.prototype);\n if (prototype)\n mixin(GenericEvent.prototype, prototyp e);\n if (OriginalEvent) {\n // - Old versions of Safari fails on new Fo cusEvent (and others?).\n // - IE does not support event constructors.\n // - createEvent('FocusEvent') throws in Firefox.\n // => Try the best p ractice solution first and fallback to the old way\n // if needed.\n t ry {\n registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent('te mp'));\n } catch (ex) {\n registerWrapper(OriginalEvent, GenericEven t,\n document.createEvent(name));\n }\n }\n re turn GenericEvent;\n }\n\n var UIEvent = registerGenericEvent('UIEvent', Event );\n var CustomEvent = registerGenericEvent('CustomEvent', Event);\n\n var rel atedTargetProto = {\n get relatedTarget() {\n return relatedTargetTable. get(this) || wrap(unwrap(this).relatedTarget);\n }\n };\n\n function getIni tFunction(name, relatedTargetIndex) {\n return function() {\n arguments[ relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);\n var impl = u nwrap(this);\n impl[name].apply(impl, arguments);\n };\n }\n\n var mou seEventProto = mixin({\n initMouseEvent: getInitFunction('initMouseEvent', 14 )\n }, relatedTargetProto);\n\n var focusEventProto = mixin({\n initFocusEv ent: getInitFunction('initFocusEvent', 5)\n }, relatedTargetProto);\n\n var Mo useEvent = registerGenericEvent('MouseEvent', UIEvent, mouseEventProto);\n var FocusEvent = registerGenericEvent('FocusEvent', UIEvent, focusEventProto);\n\n // In case the browser does not support event constructors we polyfill that\n / / by calling `createEvent('Foo')` and `initFooEvent` where the arguments to\n / / `initFooEvent` are derived from the registered default event init dict.\n var defaultInitDicts = Object.create(null);\n\n var supportsEventConstructors = (f unction() {\n try {\n new window.FocusEvent('focus');\n } catch (ex) {\n return false;\n }\n return true;\n })();\n\n /**\n * Construc ts a new native event.\n */\n function constructEvent(OriginalEvent, name, ty pe, options) {\n if (supportsEventConstructors)\n return new OriginalEve nt(type, unwrapOptions(options));\n\n // Create the arguments from the defaul t dictionary.\n var event = unwrap(document.createEvent(name));\n var defa ultDict = defaultInitDicts[name];\n var args = [type];\n Object.keys(defau ltDict).forEach(function(key) {\n var v = options != null && key in options ?\n options[key] : defaultDict[key];\n if (key === 'relatedTarget ')\n v = unwrap(v);\n args.push(v);\n });\n event['init' + nam e].apply(event, args);\n return event;\n }\n\n if (!supportsEventConstructo rs) {\n var configureEventConstructor = function(name, initDict, superName) { \n if (superName) {\n var superDict = defaultInitDicts[superName];\n initDict = mixin(mixin({}, superDict), initDict);\n }\n\n defa ultInitDicts[name] = initDict;\n };\n\n // The order of the default event init dictionary keys is important, the\n // arguments to initFooEvent is deri ved from that.\n configureEventConstructor('Event', {bubbles: false, cancelab le: false});\n configureEventConstructor('CustomEvent', {detail: null}, 'Even t');\n configureEventConstructor('UIEvent', {view: null, detail: 0}, 'Event') ;\n configureEventConstructor('MouseEvent', {\n screenX: 0,\n scree nY: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n altKe y: false,\n shiftKey: false,\n metaKey: false,\n button: 0,\n relatedTarget: null\n }, 'UIEvent');\n configureEventConstructor('FocusE vent', {relatedTarget: null}, 'UIEvent');\n }\n\n function BeforeUnloadEvent(i mpl) {\n Event.call(this);\n }\n BeforeUnloadEvent.prototype = Object.creat e(Event.prototype);\n mixin(BeforeUnloadEvent.prototype, {\n get returnValue () {\n return this.impl.returnValue;\n },\n set returnValue(v) {\n this.impl.returnValue = v;\n }\n });\n\n function isValidListener(fun) { \n if (typeof fun === 'function')\n return true;\n return fun && fun. handleEvent;\n }\n\n function isMutationEvent(type) {\n switch (type) {\n case 'DOMAttrModified':\n case 'DOMAttributeNameChanged':\n case ' DOMCharacterDataModified':\n case 'DOMElementNameChanged':\n case 'DOM NodeInserted':\n case 'DOMNodeInsertedIntoDocument':\n case 'DOMNodeRe moved':\n case 'DOMNodeRemovedFromDocument':\n case 'DOMSubtreeModifie d':\n return true;\n }\n return false;\n }\n\n var OriginalEventT arget = window.EventTarget;\n\n /**\n * This represents a wrapper for an Even tTarget.\n * @param {!EventTarget} impl The original event target.\n * @cons tructor\n */\n function EventTarget(impl) {\n this.impl = impl;\n }\n\n // Node and Window have different internal type checks in WebKit so we cannot\n // use the same method as the original function.\n var methodNames = [\n 'a ddEventListener',\n 'removeEventListener',\n 'dispatchEvent'\n ];\n\n [N ode, Window].forEach(function(constructor) {\n var p = constructor.prototype; \n methodNames.forEach(function(name) {\n Object.defineProperty(p, name + '_', {value: p[name]});\n });\n });\n\n function getTargetToListenAt(wrap per) {\n if (wrapper instanceof wrappers.ShadowRoot)\n wrapper = wrapper .host;\n return unwrap(wrapper);\n }\n\n EventTarget.prototype = {\n add EventListener: function(type, fun, capture) {\n if (!isValidListener(fun) | | isMutationEvent(type))\n return;\n\n var listener = new Listener(t ype, fun, capture);\n var listeners = listenersTable.get(this);\n if ( !listeners) {\n listeners = [];\n listenersTable.set(this, listene rs);\n } else {\n // Might have a duplicate.\n for (var i = 0 ; i < listeners.length; i++) {\n if (listener.equals(listeners[i]))\n return;\n }\n }\n\n listeners.push(listener);\n\n var target = getTargetToListenAt(this);\n target.addEventListener_(type, dispatchOriginalEvent, true);\n },\n removeEventListener: function(type, f un, capture) {\n capture = Boolean(capture);\n var listeners = listene rsTable.get(this);\n if (!listeners)\n return;\n var count = 0, found = false;\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i].type === type && listeners[i].capture === capture) {\n co unt++;\n if (listeners[i].handler === fun) {\n found = true; \n listeners[i].remove();\n }\n }\n }\n\n i f (found && count === 1) {\n var target = getTargetToListenAt(this);\n target.removeEventListener_(type, dispatchOriginalEvent, true);\n }\n },\n dispatchEvent: function(event) {\n // We want to use the native dispatchEvent because it triggers the default\n // actions (like checking a checkbox). However, if there are no listeners\n // in the composed tree th en there are no events that will trigger and\n // listeners in the non comp osed tree that are part of the event path are\n // not notified.\n //\ n // If we find out that there are no listeners in the composed tree we add \n // a temporary listener to the target which makes us get called back eve n\n // in that case.\n\n var nativeEvent = unwrap(event);\n var e ventType = nativeEvent.type;\n\n // Allow dispatching the same event again. This is safe because if user\n // code calls this during an existing dispa tch of the same event the\n // native dispatchEvent throws (that is require d by the spec).\n handledEventsTable.set(nativeEvent, false);\n\n // F orce rendering since we prefer native dispatch and that works on the\n // c omposed tree.\n scope.renderAllPending();\n\n var tempListener;\n if (!hasListenerInAncestors(this, eventType)) {\n tempListener = functio n() {};\n this.addEventListener(eventType, tempListener, true);\n }\ n\n try {\n return unwrap(this).dispatchEvent_(nativeEvent);\n } finally {\n if (tempListener)\n this.removeEventListener(event Type, tempListener, true);\n }\n }\n };\n\n function hasListener(node, type) {\n var listeners = listenersTable.get(node);\n if (listeners) {\n for (var i = 0; i < listeners.length; i++) {\n if (!listeners[i].rem oved && listeners[i].type === type)\n return true;\n }\n }\n return false;\n }\n\n function hasListenerInAncestors(target, type) {\n fo r (var node = unwrap(target); node; node = node.parentNode) {\n if (hasList ener(wrap(node), type))\n return true;\n }\n return false;\n }\n\n if (OriginalEventTarget)\n registerWrapper(OriginalEventTarget, EventTarget );\n\n function wrapEventTargetMethods(constructors) {\n forwardMethodsToWra pper(constructors, methodNames);\n }\n\n var originalElementFromPoint = docume nt.elementFromPoint;\n\n function elementFromPoint(self, document, x, y) {\n scope.renderAllPending();\n\n var element = wrap(originalElementFromPoint.ca ll(document.impl, x, y));\n var targets = retarget(element, this)\n for (v ar i = 0; i < targets.length; i++) {\n var target = targets[i];\n if ( target.currentTarget === self)\n return target.target;\n }\n return null;\n }\n\n /**\n * Returns a function that is to be used as a getter for `onfoo` properties.\n * @param {string} name\n * @return {Function}\n */\ n function getEventHandlerGetter(name) {\n return function() {\n var in lineEventHandlers = eventHandlersTable.get(this);\n return inlineEventHandl ers && inlineEventHandlers[name] &&\n inlineEventHandlers[name].value | | null;\n };\n }\n\n /**\n * Returns a function that is to be used as a setter for `onfoo` properties.\n * @param {string} name\n * @return {Functio n}\n */\n function getEventHandlerSetter(name) {\n var eventType = name.sl ice(2);\n return function(value) {\n var inlineEventHandlers = eventHand lersTable.get(this);\n if (!inlineEventHandlers) {\n inlineEventHand lers = Object.create(null);\n eventHandlersTable.set(this, inlineEventHan dlers);\n }\n\n var old = inlineEventHandlers[name];\n if (old)\n this.removeEventListener(eventType, old.wrapped, false);\n\n if (ty peof value === 'function') {\n var wrapped = function(e) {\n var rv = value.call(this, e);\n if (rv === false)\n e.preventDe fault();\n else if (name === 'onbeforeunload' && typeof rv === 'string' )\n e.returnValue = rv;\n // mouseover uses true for prevent Default but preventDefault for\n // mouseover is ignored by browsers th ese day.\n };\n\n this.addEventListener(eventType, wrapped, false) ;\n inlineEventHandlers[name] = {\n value: value,\n wra pped: wrapped\n };\n }\n };\n }\n\n scope.adjustRelatedTarget = adjustRelatedTarget;\n scope.elementFromPoint = elementFromPoint;\n scope.get EventHandlerGetter = getEventHandlerGetter;\n scope.getEventHandlerSetter = get EventHandlerSetter;\n scope.wrapEventTargetMethods = wrapEventTargetMethods;\n scope.wrappers.BeforeUnloadEvent = BeforeUnloadEvent;\n scope.wrappers.CustomE vent = CustomEvent;\n scope.wrappers.Event = Event;\n scope.wrappers.EventTarg et = EventTarget;\n scope.wrappers.FocusEvent = FocusEvent;\n scope.wrappers.M ouseEvent = MouseEvent;\n scope.wrappers.UIEvent = UIEvent;\n\n})(window.Shadow DOMPolyfill);\n", 106 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var forwardMethodsToWrap per = scope.forwardMethodsToWrapper;\n var mixin = scope.mixin;\n var register Wrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = sco pe.wrap;\n var wrappers = scope.wrappers;\n\n var wrappedFuns = new WeakMap(); \n var listenersTable = new WeakMap();\n var handledEventsTable = new WeakMap( );\n var currentlyDispatchingEvents = new WeakMap();\n var targetTable = new W eakMap();\n var currentTargetTable = new WeakMap();\n var relatedTargetTable = new WeakMap();\n var eventPhaseTable = new WeakMap();\n var stopPropagationTa ble = new WeakMap();\n var stopImmediatePropagationTable = new WeakMap();\n va r eventHandlersTable = new WeakMap();\n var eventPathTable = new WeakMap();\n\n function isShadowRoot(node) {\n return node instanceof wrappers.ShadowRoot; \n }\n\n function isInsertionPoint(node) {\n var localName = node.localName ;\n return localName === 'content' || localName === 'shadow';\n }\n\n funct ion isShadowHost(node) {\n return !!node.shadowRoot;\n }\n\n function getEv entParent(node) {\n var dv;\n return node.parentNode || (dv = node.default View) && wrap(dv) || null;\n }\n\n // https://dvcs.w3.org/hg/webcomponents/raw -file/tip/spec/shadow/index.html#dfn-adjusted-parent\n function calculateParent s(node, context, ancestors) {\n if (ancestors.length)\n return ancestors .shift();\n\n // 1.\n if (isShadowRoot(node))\n return getInsertionPa rent(node) || node.host;\n\n // 2.\n var eventParents = scope.eventParents Table.get(node);\n if (eventParents) {\n // Copy over the remaining even t parents for next iteration.\n for (var i = 1; i < eventParents.length; i+ +) {\n ancestors[i - 1] = eventParents[i];\n }\n return eventPa rents[0];\n }\n\n // 3.\n if (context && isInsertionPoint(node)) {\n var parentNode = node.parentNode;\n if (parentNode && isShadowHost(paren tNode)) {\n var trees = scope.getShadowTrees(parentNode);\n var p = getInsertionParent(context);\n for (var i = 0; i < trees.length; i++) { \n if (trees[i].contains(p))\n return p;\n }\n } \n }\n\n return getEventParent(node);\n }\n\n // https://dvcs.w3.org/hg/ webcomponents/raw-file/tip/spec/shadow/index.html#event-retargeting\n function retarget(node) {\n var stack = []; // 1.\n var ancestor = node; // 2.\n var targets = [];\n var ancestors = [];\n while (ancestor) { // 3.\n var context = null; // 3.2.\n // TODO(arv): Change order of these. If the stack is empty we always end\n // up pushing ancestor, no matter what.\ n if (isInsertionPoint(ancestor)) { // 3.1.\n context = topMostNotI nsertionPoint(stack); // 3.1.1.\n var top = stack[stack.length - 1] || a ncestor; // 3.1.2.\n stack.push(top);\n } else if (!stack.length) { \n stack.push(ancestor); // 3.3.\n }\n var target = stack[stac k.length - 1]; // 3.4.\n targets.push({target: target, currentTarget: ance stor}); // 3.5.\n if (isShadowRoot(ancestor)) // 3.6.\n stack.pop( ); // 3.6.1.\n\n ancestor = calculateParents(ancestor, context, ancestors) ; // 3.7.\n }\n return targets;\n }\n\n function topMostNotInsertionPoi nt(stack) {\n for (var i = stack.length - 1; i >= 0; i--) {\n if (!isIns ertionPoint(stack[i]))\n return stack[i];\n }\n return null;\n }\n \n // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html# dfn-adjusted-related-target\n function adjustRelatedTarget(target, related) {\n var ancestors = [];\n while (target) { // 3.\n var stack = []; // 3.1.\n var ancestor = related; // 3.2.\n var last = undefined; // 3. 3. Needs to be reset every iteration.\n while (ancestor) {\n var con text = null;\n if (!stack.length) {\n stack.push(ancestor);\n } else {\n if (isInsertionPoint(ancestor)) { // 3.4.3.\n context = topMostNotInsertionPoint(stack);\n // isDistributed is m ore general than checking whether last is\n // assigned into ancestor .\n if (isDistributed(last)) { // 3.4.3.2.\n var head = stack[stack.length - 1];\n stack.push(head);\n }\n }\n }\n\n if (inSameTree(ancestor, target)) // 3.4.4.\n return stack[stack.length - 1];\n\n if (isShadowRoot(ancestor)) // 3.4.5.\n stack.pop();\n\n last = ancestor; // 3.4.6.\n a ncestor = calculateParents(ancestor, context, ancestors); // 3.4.7.\n }\n if (isShadowRoot(target)) // 3.5.\n target = target.host;\n el se\n target = target.parentNode; // 3.6.\n }\n }\n\n function getIn sertionParent(node) {\n return scope.insertionParentTable.get(node);\n }\n\n function isDistributed(node) {\n return getInsertionParent(node);\n }\n\n function rootOfNode(node) {\n var p;\n while (p = node.parentNode) {\n node = p;\n }\n return node;\n }\n\n function inSameTree(a, b) {\n return rootOfNode(a) === rootOfNode(b);\n }\n\n function enclosedBy(a, b) {\n if (a === b)\n return true;\n if (a instanceof wrappers.ShadowRoot)\ n return enclosedBy(rootOfNode(a.host), b);\n return false;\n }\n\n\n function dispatchOriginalEvent(originalEvent) {\n // Make sure this event is only dispatched once.\n if (handledEventsTable.get(originalEvent))\n ret urn;\n handledEventsTable.set(originalEvent, true);\n\n return dispatchEve nt(wrap(originalEvent), wrap(originalEvent.target));\n }\n\n function dispatch Event(event, originalWrapperTarget) {\n if (currentlyDispatchingEvents.get(ev ent))\n throw new Error('InvalidStateError')\n currentlyDispatchingEvent s.set(event, true);\n\n // Render to ensure that the event path is correct.\n scope.renderAllPending();\n var eventPath = retarget(originalWrapperTarge t);\n\n // For window load events the load event is dispatched at the window but\n // the target is set to the document.\n //\n // http://www.whatwg .org/specs/web-apps/current-work/multipage/the-end.html#the-end\n //\n // TODO(arv): Find a less hacky way to do this.\n if (event.type === 'load' &&\n eventPath.length === 2 &&\n eventPath[0].target instanceof wrappe rs.Document) {\n eventPath.shift();\n }\n\n eventPathTable.set(event, eventPath);\n\n if (dispatchCapturing(event, eventPath)) {\n if (dispat chAtTarget(event, eventPath)) {\n dispatchBubbling(event, eventPath);\n }\n }\n\n eventPhaseTable.set(event, Event.NONE);\n currentTargetTa ble.delete(event, null);\n currentlyDispatchingEvents.delete(event);\n\n r eturn event.defaultPrevented;\n }\n\n function dispatchCapturing(event, eventP ath) {\n var phase;\n\n for (var i = eventPath.length - 1; i > 0; i--) {\n var target = eventPath[i].target;\n var currentTarget = eventPath[i]. currentTarget;\n if (target === currentTarget)\n continue;\n\n phase = Event.CAPTURING_PHASE;\n if (!invoke(eventPath[i], event, phase))\n return false;\n }\n\n return true;\n }\n\n function dispatchAtTa rget(event, eventPath) {\n var phase = Event.AT_TARGET;\n return invoke(ev entPath[0], event, phase);\n }\n\n function dispatchBubbling(event, eventPath) {\n var bubbles = event.bubbles;\n var phase;\n\n for (var i = 1; i < eventPath.length; i++) {\n var target = eventPath[i].target;\n var cur rentTarget = eventPath[i].currentTarget;\n if (target === currentTarget)\n phase = Event.AT_TARGET;\n else if (bubbles && !stopImmediatePropaga tionTable.get(event))\n phase = Event.BUBBLING_PHASE;\n else\n continue;\n\n if (!invoke(eventPath[i], event, phase))\n return;\n }\n }\n\n function invoke(tuple, event, phase) {\n var target = tuple.t arget;\n var currentTarget = tuple.currentTarget;\n\n var listeners = list enersTable.get(currentTarget);\n if (!listeners)\n return true;\n\n i f ('relatedTarget' in event) {\n var originalEvent = unwrap(event);\n // X-Tag sets relatedTarget on a CustomEvent. If they do that there is no\n // way to have relatedTarget return the adjusted target but worse is that\n // the originalEvent might not have a relatedTarget so we hit an assert\n // when we try to wrap it.\n if (originalEvent.relatedTarget) {\n v ar relatedTarget = wrap(originalEvent.relatedTarget);\n\n var adjusted = adjustRelatedTarget(currentTarget, relatedTarget);\n if (adjusted === tar get)\n return true;\n\n relatedTargetTable.set(event, adjusted); \n }\n }\n\n eventPhaseTable.set(event, phase);\n var type = event .type;\n\n var anyRemoved = false;\n targetTable.set(event, target);\n currentTargetTable.set(event, currentTarget);\n\n for (var i = 0; i < listene rs.length; i++) {\n var listener = listeners[i];\n if (listener.remove d) {\n anyRemoved = true;\n continue;\n }\n\n if (listen er.type !== type ||\n !listener.capture && phase === Event.CAPTURING_PH ASE ||\n listener.capture && phase === Event.BUBBLING_PHASE) {\n continue;\n }\n\n try {\n if (typeof listener.handler === 'fun ction')\n listener.handler.call(currentTarget, event);\n else\n listener.handler.handleEvent(event);\n\n if (stopImmediatePropag ationTable.get(event))\n return false;\n\n } catch (ex) {\n if (window.onerror)\n window.onerror(ex.message);\n else\n console.error(ex, ex.stack);\n }\n }\n\n if (anyRemoved) {\n var copy = listeners.slice();\n listeners.length = 0;\n for (var i = 0; i < copy.length; i++) {\n if (!copy[i].removed)\n listeners. push(copy[i]);\n }\n }\n\n return !stopPropagationTable.get(event);\n }\n\n function Listener(type, handler, capture) {\n this.type = type;\n this.handler = handler;\n this.capture = Boolean(capture);\n }\n Listener. prototype = {\n equals: function(that) {\n return this.handler === that. handler && this.type === that.type &&\n this.capture === that.capture;\ n },\n get removed() {\n return this.handler === null;\n },\n r emove: function() {\n this.handler = null;\n }\n };\n\n var OriginalEv ent = window.Event;\n OriginalEvent.prototype.polymerBlackList_ = {\n return Value: true,\n // TODO(arv): keyLocation is part of KeyboardEvent but Firefox does not\n // support constructable KeyboardEvent so we keep it here for now .\n keyLocation: true\n };\n\n /**\n * Creates a new Event wrapper or wra ps an existin native Event object.\n * @param {string|Event} type\n * @param {Object=} options\n * @constructor\n */\n function Event(type, options) {\ n if (type instanceof OriginalEvent)\n this.impl = type;\n else\n return wrap(constructEvent(OriginalEvent, 'Event', type, options));\n }\n Ev ent.prototype = {\n get target() {\n return targetTable.get(this);\n },\n get currentTarget() {\n return currentTargetTable.get(this);\n } ,\n get eventPhase() {\n return eventPhaseTable.get(this);\n },\n get path() {\n var nodeList = new wrappers.NodeList();\n var eventPath = eventPathTable.get(this);\n if (eventPath) {\n var index = 0;\n var lastIndex = eventPath.length - 1;\n var baseRoot = rootOfNode(c urrentTargetTable.get(this));\n\n for (var i = 0; i <= lastIndex; i++) {\ n var currentTarget = eventPath[i].currentTarget;\n var curren tRoot = rootOfNode(currentTarget);\n if (enclosedBy(baseRoot, currentRo ot) &&\n // Make sure we do not add Window to the path.\n (i !== lastIndex || currentTarget instanceof wrappers.Node)) {\n nodeList[index++] = currentTarget;\n }\n }\n nodeList.len gth = index;\n }\n return nodeList;\n },\n stopPropagation: func tion() {\n stopPropagationTable.set(this, true);\n },\n stopImmediate Propagation: function() {\n stopPropagationTable.set(this, true);\n st opImmediatePropagationTable.set(this, true);\n }\n };\n registerWrapper(Ori ginalEvent, Event, document.createEvent('Event'));\n\n function unwrapOptions(o ptions) {\n if (!options || !options.relatedTarget)\n return options;\n return Object.create(options, {\n relatedTarget: {value: unwrap(options. relatedTarget)}\n });\n }\n\n function registerGenericEvent(name, SuperEven t, prototype) {\n var OriginalEvent = window[name];\n var GenericEvent = f unction(type, options) {\n if (type instanceof OriginalEvent)\n this .impl = type;\n else\n return wrap(constructEvent(OriginalEvent, nam e, type, options));\n };\n GenericEvent.prototype = Object.create(SuperEve nt.prototype);\n if (prototype)\n mixin(GenericEvent.prototype, prototyp e);\n if (OriginalEvent) {\n // - Old versions of Safari fails on new Fo cusEvent (and others?).\n // - IE does not support event constructors.\n // - createEvent('FocusEvent') throws in Firefox.\n // => Try the best p ractice solution first and fallback to the old way\n // if needed.\n t ry {\n registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent('te mp'));\n } catch (ex) {\n registerWrapper(OriginalEvent, GenericEven t,\n document.createEvent(name));\n }\n }\n re turn GenericEvent;\n }\n\n var UIEvent = registerGenericEvent('UIEvent', Event );\n var CustomEvent = registerGenericEvent('CustomEvent', Event);\n\n var rel atedTargetProto = {\n get relatedTarget() {\n return relatedTargetTable. get(this) || wrap(unwrap(this).relatedTarget);\n }\n };\n\n function getIni tFunction(name, relatedTargetIndex) {\n return function() {\n arguments[ relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);\n var impl = u nwrap(this);\n impl[name].apply(impl, arguments);\n };\n }\n\n var mou seEventProto = mixin({\n initMouseEvent: getInitFunction('initMouseEvent', 14 )\n }, relatedTargetProto);\n\n var focusEventProto = mixin({\n initFocusEv ent: getInitFunction('initFocusEvent', 5)\n }, relatedTargetProto);\n\n var Mo useEvent = registerGenericEvent('MouseEvent', UIEvent, mouseEventProto);\n var FocusEvent = registerGenericEvent('FocusEvent', UIEvent, focusEventProto);\n\n // In case the browser does not support event constructors we polyfill that\n / / by calling `createEvent('Foo')` and `initFooEvent` where the arguments to\n / / `initFooEvent` are derived from the registered default event init dict.\n var defaultInitDicts = Object.create(null);\n\n var supportsEventConstructors = (f unction() {\n try {\n new window.FocusEvent('focus');\n } catch (ex) {\n return false;\n }\n return true;\n })();\n\n /**\n * Construc ts a new native event.\n */\n function constructEvent(OriginalEvent, name, ty pe, options) {\n if (supportsEventConstructors)\n return new OriginalEve nt(type, unwrapOptions(options));\n\n // Create the arguments from the defaul t dictionary.\n var event = unwrap(document.createEvent(name));\n var defa ultDict = defaultInitDicts[name];\n var args = [type];\n Object.keys(defau ltDict).forEach(function(key) {\n var v = options != null && key in options ?\n options[key] : defaultDict[key];\n if (key === 'relatedTarget ')\n v = unwrap(v);\n args.push(v);\n });\n event['init' + nam e].apply(event, args);\n return event;\n }\n\n if (!supportsEventConstructo rs) {\n var configureEventConstructor = function(name, initDict, superName) { \n if (superName) {\n var superDict = defaultInitDicts[superName];\n initDict = mixin(mixin({}, superDict), initDict);\n }\n\n defa ultInitDicts[name] = initDict;\n };\n\n // The order of the default event init dictionary keys is important, the\n // arguments to initFooEvent is deri ved from that.\n configureEventConstructor('Event', {bubbles: false, cancelab le: false});\n configureEventConstructor('CustomEvent', {detail: null}, 'Even t');\n configureEventConstructor('UIEvent', {view: null, detail: 0}, 'Event') ;\n configureEventConstructor('MouseEvent', {\n screenX: 0,\n scree nY: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n altKe y: false,\n shiftKey: false,\n metaKey: false,\n button: 0,\n relatedTarget: null\n }, 'UIEvent');\n configureEventConstructor('FocusE vent', {relatedTarget: null}, 'UIEvent');\n }\n\n function BeforeUnloadEvent(i mpl) {\n Event.call(this);\n }\n BeforeUnloadEvent.prototype = Object.creat e(Event.prototype);\n mixin(BeforeUnloadEvent.prototype, {\n get returnValue () {\n return this.impl.returnValue;\n },\n set returnValue(v) {\n this.impl.returnValue = v;\n }\n });\n\n function isValidListener(fun) { \n if (typeof fun === 'function')\n return true;\n return fun && fun. handleEvent;\n }\n\n function isMutationEvent(type) {\n switch (type) {\n case 'DOMAttrModified':\n case 'DOMAttributeNameChanged':\n case ' DOMCharacterDataModified':\n case 'DOMElementNameChanged':\n case 'DOM NodeInserted':\n case 'DOMNodeInsertedIntoDocument':\n case 'DOMNodeRe moved':\n case 'DOMNodeRemovedFromDocument':\n case 'DOMSubtreeModifie d':\n return true;\n }\n return false;\n }\n\n var OriginalEventT arget = window.EventTarget;\n\n /**\n * This represents a wrapper for an Even tTarget.\n * @param {!EventTarget} impl The original event target.\n * @cons tructor\n */\n function EventTarget(impl) {\n this.impl = impl;\n }\n\n // Node and Window have different internal type checks in WebKit so we cannot\n // use the same method as the original function.\n var methodNames = [\n 'a ddEventListener',\n 'removeEventListener',\n 'dispatchEvent'\n ];\n\n [N ode, Window].forEach(function(constructor) {\n var p = constructor.prototype; \n methodNames.forEach(function(name) {\n Object.defineProperty(p, name + '_', {value: p[name]});\n });\n });\n\n function getTargetToListenAt(wrap per) {\n if (wrapper instanceof wrappers.ShadowRoot)\n wrapper = wrapper .host;\n return unwrap(wrapper);\n }\n\n EventTarget.prototype = {\n add EventListener: function(type, fun, capture) {\n if (!isValidListener(fun) | | isMutationEvent(type))\n return;\n\n var listener = new Listener(t ype, fun, capture);\n var listeners = listenersTable.get(this);\n if ( !listeners) {\n listeners = [];\n listenersTable.set(this, listene rs);\n } else {\n // Might have a duplicate.\n for (var i = 0 ; i < listeners.length; i++) {\n if (listener.equals(listeners[i]))\n return;\n }\n }\n\n listeners.push(listener);\n\n var target = getTargetToListenAt(this);\n target.addEventListener_(type, dispatchOriginalEvent, true);\n },\n removeEventListener: function(type, f un, capture) {\n capture = Boolean(capture);\n var listeners = listene rsTable.get(this);\n if (!listeners)\n return;\n var count = 0, found = false;\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i].type === type && listeners[i].capture === capture) {\n co unt++;\n if (listeners[i].handler === fun) {\n found = true; \n listeners[i].remove();\n }\n }\n }\n\n i f (found && count === 1) {\n var target = getTargetToListenAt(this);\n target.removeEventListener_(type, dispatchOriginalEvent, true);\n }\n },\n dispatchEvent: function(event) {\n // We want to use the native dispatchEvent because it triggers the default\n // actions (like checking a checkbox). However, if there are no listeners\n // in the composed tree th en there are no events that will trigger and\n // listeners in the non comp osed tree that are part of the event path are\n // not notified.\n //\ n // If we find out that there are no listeners in the composed tree we add \n // a temporary listener to the target which makes us get called back eve n\n // in that case.\n\n var nativeEvent = unwrap(event);\n var e ventType = nativeEvent.type;\n\n // Allow dispatching the same event again. This is safe because if user\n // code calls this during an existing dispa tch of the same event the\n // native dispatchEvent throws (that is require d by the spec).\n handledEventsTable.set(nativeEvent, false);\n\n // F orce rendering since we prefer native dispatch and that works on the\n // c omposed tree.\n scope.renderAllPending();\n\n var tempListener;\n if (!hasListenerInAncestors(this, eventType)) {\n tempListener = functio n() {};\n this.addEventListener(eventType, tempListener, true);\n }\ n\n try {\n return unwrap(this).dispatchEvent_(nativeEvent);\n } finally {\n if (tempListener)\n this.removeEventListener(event Type, tempListener, true);\n }\n }\n };\n\n function hasListener(node, type) {\n var listeners = listenersTable.get(node);\n if (listeners) {\n for (var i = 0; i < listeners.length; i++) {\n if (!listeners[i].rem oved && listeners[i].type === type)\n return true;\n }\n }\n return false;\n }\n\n function hasListenerInAncestors(target, type) {\n fo r (var node = unwrap(target); node; node = node.parentNode) {\n if (hasList ener(wrap(node), type))\n return true;\n }\n return false;\n }\n\n if (OriginalEventTarget)\n registerWrapper(OriginalEventTarget, EventTarget );\n\n function wrapEventTargetMethods(constructors) {\n forwardMethodsToWra pper(constructors, methodNames);\n }\n\n var originalElementFromPoint = docume nt.elementFromPoint;\n\n function elementFromPoint(self, document, x, y) {\n scope.renderAllPending();\n\n var element = wrap(originalElementFromPoint.ca ll(document.impl, x, y));\n var targets = retarget(element, this)\n for (v ar i = 0; i < targets.length; i++) {\n var target = targets[i];\n if ( target.currentTarget === self)\n return target.target;\n }\n return null;\n }\n\n /**\n * Returns a function that is to be used as a getter for `onfoo` properties.\n * @param {string} name\n * @return {Function}\n */\ n function getEventHandlerGetter(name) {\n return function() {\n var in lineEventHandlers = eventHandlersTable.get(this);\n return inlineEventHandl ers && inlineEventHandlers[name] &&\n inlineEventHandlers[name].value | | null;\n };\n }\n\n /**\n * Returns a function that is to be used as a setter for `onfoo` properties.\n * @param {string} name\n * @return {Functio n}\n */\n function getEventHandlerSetter(name) {\n var eventType = name.sl ice(2);\n return function(value) {\n var inlineEventHandlers = eventHand lersTable.get(this);\n if (!inlineEventHandlers) {\n inlineEventHand lers = Object.create(null);\n eventHandlersTable.set(this, inlineEventHan dlers);\n }\n\n var old = inlineEventHandlers[name];\n if (old)\n this.removeEventListener(eventType, old.wrapped, false);\n\n if (ty peof value === 'function') {\n var wrapped = function(e) {\n var rv = value.call(this, e);\n if (rv === false)\n e.preventDe fault();\n else if (name === 'onbeforeunload' && typeof rv === 'string' )\n e.returnValue = rv;\n // mouseover uses true for prevent Default but preventDefault for\n // mouseover is ignored by browsers th ese day.\n };\n\n this.addEventListener(eventType, wrapped, false) ;\n inlineEventHandlers[name] = {\n value: value,\n wra pped: wrapped\n };\n }\n };\n }\n\n scope.adjustRelatedTarget = adjustRelatedTarget;\n scope.elementFromPoint = elementFromPoint;\n scope.get EventHandlerGetter = getEventHandlerGetter;\n scope.getEventHandlerSetter = get EventHandlerSetter;\n scope.wrapEventTargetMethods = wrapEventTargetMethods;\n scope.wrappers.BeforeUnloadEvent = BeforeUnloadEvent;\n scope.wrappers.CustomE vent = CustomEvent;\n scope.wrappers.Event = Event;\n scope.wrappers.EventTarg et = EventTarget;\n scope.wrappers.FocusEvent = FocusEvent;\n scope.wrappers.M ouseEvent = MouseEvent;\n scope.wrappers.UIEvent = UIEvent;\n\n})(window.Shadow DOMPolyfill);\n",
107 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var wrap = scope.wrap;\n \n function nonEnum(obj, prop) {\n Object.defineProperty(obj, prop, {enumera ble: false});\n }\n\n function NodeList() {\n this.length = 0;\n nonEnum (this, 'length');\n }\n NodeList.prototype = {\n item: function(index) {\n return this[index];\n }\n };\n nonEnum(NodeList.prototype, 'item');\n\ n function wrapNodeList(list) {\n if (list == null)\n return list;\n var wrapperList = new NodeList();\n for (var i = 0, length = list.length; i < length; i++) {\n wrapperList[i] = wrap(list[i]);\n }\n wrapperList. length = length;\n return wrapperList;\n }\n\n function addWrapNodeListMeth od(wrapperConstructor, name) {\n wrapperConstructor.prototype[name] = functio n() {\n return wrapNodeList(this.impl[name].apply(this.impl, arguments));\n };\n }\n\n scope.wrappers.NodeList = NodeList;\n scope.addWrapNodeListMet hod = addWrapNodeListMethod;\n scope.wrapNodeList = wrapNodeList;\n\n})(window. ShadowDOMPolyfill);\n", 107 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var wrap = scope.wrap;\n \n function nonEnum(obj, prop) {\n Object.defineProperty(obj, prop, {enumera ble: false});\n }\n\n function NodeList() {\n this.length = 0;\n nonEnum (this, 'length');\n }\n NodeList.prototype = {\n item: function(index) {\n return this[index];\n }\n };\n nonEnum(NodeList.prototype, 'item');\n\ n function wrapNodeList(list) {\n if (list == null)\n return list;\n var wrapperList = new NodeList();\n for (var i = 0, length = list.length; i < length; i++) {\n wrapperList[i] = wrap(list[i]);\n }\n wrapperList. length = length;\n return wrapperList;\n }\n\n function addWrapNodeListMeth od(wrapperConstructor, name) {\n wrapperConstructor.prototype[name] = functio n() {\n return wrapNodeList(this.impl[name].apply(this.impl, arguments));\n };\n }\n\n scope.wrappers.NodeList = NodeList;\n scope.addWrapNodeListMet hod = addWrapNodeListMethod;\n scope.wrapNodeList = wrapNodeList;\n\n})(window. ShadowDOMPolyfill);\n",
108 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope. wrappers.EventTarget;\n var NodeList = scope.wrappers.NodeList;\n var assert = scope.assert;\n var defineWrapGetter = scope.defineWrapGetter;\n var enqueueM utation = scope.enqueueMutation;\n var isWrapper = scope.isWrapper;\n var mixi n = scope.mixin;\n var registerTransientObservers = scope.registerTransientObse rvers;\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unw rap;\n var wrap = scope.wrap;\n var wrapIfNeeded = scope.wrapIfNeeded;\n var wrappers = scope.wrappers;\n\n function assertIsNodeWrapper(node) {\n assert (node instanceof Node);\n }\n\n function createOneElementNodeList(node) {\n var nodes = new NodeList();\n nodes[0] = node;\n nodes.length = 1;\n r eturn nodes;\n }\n\n var surpressMutations = false;\n\n /**\n * Called befo re node is inserted into a node to enqueue its removal from its\n * old parent .\n * @param {!Node} node The node that is about to be removed.\n * @param { !Node} parent The parent node that the node is being removed from.\n * @param {!NodeList} nodes The collected nodes.\n */\n function enqueueRemovalForInser tedNodes(node, parent, nodes) {\n enqueueMutation(parent, 'childList', {\n removedNodes: nodes,\n previousSibling: node.previousSibling,\n nex tSibling: node.nextSibling\n });\n }\n\n function enqueueRemovalForInserted DocumentFragment(df, nodes) {\n enqueueMutation(df, 'childList', {\n rem ovedNodes: nodes\n });\n }\n\n /**\n * Collects nodes from a DocumentFrag ment or a Node for removal followed\n * by an insertion.\n *\n * This upda tes the internal pointers for node, previousNode and nextNode.\n */\n functio n collectNodes(node, parentNode, previousNode, nextNode) {\n if (node instanc eof DocumentFragment) {\n var nodes = collectNodesForDocumentFragment(node) ;\n\n // The extra loop is to work around bugs with DocumentFragments in IE .\n surpressMutations = true;\n for (var i = nodes.length - 1; i >= 0; i--) {\n node.removeChild(nodes[i]);\n nodes[i].parentNode_ = par entNode;\n }\n surpressMutations = false;\n\n for (var i = 0; i < nodes.length; i++) {\n nodes[i].previousSibling_ = nodes[i - 1] || previ ousNode;\n nodes[i].nextSibling_ = nodes[i + 1] || nextNode;\n }\n\n if (previousNode)\n previousNode.nextSibling_ = nodes[0];\n if (nextNode)\n nextNode.previousSibling_ = nodes[nodes.length - 1];\n\n return nodes;\n }\n\n var nodes = createOneElementNodeList(node);\n var oldParent = node.parentNode;\n if (oldParent) {\n // This will enque ue the mutation record for the removal as needed.\n oldParent.removeChild(n ode);\n }\n\n node.parentNode_ = parentNode;\n node.previousSibling_ = previousNode;\n node.nextSibling_ = nextNode;\n if (previousNode)\n p reviousNode.nextSibling_ = node;\n if (nextNode)\n nextNode.previousSibl ing_ = node;\n\n return nodes;\n }\n\n function collectNodesNative(node) {\ n if (node instanceof DocumentFragment)\n return collectNodesForDocument Fragment(node);\n\n var nodes = createOneElementNodeList(node);\n var oldP arent = node.parentNode;\n if (oldParent)\n enqueueRemovalForInsertedNod es(node, oldParent, nodes);\n return nodes;\n }\n\n function collectNodesFo rDocumentFragment(node) {\n var nodes = new NodeList();\n var i = 0;\n for (var child = node.firstChild; child; child = child.nextSibling) {\n nod es[i++] = child;\n }\n nodes.length = i;\n enqueueRemovalForInsertedDoc umentFragment(node, nodes);\n return nodes;\n }\n\n function snapshotNodeLi st(nodeList) {\n // NodeLists are not live at the moment so just return the s ame object.\n return nodeList;\n }\n\n // http://dom.spec.whatwg.org/#node- is-inserted\n function nodeWasAdded(node) {\n node.nodeIsInserted_();\n }\n \n function nodesWereAdded(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n nodeWasAdded(nodes[i]);\n }\n }\n\n // http://dom.spec.whatwg.org /#node-is-removed\n function nodeWasRemoved(node) {\n // Nothing at this poi nt in time.\n }\n\n function nodesWereRemoved(nodes) {\n // Nothing at this point in time.\n }\n\n function ensureSameOwnerDocument(parent, child) {\n var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?\n parent : paren t.ownerDocument;\n if (ownerDoc !== child.ownerDocument)\n ownerDoc.adop tNode(child);\n }\n\n function adoptNodesIfNeeded(owner, nodes) {\n if (!no des.length)\n return;\n\n var ownerDoc = owner.ownerDocument;\n\n // All nodes have the same ownerDocument when we get here.\n if (ownerDoc === no des[0].ownerDocument)\n return;\n\n for (var i = 0; i < nodes.length; i+ +) {\n scope.adoptNodeNoRemove(nodes[i], ownerDoc);\n }\n }\n\n functi on unwrapNodesForInsertion(owner, nodes) {\n adoptNodesIfNeeded(owner, nodes) ;\n var length = nodes.length;\n\n if (length === 1)\n return unwrap( nodes[0]);\n\n var df = unwrap(owner.ownerDocument.createDocumentFragment()); \n for (var i = 0; i < length; i++) {\n df.appendChild(unwrap(nodes[i])) ;\n }\n return df;\n }\n\n function clearChildNodes(wrapper) {\n if ( wrapper.firstChild_ !== undefined) {\n var child = wrapper.firstChild_;\n while (child) {\n var tmp = child;\n child = child.nextSibling _;\n tmp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefine d;\n }\n }\n wrapper.firstChild_ = wrapper.lastChild_ = undefined;\n }\n\n function removeAllChildNodes(wrapper) {\n if (wrapper.invalidateShado wRenderer()) {\n var childWrapper = wrapper.firstChild;\n while (child Wrapper) {\n assert(childWrapper.parentNode === wrapper);\n var ne xtSibling = childWrapper.nextSibling;\n var childNode = unwrap(childWrapp er);\n var parentNode = childNode.parentNode;\n if (parentNode)\n originalRemoveChild.call(parentNode, childNode);\n childWrapper. previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentN ode_ = null;\n childWrapper = nextSibling;\n }\n wrapper.firstC hild_ = wrapper.lastChild_ = null;\n } else {\n var node = unwrap(wrappe r);\n var child = node.firstChild;\n var nextSibling;\n while (ch ild) {\n nextSibling = child.nextSibling;\n originalRemoveChild.ca ll(node, child);\n child = nextSibling;\n }\n }\n }\n\n functio n invalidateParent(node) {\n var p = node.parentNode;\n return p && p.inva lidateShadowRenderer();\n }\n\n function cleanupNodes(nodes) {\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n n.parentNode.remov eChild(n);\n }\n }\n\n var originalImportNode = document.importNode;\n var originalCloneNode = window.Node.prototype.cloneNode;\n\n function cloneNode(no de, deep, opt_doc) {\n var clone;\n if (opt_doc)\n clone = wrap(origi nalImportNode.call(opt_doc, node.impl, false));\n else\n clone = wrap(or iginalCloneNode.call(node.impl, false));\n\n if (deep) {\n for (var chil d = node.firstChild; child; child = child.nextSibling) {\n clone.appendCh ild(cloneNode(child, true, opt_doc));\n }\n\n if (node instanceof wrap pers.HTMLTemplateElement) {\n var cloneContent = clone.content;\n for (var child = node.content.firstChild;\n child;\n chi ld = child.nextSibling) {\n cloneContent.appendChild(cloneNode(child, tr ue, opt_doc));\n }\n }\n }\n // TODO(arv): Some HTML elements also clone other data like value.\n return clone;\n }\n\n var OriginalNode = window.Node;\n\n /**\n * This represents a wrapper of a native DOM node.\n * @param {!Node} original The original DOM node, aka, the visual DOM node.\n * @constructor\n * @extends {EventTarget}\n */\n function Node(original) { \n assert(original instanceof OriginalNode);\n\n EventTarget.call(this, or iginal);\n\n // These properties are used to override the visual references w ith the\n // logical ones. If the value is undefined it means that the logica l is the\n // same as the visual.\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.parentNode_ = undefined;\n\n /**\n * @ type {Node|undefined}\n * @private\n */\n this.firstChild_ = undefine d;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this .lastChild_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @priv ate\n */\n this.nextSibling_ = undefined;\n\n /**\n * @type {Node| undefined}\n * @private\n */\n this.previousSibling_ = undefined;\n }\n\n var OriginalDocumentFragment = window.DocumentFragment;\n var originalAp pendChild = OriginalNode.prototype.appendChild;\n var originalCompareDocumentPo sition =\n OriginalNode.prototype.compareDocumentPosition;\n var originalI nsertBefore = OriginalNode.prototype.insertBefore;\n var originalRemoveChild = OriginalNode.prototype.removeChild;\n var originalReplaceChild = OriginalNode.p rototype.replaceChild;\n\n var isIe = /Trident/.test(navigator.userAgent);\n\n var removeChildOriginalHelper = isIe ?\n function(parent, child) {\n try {\n originalRemoveChild.call(parent, child);\n } catch (ex ) {\n if (!(parent instanceof OriginalDocumentFragment))\n t hrow ex;\n }\n } :\n function(parent, child) {\n origina lRemoveChild.call(parent, child);\n };\n\n Node.prototype = Object.create( EventTarget.prototype);\n mixin(Node.prototype, {\n appendChild: function(ch ildWrapper) {\n return this.insertBefore(childWrapper, null);\n },\n\n insertBefore: function(childWrapper, refWrapper) {\n assertIsNodeWrapper( childWrapper);\n\n var refNode;\n if (refWrapper) {\n if (isWra pper(refWrapper)) {\n refNode = unwrap(refWrapper);\n } else {\n refNode = refWrapper;\n refWrapper = wrap(refNode);\n }\n } else {\n refWrapper = null;\n refNode = null;\n }\ n\n refWrapper && assert(refWrapper.parentNode === this);\n\n var node s;\n var previousNode =\n refWrapper ? refWrapper.previousSibling : this.lastChild;\n\n var useNative = !this.invalidateShadowRenderer() &&\n !invalidateParent(childWrapper);\n\n if (useNative)\n nodes = collectNodesNative(childWrapper);\n else\n nodes = c ollectNodes(childWrapper, this, previousNode, refWrapper);\n\n if (useNativ e) {\n ensureSameOwnerDocument(this, childWrapper);\n clearChildNo des(this);\n originalInsertBefore.call(this.impl, unwrap(childWrapper), r efNode);\n } else {\n if (!previousNode)\n this.firstChild_ = nodes[0];\n if (!refWrapper)\n this.lastChild_ = nodes[nodes. length - 1];\n\n var parentNode = refNode ? refNode.parentNode : this.imp l;\n\n // insertBefore refWrapper no matter what the parent is?\n if (parentNode) {\n originalInsertBefore.call(parentNode,\n unwrapNodesForInsertion(this, nodes), refNode);\n } else {\n a doptNodesIfNeeded(this, nodes);\n }\n }\n\n enqueueMutation(thi s, 'childList', {\n addedNodes: nodes,\n nextSibling: refWrapper,\ n previousSibling: previousNode\n });\n\n nodesWereAdded(nodes) ;\n\n return childWrapper;\n },\n\n removeChild: function(childWrappe r) {\n assertIsNodeWrapper(childWrapper);\n if (childWrapper.parentNod e !== this) {\n // IE has invalid DOM trees at times.\n var found = false;\n var childNodes = this.childNodes;\n for (var ieChild = this.firstChild; ieChild;\n ieChild = ieChild.nextSibling) {\n if (ieChild === childWrapper) {\n found = true;\n brea k;\n }\n }\n if (!found) {\n // TODO(arv): DOMEx ception\n throw new Error('NotFoundError');\n }\n }\n\n var childNode = unwrap(childWrapper);\n var childWrapperNextSibling = chi ldWrapper.nextSibling;\n var childWrapperPreviousSibling = childWrapper.pre viousSibling;\n\n if (this.invalidateShadowRenderer()) {\n // We nee d to remove the real node from the DOM before updating the\n // pointers. This is so that that mutation event is dispatched before\n // the pointe rs have changed.\n var thisFirstChild = this.firstChild;\n var thi sLastChild = this.lastChild;\n\n var parentNode = childNode.parentNode;\n if (parentNode)\n removeChildOriginalHelper(parentNode, childNo de);\n\n if (thisFirstChild === childWrapper)\n this.firstChild_ = childWrapperNextSibling;\n if (thisLastChild === childWrapper)\n this.lastChild_ = childWrapperPreviousSibling;\n if (childWrapperPrev iousSibling)\n childWrapperPreviousSibling.nextSibling_ = childWrapperN extSibling;\n if (childWrapperNextSibling) {\n childWrapperNextS ibling.previousSibling_ =\n childWrapperPreviousSibling;\n } \n\n childWrapper.previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentNode_ = undefined;\n } else {\n clearChildNo des(this);\n removeChildOriginalHelper(this.impl, childNode);\n }\n\ n if (!surpressMutations) {\n enqueueMutation(this, 'childList', {\n removedNodes: createOneElementNodeList(childWrapper),\n nextS ibling: childWrapperNextSibling,\n previousSibling: childWrapperPreviou sSibling\n });\n }\n\n registerTransientObservers(this, childWr apper);\n\n return childWrapper;\n },\n\n replaceChild: function(newC hildWrapper, oldChildWrapper) {\n assertIsNodeWrapper(newChildWrapper);\n\n var oldChildNode;\n if (isWrapper(oldChildWrapper)) {\n oldChi ldNode = unwrap(oldChildWrapper);\n } else {\n oldChildNode = oldChi ldWrapper;\n oldChildWrapper = wrap(oldChildNode);\n }\n\n if ( oldChildWrapper.parentNode !== this) {\n // TODO(arv): DOMException\n throw new Error('NotFoundError');\n }\n\n var nextNode = oldChildW rapper.nextSibling;\n var previousNode = oldChildWrapper.previousSibling;\n var nodes;\n\n var useNative = !this.invalidateShadowRenderer() &&\n !invalidateParent(newChildWrapper);\n\n if (useNative) {\n nodes = collectNodesNative(newChildWrapper);\n } else {\n if (nextNode === newChildWrapper)\n nextNode = newChildWrapper.nextSi bling;\n nodes = collectNodes(newChildWrapper, this, previousNode, nextNo de);\n }\n\n if (!useNative) {\n if (this.firstChild === oldChi ldWrapper)\n this.firstChild_ = nodes[0];\n if (this.lastChild = == oldChildWrapper)\n this.lastChild_ = nodes[nodes.length - 1];\n\n oldChildWrapper.previousSibling_ = oldChildWrapper.nextSibling_ =\n oldChildWrapper.parentNode_ = undefined;\n\n // replaceChild no matte r what the parent is?\n if (oldChildNode.parentNode) {\n origina lReplaceChild.call(\n oldChildNode.parentNode,\n unwra pNodesForInsertion(this, nodes),\n oldChildNode);\n }\n } else {\n ensureSameOwnerDocument(this, newChildWrapper);\n clea rChildNodes(this);\n originalReplaceChild.call(this.impl, unwrap(newChild Wrapper),\n oldChildNode);\n }\n\n en queueMutation(this, 'childList', {\n addedNodes: nodes,\n removedN odes: createOneElementNodeList(oldChildWrapper),\n nextSibling: nextNode, \n previousSibling: previousNode\n });\n\n nodeWasRemoved(oldCh ildWrapper);\n nodesWereAdded(nodes);\n\n return oldChildWrapper;\n },\n\n /**\n * Called after a node was inserted. Subclasses override thi s to invalidate\n * the renderer as needed.\n * @private\n */\n n odeIsInserted_: function() {\n for (var child = this.firstChild; child; chi ld = child.nextSibling) {\n child.nodeIsInserted_();\n }\n },\n\n hasChildNodes: function() {\n return this.firstChild !== null;\n },\ n\n /** @type {Node} */\n get parentNode() {\n // If the parentNode h as not been overridden, use the original parentNode.\n return this.parentNo de_ !== undefined ?\n this.parentNode_ : wrap(this.impl.parentNode);\n },\n\n /** @type {Node} */\n get firstChild() {\n return this.firs tChild_ !== undefined ?\n this.firstChild_ : wrap(this.impl.firstChild) ;\n },\n\n /** @type {Node} */\n get lastChild() {\n return this.l astChild_ !== undefined ?\n this.lastChild_ : wrap(this.impl.lastChild) ;\n },\n\n /** @type {Node} */\n get nextSibling() {\n return this .nextSibling_ !== undefined ?\n this.nextSibling_ : wrap(this.impl.next Sibling);\n },\n\n /** @type {Node} */\n get previousSibling() {\n return this.previousSibling_ !== undefined ?\n this.previousSibling_ : wrap(this.impl.previousSibling);\n },\n\n get parentElement() {\n va r p = this.parentNode;\n while (p && p.nodeType !== Node.ELEMENT_NODE) {\n p = p.parentNode;\n }\n return p;\n },\n\n get textConten t() {\n // TODO(arv): This should fallback to this.impl.textContent if ther e\n // are no shadow trees below or above the context node.\n var s = '';\n for (var child = this.firstChild; child; child = child.nextSibling) { \n if (child.nodeType != Node.COMMENT_NODE) {\n s += child.textC ontent;\n }\n }\n return s;\n },\n set textContent(textCo ntent) {\n var removedNodes = snapshotNodeList(this.childNodes);\n\n i f (this.invalidateShadowRenderer()) {\n removeAllChildNodes(this);\n if (textContent !== '') {\n var textNode = this.impl.ownerDocument.c reateTextNode(textContent);\n this.appendChild(textNode);\n }\n } else {\n clearChildNodes(this);\n this.impl.textContent = t extContent;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes) ;\n\n enqueueMutation(this, 'childList', {\n addedNodes: addedNodes, \n removedNodes: removedNodes\n });\n\n nodesWereRemoved(remove dNodes);\n nodesWereAdded(addedNodes);\n },\n\n get childNodes() {\n var wrapperList = new NodeList();\n var i = 0;\n for (var child = this.firstChild; child; child = child.nextSibling) {\n wrapperList[i++] = child;\n }\n wrapperList.length = i;\n return wrapperList;\n },\n\n cloneNode: function(deep) {\n return cloneNode(this, deep);\n },\n\n contains: function(child) {\n if (!child)\n return false; \n\n child = wrapIfNeeded(child);\n\n // TODO(arv): Optimize using own erDocument etc.\n if (child === this)\n return true;\n var pare ntNode = child.parentNode;\n if (!parentNode)\n return false;\n return this.contains(parentNode);\n },\n\n compareDocumentPosition: funct ion(otherNode) {\n // This only wraps, it therefore only operates on the co mposed DOM and not\n // the logical DOM.\n return originalCompareDocum entPosition.call(this.impl, unwrap(otherNode));\n },\n\n normalize: functi on() {\n var nodes = snapshotNodeList(this.childNodes);\n var remNodes = [];\n var s = '';\n var modNode;\n\n for (var i = 0, n; i < no des.length; i++) {\n n = nodes[i];\n if (n.nodeType === Node.TEXT_ NODE) {\n if (!modNode && !n.data.length)\n this.removeNode( n);\n else if (!modNode)\n modNode = n;\n else {\n s += n.data;\n remNodes.push(n);\n }\n } e lse {\n if (modNode && remNodes.length) {\n modNode.data += s;\n cleanUpNodes(remNodes);\n }\n remNodes = [];\n s = '';\n modNode = null;\n if (n.childNodes.length) \n n.normalize();\n }\n }\n\n // handle case where > 1 text nodes are the last children\n if (modNode && remNodes.length) {\n modNode.data += s;\n cleanupNodes(remNodes);\n }\n }\n });\ n\n defineWrapGetter(Node, 'ownerDocument');\n\n // We use a DocumentFragment as a base and then delete the properties of\n // DocumentFragment.prototype fro m the wrapper Node. Since delete makes\n // objects slow in some JS engines we recreate the prototype object.\n registerWrapper(OriginalNode, Node, document.c reateDocumentFragment());\n delete Node.prototype.querySelector;\n delete Node .prototype.querySelectorAll;\n Node.prototype = mixin(Object.create(EventTarget .prototype), Node.prototype);\n\n scope.nodeWasAdded = nodeWasAdded;\n scope.n odeWasRemoved = nodeWasRemoved;\n scope.nodesWereAdded = nodesWereAdded;\n sco pe.nodesWereRemoved = nodesWereRemoved;\n scope.snapshotNodeList = snapshotNode List;\n scope.wrappers.Node = Node;\n scope.cloneNode = cloneNode;\n\n})(windo w.ShadowDOMPolyfill);\n", 108 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope. wrappers.EventTarget;\n var NodeList = scope.wrappers.NodeList;\n var assert = scope.assert;\n var defineWrapGetter = scope.defineWrapGetter;\n var enqueueM utation = scope.enqueueMutation;\n var isWrapper = scope.isWrapper;\n var mixi n = scope.mixin;\n var registerTransientObservers = scope.registerTransientObse rvers;\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unw rap;\n var wrap = scope.wrap;\n var wrapIfNeeded = scope.wrapIfNeeded;\n var wrappers = scope.wrappers;\n\n function assertIsNodeWrapper(node) {\n assert (node instanceof Node);\n }\n\n function createOneElementNodeList(node) {\n var nodes = new NodeList();\n nodes[0] = node;\n nodes.length = 1;\n r eturn nodes;\n }\n\n var surpressMutations = false;\n\n /**\n * Called befo re node is inserted into a node to enqueue its removal from its\n * old parent .\n * @param {!Node} node The node that is about to be removed.\n * @param { !Node} parent The parent node that the node is being removed from.\n * @param {!NodeList} nodes The collected nodes.\n */\n function enqueueRemovalForInser tedNodes(node, parent, nodes) {\n enqueueMutation(parent, 'childList', {\n removedNodes: nodes,\n previousSibling: node.previousSibling,\n nex tSibling: node.nextSibling\n });\n }\n\n function enqueueRemovalForInserted DocumentFragment(df, nodes) {\n enqueueMutation(df, 'childList', {\n rem ovedNodes: nodes\n });\n }\n\n /**\n * Collects nodes from a DocumentFrag ment or a Node for removal followed\n * by an insertion.\n *\n * This upda tes the internal pointers for node, previousNode and nextNode.\n */\n functio n collectNodes(node, parentNode, previousNode, nextNode) {\n if (node instanc eof DocumentFragment) {\n var nodes = collectNodesForDocumentFragment(node) ;\n\n // The extra loop is to work around bugs with DocumentFragments in IE .\n surpressMutations = true;\n for (var i = nodes.length - 1; i >= 0; i--) {\n node.removeChild(nodes[i]);\n nodes[i].parentNode_ = par entNode;\n }\n surpressMutations = false;\n\n for (var i = 0; i < nodes.length; i++) {\n nodes[i].previousSibling_ = nodes[i - 1] || previ ousNode;\n nodes[i].nextSibling_ = nodes[i + 1] || nextNode;\n }\n\n if (previousNode)\n previousNode.nextSibling_ = nodes[0];\n if (nextNode)\n nextNode.previousSibling_ = nodes[nodes.length - 1];\n\n return nodes;\n }\n\n var nodes = createOneElementNodeList(node);\n var oldParent = node.parentNode;\n if (oldParent) {\n // This will enque ue the mutation record for the removal as needed.\n oldParent.removeChild(n ode);\n }\n\n node.parentNode_ = parentNode;\n node.previousSibling_ = previousNode;\n node.nextSibling_ = nextNode;\n if (previousNode)\n p reviousNode.nextSibling_ = node;\n if (nextNode)\n nextNode.previousSibl ing_ = node;\n\n return nodes;\n }\n\n function collectNodesNative(node) {\ n if (node instanceof DocumentFragment)\n return collectNodesForDocument Fragment(node);\n\n var nodes = createOneElementNodeList(node);\n var oldP arent = node.parentNode;\n if (oldParent)\n enqueueRemovalForInsertedNod es(node, oldParent, nodes);\n return nodes;\n }\n\n function collectNodesFo rDocumentFragment(node) {\n var nodes = new NodeList();\n var i = 0;\n for (var child = node.firstChild; child; child = child.nextSibling) {\n nod es[i++] = child;\n }\n nodes.length = i;\n enqueueRemovalForInsertedDoc umentFragment(node, nodes);\n return nodes;\n }\n\n function snapshotNodeLi st(nodeList) {\n // NodeLists are not live at the moment so just return the s ame object.\n return nodeList;\n }\n\n // http://dom.spec.whatwg.org/#node- is-inserted\n function nodeWasAdded(node) {\n node.nodeIsInserted_();\n }\n \n function nodesWereAdded(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n nodeWasAdded(nodes[i]);\n }\n }\n\n // http://dom.spec.whatwg.org /#node-is-removed\n function nodeWasRemoved(node) {\n // Nothing at this poi nt in time.\n }\n\n function nodesWereRemoved(nodes) {\n // Nothing at this point in time.\n }\n\n function ensureSameOwnerDocument(parent, child) {\n var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?\n parent : paren t.ownerDocument;\n if (ownerDoc !== child.ownerDocument)\n ownerDoc.adop tNode(child);\n }\n\n function adoptNodesIfNeeded(owner, nodes) {\n if (!no des.length)\n return;\n\n var ownerDoc = owner.ownerDocument;\n\n // All nodes have the same ownerDocument when we get here.\n if (ownerDoc === no des[0].ownerDocument)\n return;\n\n for (var i = 0; i < nodes.length; i+ +) {\n scope.adoptNodeNoRemove(nodes[i], ownerDoc);\n }\n }\n\n functi on unwrapNodesForInsertion(owner, nodes) {\n adoptNodesIfNeeded(owner, nodes) ;\n var length = nodes.length;\n\n if (length === 1)\n return unwrap( nodes[0]);\n\n var df = unwrap(owner.ownerDocument.createDocumentFragment()); \n for (var i = 0; i < length; i++) {\n df.appendChild(unwrap(nodes[i])) ;\n }\n return df;\n }\n\n function clearChildNodes(wrapper) {\n if ( wrapper.firstChild_ !== undefined) {\n var child = wrapper.firstChild_;\n while (child) {\n var tmp = child;\n child = child.nextSibling _;\n tmp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefine d;\n }\n }\n wrapper.firstChild_ = wrapper.lastChild_ = undefined;\n }\n\n function removeAllChildNodes(wrapper) {\n if (wrapper.invalidateShado wRenderer()) {\n var childWrapper = wrapper.firstChild;\n while (child Wrapper) {\n assert(childWrapper.parentNode === wrapper);\n var ne xtSibling = childWrapper.nextSibling;\n var childNode = unwrap(childWrapp er);\n var parentNode = childNode.parentNode;\n if (parentNode)\n originalRemoveChild.call(parentNode, childNode);\n childWrapper. previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentN ode_ = null;\n childWrapper = nextSibling;\n }\n wrapper.firstC hild_ = wrapper.lastChild_ = null;\n } else {\n var node = unwrap(wrappe r);\n var child = node.firstChild;\n var nextSibling;\n while (ch ild) {\n nextSibling = child.nextSibling;\n originalRemoveChild.ca ll(node, child);\n child = nextSibling;\n }\n }\n }\n\n functio n invalidateParent(node) {\n var p = node.parentNode;\n return p && p.inva lidateShadowRenderer();\n }\n\n function cleanupNodes(nodes) {\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n n.parentNode.remov eChild(n);\n }\n }\n\n var originalImportNode = document.importNode;\n var originalCloneNode = window.Node.prototype.cloneNode;\n\n function cloneNode(no de, deep, opt_doc) {\n var clone;\n if (opt_doc)\n clone = wrap(origi nalImportNode.call(opt_doc, node.impl, false));\n else\n clone = wrap(or iginalCloneNode.call(node.impl, false));\n\n if (deep) {\n for (var chil d = node.firstChild; child; child = child.nextSibling) {\n clone.appendCh ild(cloneNode(child, true, opt_doc));\n }\n\n if (node instanceof wrap pers.HTMLTemplateElement) {\n var cloneContent = clone.content;\n for (var child = node.content.firstChild;\n child;\n chi ld = child.nextSibling) {\n cloneContent.appendChild(cloneNode(child, tr ue, opt_doc));\n }\n }\n }\n // TODO(arv): Some HTML elements also clone other data like value.\n return clone;\n }\n\n var OriginalNode = window.Node;\n\n /**\n * This represents a wrapper of a native DOM node.\n * @param {!Node} original The original DOM node, aka, the visual DOM node.\n * @constructor\n * @extends {EventTarget}\n */\n function Node(original) { \n assert(original instanceof OriginalNode);\n\n EventTarget.call(this, or iginal);\n\n // These properties are used to override the visual references w ith the\n // logical ones. If the value is undefined it means that the logica l is the\n // same as the visual.\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.parentNode_ = undefined;\n\n /**\n * @ type {Node|undefined}\n * @private\n */\n this.firstChild_ = undefine d;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this .lastChild_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @priv ate\n */\n this.nextSibling_ = undefined;\n\n /**\n * @type {Node| undefined}\n * @private\n */\n this.previousSibling_ = undefined;\n }\n\n var OriginalDocumentFragment = window.DocumentFragment;\n var originalAp pendChild = OriginalNode.prototype.appendChild;\n var originalCompareDocumentPo sition =\n OriginalNode.prototype.compareDocumentPosition;\n var originalI nsertBefore = OriginalNode.prototype.insertBefore;\n var originalRemoveChild = OriginalNode.prototype.removeChild;\n var originalReplaceChild = OriginalNode.p rototype.replaceChild;\n\n var isIe = /Trident/.test(navigator.userAgent);\n\n var removeChildOriginalHelper = isIe ?\n function(parent, child) {\n try {\n originalRemoveChild.call(parent, child);\n } catch (ex ) {\n if (!(parent instanceof OriginalDocumentFragment))\n t hrow ex;\n }\n } :\n function(parent, child) {\n origina lRemoveChild.call(parent, child);\n };\n\n Node.prototype = Object.create( EventTarget.prototype);\n mixin(Node.prototype, {\n appendChild: function(ch ildWrapper) {\n return this.insertBefore(childWrapper, null);\n },\n\n insertBefore: function(childWrapper, refWrapper) {\n assertIsNodeWrapper( childWrapper);\n\n var refNode;\n if (refWrapper) {\n if (isWra pper(refWrapper)) {\n refNode = unwrap(refWrapper);\n } else {\n refNode = refWrapper;\n refWrapper = wrap(refNode);\n }\n } else {\n refWrapper = null;\n refNode = null;\n }\ n\n refWrapper && assert(refWrapper.parentNode === this);\n\n var node s;\n var previousNode =\n refWrapper ? refWrapper.previousSibling : this.lastChild;\n\n var useNative = !this.invalidateShadowRenderer() &&\n !invalidateParent(childWrapper);\n\n if (useNative)\n nodes = collectNodesNative(childWrapper);\n else\n nodes = c ollectNodes(childWrapper, this, previousNode, refWrapper);\n\n if (useNativ e) {\n ensureSameOwnerDocument(this, childWrapper);\n clearChildNo des(this);\n originalInsertBefore.call(this.impl, unwrap(childWrapper), r efNode);\n } else {\n if (!previousNode)\n this.firstChild_ = nodes[0];\n if (!refWrapper)\n this.lastChild_ = nodes[nodes. length - 1];\n\n var parentNode = refNode ? refNode.parentNode : this.imp l;\n\n // insertBefore refWrapper no matter what the parent is?\n if (parentNode) {\n originalInsertBefore.call(parentNode,\n unwrapNodesForInsertion(this, nodes), refNode);\n } else {\n a doptNodesIfNeeded(this, nodes);\n }\n }\n\n enqueueMutation(thi s, 'childList', {\n addedNodes: nodes,\n nextSibling: refWrapper,\ n previousSibling: previousNode\n });\n\n nodesWereAdded(nodes) ;\n\n return childWrapper;\n },\n\n removeChild: function(childWrappe r) {\n assertIsNodeWrapper(childWrapper);\n if (childWrapper.parentNod e !== this) {\n // IE has invalid DOM trees at times.\n var found = false;\n var childNodes = this.childNodes;\n for (var ieChild = this.firstChild; ieChild;\n ieChild = ieChild.nextSibling) {\n if (ieChild === childWrapper) {\n found = true;\n brea k;\n }\n }\n if (!found) {\n // TODO(arv): DOMEx ception\n throw new Error('NotFoundError');\n }\n }\n\n var childNode = unwrap(childWrapper);\n var childWrapperNextSibling = chi ldWrapper.nextSibling;\n var childWrapperPreviousSibling = childWrapper.pre viousSibling;\n\n if (this.invalidateShadowRenderer()) {\n // We nee d to remove the real node from the DOM before updating the\n // pointers. This is so that that mutation event is dispatched before\n // the pointe rs have changed.\n var thisFirstChild = this.firstChild;\n var thi sLastChild = this.lastChild;\n\n var parentNode = childNode.parentNode;\n if (parentNode)\n removeChildOriginalHelper(parentNode, childNo de);\n\n if (thisFirstChild === childWrapper)\n this.firstChild_ = childWrapperNextSibling;\n if (thisLastChild === childWrapper)\n this.lastChild_ = childWrapperPreviousSibling;\n if (childWrapperPrev iousSibling)\n childWrapperPreviousSibling.nextSibling_ = childWrapperN extSibling;\n if (childWrapperNextSibling) {\n childWrapperNextS ibling.previousSibling_ =\n childWrapperPreviousSibling;\n } \n\n childWrapper.previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentNode_ = undefined;\n } else {\n clearChildNo des(this);\n removeChildOriginalHelper(this.impl, childNode);\n }\n\ n if (!surpressMutations) {\n enqueueMutation(this, 'childList', {\n removedNodes: createOneElementNodeList(childWrapper),\n nextS ibling: childWrapperNextSibling,\n previousSibling: childWrapperPreviou sSibling\n });\n }\n\n registerTransientObservers(this, childWr apper);\n\n return childWrapper;\n },\n\n replaceChild: function(newC hildWrapper, oldChildWrapper) {\n assertIsNodeWrapper(newChildWrapper);\n\n var oldChildNode;\n if (isWrapper(oldChildWrapper)) {\n oldChi ldNode = unwrap(oldChildWrapper);\n } else {\n oldChildNode = oldChi ldWrapper;\n oldChildWrapper = wrap(oldChildNode);\n }\n\n if ( oldChildWrapper.parentNode !== this) {\n // TODO(arv): DOMException\n throw new Error('NotFoundError');\n }\n\n var nextNode = oldChildW rapper.nextSibling;\n var previousNode = oldChildWrapper.previousSibling;\n var nodes;\n\n var useNative = !this.invalidateShadowRenderer() &&\n !invalidateParent(newChildWrapper);\n\n if (useNative) {\n nodes = collectNodesNative(newChildWrapper);\n } else {\n if (nextNode === newChildWrapper)\n nextNode = newChildWrapper.nextSi bling;\n nodes = collectNodes(newChildWrapper, this, previousNode, nextNo de);\n }\n\n if (!useNative) {\n if (this.firstChild === oldChi ldWrapper)\n this.firstChild_ = nodes[0];\n if (this.lastChild = == oldChildWrapper)\n this.lastChild_ = nodes[nodes.length - 1];\n\n oldChildWrapper.previousSibling_ = oldChildWrapper.nextSibling_ =\n oldChildWrapper.parentNode_ = undefined;\n\n // replaceChild no matte r what the parent is?\n if (oldChildNode.parentNode) {\n origina lReplaceChild.call(\n oldChildNode.parentNode,\n unwra pNodesForInsertion(this, nodes),\n oldChildNode);\n }\n } else {\n ensureSameOwnerDocument(this, newChildWrapper);\n clea rChildNodes(this);\n originalReplaceChild.call(this.impl, unwrap(newChild Wrapper),\n oldChildNode);\n }\n\n en queueMutation(this, 'childList', {\n addedNodes: nodes,\n removedN odes: createOneElementNodeList(oldChildWrapper),\n nextSibling: nextNode, \n previousSibling: previousNode\n });\n\n nodeWasRemoved(oldCh ildWrapper);\n nodesWereAdded(nodes);\n\n return oldChildWrapper;\n },\n\n /**\n * Called after a node was inserted. Subclasses override thi s to invalidate\n * the renderer as needed.\n * @private\n */\n n odeIsInserted_: function() {\n for (var child = this.firstChild; child; chi ld = child.nextSibling) {\n child.nodeIsInserted_();\n }\n },\n\n hasChildNodes: function() {\n return this.firstChild !== null;\n },\ n\n /** @type {Node} */\n get parentNode() {\n // If the parentNode h as not been overridden, use the original parentNode.\n return this.parentNo de_ !== undefined ?\n this.parentNode_ : wrap(this.impl.parentNode);\n },\n\n /** @type {Node} */\n get firstChild() {\n return this.firs tChild_ !== undefined ?\n this.firstChild_ : wrap(this.impl.firstChild) ;\n },\n\n /** @type {Node} */\n get lastChild() {\n return this.l astChild_ !== undefined ?\n this.lastChild_ : wrap(this.impl.lastChild) ;\n },\n\n /** @type {Node} */\n get nextSibling() {\n return this .nextSibling_ !== undefined ?\n this.nextSibling_ : wrap(this.impl.next Sibling);\n },\n\n /** @type {Node} */\n get previousSibling() {\n return this.previousSibling_ !== undefined ?\n this.previousSibling_ : wrap(this.impl.previousSibling);\n },\n\n get parentElement() {\n va r p = this.parentNode;\n while (p && p.nodeType !== Node.ELEMENT_NODE) {\n p = p.parentNode;\n }\n return p;\n },\n\n get textConten t() {\n // TODO(arv): This should fallback to this.impl.textContent if ther e\n // are no shadow trees below or above the context node.\n var s = '';\n for (var child = this.firstChild; child; child = child.nextSibling) { \n if (child.nodeType != Node.COMMENT_NODE) {\n s += child.textC ontent;\n }\n }\n return s;\n },\n set textContent(textCo ntent) {\n var removedNodes = snapshotNodeList(this.childNodes);\n\n i f (this.invalidateShadowRenderer()) {\n removeAllChildNodes(this);\n if (textContent !== '') {\n var textNode = this.impl.ownerDocument.c reateTextNode(textContent);\n this.appendChild(textNode);\n }\n } else {\n clearChildNodes(this);\n this.impl.textContent = t extContent;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes) ;\n\n enqueueMutation(this, 'childList', {\n addedNodes: addedNodes, \n removedNodes: removedNodes\n });\n\n nodesWereRemoved(remove dNodes);\n nodesWereAdded(addedNodes);\n },\n\n get childNodes() {\n var wrapperList = new NodeList();\n var i = 0;\n for (var child = this.firstChild; child; child = child.nextSibling) {\n wrapperList[i++] = child;\n }\n wrapperList.length = i;\n return wrapperList;\n },\n\n cloneNode: function(deep) {\n return cloneNode(this, deep);\n },\n\n contains: function(child) {\n if (!child)\n return false; \n\n child = wrapIfNeeded(child);\n\n // TODO(arv): Optimize using own erDocument etc.\n if (child === this)\n return true;\n var pare ntNode = child.parentNode;\n if (!parentNode)\n return false;\n return this.contains(parentNode);\n },\n\n compareDocumentPosition: funct ion(otherNode) {\n // This only wraps, it therefore only operates on the co mposed DOM and not\n // the logical DOM.\n return originalCompareDocum entPosition.call(this.impl, unwrap(otherNode));\n },\n\n normalize: functi on() {\n var nodes = snapshotNodeList(this.childNodes);\n var remNodes = [];\n var s = '';\n var modNode;\n\n for (var i = 0, n; i < no des.length; i++) {\n n = nodes[i];\n if (n.nodeType === Node.TEXT_ NODE) {\n if (!modNode && !n.data.length)\n this.removeNode( n);\n else if (!modNode)\n modNode = n;\n else {\n s += n.data;\n remNodes.push(n);\n }\n } e lse {\n if (modNode && remNodes.length) {\n modNode.data += s;\n cleanUpNodes(remNodes);\n }\n remNodes = [];\n s = '';\n modNode = null;\n if (n.childNodes.length) \n n.normalize();\n }\n }\n\n // handle case where > 1 text nodes are the last children\n if (modNode && remNodes.length) {\n modNode.data += s;\n cleanupNodes(remNodes);\n }\n }\n });\ n\n defineWrapGetter(Node, 'ownerDocument');\n\n // We use a DocumentFragment as a base and then delete the properties of\n // DocumentFragment.prototype fro m the wrapper Node. Since delete makes\n // objects slow in some JS engines we recreate the prototype object.\n registerWrapper(OriginalNode, Node, document.c reateDocumentFragment());\n delete Node.prototype.querySelector;\n delete Node .prototype.querySelectorAll;\n Node.prototype = mixin(Object.create(EventTarget .prototype), Node.prototype);\n\n scope.nodeWasAdded = nodeWasAdded;\n scope.n odeWasRemoved = nodeWasRemoved;\n scope.nodesWereAdded = nodesWereAdded;\n sco pe.nodesWereRemoved = nodesWereRemoved;\n scope.snapshotNodeList = snapshotNode List;\n scope.wrappers.Node = Node;\n scope.cloneNode = cloneNode;\n\n})(windo w.ShadowDOMPolyfill);\n",
(...skipping 20 matching lines...) Expand all
129 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var registerWrapper = sc ope.registerWrapper;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope .unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalRange = window.Range ;\n\n function Range(impl) {\n this.impl = impl;\n }\n Range.prototype = { \n get startContainer() {\n return wrap(this.impl.startContainer);\n },\n get endContainer() {\n return wrap(this.impl.endContainer);\n }, \n get commonAncestorContainer() {\n return wrap(this.impl.commonAncesto rContainer);\n },\n setStart: function(refNode,offset) {\n this.impl. setStart(unwrapIfNeeded(refNode), offset);\n },\n setEnd: function(refNode ,offset) {\n this.impl.setEnd(unwrapIfNeeded(refNode), offset);\n },\n setStartBefore: function(refNode) {\n this.impl.setStartBefore(unwrapIfNe eded(refNode));\n },\n setStartAfter: function(refNode) {\n this.impl .setStartAfter(unwrapIfNeeded(refNode));\n },\n setEndBefore: function(ref Node) {\n this.impl.setEndBefore(unwrapIfNeeded(refNode));\n },\n set EndAfter: function(refNode) {\n this.impl.setEndAfter(unwrapIfNeeded(refNod e));\n },\n selectNode: function(refNode) {\n this.impl.selectNode(un wrapIfNeeded(refNode));\n },\n selectNodeContents: function(refNode) {\n this.impl.selectNodeContents(unwrapIfNeeded(refNode));\n },\n compareB oundaryPoints: function(how, sourceRange) {\n return this.impl.compareBound aryPoints(how, unwrap(sourceRange));\n },\n extractContents: function() {\ n return wrap(this.impl.extractContents());\n },\n cloneContents: fun ction() {\n return wrap(this.impl.cloneContents());\n },\n insertNode : function(node) {\n this.impl.insertNode(unwrapIfNeeded(node));\n },\n surroundContents: function(newParent) {\n this.impl.surroundContents(unw rapIfNeeded(newParent));\n },\n cloneRange: function() {\n return wra p(this.impl.cloneRange());\n },\n isPointInRange: function(node, offset) { \n return this.impl.isPointInRange(unwrapIfNeeded(node), offset);\n },\n comparePoint: function(node, offset) {\n return this.impl.comparePoint( unwrapIfNeeded(node), offset);\n },\n intersectsNode: function(node) {\n return this.impl.intersectsNode(unwrapIfNeeded(node));\n },\n toString : function() {\n return this.impl.toString();\n }\n };\n\n // IE9 does not have createContextualFragment.\n if (OriginalRange.prototype.createContext ualFragment) {\n Range.prototype.createContextualFragment = function(html) {\ n return wrap(this.impl.createContextualFragment(html));\n };\n }\n\n registerWrapper(window.Range, Range, document.createRange());\n\n scope.wrapper s.Range = Range;\n\n})(window.ShadowDOMPolyfill);\n", 129 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var registerWrapper = sc ope.registerWrapper;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope .unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalRange = window.Range ;\n\n function Range(impl) {\n this.impl = impl;\n }\n Range.prototype = { \n get startContainer() {\n return wrap(this.impl.startContainer);\n },\n get endContainer() {\n return wrap(this.impl.endContainer);\n }, \n get commonAncestorContainer() {\n return wrap(this.impl.commonAncesto rContainer);\n },\n setStart: function(refNode,offset) {\n this.impl. setStart(unwrapIfNeeded(refNode), offset);\n },\n setEnd: function(refNode ,offset) {\n this.impl.setEnd(unwrapIfNeeded(refNode), offset);\n },\n setStartBefore: function(refNode) {\n this.impl.setStartBefore(unwrapIfNe eded(refNode));\n },\n setStartAfter: function(refNode) {\n this.impl .setStartAfter(unwrapIfNeeded(refNode));\n },\n setEndBefore: function(ref Node) {\n this.impl.setEndBefore(unwrapIfNeeded(refNode));\n },\n set EndAfter: function(refNode) {\n this.impl.setEndAfter(unwrapIfNeeded(refNod e));\n },\n selectNode: function(refNode) {\n this.impl.selectNode(un wrapIfNeeded(refNode));\n },\n selectNodeContents: function(refNode) {\n this.impl.selectNodeContents(unwrapIfNeeded(refNode));\n },\n compareB oundaryPoints: function(how, sourceRange) {\n return this.impl.compareBound aryPoints(how, unwrap(sourceRange));\n },\n extractContents: function() {\ n return wrap(this.impl.extractContents());\n },\n cloneContents: fun ction() {\n return wrap(this.impl.cloneContents());\n },\n insertNode : function(node) {\n this.impl.insertNode(unwrapIfNeeded(node));\n },\n surroundContents: function(newParent) {\n this.impl.surroundContents(unw rapIfNeeded(newParent));\n },\n cloneRange: function() {\n return wra p(this.impl.cloneRange());\n },\n isPointInRange: function(node, offset) { \n return this.impl.isPointInRange(unwrapIfNeeded(node), offset);\n },\n comparePoint: function(node, offset) {\n return this.impl.comparePoint( unwrapIfNeeded(node), offset);\n },\n intersectsNode: function(node) {\n return this.impl.intersectsNode(unwrapIfNeeded(node));\n },\n toString : function() {\n return this.impl.toString();\n }\n };\n\n // IE9 does not have createContextualFragment.\n if (OriginalRange.prototype.createContext ualFragment) {\n Range.prototype.createContextualFragment = function(html) {\ n return wrap(this.impl.createContextualFragment(html));\n };\n }\n\n registerWrapper(window.Range, Range, document.createRange());\n\n scope.wrapper s.Range = Range;\n\n})(window.ShadowDOMPolyfill);\n",
130 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var GetElementsByInterfa ce = scope.GetElementsByInterface;\n var ParentNodeInterface = scope.ParentNode Interface;\n var SelectorsInterface = scope.SelectorsInterface;\n var mixin = scope.mixin;\n var registerObject = scope.registerObject;\n\n var DocumentFrag ment = registerObject(document.createDocumentFragment());\n mixin(DocumentFragm ent.prototype, ParentNodeInterface);\n mixin(DocumentFragment.prototype, Select orsInterface);\n mixin(DocumentFragment.prototype, GetElementsByInterface);\n\n var Comment = registerObject(document.createComment(''));\n\n scope.wrappers. Comment = Comment;\n scope.wrappers.DocumentFragment = DocumentFragment;\n\n})( window.ShadowDOMPolyfill);\n", 130 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var GetElementsByInterfa ce = scope.GetElementsByInterface;\n var ParentNodeInterface = scope.ParentNode Interface;\n var SelectorsInterface = scope.SelectorsInterface;\n var mixin = scope.mixin;\n var registerObject = scope.registerObject;\n\n var DocumentFrag ment = registerObject(document.createDocumentFragment());\n mixin(DocumentFragm ent.prototype, ParentNodeInterface);\n mixin(DocumentFragment.prototype, Select orsInterface);\n mixin(DocumentFragment.prototype, GetElementsByInterface);\n\n var Comment = registerObject(document.createComment(''));\n\n scope.wrappers. Comment = Comment;\n scope.wrappers.DocumentFragment = DocumentFragment;\n\n})( window.ShadowDOMPolyfill);\n",
131 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var DocumentFragment = s cope.wrappers.DocumentFragment;\n var elementFromPoint = scope.elementFromPoint ;\n var getInnerHTML = scope.getInnerHTML;\n var mixin = scope.mixin;\n var r ewrap = scope.rewrap;\n var setInnerHTML = scope.setInnerHTML;\n var unwrap = scope.unwrap;\n\n var shadowHostTable = new WeakMap();\n var nextOlderShadowTr eeTable = new WeakMap();\n\n var spaceCharRe = /[ \\t\\n\\r\\f]/;\n\n function ShadowRoot(hostWrapper) {\n var node = unwrap(hostWrapper.impl.ownerDocument .createDocumentFragment());\n DocumentFragment.call(this, node);\n\n // cr eateDocumentFragment associates the node with a wrapper\n // DocumentFragment instance. Override that.\n rewrap(node, this);\n\n var oldShadowRoot = ho stWrapper.shadowRoot;\n nextOlderShadowTreeTable.set(this, oldShadowRoot);\n\ n shadowHostTable.set(this, hostWrapper);\n }\n ShadowRoot.prototype = Obje ct.create(DocumentFragment.prototype);\n mixin(ShadowRoot.prototype, {\n get innerHTML() {\n return getInnerHTML(this);\n },\n set innerHTML(valu e) {\n setInnerHTML(this, value);\n this.invalidateShadowRenderer();\n },\n\n get olderShadowRoot() {\n return nextOlderShadowTreeTable.get (this) || null;\n },\n\n get host() {\n return shadowHostTable.get(th is) || null;\n },\n\n invalidateShadowRenderer: function() {\n return shadowHostTable.get(this).invalidateShadowRenderer();\n },\n\n elementFro mPoint: function(x, y) {\n return elementFromPoint(this, this.ownerDocument , x, y);\n },\n\n getElementById: function(id) {\n if (spaceCharRe.te st(id))\n return null;\n return this.querySelector('[id=\"' + id + ' \"]');\n }\n });\n\n scope.wrappers.ShadowRoot = ShadowRoot;\n\n})(window.S hadowDOMPolyfill);\n", 131 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var DocumentFragment = s cope.wrappers.DocumentFragment;\n var elementFromPoint = scope.elementFromPoint ;\n var getInnerHTML = scope.getInnerHTML;\n var mixin = scope.mixin;\n var r ewrap = scope.rewrap;\n var setInnerHTML = scope.setInnerHTML;\n var unwrap = scope.unwrap;\n\n var shadowHostTable = new WeakMap();\n var nextOlderShadowTr eeTable = new WeakMap();\n\n var spaceCharRe = /[ \\t\\n\\r\\f]/;\n\n function ShadowRoot(hostWrapper) {\n var node = unwrap(hostWrapper.impl.ownerDocument .createDocumentFragment());\n DocumentFragment.call(this, node);\n\n // cr eateDocumentFragment associates the node with a wrapper\n // DocumentFragment instance. Override that.\n rewrap(node, this);\n\n var oldShadowRoot = ho stWrapper.shadowRoot;\n nextOlderShadowTreeTable.set(this, oldShadowRoot);\n\ n shadowHostTable.set(this, hostWrapper);\n }\n ShadowRoot.prototype = Obje ct.create(DocumentFragment.prototype);\n mixin(ShadowRoot.prototype, {\n get innerHTML() {\n return getInnerHTML(this);\n },\n set innerHTML(valu e) {\n setInnerHTML(this, value);\n this.invalidateShadowRenderer();\n },\n\n get olderShadowRoot() {\n return nextOlderShadowTreeTable.get (this) || null;\n },\n\n get host() {\n return shadowHostTable.get(th is) || null;\n },\n\n invalidateShadowRenderer: function() {\n return shadowHostTable.get(this).invalidateShadowRenderer();\n },\n\n elementFro mPoint: function(x, y) {\n return elementFromPoint(this, this.ownerDocument , x, y);\n },\n\n getElementById: function(id) {\n if (spaceCharRe.te st(id))\n return null;\n return this.querySelector('[id=\"' + id + ' \"]');\n }\n });\n\n scope.wrappers.ShadowRoot = ShadowRoot;\n\n})(window.S hadowDOMPolyfill);\n",
132 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LIC ENSE file.\n\n(function(scope) {\n 'use strict';\n\n var Element = scope.wrapp ers.Element;\n var HTMLContentElement = scope.wrappers.HTMLContentElement;\n v ar HTMLShadowElement = scope.wrappers.HTMLShadowElement;\n var Node = scope.wra ppers.Node;\n var ShadowRoot = scope.wrappers.ShadowRoot;\n var assert = scope .assert;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n /**\n * Updates the fields of a wrapper to a snapshot of the logical DOM as needed.\n * Up means parentNode\n * Sideways means previous and next sibling.\n * @param {!Node} wrapper\n * /\n function updateWrapperUpAndSideways(wrapper) {\n wrapper.previousSibling _ = wrapper.previousSibling;\n wrapper.nextSibling_ = wrapper.nextSibling;\n wrapper.parentNode_ = wrapper.parentNode;\n }\n\n /**\n * Updates the fie lds of a wrapper to a snapshot of the logical DOM as needed.\n * Down means fi rst and last child\n * @param {!Node} wrapper\n */\n function updateWrapper Down(wrapper) {\n wrapper.firstChild_ = wrapper.firstChild;\n wrapper.last Child_ = wrapper.lastChild;\n }\n\n function updateAllChildNodes(parentNodeWra pper) {\n assert(parentNodeWrapper instanceof Node);\n for (var childWrapp er = parentNodeWrapper.firstChild;\n childWrapper;\n childWrappe r = childWrapper.nextSibling) {\n updateWrapperUpAndSideways(childWrapper); \n }\n updateWrapperDown(parentNodeWrapper);\n }\n\n function insertBefo re(parentNodeWrapper, newChildWrapper, refChildWrapper) {\n var parentNode = unwrap(parentNodeWrapper);\n var newChild = unwrap(newChildWrapper);\n var refChild = refChildWrapper ? unwrap(refChildWrapper) : null;\n\n remove(newC hildWrapper);\n updateWrapperUpAndSideways(newChildWrapper);\n\n if (!refC hildWrapper) {\n parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild ;\n if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild)\n parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild;\n\n var l astChildWrapper = wrap(parentNode.lastChild);\n if (lastChildWrapper)\n lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling;\n } else {\ n if (parentNodeWrapper.firstChild === refChildWrapper)\n parentNode Wrapper.firstChild_ = refChildWrapper;\n\n refChildWrapper.previousSibling_ = refChildWrapper.previousSibling;\n }\n\n parentNode.insertBefore(newChi ld, refChild);\n }\n\n function remove(nodeWrapper) {\n var node = unwrap(n odeWrapper)\n var parentNode = node.parentNode;\n if (!parentNode)\n return;\n\n var parentNodeWrapper = wrap(parentNode);\n updateWrapperUpAnd Sideways(nodeWrapper);\n\n if (nodeWrapper.previousSibling)\n nodeWrappe r.previousSibling.nextSibling_ = nodeWrapper;\n if (nodeWrapper.nextSibling)\ n nodeWrapper.nextSibling.previousSibling_ = nodeWrapper;\n\n if (parent NodeWrapper.lastChild === nodeWrapper)\n parentNodeWrapper.lastChild_ = nod eWrapper;\n if (parentNodeWrapper.firstChild === nodeWrapper)\n parentNo deWrapper.firstChild_ = nodeWrapper;\n\n parentNode.removeChild(node);\n }\n \n var distributedChildNodesTable = new WeakMap();\n var eventParentsTable = n ew WeakMap();\n var insertionParentTable = new WeakMap();\n var rendererForHos tTable = new WeakMap();\n\n function distributeChildToInsertionPoint(child, ins ertionPoint) {\n getDistributedChildNodes(insertionPoint).push(child);\n a ssignToInsertionPoint(child, insertionPoint);\n\n var eventParents = eventPar entsTable.get(child);\n if (!eventParents)\n eventParentsTable.set(child , eventParents = []);\n eventParents.push(insertionPoint);\n }\n\n function resetDistributedChildNodes(insertionPoint) {\n distributedChildNodesTable.se t(insertionPoint, []);\n }\n\n function getDistributedChildNodes(insertionPoin t) {\n return distributedChildNodesTable.get(insertionPoint);\n }\n\n funct ion getChildNodesSnapshot(node) {\n var result = [], i = 0;\n for (var chi ld = node.firstChild; child; child = child.nextSibling) {\n result[i++] = c hild;\n }\n return result;\n }\n\n /**\n * Visits all nodes in the tre e that fulfils the |predicate|. If the |visitor|\n * function returns |false| the traversal is aborted.\n * @param {!Node} tree\n * @param {function(!Node ) : boolean} predicate\n * @param {function(!Node) : *} visitor\n */\n func tion visit(tree, predicate, visitor) {\n // This operates on logical DOM.\n for (var node = tree.firstChild; node; node = node.nextSibling) {\n if (p redicate(node)) {\n if (visitor(node) === false)\n return;\n } else {\n visit(node, predicate, visitor);\n }\n }\n }\n\n / / Matching Insertion Points\n // http://dvcs.w3.org/hg/webcomponents/raw-file/t ip/spec/shadow/index.html#matching-insertion-points\n\n // TODO(arv): Verify th is... I don't remember why I picked this regexp.\n var selectorMatchRegExp = /^ [*.:#[a-zA-Z_|]/;\n\n var allowedPseudoRegExp = new RegExp('^:(' + [\n 'link ',\n 'visited',\n 'target',\n 'enabled',\n 'disabled',\n 'checked ',\n 'indeterminate',\n 'nth-child',\n 'nth-last-child',\n 'nth-of-t ype',\n 'nth-last-of-type',\n 'first-child',\n 'last-child',\n 'firs t-of-type',\n 'last-of-type',\n 'only-of-type',\n ].join('|') + ')');\n\n \n /**\n * @param {Element} node\n * @oaram {Element} point The insertion p oint element.\n * @return {boolean} Whether the node matches the insertion poi nt.\n */\n function matchesCriteria(node, point) {\n var select = point.ge tAttribute('select');\n if (!select)\n return true;\n\n // Here we kn ow the select attribute is a non empty string.\n select = select.trim();\n if (!select)\n return true;\n\n if (!(node instanceof Element))\n return false;\n\n // The native matches function in IE9 does not correctly wo rk with elements\n // that are not in the document.\n // TODO(arv): Implem ent matching in JS.\n // https://github.com/Polymer/ShadowDOM/issues/361\n if (select === '*' || select === node.localName)\n return true;\n\n // TODO(arv): This does not seem right. Need to check for a simple selector.\n i f (!selectorMatchRegExp.test(select))\n return false;\n\n // TODO(arv): This no longer matches the spec.\n if (select[0] === ':' && !allowedPseudoReg Exp.test(select))\n return false;\n\n try {\n return node.matches(s elect);\n } catch (ex) {\n // Invalid selector.\n return false;\n }\n }\n\n var request = oneOf(window, [\n 'requestAnimationFrame',\n ' mozRequestAnimationFrame',\n 'webkitRequestAnimationFrame',\n 'setTimeout' \n ]);\n\n var pendingDirtyRenderers = [];\n var renderTimer;\n\n function r enderAllPending() {\n for (var i = 0; i < pendingDirtyRenderers.length; i++) {\n pendingDirtyRenderers[i].render();\n }\n pendingDirtyRenderers = [];\n }\n\n function handleRequestAnimationFrame() {\n renderTimer = null;\ n renderAllPending();\n }\n\n /**\n * Returns existing shadow renderer fo r a host or creates it if it is needed.\n * @params {!Element} host\n * @ret urn {!ShadowRenderer}\n */\n function getRendererForHost(host) {\n var ren derer = rendererForHostTable.get(host);\n if (!renderer) {\n renderer = new ShadowRenderer(host);\n rendererForHostTable.set(host, renderer);\n }\n return renderer;\n }\n\n function getShadowRootAncestor(node) {\n fo r (; node; node = node.parentNode) {\n if (node instanceof ShadowRoot)\n return node;\n }\n return null;\n }\n\n function getRendererForShad owRoot(shadowRoot) {\n return getRendererForHost(shadowRoot.host);\n }\n\n var spliceDiff = new ArraySplice();\n spliceDiff.equals = function(renderNode, rawNode) {\n return unwrap(renderNode.node) === rawNode;\n };\n\n /**\n * RenderNode is used as an in memory \"render tree\". When we render the\n * co mposed tree we create a tree of RenderNodes, then we diff this against\n * the real DOM tree and make minimal changes as needed.\n */\n function RenderNode (node) {\n this.skip = false;\n this.node = node;\n this.childNodes = [ ];\n }\n\n RenderNode.prototype = {\n append: function(node) {\n var r v = new RenderNode(node);\n this.childNodes.push(rv);\n return rv;\n },\n\n sync: function(opt_added) {\n if (this.skip)\n return;\n \n var nodeWrapper = this.node;\n // plain array of RenderNodes\n var newChildren = this.childNodes;\n // plain array of real nodes.\n var oldChildren = getChildNodesSnapshot(unwrap(nodeWrapper));\n var added = opt_added || new WeakMap();\n\n var splices = spliceDiff.calculateSplices( newChildren, oldChildren);\n\n var newIndex = 0, oldIndex = 0;\n var l astIndex = 0;\n for (var i = 0; i < splices.length; i++) {\n var spl ice = splices[i];\n for (; lastIndex < splice.index; lastIndex++) {\n oldIndex++;\n newChildren[newIndex++].sync(added);\n }\n\n var removedCount = splice.removed.length;\n for (var j = 0; j < r emovedCount; j++) {\n var wrapper = wrap(oldChildren[oldIndex++]);\n if (!added.get(wrapper))\n remove(wrapper);\n }\n\n var addedCount = splice.addedCount;\n var refNode = oldChildren[oldIn dex] && wrap(oldChildren[oldIndex]);\n for (var j = 0; j < addedCount; j+ +) {\n var newChildRenderNode = newChildren[newIndex++];\n var newChildWrapper = newChildRenderNode.node;\n insertBefore(nodeWrapper, newChildWrapper, refNode);\n\n // Keep track of added so that we do no t remove the node after it\n // has been added.\n added.set(ne wChildWrapper, true);\n\n newChildRenderNode.sync(added);\n }\n\ n lastIndex += addedCount;\n }\n\n for (var i = lastIndex; i < newChildren.length; i++) {\n newChildren[i].sync(added);\n }\n }\ n };\n\n function ShadowRenderer(host) {\n this.host = host;\n this.dirt y = false;\n this.invalidateAttributes();\n this.associateNode(host);\n } \n\n ShadowRenderer.prototype = {\n\n // http://dvcs.w3.org/hg/webcomponents /raw-file/tip/spec/shadow/index.html#rendering-shadow-trees\n render: functio n(opt_renderNode) {\n if (!this.dirty)\n return;\n\n this.inval idateAttributes();\n this.treeComposition();\n\n var host = this.host; \n var shadowRoot = host.shadowRoot;\n\n this.associateNode(host);\n var topMostRenderer = !renderNode;\n var renderNode = opt_renderNode || new RenderNode(host);\n\n for (var node = shadowRoot.firstChild; node; nod e = node.nextSibling) {\n this.renderNode(shadowRoot, renderNode, node, f alse);\n }\n\n if (topMostRenderer)\n renderNode.sync();\n\n this.dirty = false;\n },\n\n invalidate: function() {\n if (!this. dirty) {\n this.dirty = true;\n pendingDirtyRenderers.push(this);\ n if (renderTimer)\n return;\n renderTimer = window[reque st](handleRequestAnimationFrame, 0);\n }\n },\n\n renderNode: functio n(shadowRoot, renderNode, node, isNested) {\n if (isShadowHost(node)) {\n renderNode = renderNode.append(node);\n var renderer = getRendererF orHost(node);\n renderer.dirty = true; // Need to rerender due to reproj ection.\n renderer.render(renderNode);\n } else if (isInsertionPoint (node)) {\n this.renderInsertionPoint(shadowRoot, renderNode, node, isNes ted);\n } else if (isShadowInsertionPoint(node)) {\n this.renderShad owInsertionPoint(shadowRoot, renderNode, node);\n } else {\n this.re nderAsAnyDomTree(shadowRoot, renderNode, node, isNested);\n }\n },\n\n renderAsAnyDomTree: function(shadowRoot, renderNode, node, isNested) {\n renderNode = renderNode.append(node);\n\n if (isShadowHost(node)) {\n var renderer = getRendererForHost(node);\n renderNode.skip = !renderer. dirty;\n renderer.render(renderNode);\n } else {\n for (var c hild = node.firstChild; child; child = child.nextSibling) {\n this.rend erNode(shadowRoot, renderNode, child, isNested);\n }\n }\n },\n\n renderInsertionPoint: function(shadowRoot, renderNode, insertionPoint,\n isNested) {\n var distributedChildNodes = ge tDistributedChildNodes(insertionPoint);\n if (distributedChildNodes.length) {\n this.associateNode(insertionPoint);\n\n for (var i = 0; i < d istributedChildNodes.length; i++) {\n var child = distributedChildNodes [i];\n if (isInsertionPoint(child) && isNested)\n this.rende rInsertionPoint(shadowRoot, renderNode, child, isNested);\n else\n this.renderAsAnyDomTree(shadowRoot, renderNode, child, isNested);\n }\n } else {\n this.renderFallbackContent(shadowRoot, renderNode, insertionPoint);\n }\n this.associateNode(insertionPoint.parentNode);\ n },\n\n renderShadowInsertionPoint: function(shadowRoot, renderNode,\n shadowInsertionPoint) {\n var nextOld erTree = shadowRoot.olderShadowRoot;\n if (nextOlderTree) {\n assign ToInsertionPoint(nextOlderTree, shadowInsertionPoint);\n this.associateNo de(shadowInsertionPoint.parentNode);\n for (var node = nextOlderTree.firs tChild;\n node;\n node = node.nextSibling) {\n this.renderNode(nextOlderTree, renderNode, node, true);\n }\n } else {\n this.renderFallbackContent(shadowRoot, renderNode,\n shadowInsertionPoint);\n }\n },\n\n renderFallback Content: function(shadowRoot, renderNode, fallbackHost) {\n this.associateN ode(fallbackHost);\n this.associateNode(fallbackHost.parentNode);\n fo r (var node = fallbackHost.firstChild; node; node = node.nextSibling) {\n this.renderAsAnyDomTree(shadowRoot, renderNode, node, false);\n }\n },\ n\n /**\n * Invalidates the attributes used to keep track of which attrib utes may\n * cause the renderer to be invalidated.\n */\n invalidateA ttributes: function() {\n this.attributes = Object.create(null);\n },\n\ n /**\n * Parses the selector and makes this renderer dependent on the at tribute\n * being used in the selector.\n * @param {string} selector\n */\n updateDependentAttributes: function(selector) {\n if (!selector) \n return;\n\n var attributes = this.attributes;\n\n // .class\ n if (/\\.\\w+/.test(selector))\n attributes['class'] = true;\n\n // #id\n if (/#\\w+/.test(selector))\n attributes['id'] = true;\n \n selector.replace(/\\[\\s*([^\\s=\\|~\\]]+)/g, function(_, name) {\n attributes[name] = true;\n });\n\n // Pseudo selectors have been re moved from the spec.\n },\n\n dependsOnAttribute: function(name) {\n return this.attributes[name];\n },\n\n // http://dvcs.w3.org/hg/webcompone nts/raw-file/tip/spec/shadow/index.html#dfn-distribution-algorithm\n distribu te: function(tree, pool) {\n var self = this;\n\n visit(tree, isActive InsertionPoint,\n function(insertionPoint) {\n resetDistribu tedChildNodes(insertionPoint);\n self.updateDependentAttributes(\n insertionPoint.getAttribute('select'));\n\n for (var i = 0; i < pool.length; i++) { // 1.2\n var node = pool[i]; // 1.2.1 \n if (node === undefined) // removed\n continue;\n if (matchesCriteria(node, insertionPoint)) { // 1.2.2\n distributeChildToInsertionPoint(node, insertionPoint); // 1.2.2.1\n pool[i] = undefined; // 1.2.2.2\n }\n }\n });\n },\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spe c/shadow/index.html#dfn-tree-composition\n treeComposition: function () {\n var shadowHost = this.host;\n var tree = shadowHost.shadowRoot; // 1.\ n var pool = []; // 2.\n\n for (var child = shadowHost.firstChild;\n child;\n child = child.nextSibling) { // 3.\n if (is InsertionPoint(child)) { // 3.2.\n var reprojected = getDistributedChi ldNodes(child); // 3.2.1.\n // if reprojected is undef... reset it?\n if (!reprojected || !reprojected.length) // 3.2.2.\n reproj ected = getChildNodesSnapshot(child);\n pool.push.apply(pool, reproject ed); // 3.2.3.\n } else {\n pool.push(child); // 3.3.\n }\n }\n\n var shadowInsertionPoint, point;\n while (tree) { // 4 .\n // 4.1.\n shadowInsertionPoint = undefined; // Reset every it eration.\n visit(tree, isActiveShadowInsertionPoint, function(point) {\n shadowInsertionPoint = point;\n return false;\n });\n point = shadowInsertionPoint;\n\n this.distribute(tree, pool); // 4.2.\n if (point) { // 4.3.\n var nextOlderTree = tree.olderSha dowRoot; // 4.3.1.\n if (!nextOlderTree) {\n break; // 4.3 .1.1.\n } else {\n tree = nextOlderTree; // 4.3.2.2.\n assignToInsertionPoint(tree, point); // 4.3.2.2.\n continue; // 4.3.2.3.\n }\n } else {\n break; // 4.4.\n }\n }\n },\n\n associateNode: function(node) {\n node.impl.polym erShadowRenderer_ = this;\n }\n };\n\n function isInsertionPoint(node) {\n // Should this include <shadow>?\n return node instanceof HTMLContentEleme nt;\n }\n\n function isActiveInsertionPoint(node) {\n // <content> inside a nother <content> or <shadow> is considered inactive.\n return node instanceof HTMLContentElement;\n }\n\n function isShadowInsertionPoint(node) {\n retu rn node instanceof HTMLShadowElement;\n }\n\n function isActiveShadowInsertion Point(node) {\n // <shadow> inside another <content> or <shadow> is considere d inactive.\n return node instanceof HTMLShadowElement;\n }\n\n function is ShadowHost(shadowHost) {\n return shadowHost.shadowRoot;\n }\n\n function g etShadowTrees(host) {\n var trees = [];\n\n for (var tree = host.shadowRoo t; tree; tree = tree.olderShadowRoot) {\n trees.push(tree);\n }\n ret urn trees;\n }\n\n function assignToInsertionPoint(tree, point) {\n inserti onParentTable.set(tree, point);\n }\n\n // http://dvcs.w3.org/hg/webcomponents /raw-file/tip/spec/shadow/index.html#rendering-shadow-trees\n function render(h ost) {\n new ShadowRenderer(host).render();\n };\n\n // Need to rerender sh adow host when:\n //\n // - a direct child to the ShadowRoot is added or remov ed\n // - a direct child to the host is added or removed\n // - a new shadow r oot is created\n // - a direct child to a content/shadow element is added or re moved\n // - a sibling to a content/shadow element is added or removed\n // - content[select] is changed\n // - an attribute in a direct child to a host is m odified\n\n /**\n * This gets called when a node was added or removed to it.\ n */\n Node.prototype.invalidateShadowRenderer = function(force) {\n var r enderer = this.impl.polymerShadowRenderer_;\n if (renderer) {\n renderer .invalidate();\n return true;\n }\n\n return false;\n };\n\n HTMLCo ntentElement.prototype.getDistributedNodes = function() {\n // TODO(arv): We should only rerender the dirty ancestor renderers (from\n // the root and dow n).\n renderAllPending();\n return getDistributedChildNodes(this);\n };\n \n HTMLShadowElement.prototype.nodeIsInserted_ =\n HTMLContentElement.prototyp e.nodeIsInserted_ = function() {\n // Invalidate old renderer if any.\n th is.invalidateShadowRenderer();\n\n var shadowRoot = getShadowRootAncestor(thi s);\n var renderer;\n if (shadowRoot)\n renderer = getRendererForShad owRoot(shadowRoot);\n this.impl.polymerShadowRenderer_ = renderer;\n if (r enderer)\n renderer.invalidate();\n };\n\n scope.eventParentsTable = even tParentsTable;\n scope.getRendererForHost = getRendererForHost;\n scope.getSha dowTrees = getShadowTrees;\n scope.insertionParentTable = insertionParentTable; \n scope.renderAllPending = renderAllPending;\n\n // Exposed for testing\n sc ope.visual = {\n insertBefore: insertBefore,\n remove: remove,\n };\n\n}) (window.ShadowDOMPolyfill);\n", 132 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LIC ENSE file.\n\n(function(scope) {\n 'use strict';\n\n var Element = scope.wrapp ers.Element;\n var HTMLContentElement = scope.wrappers.HTMLContentElement;\n v ar HTMLShadowElement = scope.wrappers.HTMLShadowElement;\n var Node = scope.wra ppers.Node;\n var ShadowRoot = scope.wrappers.ShadowRoot;\n var assert = scope .assert;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n /**\n * Updates the fields of a wrapper to a snapshot of the logical DOM as needed.\n * Up means parentNode\n * Sideways means previous and next sibling.\n * @param {!Node} wrapper\n * /\n function updateWrapperUpAndSideways(wrapper) {\n wrapper.previousSibling _ = wrapper.previousSibling;\n wrapper.nextSibling_ = wrapper.nextSibling;\n wrapper.parentNode_ = wrapper.parentNode;\n }\n\n /**\n * Updates the fie lds of a wrapper to a snapshot of the logical DOM as needed.\n * Down means fi rst and last child\n * @param {!Node} wrapper\n */\n function updateWrapper Down(wrapper) {\n wrapper.firstChild_ = wrapper.firstChild;\n wrapper.last Child_ = wrapper.lastChild;\n }\n\n function updateAllChildNodes(parentNodeWra pper) {\n assert(parentNodeWrapper instanceof Node);\n for (var childWrapp er = parentNodeWrapper.firstChild;\n childWrapper;\n childWrappe r = childWrapper.nextSibling) {\n updateWrapperUpAndSideways(childWrapper); \n }\n updateWrapperDown(parentNodeWrapper);\n }\n\n function insertBefo re(parentNodeWrapper, newChildWrapper, refChildWrapper) {\n var parentNode = unwrap(parentNodeWrapper);\n var newChild = unwrap(newChildWrapper);\n var refChild = refChildWrapper ? unwrap(refChildWrapper) : null;\n\n remove(newC hildWrapper);\n updateWrapperUpAndSideways(newChildWrapper);\n\n if (!refC hildWrapper) {\n parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild ;\n if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild)\n parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild;\n\n var l astChildWrapper = wrap(parentNode.lastChild);\n if (lastChildWrapper)\n lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling;\n } else {\ n if (parentNodeWrapper.firstChild === refChildWrapper)\n parentNode Wrapper.firstChild_ = refChildWrapper;\n\n refChildWrapper.previousSibling_ = refChildWrapper.previousSibling;\n }\n\n parentNode.insertBefore(newChi ld, refChild);\n }\n\n function remove(nodeWrapper) {\n var node = unwrap(n odeWrapper)\n var parentNode = node.parentNode;\n if (!parentNode)\n return;\n\n var parentNodeWrapper = wrap(parentNode);\n updateWrapperUpAnd Sideways(nodeWrapper);\n\n if (nodeWrapper.previousSibling)\n nodeWrappe r.previousSibling.nextSibling_ = nodeWrapper;\n if (nodeWrapper.nextSibling)\ n nodeWrapper.nextSibling.previousSibling_ = nodeWrapper;\n\n if (parent NodeWrapper.lastChild === nodeWrapper)\n parentNodeWrapper.lastChild_ = nod eWrapper;\n if (parentNodeWrapper.firstChild === nodeWrapper)\n parentNo deWrapper.firstChild_ = nodeWrapper;\n\n parentNode.removeChild(node);\n }\n \n var distributedChildNodesTable = new WeakMap();\n var eventParentsTable = n ew WeakMap();\n var insertionParentTable = new WeakMap();\n var rendererForHos tTable = new WeakMap();\n\n function distributeChildToInsertionPoint(child, ins ertionPoint) {\n getDistributedChildNodes(insertionPoint).push(child);\n a ssignToInsertionPoint(child, insertionPoint);\n\n var eventParents = eventPar entsTable.get(child);\n if (!eventParents)\n eventParentsTable.set(child , eventParents = []);\n eventParents.push(insertionPoint);\n }\n\n function resetDistributedChildNodes(insertionPoint) {\n distributedChildNodesTable.se t(insertionPoint, []);\n }\n\n function getDistributedChildNodes(insertionPoin t) {\n return distributedChildNodesTable.get(insertionPoint);\n }\n\n funct ion getChildNodesSnapshot(node) {\n var result = [], i = 0;\n for (var chi ld = node.firstChild; child; child = child.nextSibling) {\n result[i++] = c hild;\n }\n return result;\n }\n\n /**\n * Visits all nodes in the tre e that fulfils the |predicate|. If the |visitor|\n * function returns |false| the traversal is aborted.\n * @param {!Node} tree\n * @param {function(!Node ) : boolean} predicate\n * @param {function(!Node) : *} visitor\n */\n func tion visit(tree, predicate, visitor) {\n // This operates on logical DOM.\n for (var node = tree.firstChild; node; node = node.nextSibling) {\n if (p redicate(node)) {\n if (visitor(node) === false)\n return;\n } else {\n visit(node, predicate, visitor);\n }\n }\n }\n\n / / Matching Insertion Points\n // http://dvcs.w3.org/hg/webcomponents/raw-file/t ip/spec/shadow/index.html#matching-insertion-points\n\n // TODO(arv): Verify th is... I don't remember why I picked this regexp.\n var selectorMatchRegExp = /^ [*.:#[a-zA-Z_|]/;\n\n var allowedPseudoRegExp = new RegExp('^:(' + [\n 'link ',\n 'visited',\n 'target',\n 'enabled',\n 'disabled',\n 'checked ',\n 'indeterminate',\n 'nth-child',\n 'nth-last-child',\n 'nth-of-t ype',\n 'nth-last-of-type',\n 'first-child',\n 'last-child',\n 'firs t-of-type',\n 'last-of-type',\n 'only-of-type',\n ].join('|') + ')');\n\n \n /**\n * @param {Element} node\n * @oaram {Element} point The insertion p oint element.\n * @return {boolean} Whether the node matches the insertion poi nt.\n */\n function matchesCriteria(node, point) {\n var select = point.ge tAttribute('select');\n if (!select)\n return true;\n\n // Here we kn ow the select attribute is a non empty string.\n select = select.trim();\n if (!select)\n return true;\n\n if (!(node instanceof Element))\n return false;\n\n // The native matches function in IE9 does not correctly wo rk with elements\n // that are not in the document.\n // TODO(arv): Implem ent matching in JS.\n // https://github.com/Polymer/ShadowDOM/issues/361\n if (select === '*' || select === node.localName)\n return true;\n\n // TODO(arv): This does not seem right. Need to check for a simple selector.\n i f (!selectorMatchRegExp.test(select))\n return false;\n\n // TODO(arv): This no longer matches the spec.\n if (select[0] === ':' && !allowedPseudoReg Exp.test(select))\n return false;\n\n try {\n return node.matches(s elect);\n } catch (ex) {\n // Invalid selector.\n return false;\n }\n }\n\n var request = oneOf(window, [\n 'requestAnimationFrame',\n ' mozRequestAnimationFrame',\n 'webkitRequestAnimationFrame',\n 'setTimeout' \n ]);\n\n var pendingDirtyRenderers = [];\n var renderTimer;\n\n function r enderAllPending() {\n for (var i = 0; i < pendingDirtyRenderers.length; i++) {\n pendingDirtyRenderers[i].render();\n }\n pendingDirtyRenderers = [];\n }\n\n function handleRequestAnimationFrame() {\n renderTimer = null;\ n renderAllPending();\n }\n\n /**\n * Returns existing shadow renderer fo r a host or creates it if it is needed.\n * @params {!Element} host\n * @ret urn {!ShadowRenderer}\n */\n function getRendererForHost(host) {\n var ren derer = rendererForHostTable.get(host);\n if (!renderer) {\n renderer = new ShadowRenderer(host);\n rendererForHostTable.set(host, renderer);\n }\n return renderer;\n }\n\n function getShadowRootAncestor(node) {\n fo r (; node; node = node.parentNode) {\n if (node instanceof ShadowRoot)\n return node;\n }\n return null;\n }\n\n function getRendererForShad owRoot(shadowRoot) {\n return getRendererForHost(shadowRoot.host);\n }\n\n var spliceDiff = new ArraySplice();\n spliceDiff.equals = function(renderNode, rawNode) {\n return unwrap(renderNode.node) === rawNode;\n };\n\n /**\n * RenderNode is used as an in memory \"render tree\". When we render the\n * co mposed tree we create a tree of RenderNodes, then we diff this against\n * the real DOM tree and make minimal changes as needed.\n */\n function RenderNode (node) {\n this.skip = false;\n this.node = node;\n this.childNodes = [ ];\n }\n\n RenderNode.prototype = {\n append: function(node) {\n var r v = new RenderNode(node);\n this.childNodes.push(rv);\n return rv;\n },\n\n sync: function(opt_added) {\n if (this.skip)\n return;\n \n var nodeWrapper = this.node;\n // plain array of RenderNodes\n var newChildren = this.childNodes;\n // plain array of real nodes.\n var oldChildren = getChildNodesSnapshot(unwrap(nodeWrapper));\n var added = opt_added || new WeakMap();\n\n var splices = spliceDiff.calculateSplices( newChildren, oldChildren);\n\n var newIndex = 0, oldIndex = 0;\n var l astIndex = 0;\n for (var i = 0; i < splices.length; i++) {\n var spl ice = splices[i];\n for (; lastIndex < splice.index; lastIndex++) {\n oldIndex++;\n newChildren[newIndex++].sync(added);\n }\n\n var removedCount = splice.removed.length;\n for (var j = 0; j < r emovedCount; j++) {\n var wrapper = wrap(oldChildren[oldIndex++]);\n if (!added.get(wrapper))\n remove(wrapper);\n }\n\n var addedCount = splice.addedCount;\n var refNode = oldChildren[oldIn dex] && wrap(oldChildren[oldIndex]);\n for (var j = 0; j < addedCount; j+ +) {\n var newChildRenderNode = newChildren[newIndex++];\n var newChildWrapper = newChildRenderNode.node;\n insertBefore(nodeWrapper, newChildWrapper, refNode);\n\n // Keep track of added so that we do no t remove the node after it\n // has been added.\n added.set(ne wChildWrapper, true);\n\n newChildRenderNode.sync(added);\n }\n\ n lastIndex += addedCount;\n }\n\n for (var i = lastIndex; i < newChildren.length; i++) {\n newChildren[i].sync(added);\n }\n }\ n };\n\n function ShadowRenderer(host) {\n this.host = host;\n this.dirt y = false;\n this.invalidateAttributes();\n this.associateNode(host);\n } \n\n ShadowRenderer.prototype = {\n\n // http://dvcs.w3.org/hg/webcomponents /raw-file/tip/spec/shadow/index.html#rendering-shadow-trees\n render: functio n(opt_renderNode) {\n if (!this.dirty)\n return;\n\n this.inval idateAttributes();\n this.treeComposition();\n\n var host = this.host; \n var shadowRoot = host.shadowRoot;\n\n this.associateNode(host);\n var topMostRenderer = !renderNode;\n var renderNode = opt_renderNode || new RenderNode(host);\n\n for (var node = shadowRoot.firstChild; node; nod e = node.nextSibling) {\n this.renderNode(shadowRoot, renderNode, node, f alse);\n }\n\n if (topMostRenderer)\n renderNode.sync();\n\n this.dirty = false;\n },\n\n invalidate: function() {\n if (!this. dirty) {\n this.dirty = true;\n pendingDirtyRenderers.push(this);\ n if (renderTimer)\n return;\n renderTimer = window[reque st](handleRequestAnimationFrame, 0);\n }\n },\n\n renderNode: functio n(shadowRoot, renderNode, node, isNested) {\n if (isShadowHost(node)) {\n renderNode = renderNode.append(node);\n var renderer = getRendererF orHost(node);\n renderer.dirty = true; // Need to rerender due to reproj ection.\n renderer.render(renderNode);\n } else if (isInsertionPoint (node)) {\n this.renderInsertionPoint(shadowRoot, renderNode, node, isNes ted);\n } else if (isShadowInsertionPoint(node)) {\n this.renderShad owInsertionPoint(shadowRoot, renderNode, node);\n } else {\n this.re nderAsAnyDomTree(shadowRoot, renderNode, node, isNested);\n }\n },\n\n renderAsAnyDomTree: function(shadowRoot, renderNode, node, isNested) {\n renderNode = renderNode.append(node);\n\n if (isShadowHost(node)) {\n var renderer = getRendererForHost(node);\n renderNode.skip = !renderer. dirty;\n renderer.render(renderNode);\n } else {\n for (var c hild = node.firstChild; child; child = child.nextSibling) {\n this.rend erNode(shadowRoot, renderNode, child, isNested);\n }\n }\n },\n\n renderInsertionPoint: function(shadowRoot, renderNode, insertionPoint,\n isNested) {\n var distributedChildNodes = ge tDistributedChildNodes(insertionPoint);\n if (distributedChildNodes.length) {\n this.associateNode(insertionPoint);\n\n for (var i = 0; i < d istributedChildNodes.length; i++) {\n var child = distributedChildNodes [i];\n if (isInsertionPoint(child) && isNested)\n this.rende rInsertionPoint(shadowRoot, renderNode, child, isNested);\n else\n this.renderAsAnyDomTree(shadowRoot, renderNode, child, isNested);\n }\n } else {\n this.renderFallbackContent(shadowRoot, renderNode, insertionPoint);\n }\n this.associateNode(insertionPoint.parentNode);\ n },\n\n renderShadowInsertionPoint: function(shadowRoot, renderNode,\n shadowInsertionPoint) {\n var nextOld erTree = shadowRoot.olderShadowRoot;\n if (nextOlderTree) {\n assign ToInsertionPoint(nextOlderTree, shadowInsertionPoint);\n this.associateNo de(shadowInsertionPoint.parentNode);\n for (var node = nextOlderTree.firs tChild;\n node;\n node = node.nextSibling) {\n this.renderNode(nextOlderTree, renderNode, node, true);\n }\n } else {\n this.renderFallbackContent(shadowRoot, renderNode,\n shadowInsertionPoint);\n }\n },\n\n renderFallback Content: function(shadowRoot, renderNode, fallbackHost) {\n this.associateN ode(fallbackHost);\n this.associateNode(fallbackHost.parentNode);\n fo r (var node = fallbackHost.firstChild; node; node = node.nextSibling) {\n this.renderAsAnyDomTree(shadowRoot, renderNode, node, false);\n }\n },\ n\n /**\n * Invalidates the attributes used to keep track of which attrib utes may\n * cause the renderer to be invalidated.\n */\n invalidateA ttributes: function() {\n this.attributes = Object.create(null);\n },\n\ n /**\n * Parses the selector and makes this renderer dependent on the at tribute\n * being used in the selector.\n * @param {string} selector\n */\n updateDependentAttributes: function(selector) {\n if (!selector) \n return;\n\n var attributes = this.attributes;\n\n // .class\ n if (/\\.\\w+/.test(selector))\n attributes['class'] = true;\n\n // #id\n if (/#\\w+/.test(selector))\n attributes['id'] = true;\n \n selector.replace(/\\[\\s*([^\\s=\\|~\\]]+)/g, function(_, name) {\n attributes[name] = true;\n });\n\n // Pseudo selectors have been re moved from the spec.\n },\n\n dependsOnAttribute: function(name) {\n return this.attributes[name];\n },\n\n // http://dvcs.w3.org/hg/webcompone nts/raw-file/tip/spec/shadow/index.html#dfn-distribution-algorithm\n distribu te: function(tree, pool) {\n var self = this;\n\n visit(tree, isActive InsertionPoint,\n function(insertionPoint) {\n resetDistribu tedChildNodes(insertionPoint);\n self.updateDependentAttributes(\n insertionPoint.getAttribute('select'));\n\n for (var i = 0; i < pool.length; i++) { // 1.2\n var node = pool[i]; // 1.2.1 \n if (node === undefined) // removed\n continue;\n if (matchesCriteria(node, insertionPoint)) { // 1.2.2\n distributeChildToInsertionPoint(node, insertionPoint); // 1.2.2.1\n pool[i] = undefined; // 1.2.2.2\n }\n }\n });\n },\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spe c/shadow/index.html#dfn-tree-composition\n treeComposition: function () {\n var shadowHost = this.host;\n var tree = shadowHost.shadowRoot; // 1.\ n var pool = []; // 2.\n\n for (var child = shadowHost.firstChild;\n child;\n child = child.nextSibling) { // 3.\n if (is InsertionPoint(child)) { // 3.2.\n var reprojected = getDistributedChi ldNodes(child); // 3.2.1.\n // if reprojected is undef... reset it?\n if (!reprojected || !reprojected.length) // 3.2.2.\n reproj ected = getChildNodesSnapshot(child);\n pool.push.apply(pool, reproject ed); // 3.2.3.\n } else {\n pool.push(child); // 3.3.\n }\n }\n\n var shadowInsertionPoint, point;\n while (tree) { // 4 .\n // 4.1.\n shadowInsertionPoint = undefined; // Reset every it eration.\n visit(tree, isActiveShadowInsertionPoint, function(point) {\n shadowInsertionPoint = point;\n return false;\n });\n point = shadowInsertionPoint;\n\n this.distribute(tree, pool); // 4.2.\n if (point) { // 4.3.\n var nextOlderTree = tree.olderSha dowRoot; // 4.3.1.\n if (!nextOlderTree) {\n break; // 4.3 .1.1.\n } else {\n tree = nextOlderTree; // 4.3.2.2.\n assignToInsertionPoint(tree, point); // 4.3.2.2.\n continue; // 4.3.2.3.\n }\n } else {\n break; // 4.4.\n }\n }\n },\n\n associateNode: function(node) {\n node.impl.polym erShadowRenderer_ = this;\n }\n };\n\n function isInsertionPoint(node) {\n // Should this include <shadow>?\n return node instanceof HTMLContentEleme nt;\n }\n\n function isActiveInsertionPoint(node) {\n // <content> inside a nother <content> or <shadow> is considered inactive.\n return node instanceof HTMLContentElement;\n }\n\n function isShadowInsertionPoint(node) {\n retu rn node instanceof HTMLShadowElement;\n }\n\n function isActiveShadowInsertion Point(node) {\n // <shadow> inside another <content> or <shadow> is considere d inactive.\n return node instanceof HTMLShadowElement;\n }\n\n function is ShadowHost(shadowHost) {\n return shadowHost.shadowRoot;\n }\n\n function g etShadowTrees(host) {\n var trees = [];\n\n for (var tree = host.shadowRoo t; tree; tree = tree.olderShadowRoot) {\n trees.push(tree);\n }\n ret urn trees;\n }\n\n function assignToInsertionPoint(tree, point) {\n inserti onParentTable.set(tree, point);\n }\n\n // http://dvcs.w3.org/hg/webcomponents /raw-file/tip/spec/shadow/index.html#rendering-shadow-trees\n function render(h ost) {\n new ShadowRenderer(host).render();\n };\n\n // Need to rerender sh adow host when:\n //\n // - a direct child to the ShadowRoot is added or remov ed\n // - a direct child to the host is added or removed\n // - a new shadow r oot is created\n // - a direct child to a content/shadow element is added or re moved\n // - a sibling to a content/shadow element is added or removed\n // - content[select] is changed\n // - an attribute in a direct child to a host is m odified\n\n /**\n * This gets called when a node was added or removed to it.\ n */\n Node.prototype.invalidateShadowRenderer = function(force) {\n var r enderer = this.impl.polymerShadowRenderer_;\n if (renderer) {\n renderer .invalidate();\n return true;\n }\n\n return false;\n };\n\n HTMLCo ntentElement.prototype.getDistributedNodes = function() {\n // TODO(arv): We should only rerender the dirty ancestor renderers (from\n // the root and dow n).\n renderAllPending();\n return getDistributedChildNodes(this);\n };\n \n HTMLShadowElement.prototype.nodeIsInserted_ =\n HTMLContentElement.prototyp e.nodeIsInserted_ = function() {\n // Invalidate old renderer if any.\n th is.invalidateShadowRenderer();\n\n var shadowRoot = getShadowRootAncestor(thi s);\n var renderer;\n if (shadowRoot)\n renderer = getRendererForShad owRoot(shadowRoot);\n this.impl.polymerShadowRenderer_ = renderer;\n if (r enderer)\n renderer.invalidate();\n };\n\n scope.eventParentsTable = even tParentsTable;\n scope.getRendererForHost = getRendererForHost;\n scope.getSha dowTrees = getShadowTrees;\n scope.insertionParentTable = insertionParentTable; \n scope.renderAllPending = renderAllPending;\n\n // Exposed for testing\n sc ope.visual = {\n insertBefore: insertBefore,\n remove: remove,\n };\n\n}) (window.ShadowDOMPolyfill);\n",
133 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope. wrappers.HTMLElement;\n var assert = scope.assert;\n var mixin = scope.mixin;\ n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n var elementsWithFormProperty = [\n 'HTMLButtonEl ement',\n 'HTMLFieldSetElement',\n 'HTMLInputElement',\n 'HTMLKeygenEle ment',\n 'HTMLLabelElement',\n 'HTMLLegendElement',\n 'HTMLObjectElemen t',\n // HTMLOptionElement is handled in HTMLOptionElement.js\n 'HTMLOutpu tElement',\n 'HTMLSelectElement',\n 'HTMLTextAreaElement',\n ];\n\n func tion createWrapperConstructor(name) {\n if (!window[name])\n return;\n\n // Ensure we are not overriding an already existing constructor.\n assert (!scope.wrappers[name]);\n\n var GeneratedWrapper = function(node) {\n / / At this point all of them extend HTMLElement.\n HTMLElement.call(this, no de);\n }\n GeneratedWrapper.prototype = Object.create(HTMLElement.prototyp e);\n mixin(GeneratedWrapper.prototype, {\n get form() {\n return wrap(unwrap(this).form);\n },\n });\n\n registerWrapper(window[name] , GeneratedWrapper,\n document.createElement(name.slice(4, -7)));\n sc ope.wrappers[name] = GeneratedWrapper;\n }\n\n elementsWithFormProperty.forEac h(createWrapperConstructor);\n\n})(window.ShadowDOMPolyfill);\n", 133 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope. wrappers.HTMLElement;\n var assert = scope.assert;\n var mixin = scope.mixin;\ n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n var elementsWithFormProperty = [\n 'HTMLButtonEl ement',\n 'HTMLFieldSetElement',\n 'HTMLInputElement',\n 'HTMLKeygenEle ment',\n 'HTMLLabelElement',\n 'HTMLLegendElement',\n 'HTMLObjectElemen t',\n // HTMLOptionElement is handled in HTMLOptionElement.js\n 'HTMLOutpu tElement',\n 'HTMLSelectElement',\n 'HTMLTextAreaElement',\n ];\n\n func tion createWrapperConstructor(name) {\n if (!window[name])\n return;\n\n // Ensure we are not overriding an already existing constructor.\n assert (!scope.wrappers[name]);\n\n var GeneratedWrapper = function(node) {\n / / At this point all of them extend HTMLElement.\n HTMLElement.call(this, no de);\n }\n GeneratedWrapper.prototype = Object.create(HTMLElement.prototyp e);\n mixin(GeneratedWrapper.prototype, {\n get form() {\n return wrap(unwrap(this).form);\n },\n });\n\n registerWrapper(window[name] , GeneratedWrapper,\n document.createElement(name.slice(4, -7)));\n sc ope.wrappers[name] = GeneratedWrapper;\n }\n\n elementsWithFormProperty.forEac h(createWrapperConstructor);\n\n})(window.ShadowDOMPolyfill);\n",
134 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var registerWrapper = sc ope.registerWrapper;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope .unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalSelection = window.S election;\n\n function Selection(impl) {\n this.impl = impl;\n }\n Selecti on.prototype = {\n get anchorNode() {\n return wrap(this.impl.anchorNode );\n },\n get focusNode() {\n return wrap(this.impl.focusNode);\n },\n addRange: function(range) {\n this.impl.addRange(unwrap(range));\n },\n collapse: function(node, index) {\n this.impl.collapse(unwrapIfN eeded(node), index);\n },\n containsNode: function(node, allowPartial) {\n return this.impl.containsNode(unwrapIfNeeded(node), allowPartial);\n }, \n extend: function(node, offset) {\n this.impl.extend(unwrapIfNeeded(no de), offset);\n },\n getRangeAt: function(index) {\n return wrap(this .impl.getRangeAt(index));\n },\n removeRange: function(range) {\n thi s.impl.removeRange(unwrap(range));\n },\n selectAllChildren: function(node ) {\n this.impl.selectAllChildren(unwrapIfNeeded(node));\n },\n toStr ing: function() {\n return this.impl.toString();\n }\n };\n\n // WebKi t extensions. Not implemented.\n // readonly attribute Node baseNode;\n // rea donly attribute long baseOffset;\n // readonly attribute Node extentNode;\n // readonly attribute long extentOffset;\n // [RaisesException] void setBaseAndEx tent([Default=Undefined] optional Node baseNode,\n // [De fault=Undefined] optional long baseOffset,\n // [Default= Undefined] optional Node extentNode,\n // [Default=Undefi ned] optional long extentOffset);\n // [RaisesException, ImplementedAs=collapse ] void setPosition([Default=Undefined] optional Node node,\n // [Default=Undefined] optional long offset);\n\n registerWrapper(window.Selecti on, Selection, window.getSelection());\n\n scope.wrappers.Selection = Selection ;\n\n})(window.ShadowDOMPolyfill);\n", 134 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var registerWrapper = sc ope.registerWrapper;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope .unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalSelection = window.S election;\n\n function Selection(impl) {\n this.impl = impl;\n }\n Selecti on.prototype = {\n get anchorNode() {\n return wrap(this.impl.anchorNode );\n },\n get focusNode() {\n return wrap(this.impl.focusNode);\n },\n addRange: function(range) {\n this.impl.addRange(unwrap(range));\n },\n collapse: function(node, index) {\n this.impl.collapse(unwrapIfN eeded(node), index);\n },\n containsNode: function(node, allowPartial) {\n return this.impl.containsNode(unwrapIfNeeded(node), allowPartial);\n }, \n extend: function(node, offset) {\n this.impl.extend(unwrapIfNeeded(no de), offset);\n },\n getRangeAt: function(index) {\n return wrap(this .impl.getRangeAt(index));\n },\n removeRange: function(range) {\n thi s.impl.removeRange(unwrap(range));\n },\n selectAllChildren: function(node ) {\n this.impl.selectAllChildren(unwrapIfNeeded(node));\n },\n toStr ing: function() {\n return this.impl.toString();\n }\n };\n\n // WebKi t extensions. Not implemented.\n // readonly attribute Node baseNode;\n // rea donly attribute long baseOffset;\n // readonly attribute Node extentNode;\n // readonly attribute long extentOffset;\n // [RaisesException] void setBaseAndEx tent([Default=Undefined] optional Node baseNode,\n // [De fault=Undefined] optional long baseOffset,\n // [Default= Undefined] optional Node extentNode,\n // [Default=Undefi ned] optional long extentOffset);\n // [RaisesException, ImplementedAs=collapse ] void setPosition([Default=Undefined] optional Node node,\n // [Default=Undefined] optional long offset);\n\n registerWrapper(window.Selecti on, Selection, window.getSelection());\n\n scope.wrappers.Selection = Selection ;\n\n})(window.ShadowDOMPolyfill);\n",
135 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var GetElementsByInterfa ce = scope.GetElementsByInterface;\n var Node = scope.wrappers.Node;\n var Par entNodeInterface = scope.ParentNodeInterface;\n var Selection = scope.wrappers. Selection;\n var SelectorsInterface = scope.SelectorsInterface;\n var ShadowRo ot = scope.wrappers.ShadowRoot;\n var cloneNode = scope.cloneNode;\n var defin eWrapGetter = scope.defineWrapGetter;\n var elementFromPoint = scope.elementFro mPoint;\n var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;\n var m atchesNames = scope.matchesNames;\n var mixin = scope.mixin;\n var registerWra pper = scope.registerWrapper;\n var renderAllPending = scope.renderAllPending;\ n var rewrap = scope.rewrap;\n var unwrap = scope.unwrap;\n var wrap = scope. wrap;\n var wrapEventTargetMethods = scope.wrapEventTargetMethods;\n var wrapN odeList = scope.wrapNodeList;\n\n var implementationTable = new WeakMap();\n\n function Document(node) {\n Node.call(this, node);\n }\n Document.prototyp e = Object.create(Node.prototype);\n\n defineWrapGetter(Document, 'documentElem ent');\n\n // Conceptually both body and head can be in a shadow but suporting that seems\n // overkill at this point.\n defineWrapGetter(Document, 'body');\ n defineWrapGetter(Document, 'head');\n\n // document cannot be overridden so we override a bunch of its methods\n // directly on the instance.\n\n function wrapMethod(name) {\n var original = document[name];\n Document.prototype[ name] = function() {\n return wrap(original.apply(this.impl, arguments));\n };\n }\n\n [\n 'createComment',\n 'createDocumentFragment',\n 'cr eateElement',\n 'createElementNS',\n 'createEvent',\n 'createEventNS',\ n 'createRange',\n 'createTextNode',\n 'getElementById'\n ].forEach(wr apMethod);\n\n var originalAdoptNode = document.adoptNode;\n\n function adoptN odeNoRemove(node, doc) {\n originalAdoptNode.call(doc.impl, unwrap(node));\n adoptSubtree(node, doc);\n }\n\n function adoptSubtree(node, doc) {\n if (node.shadowRoot)\n doc.adoptNode(node.shadowRoot);\n if (node instance of ShadowRoot)\n adoptOlderShadowRoots(node, doc);\n for (var child = no de.firstChild; child; child = child.nextSibling) {\n adoptSubtree(child, do c);\n }\n }\n\n function adoptOlderShadowRoots(shadowRoot, doc) {\n var oldShadowRoot = shadowRoot.olderShadowRoot;\n if (oldShadowRoot)\n doc.a doptNode(oldShadowRoot);\n }\n\n var originalGetSelection = document.getSelect ion;\n\n mixin(Document.prototype, {\n adoptNode: function(node) {\n if (node.parentNode)\n node.parentNode.removeChild(node);\n adoptNodeN oRemove(node, this);\n return node;\n },\n elementFromPoint: function (x, y) {\n return elementFromPoint(this, this, x, y);\n },\n importNo de: function(node, deep) {\n return cloneNode(node, deep, this.impl);\n },\n getSelection: function() {\n renderAllPending();\n return new Selection(originalGetSelection.call(unwrap(this)));\n }\n });\n\n if (docum ent.registerElement) {\n var originalRegisterElement = document.registerEleme nt;\n Document.prototype.registerElement = function(tagName, object) {\n var prototype = object.prototype;\n\n // If we already used the object as a prototype for another custom\n // element.\n if (scope.nativePrototy peTable.get(prototype)) {\n // TODO(arv): DOMException\n throw new Error('NotSupportedError');\n }\n\n // Find first object on the proto type chain that already have a native\n // prototype. Keep track of all the objects before that so we can create\n // a similar structure for the nati ve case.\n var proto = Object.getPrototypeOf(prototype);\n var nativeP rototype;\n var prototypes = [];\n while (proto) {\n nativeProt otype = scope.nativePrototypeTable.get(proto);\n if (nativePrototype)\n break;\n prototypes.push(proto);\n proto = Object.getProto typeOf(proto);\n }\n\n if (!nativePrototype) {\n // TODO(arv): DOMException\n throw new Error('NotSupportedError');\n }\n\n // This works by creating a new prototype object that is empty, but has\n // the native prototype as its proto. The original prototype object\n // passe d into register is used as the wrapper prototype.\n\n var newPrototype = Ob ject.create(nativePrototype);\n for (var i = prototypes.length - 1; i >= 0; i--) {\n newPrototype = Object.create(newPrototype);\n }\n\n / / Add callbacks if present.\n // Names are taken from:\n // https:// code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bin dings/v8/CustomElementConstructorBuilder.cpp&sq=package:chromium&type=cs&l=156\n // and not from the spec since the spec is out of date.\n [\n 'createdCallback',\n 'attachedCallback',\n 'detachedCallback',\n 'attributeChangedCallback',\n ].forEach(function(name) {\n var f = prototype[name];\n if (!f)\n return;\n newPrototype[ name] = function() {\n // if this element has been wrapped prior to reg istration,\n // the wrapper is stale; in this case rewrap\n if (!(wrap(this) instanceof CustomElementConstructor)) {\n rewrap(this) ;\n }\n f.apply(wrap(this), arguments);\n };\n }); \n\n var p = {prototype: newPrototype};\n if (object.extends)\n p.extends = object.extends;\n\n function CustomElementConstructor(node) {\ n if (!node) {\n if (object.extends) {\n return docum ent.createElement(object.extends, tagName);\n } else {\n ret urn document.createElement(tagName);\n }\n }\n this.impl = node;\n }\n CustomElementConstructor.prototype = prototype;\n C ustomElementConstructor.prototype.constructor = CustomElementConstructor;\n\n scope.constructorTable.set(newPrototype, CustomElementConstructor);\n sc ope.nativePrototypeTable.set(prototype, newPrototype);\n\n // registration is synchronous so do it last\n var nativeConstructor = originalRegisterElem ent.call(unwrap(this),\n tagName, p);\n return CustomElementConstr uctor;\n };\n\n forwardMethodsToWrapper([\n window.HTMLDocument || wi ndow.Document, // Gecko adds these to HTMLDocument\n ], [\n 'registerEl ement',\n ]);\n }\n\n // We also override some of the methods on document.b ody and document.head\n // for convenience.\n forwardMethodsToWrapper([\n w indow.HTMLBodyElement,\n window.HTMLDocument || window.Document, // Gecko ad ds these to HTMLDocument\n window.HTMLHeadElement,\n window.HTMLHtmlElemen t,\n ], [\n 'appendChild',\n 'compareDocumentPosition',\n 'contains',\ n 'getElementsByClassName',\n 'getElementsByTagName',\n 'getElementsByT agNameNS',\n 'insertBefore',\n 'querySelector',\n 'querySelectorAll',\n 'removeChild',\n 'replaceChild',\n ].concat(matchesNames));\n\n forward MethodsToWrapper([\n window.HTMLDocument || window.Document, // Gecko adds t hese to HTMLDocument\n ], [\n 'adoptNode',\n 'importNode',\n 'contains ',\n 'createComment',\n 'createDocumentFragment',\n 'createElement',\n 'createElementNS',\n 'createEvent',\n 'createEventNS',\n 'createRang e',\n 'createTextNode',\n 'elementFromPoint',\n 'getElementById',\n 'getSelection',\n ]);\n\n mixin(Document.prototype, GetElementsByInterface);\n mixin(Document.prototype, ParentNodeInterface);\n mixin(Document.prototype, S electorsInterface);\n\n mixin(Document.prototype, {\n get implementation() { \n var implementation = implementationTable.get(this);\n if (implement ation)\n return implementation;\n implementation =\n new DO MImplementation(unwrap(this).implementation);\n implementationTable.set(thi s, implementation);\n return implementation;\n }\n });\n\n registerWra pper(window.Document, Document,\n document.implementation.createHTMLDocumen t(''));\n\n // Both WebKit and Gecko uses HTMLDocument for document. HTML5/DOM only has\n // one Document interface and IE implements the standard correctly.\ n if (window.HTMLDocument)\n registerWrapper(window.HTMLDocument, Document); \n\n wrapEventTargetMethods([\n window.HTMLBodyElement,\n window.HTMLDocu ment || window.Document, // Gecko adds these to HTMLDocument\n window.HTMLHe adElement,\n ]);\n\n function DOMImplementation(impl) {\n this.impl = impl; \n }\n\n function wrapImplMethod(constructor, name) {\n var original = docu ment.implementation[name];\n constructor.prototype[name] = function() {\n return wrap(original.apply(this.impl, arguments));\n };\n }\n\n function forwardImplMethod(constructor, name) {\n var original = document.implementati on[name];\n constructor.prototype[name] = function() {\n return original .apply(this.impl, arguments);\n };\n }\n\n wrapImplMethod(DOMImplementation , 'createDocumentType');\n wrapImplMethod(DOMImplementation, 'createDocument'); \n wrapImplMethod(DOMImplementation, 'createHTMLDocument');\n forwardImplMetho d(DOMImplementation, 'hasFeature');\n\n registerWrapper(window.DOMImplementatio n, DOMImplementation);\n\n forwardMethodsToWrapper([\n window.DOMImplementat ion,\n ], [\n 'createDocumentType',\n 'createDocument',\n 'createHTMLD ocument',\n 'hasFeature',\n ]);\n\n scope.adoptNodeNoRemove = adoptNodeNoRe move;\n scope.wrappers.DOMImplementation = DOMImplementation;\n scope.wrappers .Document = Document;\n\n})(window.ShadowDOMPolyfill);\n", 135 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var GetElementsByInterfa ce = scope.GetElementsByInterface;\n var Node = scope.wrappers.Node;\n var Par entNodeInterface = scope.ParentNodeInterface;\n var Selection = scope.wrappers. Selection;\n var SelectorsInterface = scope.SelectorsInterface;\n var ShadowRo ot = scope.wrappers.ShadowRoot;\n var cloneNode = scope.cloneNode;\n var defin eWrapGetter = scope.defineWrapGetter;\n var elementFromPoint = scope.elementFro mPoint;\n var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;\n var m atchesNames = scope.matchesNames;\n var mixin = scope.mixin;\n var registerWra pper = scope.registerWrapper;\n var renderAllPending = scope.renderAllPending;\ n var rewrap = scope.rewrap;\n var unwrap = scope.unwrap;\n var wrap = scope. wrap;\n var wrapEventTargetMethods = scope.wrapEventTargetMethods;\n var wrapN odeList = scope.wrapNodeList;\n\n var implementationTable = new WeakMap();\n\n function Document(node) {\n Node.call(this, node);\n }\n Document.prototyp e = Object.create(Node.prototype);\n\n defineWrapGetter(Document, 'documentElem ent');\n\n // Conceptually both body and head can be in a shadow but suporting that seems\n // overkill at this point.\n defineWrapGetter(Document, 'body');\ n defineWrapGetter(Document, 'head');\n\n // document cannot be overridden so we override a bunch of its methods\n // directly on the instance.\n\n function wrapMethod(name) {\n var original = document[name];\n Document.prototype[ name] = function() {\n return wrap(original.apply(this.impl, arguments));\n };\n }\n\n [\n 'createComment',\n 'createDocumentFragment',\n 'cr eateElement',\n 'createElementNS',\n 'createEvent',\n 'createEventNS',\ n 'createRange',\n 'createTextNode',\n 'getElementById'\n ].forEach(wr apMethod);\n\n var originalAdoptNode = document.adoptNode;\n\n function adoptN odeNoRemove(node, doc) {\n originalAdoptNode.call(doc.impl, unwrap(node));\n adoptSubtree(node, doc);\n }\n\n function adoptSubtree(node, doc) {\n if (node.shadowRoot)\n doc.adoptNode(node.shadowRoot);\n if (node instance of ShadowRoot)\n adoptOlderShadowRoots(node, doc);\n for (var child = no de.firstChild; child; child = child.nextSibling) {\n adoptSubtree(child, do c);\n }\n }\n\n function adoptOlderShadowRoots(shadowRoot, doc) {\n var oldShadowRoot = shadowRoot.olderShadowRoot;\n if (oldShadowRoot)\n doc.a doptNode(oldShadowRoot);\n }\n\n var originalGetSelection = document.getSelect ion;\n\n mixin(Document.prototype, {\n adoptNode: function(node) {\n if (node.parentNode)\n node.parentNode.removeChild(node);\n adoptNodeN oRemove(node, this);\n return node;\n },\n elementFromPoint: function (x, y) {\n return elementFromPoint(this, this, x, y);\n },\n importNo de: function(node, deep) {\n return cloneNode(node, deep, this.impl);\n },\n getSelection: function() {\n renderAllPending();\n return new Selection(originalGetSelection.call(unwrap(this)));\n }\n });\n\n if (docum ent.registerElement) {\n var originalRegisterElement = document.registerEleme nt;\n Document.prototype.registerElement = function(tagName, object) {\n var prototype = object.prototype;\n\n // If we already used the object as a prototype for another custom\n // element.\n if (scope.nativePrototy peTable.get(prototype)) {\n // TODO(arv): DOMException\n throw new Error('NotSupportedError');\n }\n\n // Find first object on the proto type chain that already have a native\n // prototype. Keep track of all the objects before that so we can create\n // a similar structure for the nati ve case.\n var proto = Object.getPrototypeOf(prototype);\n var nativeP rototype;\n var prototypes = [];\n while (proto) {\n nativeProt otype = scope.nativePrototypeTable.get(proto);\n if (nativePrototype)\n break;\n prototypes.push(proto);\n proto = Object.getProto typeOf(proto);\n }\n\n if (!nativePrototype) {\n // TODO(arv): DOMException\n throw new Error('NotSupportedError');\n }\n\n // This works by creating a new prototype object that is empty, but has\n // the native prototype as its proto. The original prototype object\n // passe d into register is used as the wrapper prototype.\n\n var newPrototype = Ob ject.create(nativePrototype);\n for (var i = prototypes.length - 1; i >= 0; i--) {\n newPrototype = Object.create(newPrototype);\n }\n\n / / Add callbacks if present.\n // Names are taken from:\n // https:// code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bin dings/v8/CustomElementConstructorBuilder.cpp&sq=package:chromium&type=cs&l=156\n // and not from the spec since the spec is out of date.\n [\n 'createdCallback',\n 'attachedCallback',\n 'detachedCallback',\n 'attributeChangedCallback',\n ].forEach(function(name) {\n var f = prototype[name];\n if (!f)\n return;\n newPrototype[ name] = function() {\n // if this element has been wrapped prior to reg istration,\n // the wrapper is stale; in this case rewrap\n if (!(wrap(this) instanceof CustomElementConstructor)) {\n rewrap(this) ;\n }\n f.apply(wrap(this), arguments);\n };\n }); \n\n var p = {prototype: newPrototype};\n if (object.extends)\n p.extends = object.extends;\n\n function CustomElementConstructor(node) {\ n if (!node) {\n if (object.extends) {\n return docum ent.createElement(object.extends, tagName);\n } else {\n ret urn document.createElement(tagName);\n }\n }\n this.impl = node;\n }\n CustomElementConstructor.prototype = prototype;\n C ustomElementConstructor.prototype.constructor = CustomElementConstructor;\n\n scope.constructorTable.set(newPrototype, CustomElementConstructor);\n sc ope.nativePrototypeTable.set(prototype, newPrototype);\n\n // registration is synchronous so do it last\n var nativeConstructor = originalRegisterElem ent.call(unwrap(this),\n tagName, p);\n return CustomElementConstr uctor;\n };\n\n forwardMethodsToWrapper([\n window.HTMLDocument || wi ndow.Document, // Gecko adds these to HTMLDocument\n ], [\n 'registerEl ement',\n ]);\n }\n\n // We also override some of the methods on document.b ody and document.head\n // for convenience.\n forwardMethodsToWrapper([\n w indow.HTMLBodyElement,\n window.HTMLDocument || window.Document, // Gecko ad ds these to HTMLDocument\n window.HTMLHeadElement,\n window.HTMLHtmlElemen t,\n ], [\n 'appendChild',\n 'compareDocumentPosition',\n 'contains',\ n 'getElementsByClassName',\n 'getElementsByTagName',\n 'getElementsByT agNameNS',\n 'insertBefore',\n 'querySelector',\n 'querySelectorAll',\n 'removeChild',\n 'replaceChild',\n ].concat(matchesNames));\n\n forward MethodsToWrapper([\n window.HTMLDocument || window.Document, // Gecko adds t hese to HTMLDocument\n ], [\n 'adoptNode',\n 'importNode',\n 'contains ',\n 'createComment',\n 'createDocumentFragment',\n 'createElement',\n 'createElementNS',\n 'createEvent',\n 'createEventNS',\n 'createRang e',\n 'createTextNode',\n 'elementFromPoint',\n 'getElementById',\n 'getSelection',\n ]);\n\n mixin(Document.prototype, GetElementsByInterface);\n mixin(Document.prototype, ParentNodeInterface);\n mixin(Document.prototype, S electorsInterface);\n\n mixin(Document.prototype, {\n get implementation() { \n var implementation = implementationTable.get(this);\n if (implement ation)\n return implementation;\n implementation =\n new DO MImplementation(unwrap(this).implementation);\n implementationTable.set(thi s, implementation);\n return implementation;\n }\n });\n\n registerWra pper(window.Document, Document,\n document.implementation.createHTMLDocumen t(''));\n\n // Both WebKit and Gecko uses HTMLDocument for document. HTML5/DOM only has\n // one Document interface and IE implements the standard correctly.\ n if (window.HTMLDocument)\n registerWrapper(window.HTMLDocument, Document); \n\n wrapEventTargetMethods([\n window.HTMLBodyElement,\n window.HTMLDocu ment || window.Document, // Gecko adds these to HTMLDocument\n window.HTMLHe adElement,\n ]);\n\n function DOMImplementation(impl) {\n this.impl = impl; \n }\n\n function wrapImplMethod(constructor, name) {\n var original = docu ment.implementation[name];\n constructor.prototype[name] = function() {\n return wrap(original.apply(this.impl, arguments));\n };\n }\n\n function forwardImplMethod(constructor, name) {\n var original = document.implementati on[name];\n constructor.prototype[name] = function() {\n return original .apply(this.impl, arguments);\n };\n }\n\n wrapImplMethod(DOMImplementation , 'createDocumentType');\n wrapImplMethod(DOMImplementation, 'createDocument'); \n wrapImplMethod(DOMImplementation, 'createHTMLDocument');\n forwardImplMetho d(DOMImplementation, 'hasFeature');\n\n registerWrapper(window.DOMImplementatio n, DOMImplementation);\n\n forwardMethodsToWrapper([\n window.DOMImplementat ion,\n ], [\n 'createDocumentType',\n 'createDocument',\n 'createHTMLD ocument',\n 'hasFeature',\n ]);\n\n scope.adoptNodeNoRemove = adoptNodeNoRe move;\n scope.wrappers.DOMImplementation = DOMImplementation;\n scope.wrappers .Document = Document;\n\n})(window.ShadowDOMPolyfill);\n",
136 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope. wrappers.EventTarget;\n var Selection = scope.wrappers.Selection;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var renderAllP ending = scope.renderAllPending;\n var unwrap = scope.unwrap;\n var unwrapIfNe eded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalWindow = window.Window;\n var originalGetComputedStyle = window.getComputedStyle;\n va r originalGetSelection = window.getSelection;\n\n function Window(impl) {\n EventTarget.call(this, impl);\n }\n Window.prototype = Object.create(EventTarg et.prototype);\n\n OriginalWindow.prototype.getComputedStyle = function(el, pse udo) {\n return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pse udo);\n };\n\n OriginalWindow.prototype.getSelection = function() {\n retur n wrap(this || window).getSelection();\n };\n\n // Work around for https://bug zilla.mozilla.org/show_bug.cgi?id=943065\n delete window.getComputedStyle;\n d elete window.getSelection;\n\n ['addEventListener', 'removeEventListener', 'dis patchEvent'].forEach(\n function(name) {\n OriginalWindow.prototype[ name] = function() {\n var w = wrap(this || window);\n return w[name].apply(w, arguments);\n };\n\n // Work around for https://b ugzilla.mozilla.org/show_bug.cgi?id=943065\n delete window[name];\n });\n\n mixin(Window.prototype, {\n getComputedStyle: function(el, pseudo) { \n renderAllPending();\n return originalGetComputedStyle.call(unwrap(t his), unwrapIfNeeded(el),\n pseudo);\n },\n getSelection: function() {\n renderAllPending();\n return new Selection(originalGetSelection.call(unwrap(this)));\n },\n });\n\n regi sterWrapper(OriginalWindow, Window);\n\n scope.wrappers.Window = Window;\n\n})( window.ShadowDOMPolyfill);\n", 136 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope. wrappers.EventTarget;\n var Selection = scope.wrappers.Selection;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var renderAllP ending = scope.renderAllPending;\n var unwrap = scope.unwrap;\n var unwrapIfNe eded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalWindow = window.Window;\n var originalGetComputedStyle = window.getComputedStyle;\n va r originalGetSelection = window.getSelection;\n\n function Window(impl) {\n EventTarget.call(this, impl);\n }\n Window.prototype = Object.create(EventTarg et.prototype);\n\n OriginalWindow.prototype.getComputedStyle = function(el, pse udo) {\n return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pse udo);\n };\n\n OriginalWindow.prototype.getSelection = function() {\n retur n wrap(this || window).getSelection();\n };\n\n // Work around for https://bug zilla.mozilla.org/show_bug.cgi?id=943065\n delete window.getComputedStyle;\n d elete window.getSelection;\n\n ['addEventListener', 'removeEventListener', 'dis patchEvent'].forEach(\n function(name) {\n OriginalWindow.prototype[ name] = function() {\n var w = wrap(this || window);\n return w[name].apply(w, arguments);\n };\n\n // Work around for https://b ugzilla.mozilla.org/show_bug.cgi?id=943065\n delete window[name];\n });\n\n mixin(Window.prototype, {\n getComputedStyle: function(el, pseudo) { \n renderAllPending();\n return originalGetComputedStyle.call(unwrap(t his), unwrapIfNeeded(el),\n pseudo);\n },\n getSelection: function() {\n renderAllPending();\n return new Selection(originalGetSelection.call(unwrap(this)));\n },\n });\n\n regi sterWrapper(OriginalWindow, Window);\n\n scope.wrappers.Window = Window;\n\n})( window.ShadowDOMPolyfill);\n",
137 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var isWrapperFor = scope .isWrapperFor;\n\n // This is a list of the elements we currently override the global constructor\n // for.\n var elements = {\n 'a': 'HTMLAnchorElement', \n\n // Do not create an applet element by default since it shows a warning i n\n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'app let': 'HTMLAppletElement',\n\n 'area': 'HTMLAreaElement',\n 'br': 'HTMLBRE lement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n 'b utton': 'HTMLButtonElement',\n // 'command': 'HTMLCommandElement', // Not fu lly implemented in Gecko.\n 'dl': 'HTMLDListElement',\n 'datalist': 'HTMLD ataListElement',\n 'data': 'HTMLDataElement',\n 'dir': 'HTMLDirectoryEleme nt',\n 'div': 'HTMLDivElement',\n 'embed': 'HTMLEmbedElement',\n 'field set': 'HTMLFieldSetElement',\n 'font': 'HTMLFontElement',\n 'form': 'HTMLF ormElement',\n 'frame': 'HTMLFrameElement',\n 'frameset': 'HTMLFrameSetEle ment',\n 'hr': 'HTMLHRElement',\n 'head': 'HTMLHeadElement',\n 'h1': 'H TMLHeadingElement',\n 'html': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameEl ement',\n 'input': 'HTMLInputElement',\n 'li': 'HTMLLIElement',\n 'labe l': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'link': 'HTMLLi nkElement',\n 'map': 'HTMLMapElement',\n 'marquee': 'HTMLMarqueeElement',\ n 'menu': 'HTMLMenuElement',\n 'menuitem': 'HTMLMenuItemElement',\n 'me ta': 'HTMLMetaElement',\n 'meter': 'HTMLMeterElement',\n 'del': 'HTMLModEl ement',\n 'ol': 'HTMLOListElement',\n 'object': 'HTMLObjectElement',\n 'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement',\n 'out put': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'param': 'HTML ParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLProgressEleme nt',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement',\n 'sel ect': 'HTMLSelectElement',\n 'source': 'HTMLSourceElement',\n 'span': 'HTM LSpanElement',\n 'style': 'HTMLStyleElement',\n 'time': 'HTMLTimeElement', \n 'caption': 'HTMLTableCaptionElement',\n // WebKit and Moz are wrong:\n // https://bugs.webkit.org/show_bug.cgi?id=111469\n // https://bugzilla.mo zilla.org/show_bug.cgi?id=848096\n // 'td': 'HTMLTableCellElement',\n 'col ': 'HTMLTableColElement',\n 'table': 'HTMLTableElement',\n 'tr': 'HTMLTabl eRowElement',\n 'thead': 'HTMLTableSectionElement',\n 'tbody': 'HTMLTableS ectionElement',\n 'textarea': 'HTMLTextAreaElement',\n 'track': 'HTMLTrack Element',\n 'title': 'HTMLTitleElement',\n 'ul': 'HTMLUListElement',\n 'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tagName) {\ n var nativeConstructorName = elements[tagName];\n var nativeConstructor = window[nativeConstructorName];\n if (!nativeConstructor)\n return;\n var element = document.createElement(tagName);\n var wrapperConstructor = el ement.constructor;\n window[nativeConstructorName] = wrapperConstructor;\n } \n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.getOwnProp ertyNames(scope.wrappers).forEach(function(name) {\n window[name] = scope.wra ppers[name]\n });\n\n // Export for testing.\n scope.knownElements = elements ;\n\n})(window.ShadowDOMPolyfill);\n", 137 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this source code is goverened by a BSD-style\n// license that can be found in the LI CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var isWrapperFor = scope .isWrapperFor;\n\n // This is a list of the elements we currently override the global constructor\n // for.\n var elements = {\n 'a': 'HTMLAnchorElement', \n\n // Do not create an applet element by default since it shows a warning i n\n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'app let': 'HTMLAppletElement',\n\n 'area': 'HTMLAreaElement',\n 'br': 'HTMLBRE lement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n 'b utton': 'HTMLButtonElement',\n // 'command': 'HTMLCommandElement', // Not fu lly implemented in Gecko.\n 'dl': 'HTMLDListElement',\n 'datalist': 'HTMLD ataListElement',\n 'data': 'HTMLDataElement',\n 'dir': 'HTMLDirectoryEleme nt',\n 'div': 'HTMLDivElement',\n 'embed': 'HTMLEmbedElement',\n 'field set': 'HTMLFieldSetElement',\n 'font': 'HTMLFontElement',\n 'form': 'HTMLF ormElement',\n 'frame': 'HTMLFrameElement',\n 'frameset': 'HTMLFrameSetEle ment',\n 'hr': 'HTMLHRElement',\n 'head': 'HTMLHeadElement',\n 'h1': 'H TMLHeadingElement',\n 'html': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameEl ement',\n 'input': 'HTMLInputElement',\n 'li': 'HTMLLIElement',\n 'labe l': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'link': 'HTMLLi nkElement',\n 'map': 'HTMLMapElement',\n 'marquee': 'HTMLMarqueeElement',\ n 'menu': 'HTMLMenuElement',\n 'menuitem': 'HTMLMenuItemElement',\n 'me ta': 'HTMLMetaElement',\n 'meter': 'HTMLMeterElement',\n 'del': 'HTMLModEl ement',\n 'ol': 'HTMLOListElement',\n 'object': 'HTMLObjectElement',\n 'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement',\n 'out put': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'param': 'HTML ParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLProgressEleme nt',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement',\n 'sel ect': 'HTMLSelectElement',\n 'source': 'HTMLSourceElement',\n 'span': 'HTM LSpanElement',\n 'style': 'HTMLStyleElement',\n 'time': 'HTMLTimeElement', \n 'caption': 'HTMLTableCaptionElement',\n // WebKit and Moz are wrong:\n // https://bugs.webkit.org/show_bug.cgi?id=111469\n // https://bugzilla.mo zilla.org/show_bug.cgi?id=848096\n // 'td': 'HTMLTableCellElement',\n 'col ': 'HTMLTableColElement',\n 'table': 'HTMLTableElement',\n 'tr': 'HTMLTabl eRowElement',\n 'thead': 'HTMLTableSectionElement',\n 'tbody': 'HTMLTableS ectionElement',\n 'textarea': 'HTMLTextAreaElement',\n 'track': 'HTMLTrack Element',\n 'title': 'HTMLTitleElement',\n 'ul': 'HTMLUListElement',\n 'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tagName) {\ n var nativeConstructorName = elements[tagName];\n var nativeConstructor = window[nativeConstructorName];\n if (!nativeConstructor)\n return;\n var element = document.createElement(tagName);\n var wrapperConstructor = el ement.constructor;\n window[nativeConstructorName] = wrapperConstructor;\n } \n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.getOwnProp ertyNames(scope.wrappers).forEach(function(name) {\n window[name] = scope.wra ppers[name]\n });\n\n // Export for testing.\n scope.knownElements = elements ;\n\n})(window.ShadowDOMPolyfill);\n",
138 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function() {\n\n // convenient global\n window.wrap = Sh adowDOMPolyfill.wrapIfNeeded;\n window.unwrap = ShadowDOMPolyfill.unwrapIfNeede d;\n\n // users may want to customize other types\n // TODO(sjmiles): 'button' is now supported by ShadowDOMPolyfill, but\n // I've left this code here in ca se we need to temporarily patch another\n // type\n /*\n (function() {\n v ar elts = {HTMLButtonElement: 'button'};\n for (var c in elts) {\n windo w[c] = function() { throw 'Patched Constructor'; };\n window[c].prototype = Object.getPrototypeOf(\n document.createElement(elts[c]));\n }\n } )();\n */\n\n // patch in prefixed name\n Object.defineProperty(Element.proto type, 'webkitShadowRoot',\n Object.getOwnPropertyDescriptor(Element.prototy pe, 'shadowRoot'));\n\n var originalCreateShadowRoot = Element.prototype.create ShadowRoot;\n Element.prototype.createShadowRoot = function() {\n var root = originalCreateShadowRoot.call(this);\n CustomElements.watchShadow(this);\n return root;\n };\n\n Element.prototype.webkitCreateShadowRoot = Element.pro totype.createShadowRoot;\n})();\n", 138 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function() {\n\n // convenient global\n window.wrap = Sh adowDOMPolyfill.wrapIfNeeded;\n window.unwrap = ShadowDOMPolyfill.unwrapIfNeede d;\n\n // users may want to customize other types\n // TODO(sjmiles): 'button' is now supported by ShadowDOMPolyfill, but\n // I've left this code here in ca se we need to temporarily patch another\n // type\n /*\n (function() {\n v ar elts = {HTMLButtonElement: 'button'};\n for (var c in elts) {\n windo w[c] = function() { throw 'Patched Constructor'; };\n window[c].prototype = Object.getPrototypeOf(\n document.createElement(elts[c]));\n }\n } )();\n */\n\n // patch in prefixed name\n Object.defineProperty(Element.proto type, 'webkitShadowRoot',\n Object.getOwnPropertyDescriptor(Element.prototy pe, 'shadowRoot'));\n\n var originalCreateShadowRoot = Element.prototype.create ShadowRoot;\n Element.prototype.createShadowRoot = function() {\n var root = originalCreateShadowRoot.call(this);\n CustomElements.watchShadow(this);\n return root;\n };\n\n Element.prototype.webkitCreateShadowRoot = Element.pro totype.createShadowRoot;\n})();\n",
139 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/*\n This is a limited shim for ShadowDOM css styling.\n https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#style s\n \n The intention here is to support only the styling features which can be \n relatively simply implemented. The goal is to allow users to avoid the \n most obvious pitfalls and do so without compromising performance significantly. \n For ShadowDOM styling that's not covered here, a set of best practices\n ca n be provided that should allow users to accomplish more complex styling.\n\n T he following is a list of specific ShadowDOM styling features and a brief\n dis cussion of the approach used to shim.\n\n Shimmed features:\n\n * :host, :ance stor: ShadowDOM allows styling of the shadowRoot's host\n element using the :ho st rule. To shim this feature, the :host styles are \n reformatted and prefixed with a given scope name and promoted to a \n document level stylesheet.\n For example, given a scope name of .foo, a rule like this:\n \n :host {\n background: red;\n }\n }\n \n becomes:\n \n .foo {\n backgr ound: red;\n }\n \n * encapsultion: Styles defined within ShadowDOM, apply only to \n dom inside the ShadowDOM. Polymer uses one of two techniques to imle ment\n this feature.\n \n By default, rules are prefixed with the host elemen t tag name \n as a descendant selector. This ensures styling does not leak out of the 'top'\n of the element's ShadowDOM. For example,\n\n div {\n font- weight: bold;\n }\n \n becomes:\n\n x-foo div {\n font-weight: bold;\ n }\n \n becomes:\n\n\n Alternatively, if Platform.ShadowCSS.strictStyling is set to true then \n selectors are scoped by adding an attribute selector su ffix to each\n simple selector that contains the host element tag name. Each el ement \n in the element's ShadowDOM template is also given the scope attribute. \n Thus, these rules match only elements that have the scope attribute.\n For example, given a scope name of x-foo, a rule like this:\n \n div {\n f ont-weight: bold;\n }\n \n becomes:\n \n div[x-foo] {\n font-weigh t: bold;\n }\n\n Note that elements that are dynamically added to a scope mu st have the scope\n selector added to them manually.\n\n * upper/lower bound e ncapsulation: Styles which are defined outside a\n shadowRoot should not cross the ShadowDOM boundary and should not apply\n inside a shadowRoot.\n\n This st yling behavior is not emulated. Some possible ways to do this that \n were reje cted due to complexity and/or performance concerns include: (1) reset\n every p ossible property for every possible selector for a given scope name;\n (2) re-i mplement css in javascript.\n \n As an alternative, users should make sure to use selectors\n specific to the scope in which they are working.\n \n * ::dis tributed: This behavior is not emulated. It's often not necessary\n to style th e contents of a specific insertion point and instead, descendants\n of the host element can be styled selectively. Users can also create an \n extra node arou nd an insertion point and style that node's contents\n via descendent selectors . For example, with a shadowRoot like this:\n \n <style>\n ::content(di v) {\n background: red;\n }\n </style>\n <content></content>\n \n could become:\n \n <style>\n / *@polyfill .content-container div * / \n ::content(div) {\n background: red;\n }\n </style>\n <div class=\"content-container\">\n <content></content>\n </div>\n \ n Note the use of @polyfill in the comment above a ShadowDOM specific style\n declaration. This is a directive to the styling shim to use the selector \n in comments in lieu of the next selector when running under polyfill.\n*/\n(functio n(scope) {\n\nvar ShadowCSS = {\n strictStyling: false,\n registry: {},\n // Shim styles for a given root associated with a name and extendsName\n // 1. cac he root styles by name\n // 2. optionally tag root nodes with scope name\n // 3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule */\n // 4. sh im :host and scoping\n shimStyling: function(root, name, extendsName) {\n va r typeExtension = this.isTypeExtension(extendsName);\n // use caching to make working with styles nodes easier and to facilitate\n // lookup of extendee\n var def = this.registerDefinition(root, name, extendsName);\n // find sty les and apply shimming...\n if (this.strictStyling) {\n this.applyScopeT oContent(root, name);\n }\n var cssText = this.stylesToShimmedCssText(def. rootStyles, def.scopeStyles,\n name, typeExtension);\n // provide shim medStyle for user extensibility\n def.shimmedStyle = cssTextToStyle(cssText); \n if (root) {\n root.shimmedStyle = def.shimmedStyle;\n }\n // re move existing style elements\n for (var i=0, l=def.rootStyles.length, s; (i<l ) && (s=def.rootStyles[i]); \n i++) {\n s.parentNode.removeChild(s); \n }\n // add style to document\n addCssToDocument(cssText);\n },\n / / apply @polyfill rules + :host and scope shimming\n stylesToShimmedCssText: fu nction(rootStyles, scopeStyles, name,\n typeExtension) {\n name = name | | '';\n // insert @polyfill and @polyfill-rule rules into style elements\n // scoping process takes care of shimming these\n this.insertPolyfillDirecti ves(rootStyles);\n this.insertPolyfillRules(rootStyles);\n var cssText = t his.shimScoping(scopeStyles, name, typeExtension);\n // note: we only need to do rootStyles since these are unscoped.\n cssText += this.extractPolyfillUns copedRules(rootStyles);\n return cssText;\n },\n registerDefinition: functi on(root, name, extendsName) {\n var def = this.registry[name] = {\n root : root,\n name: name,\n extendsName: extendsName\n }\n var style s = root ? root.querySelectorAll('style') : [];\n styles = styles ? Array.pro totype.slice.call(styles, 0) : [];\n def.rootStyles = styles;\n def.scopeS tyles = def.rootStyles;\n var extendee = this.registry[def.extendsName];\n if (extendee && (!root || root.querySelector('shadow'))) {\n def.scopeStyl es = extendee.scopeStyles.concat(def.scopeStyles);\n }\n return def;\n }, \n isTypeExtension: function(extendsName) {\n return extendsName && extendsN ame.indexOf('-') < 0;\n },\n applyScopeToContent: function(root, name) {\n if (root) {\n // add the name attribute to each node in root.\n Array. prototype.forEach.call(root.querySelectorAll('*'),\n function(node) {\n node.setAttribute(name, '');\n });\n // and template c ontents too\n Array.prototype.forEach.call(root.querySelectorAll('template' ),\n function(template) {\n this.applyScopeToContent(templat e.content, name);\n },\n this);\n }\n },\n /*\n * Proce ss styles to convert native ShadowDOM rules that will trip\n * up the css pars er; we rely on decorating the stylesheet with comments.\n * \n * For example , we convert this rule:\n * \n * (comment start) @polyfill :host menu-item ( comment end)\n * shadow::-webkit-distributed(menu-item) {\n * \n * to this :\n * \n * scopeName menu-item {\n *\n **/\n insertPolyfillDirectives: f unction(styles) {\n if (styles) {\n Array.prototype.forEach.call(styles, function(s) {\n s.textContent = this.insertPolyfillDirectivesInCssText(s .textContent);\n }, this);\n }\n },\n insertPolyfillDirectivesInCssTex t: function(cssText) {\n return cssText.replace(cssPolyfillCommentRe, functio n(match, p1) {\n // remove end comment delimiter and add block start\n return p1.slice(0, -2) + '{';\n });\n },\n /*\n * Process styles to add rules which will only apply under the polyfill\n * \n * For example, we conv ert this rule:\n * \n * (comment start) @polyfill-rule :host menu-item { \n * ... } (comment end)\n * \n * to this:\n * \n * scopeName menu-item { ...}\n *\n **/\n insertPolyfillRules: function(styles) {\n if (styles) {\ n Array.prototype.forEach.call(styles, function(s) {\n s.textContent = this.insertPolyfillRulesInCssText(s.textContent);\n }, this);\n }\n },\n insertPolyfillRulesInCssText: function(cssText) {\n return cssText.repl ace(cssPolyfillRuleCommentRe, function(match, p1) {\n // remove end comment delimiter\n return p1.slice(0, -1);\n });\n },\n /*\n * Process sty les to add rules which will only apply under the polyfill\n * and do not proce ss via CSSOM. (CSSOM is destructive to rules on rare \n * occasions, e.g. -web kit-calc on Safari.)\n * For example, we convert this rule:\n * \n * (comm ent start) @polyfill-unscoped-rule menu-item { \n * ... } (comment end)\n * \n * to this:\n * \n * menu-item {...}\n *\n **/\n extractPolyfillUnsc opedRules: function(styles) {\n var cssText = '';\n if (styles) {\n A rray.prototype.forEach.call(styles, function(s) {\n cssText += this.extra ctPolyfillUnscopedRulesFromCssText(\n s.textContent) + '\\n\\n';\n }, this);\n }\n return cssText;\n },\n extractPolyfillUnscopedRulesFr omCssText: function(cssText) {\n var r = '', matches;\n while (matches = c ssPolyfillUnscopedRuleCommentRe.exec(cssText)) {\n r += matches[1].slice(0, -1) + '\\n\\n';\n }\n return r;\n },\n /* Ensure styles are scoped. Pse udo-scoping takes a rule like:\n * \n * .foo {... } \n * \n * and con verts this to\n * \n * scopeName .foo { ... }\n */\n shimScoping: functi on(styles, name, typeExtension) {\n if (styles) {\n return this.convertS copedStyles(styles, name, typeExtension);\n }\n },\n convertScopedStyles: f unction(styles, name, typeExtension) {\n var cssText = stylesToCssText(styles );\n cssText = this.insertPolyfillHostInCssText(cssText);\n cssText = this .convertColonHost(cssText);\n cssText = this.convertColonAncestor(cssText);\n cssText = this.convertCombinators(cssText);\n var rules = cssToRules(cssT ext);\n if (name) {\n cssText = this.scopeRules(rules, name, typeExtensi on);\n }\n return cssText;\n },\n /*\n * convert a rule like :host(.fo o) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar\n */\n convertCo lonHost: function(cssText) {\n return this.convertColonRule(cssText, cssColon HostRe,\n this.colonHostPartReplacer);\n },\n /*\n * convert a rule l ike :ancestor(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar, .foo scopeName > .bar { }\n * \n * and\n *\n * :ancestor(.foo:host) .bar { ... }\n * \n * to\n * \n * scopeName.foo .bar { ... }\n */\n conver tColonAncestor: function(cssText) {\n return this.convertColonRule(cssText, c ssColonAncestorRe,\n this.colonAncestorPartReplacer);\n },\n convertCol onRule: function(cssText, regExp, partReplacer) {\n // p1 = :host, p2 = conte nts of (), p3 rest of rule\n return cssText.replace(regExp, function(m, p1, p 2, p3) {\n p1 = polyfillHostNoCombinator;\n if (p2) {\n var par ts = p2.split(','), r = [];\n for (var i=0, l=parts.length, p; (i<l) && ( p=parts[i]); i++) {\n p = p.trim();\n r.push(partReplacer(p1, p, p3));\n }\n return r.join(',');\n } else {\n return p1 + p3;\n }\n });\n },\n colonAncestorPartReplacer: function(host, p art, suffix) {\n if (part.match(polyfillHost)) {\n return this.colonHost PartReplacer(host, part, suffix);\n } else {\n return host + part + suff ix + ', ' + part + ' ' + host + suffix;\n }\n },\n colonHostPartReplacer: f unction(host, part, suffix) {\n return host + part.replace(polyfillHost, '') + suffix;\n },\n /*\n * Convert ^ and ^^ combinators by replacing with space .\n */\n convertCombinators: function(cssText) {\n return cssText.replace(/ \\^\\^/g, ' ').replace(/\\^/g, ' ');\n },\n // change a selector like 'div' to 'name div'\n scopeRules: function(cssRules, name, typeExtension) {\n var cs sText = '';\n Array.prototype.forEach.call(cssRules, function(rule) {\n if (rule.selectorText && (rule.style && rule.style.cssText)) {\n cssText += this.scopeSelector(rule.selectorText, name, typeExtension, \n this.s trictStyling) + ' {\\n\\t';\n cssText += this.propertiesFromRule(rule) + '\\n}\\n\\n';\n } else if (rule.media) {\n cssText += '@media ' + ru le.media.mediaText + ' {\\n';\n cssText += this.scopeRules(rule.cssRules, name, typeExtension);\n cssText += '\\n}\\n\\n';\n } else if (rule. cssText) {\n cssText += rule.cssText + '\\n\\n';\n }\n }, this);\ n return cssText;\n },\n scopeSelector: function(selector, name, typeExtens ion, strict) {\n var r = [], parts = selector.split(',');\n parts.forEach( function(p) {\n p = p.trim();\n if (this.selectorNeedsScoping(p, name, typeExtension)) {\n p = (strict && !p.match(polyfillHostNoCombinator)) ? \n this.applyStrictSelectorScope(p, name) :\n this.applyS impleSelectorScope(p, name, typeExtension);\n }\n r.push(p);\n }, t his);\n return r.join(', ');\n },\n selectorNeedsScoping: function(selector , name, typeExtension) {\n var re = this.makeScopeMatcher(name, typeExtension );\n return !selector.match(re);\n },\n makeScopeMatcher: function(name, ty peExtension) {\n var matchScope = typeExtension ? '\\\\[is=[\\'\"]?' + name + '[\\'\"]?\\\\]' : name;\n return new RegExp('^(' + matchScope + ')' + select orReSuffix, 'm');\n },\n // scope via name and [is=name]\n applySimpleSelecto rScope: function(selector, name, typeExtension) {\n var scoper = typeExtensio n ? '[is=' + name + ']' : name;\n if (selector.match(polyfillHostRe)) {\n selector = selector.replace(polyfillHostNoCombinator, scoper);\n return s elector.replace(polyfillHostRe, scoper + ' ');\n } else {\n return scope r + ' ' + selector;\n }\n },\n // return a selector with [name] suffix on e ach simple selector\n // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .z ot[name]\n applyStrictSelectorScope: function(selector, name) {\n var splits = [' ', '>', '+', '~'],\n scoped = selector,\n attrName = '[' + name + ']';\n splits.forEach(function(sep) {\n var parts = scoped.split(sep); \n scoped = parts.map(function(p) {\n // remove :host since it shoul d be unnecessary\n var t = p.trim().replace(polyfillHostRe, '');\n if (t && (splits.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {\n p = t.replace(/([^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')\n }\n retu rn p;\n }).join(sep);\n });\n return scoped;\n },\n insertPolyfillH ostInCssText: function(selector) {\n return selector.replace(hostRe, polyfill Host).replace(colonHostRe,\n polyfillHost).replace(colonAncestorRe, polyf illAncestor);\n },\n propertiesFromRule: function(rule) {\n // TODO(sorvell ): Safari cssom incorrectly removes quotes from the content\n // property. (h ttps://bugs.webkit.org/show_bug.cgi?id=118045)\n if (rule.style.content && !r ule.style.content.match(/['\"]+/)) {\n return rule.style.cssText.replace(/c ontent:[^;]*;/g, 'content: \\'' + \n rule.style.content + '\\';');\n }\n return rule.style.cssText;\n }\n};\n\nvar selectorRe = /([^{]*)({[\\s\\ S]*?})/gim,\n cssCommentRe = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n c ssPolyfillCommentRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^*]*\\*+)*\\/)([^{]* ?){/gim,\n cssPolyfillRuleCommentRe = /\\/\\*\\s@polyfill-rule([^*]*\\*+([^/* ][^*]*\\*+)*)\\//gim,\n cssPolyfillUnscopedRuleCommentRe = /\\/\\*\\s@polyfil l-unscoped-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssPseudoRe = /::(x-[^\ \s{,(]*)/gim,\n cssPartRe = /::part\\(([^)]*)\\)/gim,\n // note: :host pre -processed to -shadowcsshost.\n polyfillHost = '-shadowcsshost',\n // note : :ancestor pre-processed to -shadowcssancestor.\n polyfillAncestor = '-shado wcssancestor',\n parenSuffix = ')(?:\\\\((' +\n '(?:\\\\([^)(]*\\\\)|[ ^)(]*)+?' +\n ')\\\\))?([^,{]*)';\n cssColonHostRe = new RegExp('(' + polyfillHost + parenSuffix, 'gim'),\n cssColonAncestorRe = new RegExp('(' + p olyfillAncestor + parenSuffix, 'gim'),\n selectorReSuffix = '([>\\\\s~+\\[.,{ :][\\\\s\\\\S]*)?$',\n hostRe = /@host/gim,\n colonHostRe = /\\:host/gim,\ n colonAncestorRe = /\\:ancestor/gim,\n /* host name without combinator */ \n polyfillHostNoCombinator = polyfillHost + '-no-combinator',\n polyfillH ostRe = new RegExp(polyfillHost, 'gim');\n polyfillAncestorRe = new RegExp(po lyfillAncestor, 'gim');\n\nfunction stylesToCssText(styles, preserveComments) {\ n var cssText = '';\n Array.prototype.forEach.call(styles, function(s) {\n cssText += s.textContent + '\\n\\n';\n });\n // strip comments for easier proc essing\n if (!preserveComments) {\n cssText = cssText.replace(cssCommentRe, '');\n }\n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var sty le = document.createElement('style');\n style.textContent = cssText;\n return style;\n}\n\nfunction cssToRules(cssText) {\n var style = cssTextToStyle(cssTex t);\n document.head.appendChild(style);\n var rules = style.sheet.cssRules;\n style.parentNode.removeChild(style);\n return rules;\n}\n\nfunction rulesToCss (cssRules) {\n for (var i=0, css=[]; i < cssRules.length; i++) {\n css.push( cssRules[i].cssText);\n }\n return css.join('\\n\\n');\n}\n\nfunction addCssTo Document(cssText) {\n if (cssText) {\n getSheet().appendChild(document.creat eTextNode(cssText));\n }\n}\n\nvar SHIM_ATTRIBUTE = 'shim-shadowdom';\nvar SHIM MED_ATTRIBUTE = 'shim-shadowdom-css';\n\nvar sheet;\nfunction getSheet() {\n if (!sheet) {\n sheet = document.createElement(\"style\");\n sheet.setAttrib ute(SHIMMED_ATTRIBUTE, '');\n sheet[SHIMMED_ATTRIBUTE] = true;\n }\n return sheet;\n}\n\n// add polyfill stylesheet to document\nif (window.ShadowDOMPolyfi ll) {\n addCssToDocument('style { display: none !important; }\\n');\n var doc = wrap(document);\n var head = doc.querySelector('head');\n head.insertBefore( getSheet(), head.childNodes[0]);\n\n // TODO(sorvell): monkey-patching HTMLImpo rts is abusive;\n // consider a better solution.\n document.addEventListener(' DOMContentLoaded', function() {\n var urlResolver = scope.urlResolver;\n \ n if (window.HTMLImports && !HTMLImports.useNative) {\n var SHIM_SHEET_S ELECTOR = 'link[rel=stylesheet]' +\n '[' + SHIM_ATTRIBUTE + ']';\n var SHIM_STYLE_SELECTOR = 'style[' + SHIM_ATTRIBUTE + ']';\n HTMLImports.i mporter.documentPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n HTMLImport s.importer.importsPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n\n HTMLIm ports.parser.documentSelectors = [\n HTMLImports.parser.documentSelectors ,\n SHIM_SHEET_SELECTOR,\n SHIM_STYLE_SELECTOR\n ].join(','); \n \n HTMLImports.parser.parseGeneric = function(elt) {\n if (elt[S HIMMED_ATTRIBUTE]) {\n return;\n }\n var style = elt.__im portElement || elt;\n if (elt.__resource) {\n style = elt.ownerD ocument.createElement('style');\n style.textContent = urlResolver.resol veCssText(\n elt.__resource, elt.href);\n } else {\n urlResolver.resolveStyles(style); \n }\n var styles = [style];\ n style.textContent = ShadowCSS.stylesToShimmedCssText(styles, styles);\n style.removeAttribute(SHIM_ATTRIBUTE, '');\n style.setAttribute(S HIMMED_ATTRIBUTE, '');\n style[SHIMMED_ATTRIBUTE] = true;\n // pla ce in document\n if (style.parentNode !== head) {\n // replace l inks in head\n if (elt.parentNode === head) {\n head.replace Child(style, elt);\n } else {\n head.appendChild(style);\n }\n }\n style.__importParsed = true\n this.markPars ingComplete(elt);\n }\n\n var hasResource = HTMLImports.parser.hasReso urce;\n HTMLImports.parser.hasResource = function(node) {\n if (node .localName === 'link' && node.rel === 'stylesheet' &&\n node.hasAttri bute(SHIM_ATTRIBUTE)) {\n return (node.__resource);\n } else {\n return hasResource.call(this, node);\n }\n }\n\n }\n } );\n}\n\n// exports\nscope.ShadowCSS = ShadowCSS;\n\n})(window.Platform);", 139 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/*\n This is a limited shim for ShadowDOM css styling.\n https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#style s\n \n The intention here is to support only the styling features which can be \n relatively simply implemented. The goal is to allow users to avoid the \n most obvious pitfalls and do so without compromising performance significantly. \n For ShadowDOM styling that's not covered here, a set of best practices\n ca n be provided that should allow users to accomplish more complex styling.\n\n T he following is a list of specific ShadowDOM styling features and a brief\n dis cussion of the approach used to shim.\n\n Shimmed features:\n\n * :host, :ance stor: ShadowDOM allows styling of the shadowRoot's host\n element using the :ho st rule. To shim this feature, the :host styles are \n reformatted and prefixed with a given scope name and promoted to a \n document level stylesheet.\n For example, given a scope name of .foo, a rule like this:\n \n :host {\n background: red;\n }\n }\n \n becomes:\n \n .foo {\n backgr ound: red;\n }\n \n * encapsultion: Styles defined within ShadowDOM, apply only to \n dom inside the ShadowDOM. Polymer uses one of two techniques to imle ment\n this feature.\n \n By default, rules are prefixed with the host elemen t tag name \n as a descendant selector. This ensures styling does not leak out of the 'top'\n of the element's ShadowDOM. For example,\n\n div {\n font- weight: bold;\n }\n \n becomes:\n\n x-foo div {\n font-weight: bold;\ n }\n \n becomes:\n\n\n Alternatively, if Platform.ShadowCSS.strictStyling is set to true then \n selectors are scoped by adding an attribute selector su ffix to each\n simple selector that contains the host element tag name. Each el ement \n in the element's ShadowDOM template is also given the scope attribute. \n Thus, these rules match only elements that have the scope attribute.\n For example, given a scope name of x-foo, a rule like this:\n \n div {\n f ont-weight: bold;\n }\n \n becomes:\n \n div[x-foo] {\n font-weigh t: bold;\n }\n\n Note that elements that are dynamically added to a scope mu st have the scope\n selector added to them manually.\n\n * upper/lower bound e ncapsulation: Styles which are defined outside a\n shadowRoot should not cross the ShadowDOM boundary and should not apply\n inside a shadowRoot.\n\n This st yling behavior is not emulated. Some possible ways to do this that \n were reje cted due to complexity and/or performance concerns include: (1) reset\n every p ossible property for every possible selector for a given scope name;\n (2) re-i mplement css in javascript.\n \n As an alternative, users should make sure to use selectors\n specific to the scope in which they are working.\n \n * ::dis tributed: This behavior is not emulated. It's often not necessary\n to style th e contents of a specific insertion point and instead, descendants\n of the host element can be styled selectively. Users can also create an \n extra node arou nd an insertion point and style that node's contents\n via descendent selectors . For example, with a shadowRoot like this:\n \n <style>\n ::content(di v) {\n background: red;\n }\n </style>\n <content></content>\n \n could become:\n \n <style>\n / *@polyfill .content-container div * / \n ::content(div) {\n background: red;\n }\n </style>\n <div class=\"content-container\">\n <content></content>\n </div>\n \ n Note the use of @polyfill in the comment above a ShadowDOM specific style\n declaration. This is a directive to the styling shim to use the selector \n in comments in lieu of the next selector when running under polyfill.\n*/\n(functio n(scope) {\n\nvar ShadowCSS = {\n strictStyling: false,\n registry: {},\n // Shim styles for a given root associated with a name and extendsName\n // 1. cac he root styles by name\n // 2. optionally tag root nodes with scope name\n // 3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule */\n // 4. sh im :host and scoping\n shimStyling: function(root, name, extendsName) {\n va r typeExtension = this.isTypeExtension(extendsName);\n // use caching to make working with styles nodes easier and to facilitate\n // lookup of extendee\n var def = this.registerDefinition(root, name, extendsName);\n // find sty les and apply shimming...\n if (this.strictStyling) {\n this.applyScopeT oContent(root, name);\n }\n var cssText = this.stylesToShimmedCssText(def. rootStyles, def.scopeStyles,\n name, typeExtension);\n // provide shim medStyle for user extensibility\n def.shimmedStyle = cssTextToStyle(cssText); \n if (root) {\n root.shimmedStyle = def.shimmedStyle;\n }\n // re move existing style elements\n for (var i=0, l=def.rootStyles.length, s; (i<l ) && (s=def.rootStyles[i]); \n i++) {\n s.parentNode.removeChild(s); \n }\n // add style to document\n addCssToDocument(cssText);\n },\n / / apply @polyfill rules + :host and scope shimming\n stylesToShimmedCssText: fu nction(rootStyles, scopeStyles, name,\n typeExtension) {\n name = name | | '';\n // insert @polyfill and @polyfill-rule rules into style elements\n // scoping process takes care of shimming these\n this.insertPolyfillDirecti ves(rootStyles);\n this.insertPolyfillRules(rootStyles);\n var cssText = t his.shimScoping(scopeStyles, name, typeExtension);\n // note: we only need to do rootStyles since these are unscoped.\n cssText += this.extractPolyfillUns copedRules(rootStyles);\n return cssText.trim();\n },\n registerDefinition: function(root, name, extendsName) {\n var def = this.registry[name] = {\n root: root,\n name: name,\n extendsName: extendsName\n }\n va r styles = root ? root.querySelectorAll('style') : [];\n styles = styles ? Ar ray.prototype.slice.call(styles, 0) : [];\n def.rootStyles = styles;\n def .scopeStyles = def.rootStyles;\n var extendee = this.registry[def.extendsName ];\n if (extendee && (!root || root.querySelector('shadow'))) {\n def.sc opeStyles = extendee.scopeStyles.concat(def.scopeStyles);\n }\n return def ;\n },\n isTypeExtension: function(extendsName) {\n return extendsName && e xtendsName.indexOf('-') < 0;\n },\n applyScopeToContent: function(root, name) {\n if (root) {\n // add the name attribute to each node in root.\n Array.prototype.forEach.call(root.querySelectorAll('*'),\n function(no de) {\n node.setAttribute(name, '');\n });\n // and tem plate contents too\n Array.prototype.forEach.call(root.querySelectorAll('te mplate'),\n function(template) {\n this.applyScopeToContent( template.content, name);\n },\n this);\n }\n },\n /*\n * Process styles to convert native ShadowDOM rules that will trip\n * up the c ss parser; we rely on decorating the stylesheet with comments.\n * \n * For example, we convert this rule:\n * \n * (comment start) @polyfill :host menu -item (comment end)\n * shadow::-webkit-distributed(menu-item) {\n * \n * to this:\n * \n * scopeName menu-item {\n *\n **/\n insertPolyfillDirect ives: function(styles) {\n if (styles) {\n Array.prototype.forEach.call( styles, function(s) {\n s.textContent = this.insertPolyfillDirectivesInCs sText(s.textContent);\n }, this);\n }\n },\n insertPolyfillDirectivesI nCssText: function(cssText) {\n return cssText.replace(cssPolyfillCommentRe, function(match, p1) {\n // remove end comment delimiter and add block start \n return p1.slice(0, -2) + '{';\n });\n },\n /*\n * Process styles to add rules which will only apply under the polyfill\n * \n * For example, we convert this rule:\n * \n * (comment start) @polyfill-rule :host menu-ite m { \n * ... } (comment end)\n * \n * to this:\n * \n * scopeName menu -item {...}\n *\n **/\n insertPolyfillRules: function(styles) {\n if (sty les) {\n Array.prototype.forEach.call(styles, function(s) {\n s.text Content = this.insertPolyfillRulesInCssText(s.textContent);\n }, this);\n }\n },\n insertPolyfillRulesInCssText: function(cssText) {\n return cssTe xt.replace(cssPolyfillRuleCommentRe, function(match, p1) {\n // remove end comment delimiter\n return p1.slice(0, -1);\n });\n },\n /*\n * Proc ess styles to add rules which will only apply under the polyfill\n * and do no t process via CSSOM. (CSSOM is destructive to rules on rare \n * occasions, e. g. -webkit-calc on Safari.)\n * For example, we convert this rule:\n * \n * (comment start) @polyfill-unscoped-rule menu-item { \n * ... } (comment end) \n * \n * to this:\n * \n * menu-item {...}\n *\n **/\n extractPolyf illUnscopedRules: function(styles) {\n var cssText = '';\n if (styles) {\n Array.prototype.forEach.call(styles, function(s) {\n cssText += thi s.extractPolyfillUnscopedRulesFromCssText(\n s.textContent) + '\\n\\n ';\n }, this);\n }\n return cssText;\n },\n extractPolyfillUnscoped RulesFromCssText: function(cssText) {\n var r = '', matches;\n while (matc hes = cssPolyfillUnscopedRuleCommentRe.exec(cssText)) {\n r += matches[1].s lice(0, -1) + '\\n\\n';\n }\n return r;\n },\n /* Ensure styles are scop ed. Pseudo-scoping takes a rule like:\n * \n * .foo {... } \n * \n * and converts this to\n * \n * scopeName .foo { ... }\n */\n shimScoping: function(styles, name, typeExtension) {\n if (styles) {\n return this.c onvertScopedStyles(styles, name, typeExtension);\n }\n },\n convertScopedSt yles: function(styles, name, typeExtension) {\n var cssText = stylesToCssText (styles);\n cssText = this.insertPolyfillHostInCssText(cssText);\n cssText = this.convertColonHost(cssText);\n cssText = this.convertColonAncestor(cssT ext);\n cssText = this.convertCombinators(cssText);\n if (name) {\n v ar rules = cssToRules(cssText);\n cssText = this.scopeRules(rules, name, ty peExtension);\n }\n return cssText;\n },\n /*\n * convert a rule like :host(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar\n */\n convertColonHost: function(cssText) {\n return this.convertColonRule(cssText, cssColonHostRe,\n this.colonHostPartReplacer);\n },\n /*\n * convert a rule like :ancestor(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar, .foo scopeName > .bar { }\n * \n * and\n *\n * :ancestor(.foo:h ost) .bar { ... }\n * \n * to\n * \n * scopeName.foo .bar { ... }\n */\ n convertColonAncestor: function(cssText) {\n return this.convertColonRule(c ssText, cssColonAncestorRe,\n this.colonAncestorPartReplacer);\n },\n c onvertColonRule: function(cssText, regExp, partReplacer) {\n // p1 = :host, p 2 = contents of (), p3 rest of rule\n return cssText.replace(regExp, function (m, p1, p2, p3) {\n p1 = polyfillHostNoCombinator;\n if (p2) {\n var parts = p2.split(','), r = [];\n for (var i=0, l=parts.length, p; ( i<l) && (p=parts[i]); i++) {\n p = p.trim();\n r.push(partRepl acer(p1, p, p3));\n }\n return r.join(',');\n } else {\n return p1 + p3;\n }\n });\n },\n colonAncestorPartReplacer: functio n(host, part, suffix) {\n if (part.match(polyfillHost)) {\n return this. colonHostPartReplacer(host, part, suffix);\n } else {\n return host + pa rt + suffix + ', ' + part + ' ' + host + suffix;\n }\n },\n colonHostPartRe placer: function(host, part, suffix) {\n return host + part.replace(polyfillH ost, '') + suffix;\n },\n /*\n * Convert ^ and ^^ combinators by replacing w ith space.\n */\n convertCombinators: function(cssText) {\n return cssText. replace(/\\^\\^/g, ' ').replace(/\\^/g, ' ');\n },\n // change a selector like 'div' to 'name div'\n scopeRules: function(cssRules, name, typeExtension) {\n var cssText = '';\n Array.prototype.forEach.call(cssRules, function(rule) {\n if (rule.selectorText && (rule.style && rule.style.cssText)) {\n cssText += this.scopeSelector(rule.selectorText, name, typeExtension, \n this.strictStyling) + ' {\\n\\t';\n cssText += this.propertiesFromRule (rule) + '\\n}\\n\\n';\n } else if (rule.media) {\n cssText += '@med ia ' + rule.media.mediaText + ' {\\n';\n cssText += this.scopeRules(rule. cssRules, name, typeExtension);\n cssText += '\\n}\\n\\n';\n } else if (rule.cssText) {\n cssText += rule.cssText + '\\n\\n';\n }\n } , this);\n return cssText;\n },\n scopeSelector: function(selector, name, t ypeExtension, strict) {\n var r = [], parts = selector.split(',');\n parts .forEach(function(p) {\n p = p.trim();\n if (this.selectorNeedsScoping (p, name, typeExtension)) {\n p = (strict && !p.match(polyfillHostNoCombi nator)) ? \n this.applyStrictSelectorScope(p, name) :\n th is.applySimpleSelectorScope(p, name, typeExtension);\n }\n r.push(p);\ n }, this);\n return r.join(', ');\n },\n selectorNeedsScoping: function (selector, name, typeExtension) {\n var re = this.makeScopeMatcher(name, type Extension);\n return !selector.match(re);\n },\n makeScopeMatcher: function (name, typeExtension) {\n var matchScope = typeExtension ? '\\\\[is=[\\'\"]?' + name + '[\\'\"]?\\\\]' : name;\n return new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');\n },\n // scope via name and [is=name]\n applySimp leSelectorScope: function(selector, name, typeExtension) {\n var scoper = typ eExtension ? '[is=' + name + ']' : name;\n if (selector.match(polyfillHostRe) ) {\n selector = selector.replace(polyfillHostNoCombinator, scoper);\n return selector.replace(polyfillHostRe, scoper + ' ');\n } else {\n ret urn scoper + ' ' + selector;\n }\n },\n // return a selector with [name] su ffix on each simple selector\n // e.g. .foo.bar > .zot becomes .foo[name].bar[n ame] > .zot[name]\n applyStrictSelectorScope: function(selector, name) {\n v ar splits = [' ', '>', '+', '~'],\n scoped = selector,\n attrName = '[ ' + name + ']';\n splits.forEach(function(sep) {\n var parts = scoped.sp lit(sep);\n scoped = parts.map(function(p) {\n // remove :host since it should be unnecessary\n var t = p.trim().replace(polyfillHostRe, ''); \n if (t && (splits.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {\n p = t.replace(/([^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')\n }\n return p;\n }).join(sep);\n });\n return scoped;\n },\n insert PolyfillHostInCssText: function(selector) {\n return selector.replace(hostRe, polyfillHost).replace(colonHostRe,\n polyfillHost).replace(colonAncestor Re, polyfillAncestor);\n },\n propertiesFromRule: function(rule) {\n // TOD O(sorvell): Safari cssom incorrectly removes quotes from the content\n // pro perty. (https://bugs.webkit.org/show_bug.cgi?id=118045)\n if (rule.style.cont ent && !rule.style.content.match(/['\"]+/)) {\n return rule.style.cssText.r eplace(/content:[^;]*;/g, 'content: \\'' + \n rule.style.content + '\\' ;');\n }\n return rule.style.cssText;\n }\n};\n\nvar selectorRe = /([^{]* )({[\\s\\S]*?})/gim,\n cssCommentRe = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gi m,\n cssPolyfillCommentRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^*]*\\*+)*\ \/)([^{]*?){/gim,\n cssPolyfillRuleCommentRe = /\\/\\*\\s@polyfill-rule([^*]* \\*+([^/*][^*]*\\*+)*)\\//gim,\n cssPolyfillUnscopedRuleCommentRe = /\\/\\*\\ s@polyfill-unscoped-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssPseudoRe = /::(x-[^\\s{,(]*)/gim,\n cssPartRe = /::part\\(([^)]*)\\)/gim,\n // note: :host pre-processed to -shadowcsshost.\n polyfillHost = '-shadowcsshost',\n // note: :ancestor pre-processed to -shadowcssancestor.\n polyfillAncestor = '-shadowcssancestor',\n parenSuffix = ')(?:\\\\((' +\n '(?:\\\\([^)( ]*\\\\)|[^)(]*)+?' +\n ')\\\\))?([^,{]*)';\n cssColonHostRe = new RegE xp('(' + polyfillHost + parenSuffix, 'gim'),\n cssColonAncestorRe = new RegEx p('(' + polyfillAncestor + parenSuffix, 'gim'),\n selectorReSuffix = '([>\\\\ s~+\\[.,{:][\\\\s\\\\S]*)?$',\n hostRe = /@host/gim,\n colonHostRe = /\\:h ost/gim,\n colonAncestorRe = /\\:ancestor/gim,\n /* host name without comb inator */\n polyfillHostNoCombinator = polyfillHost + '-no-combinator',\n polyfillHostRe = new RegExp(polyfillHost, 'gim');\n polyfillAncestorRe = new RegExp(polyfillAncestor, 'gim');\n\nfunction stylesToCssText(styles, preserveCom ments) {\n var cssText = '';\n Array.prototype.forEach.call(styles, function(s ) {\n cssText += s.textContent + '\\n\\n';\n });\n // strip comments for ea sier processing\n if (!preserveComments) {\n cssText = cssText.replace(cssCo mmentRe, '');\n }\n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var style = document.createElement('style');\n style.textContent = cssText;\n return style;\n}\n\nfunction cssToRules(cssText) {\n var style = cssTextToSty le(cssText);\n document.head.appendChild(style);\n var rules = style.sheet.css Rules;\n style.parentNode.removeChild(style);\n return rules;\n}\n\nfunction r ulesToCss(cssRules) {\n for (var i=0, css=[]; i < cssRules.length; i++) {\n css.push(cssRules[i].cssText);\n }\n return css.join('\\n\\n');\n}\n\nfunction addCssToDocument(cssText) {\n if (cssText) {\n getSheet().appendChild(docum ent.createTextNode(cssText));\n }\n}\n\nvar SHIM_ATTRIBUTE = 'shim-shadowdom';\ nvar SHIMMED_ATTRIBUTE = 'shim-shadowdom-css';\n\nvar sheet;\nfunction getSheet( ) {\n if (!sheet) {\n sheet = document.createElement(\"style\");\n sheet. setAttribute(SHIMMED_ATTRIBUTE, '');\n sheet[SHIMMED_ATTRIBUTE] = true;\n }\ n return sheet;\n}\n\n// add polyfill stylesheet to document\nif (window.Shadow DOMPolyfill) {\n addCssToDocument('style { display: none !important; }\\n');\n var doc = wrap(document);\n var head = doc.querySelector('head');\n head.inse rtBefore(getSheet(), head.childNodes[0]);\n\n // TODO(sorvell): monkey-patching HTMLImports is abusive;\n // consider a better solution.\n document.addEventL istener('DOMContentLoaded', function() {\n var urlResolver = scope.urlResolve r;\n \n if (window.HTMLImports && !HTMLImports.useNative) {\n var SHI M_SHEET_SELECTOR = 'link[rel=stylesheet]' +\n '[' + SHIM_ATTRIBUTE + '] ';\n var SHIM_STYLE_SELECTOR = 'style[' + SHIM_ATTRIBUTE + ']';\n HTML Imports.importer.documentPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n H TMLImports.importer.importsPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n\n HTMLImports.parser.documentSelectors = [\n HTMLImports.parser.document Selectors,\n SHIM_SHEET_SELECTOR,\n SHIM_STYLE_SELECTOR\n ].j oin(',');\n \n var originalParseGeneric = HTMLImports.parser.parseGeneric; \n\n HTMLImports.parser.parseGeneric = function(elt) {\n if (elt[SHI MMED_ATTRIBUTE]) {\n return;\n }\n var style = elt.__impo rtElement || elt;\n if (!style.hasAttribute(SHIM_ATTRIBUTE)) {\n originalParseGeneric.call(this, elt);\n return;\n }\n if (elt.__resource) {\n style = elt.ownerDocument.createElement('style'); \n style.textContent = urlResolver.resolveCssText(\n elt._ _resource, elt.href);\n } else {\n urlResolver.resolveStyle(styl e); \n }\n var styles = [style];\n style.textContent = Sha dowCSS.stylesToShimmedCssText(styles, styles);\n style.removeAttribute(SH IM_ATTRIBUTE, '');\n style.setAttribute(SHIMMED_ATTRIBUTE, '');\n style[SHIMMED_ATTRIBUTE] = true;\n // place in document\n if (styl e.parentNode !== head) {\n // replace links in head\n if (elt. parentNode === head) {\n head.replaceChild(style, elt);\n } else {\n head.appendChild(style);\n }\n }\n st yle.__importParsed = true;\n this.markParsingComplete(elt);\n }\n\n var hasResource = HTMLImports.parser.hasResource;\n HTMLImports.parser .hasResource = function(node) {\n if (node.localName === 'link' && node.r el === 'stylesheet' &&\n node.hasAttribute(SHIM_ATTRIBUTE)) {\n return (node.__resource);\n } else {\n return hasResource.ca ll(this, node);\n }\n }\n\n }\n });\n}\n\n// exports\nscope.Shad owCSS = ShadowCSS;\n\n})(window.Platform);",
140 "} else {", 140 "} else {",
141 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function() {\n\n // poor man's adapter for template.conte nt on various platform scenarios\n window.templateContent = window.templateCont ent || function(inTemplate) {\n return inTemplate.content;\n };\n\n // so w e can call wrap/unwrap without testing for ShadowDOMPolyfill\n\n window.wrap = window.unwrap = function(n){\n return n;\n }\n\n var originalCreateShadowRo ot = Element.prototype.webkitCreateShadowRoot;\n Element.prototype.webkitCreate ShadowRoot = function() {\n var elderRoot = this.webkitShadowRoot;\n var r oot = originalCreateShadowRoot.call(this);\n root.olderShadowRoot = elderRoot ;\n root.host = this;\n CustomElements.watchShadow(this);\n return root ;\n }\n\n Object.defineProperties(Element.prototype, {\n shadowRoot: {\n get: function() {\n return this.webkitShadowRoot;\n }\n },\n createShadowRoot: {\n value: function() {\n return this.webkitCrea teShadowRoot();\n }\n }\n });\n\n window.templateContent = function(in Template) {\n // if MDV exists, it may need to boostrap this template to reve al content\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemplateElement.bootstrap(inTemplate);\n }\n // fallback whe n there is no Shadow DOM polyfill, no MDV polyfill, and no\n // native templa te support\n if (!inTemplate.content && !inTemplate._content) {\n var fr ag = document.createDocumentFragment();\n while (inTemplate.firstChild) {\n frag.appendChild(inTemplate.firstChild);\n }\n inTemplate._con tent = frag;\n }\n return inTemplate.content || inTemplate._content;\n }; \n\n})();", 141 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function() {\n\n // poor man's adapter for template.conte nt on various platform scenarios\n window.templateContent = window.templateCont ent || function(inTemplate) {\n return inTemplate.content;\n };\n\n // so w e can call wrap/unwrap without testing for ShadowDOMPolyfill\n\n window.wrap = window.unwrap = function(n){\n return n;\n }\n\n var originalCreateShadowRo ot = Element.prototype.webkitCreateShadowRoot;\n Element.prototype.webkitCreate ShadowRoot = function() {\n var elderRoot = this.webkitShadowRoot;\n var r oot = originalCreateShadowRoot.call(this);\n root.olderShadowRoot = elderRoot ;\n root.host = this;\n CustomElements.watchShadow(this);\n return root ;\n }\n\n Object.defineProperties(Element.prototype, {\n shadowRoot: {\n get: function() {\n return this.webkitShadowRoot;\n }\n },\n createShadowRoot: {\n value: function() {\n return this.webkitCrea teShadowRoot();\n }\n }\n });\n\n window.templateContent = function(in Template) {\n // if MDV exists, it may need to boostrap this template to reve al content\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemplateElement.bootstrap(inTemplate);\n }\n // fallback whe n there is no Shadow DOM polyfill, no MDV polyfill, and no\n // native templa te support\n if (!inTemplate.content && !inTemplate._content) {\n var fr ag = document.createDocumentFragment();\n while (inTemplate.firstChild) {\n frag.appendChild(inTemplate.firstChild);\n }\n inTemplate._con tent = frag;\n }\n return inTemplate.content || inTemplate._content;\n }; \n\n})();",
142 "}", 142 "}",
143 "/* Any copyright is dedicated to the Public Domain.\n * http://creativecomm ons.org/publicdomain/zero/1.0/ */\n\n(function(scope) {\n 'use strict';\n\n // feature detect for URL constructor\n var hasWorkingUrl = false;\n if (!scope. forceJURL) {\n try {\n var u = new URL('b', 'http://a');\n hasWorki ngUrl = u.href === 'http://a/b';\n } catch(e) {}\n }\n\n if (hasWorkingUrl) \n return;\n\n var relative = Object.create(null);\n relative['ftp'] = 21;\ n relative['file'] = 0;\n relative['gopher'] = 70;\n relative['http'] = 80;\n relative['https'] = 443;\n relative['ws'] = 80;\n relative['wss'] = 443;\n\n var relativePathDotMapping = Object.create(null);\n relativePathDotMapping['% 2e'] = '.';\n relativePathDotMapping['.%2e'] = '..';\n relativePathDotMapping[ '%2e.'] = '..';\n relativePathDotMapping['%2e%2e'] = '..';\n\n function isRela tiveScheme(scheme) {\n return relative[scheme] !== undefined;\n }\n\n funct ion invalid() {\n clear.call(this);\n this._isInvalid = true;\n }\n\n fu nction IDNAToASCII(h) {\n if ('' == h) {\n invalid.call(this)\n }\n // XXX\n return h.toLowerCase()\n }\n\n function percentEscape(c) {\n var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x7F &&\n // \" # < > ? `\n [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf (unicode) == -1\n ) {\n return c;\n }\n return encodeURIComponen t(c);\n }\n\n function percentEscapeQuery(c) {\n // XXX This actually needs to encode c using encoding and then\n // convert the bytes one-by-one.\n\n var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x 7F &&\n // \" # < > ` (do not escape '?')\n [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) == -1\n ) {\n return c;\n }\n return enc odeURIComponent(c);\n }\n\n var EOF = undefined,\n ALPHA = /[a-zA-Z]/,\n ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n\n function parse(input, stateOver ride, base) {\n function err(message) {\n errors.push(message)\n }\n\ n var state = stateOverride || 'scheme start',\n cursor = 0,\n buffer = '',\n seenAt = false,\n seenBracket = false,\n err ors = [];\n\n loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this ._isInvalid) {\n var c = input[cursor];\n switch (state) {\n ca se 'scheme start':\n if (c && ALPHA.test(c)) {\n buffer += c .toLowerCase(); // ASCII-safe\n state = 'scheme';\n } else i f (!stateOverride) {\n buffer = '';\n state = 'no scheme'; \n continue;\n } else {\n err('Invalid scheme.'); \n break loop;\n }\n break;\n\n case 'scheme ':\n if (c && ALPHANUMERIC.test(c)) {\n buffer += c.toLowerC ase(); // ASCII-safe\n } else if (':' == c) {\n this._scheme = buffer;\n buffer = '';\n if (stateOverride) {\n break loop;\n }\n if (isRelativeScheme(this._scheme) ) {\n this._isRelative = true;\n }\n if ('fil e' == this._scheme) {\n state = 'relative';\n } else if (this._isRelative && base && base._scheme == this._scheme) {\n stat e = 'relative or authority';\n } else if (this._isRelative) {\n state = 'authority first slash';\n } else {\n st ate = 'scheme data';\n }\n } else if (!stateOverride) {\n buffer = '';\n cursor = 0;\n state = 'no scheme'; \n continue;\n } else if (EOF == c) {\n break loo p;\n } else {\n err('Code point not allowed in scheme: ' + c )\n break loop;\n }\n break;\n\n case 'schem e data':\n if ('?' == c) {\n query = '?';\n state = 'query';\n } else if ('#' == c) {\n this._fragment = '#'; \n state = 'fragment';\n } else {\n // XXX error handling\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\ n this._schemeData += percentEscape(c);\n }\n } \n break;\n\n case 'no scheme':\n if (!base || !(isRela tiveScheme(base._scheme))) {\n err('Missing scheme.');\n i nvalid.call(this);\n } else {\n state = 'relative';\n continue;\n }\n break;\n\n case 'relative or autho rity':\n if ('/' == c && '/' == input[cursor+1]) {\n state = 'authority ignore slashes';\n } else {\n err('Expected /, g ot: ' + c);\n state = 'relative';\n continue\n }\ n break;\n\n case 'relative':\n this._isRelative = true ;\n if ('file' != this._scheme)\n this._scheme = base._schem e;\n if (EOF == c) {\n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = base._query;\n break loop;\n } else if (' /' == c || '\\\\' == c) {\n if ('\\\\' == c)\n err('\\\\ is an invalid code point.');\n state = 'relative slash';\n } else if ('?' == c) {\n this._host = base._host;\n this._ port = base._port;\n this._path = base._path.slice();\n th is._query = '?';\n state = 'query';\n } else if ('#' == c) { \n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = base._quer y;\n this._fragment = '#';\n state = 'fragment';\n } else {\n var nextC = input[cursor+1]\n var nextNextC = input[cursor+2]\n if (\n 'file' != this._scheme || !ALP HA.test(c) ||\n (nextC != ':' && nextC != '|') ||\n (E OF != nextNextC && '/' != nextNextC && '\\\\' != nextNextC && '?' != nextNextC & & '#' != nextNextC)) {\n this._host = base._host;\n th is._port = base._port;\n this._path = base._path.slice();\n this._path.pop();\n }\n state = 'relative path';\n continue;\n }\n break;\n\n case 'relative sla sh':\n if ('/' == c || '\\\\' == c) {\n if ('\\\\' == c) {\n err('\\\\ is an invalid code point.');\n }\n if ('file' == this._scheme) {\n state = 'file host';\n } else {\n state = 'authority ignore slashes';\n }\n } else {\n if ('file' != this._scheme) {\n this._h ost = base._host;\n this._port = base._port;\n }\n state = 'relative path';\n continue;\n }\n br eak;\n\n case 'authority first slash':\n if ('/' == c) {\n state = 'authority second slash';\n } else {\n err(\"E xpected '/', got: \" + c);\n state = 'authority ignore slashes';\n continue;\n }\n break;\n\n case 'authority sec ond slash':\n state = 'authority ignore slashes';\n if ('/' != c) {\n err(\"Expected '/', got: \" + c);\n continue;\n }\n break;\n\n case 'authority ignore slashes':\n if ('/' != c && '\\\\' != c) {\n state = 'authority';\n continue;\n } else {\n err('Expected authority, got: ' + c); \n }\n break;\n\n case 'authority':\n if ('@' == c) {\n if (seenAt) {\n err('@ already seen.');\n buffer += '%40';\n }\n seenAt = true;\n for (var i = 0; i < buffer.length; i++) {\n var cp = buffer[i];\n if ('\\t' == cp || '\\n' == cp || '\\r' == cp) {\n err('Invalid whitespace in authority.');\n continue;\n }\n // XXX check URL code points\n if (':' == cp && null === this._password) {\n this._password = '';\n continue;\n }\n var tempC = percentEscape(cp);\n (null !== this._password) ? this._password += tempC : this._username += tempC;\n }\n buffer = '';\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n cursor -= b uffer.length;\n buffer = '';\n state = 'host';\n continue;\n } else {\n buffer += c;\n }\n break;\n\n case 'file host':\n if (EOF == c || '/' == c || '\\ \\' == c || '?' == c || '#' == c) {\n if (buffer.length == 2 && ALPHA .test(buffer[0]) && (buffer[1] == ':' || buffer[1] == '|')) {\n sta te = 'relative path';\n } else if (buffer.length == 0) {\n state = 'relative path start';\n } else {\n this._hos t = IDNAToASCII.call(this, buffer);\n buffer = '';\n s tate = 'relative path start';\n }\n continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid wh itespace in file host.');\n } else {\n buffer += c;\n }\n break;\n\n case 'host':\n case 'hostname':\n if (':' == c && !seenBracket) {\n // XXX host parsing\n this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n state = 'port';\n if ('hostname' == stateOverride) {\n break loop;\n }\n } else if (EOF == c || '/' == c || '\ \\\' == c || '?' == c || '#' == c) {\n this._host = IDNAToASCII.call( this, buffer);\n buffer = '';\n state = 'relative path sta rt';\n if (stateOverride) {\n break loop;\n } \n continue;\n } else if ('\\t' != c && '\\n' != c && '\\r' != c) {\n if ('[' == c) {\n seenBracket = true;\n } else if (']' == c) {\n seenBracket = false;\n }\n buffer += c;\n } else {\n err('Invalid code poin t in host/hostname: ' + c);\n }\n break;\n\n case 'port ':\n if (/[0-9]/.test(c)) {\n buffer += c;\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c || stateOverrid e) {\n if ('' != buffer) {\n var temp = parseInt(buffer, 10);\n if (temp != relative[this._scheme]) {\n this ._port = temp + '';\n }\n buffer = '';\n }\ n if (stateOverride) {\n break loop;\n }\n state = 'relative path start';\n continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid code po int in port: ' + c);\n } else {\n invalid.call(this);\n }\n break;\n\n case 'relative path start':\n if (' \\\\' == c)\n err(\"'\\\\' not allowed in path.\");\n state = 'relative path';\n if ('/' != c && '\\\\' != c) {\n contin ue;\n }\n break;\n\n case 'relative path':\n i f (EOF == c || '/' == c || '\\\\' == c || (!stateOverride && ('?' == c || '#' == c))) {\n if ('\\\\' == c) {\n err('\\\\ not allowed in relative path.');\n }\n var tmp;\n if (tmp = re lativePathDotMapping[buffer.toLowerCase()]) {\n buffer = tmp;\n }\n if ('..' == buffer) {\n this._path.pop();\n if ('/' != c && '\\\\' != c) {\n this._path.push('') ;\n }\n } else if ('.' == buffer && '/' != c && '\\\\' ! = c) {\n this._path.push('');\n } else if ('.' != buffer ) {\n if ('file' == this._scheme && this._path.length == 0 && buffe r.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == '|') {\n b uffer = buffer[0] + ':';\n }\n this._path.push(buffer) ;\n }\n buffer = '';\n if ('?' == c) {\n this._query = '?';\n state = 'query';\n } else if ('#' == c) {\n this._fragment = '#';\n state = 'fragm ent';\n }\n } else if ('\\t' != c && '\\n' != c && '\\r' != c) {\n buffer += percentEscape(c);\n }\n break;\n\n case 'query':\n if (!stateOverride && '#' == c) {\n this._fragment = '#';\n state = 'fragment';\n } else if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._query += p ercentEscapeQuery(c);\n }\n break;\n\n case 'fragment': \n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._fragment += c;\n }\n break;\n }\n\n cursor+ +;\n }\n }\n\n function clear() {\n this._scheme = '';\n this._scheme Data = '';\n this._username = '';\n this._password = null;\n this._host = '';\n this._port = '';\n this._path = [];\n this._query = '';\n t his._fragment = '';\n this._isInvalid = false;\n this._isRelative = false; \n }\n\n // Does not process domain names or IP addresses.\n // Does not hand le encoding for the query parameter.\n function jURL(url, base /* , encoding */ ) {\n if (base !== undefined && !(base instanceof jURL))\n base = new jU RL(String(base));\n\n this._url = url;\n clear.call(this);\n\n var inpu t = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]+$/g, '');\n // encoding = encoding || 'utf-8'\n\n parse.call(this, input, null, base);\n }\n\n jURL.p rototype = {\n get href() {\n if (this._isInvalid)\n return this. _url;\n\n var authority = '';\n if ('' != this._username || null != th is._password) {\n authority = this._username +\n (null != this ._password ? ':' + this._password : '') + '@';\n }\n\n return this.pro tocol +\n (this._isRelative ? '//' + authority + this.host : '') +\n this.pathname + this._query + this._fragment;\n },\n set href(href) {\n clear.call(this);\n parse.call(this, href);\n },\n\n get pr otocol() {\n return this._scheme + ':';\n },\n set protocol(protocol) {\n if (this._isInvalid)\n return;\n parse.call(this, protocol + ':', 'scheme start');\n },\n\n get host() {\n return this._isInval id ? '' : this._port ?\n this._host + ':' + this._port : this._host;\n },\n set host(host) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, host, 'host');\n },\n\n get hostname () {\n return this._host;\n },\n set hostname(hostname) {\n if ( this._isInvalid || !this._isRelative)\n return;\n parse.call(this, h ostname, 'hostname');\n },\n\n get port() {\n return this._port;\n },\n set port(port) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, port, 'port');\n },\n\n get pathname() {\n return this._isInvalid ? '' : this._isRelative ?\n '/' + this ._path.join('/') : this._schemeData;\n },\n set pathname(pathname) {\n if (this._isInvalid || !this._isRelative)\n return;\n this._path = [];\n parse.call(this, pathname, 'relative path start');\n },\n\n ge t search() {\n return this._isInvalid || !this._query || '?' == this._query ?\n '' : this._query;\n },\n set search(search) {\n if (thi s._isInvalid || !this._isRelative)\n return;\n this._query = '?';\n if ('?' == search[0])\n search = search.slice(1);\n parse.call( this, search, 'query');\n },\n\n get hash() {\n return this._isInvali d || !this._fragment || '#' == this._fragment ?\n '' : this._fragment;\ n },\n set hash(hash) {\n if (this._isInvalid)\n return;\n this._fragment = '#';\n if ('#' == hash[0])\n hash = hash.slice(1) ;\n parse.call(this, hash, 'fragment');\n }\n };\n\n scope.URL = jURL; \n\n})(window);\n", 143 "/* Any copyright is dedicated to the Public Domain.\n * http://creativecomm ons.org/publicdomain/zero/1.0/ */\n\n(function(scope) {\n 'use strict';\n\n // feature detect for URL constructor\n var hasWorkingUrl = false;\n if (!scope. forceJURL) {\n try {\n var u = new URL('b', 'http://a');\n hasWorki ngUrl = u.href === 'http://a/b';\n } catch(e) {}\n }\n\n if (hasWorkingUrl) \n return;\n\n var relative = Object.create(null);\n relative['ftp'] = 21;\ n relative['file'] = 0;\n relative['gopher'] = 70;\n relative['http'] = 80;\n relative['https'] = 443;\n relative['ws'] = 80;\n relative['wss'] = 443;\n\n var relativePathDotMapping = Object.create(null);\n relativePathDotMapping['% 2e'] = '.';\n relativePathDotMapping['.%2e'] = '..';\n relativePathDotMapping[ '%2e.'] = '..';\n relativePathDotMapping['%2e%2e'] = '..';\n\n function isRela tiveScheme(scheme) {\n return relative[scheme] !== undefined;\n }\n\n funct ion invalid() {\n clear.call(this);\n this._isInvalid = true;\n }\n\n fu nction IDNAToASCII(h) {\n if ('' == h) {\n invalid.call(this)\n }\n // XXX\n return h.toLowerCase()\n }\n\n function percentEscape(c) {\n var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x7F &&\n // \" # < > ? `\n [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf (unicode) == -1\n ) {\n return c;\n }\n return encodeURIComponen t(c);\n }\n\n function percentEscapeQuery(c) {\n // XXX This actually needs to encode c using encoding and then\n // convert the bytes one-by-one.\n\n var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x 7F &&\n // \" # < > ` (do not escape '?')\n [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) == -1\n ) {\n return c;\n }\n return enc odeURIComponent(c);\n }\n\n var EOF = undefined,\n ALPHA = /[a-zA-Z]/,\n ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n\n function parse(input, stateOver ride, base) {\n function err(message) {\n errors.push(message)\n }\n\ n var state = stateOverride || 'scheme start',\n cursor = 0,\n buffer = '',\n seenAt = false,\n seenBracket = false,\n err ors = [];\n\n loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this ._isInvalid) {\n var c = input[cursor];\n switch (state) {\n ca se 'scheme start':\n if (c && ALPHA.test(c)) {\n buffer += c .toLowerCase(); // ASCII-safe\n state = 'scheme';\n } else i f (!stateOverride) {\n buffer = '';\n state = 'no scheme'; \n continue;\n } else {\n err('Invalid scheme.'); \n break loop;\n }\n break;\n\n case 'scheme ':\n if (c && ALPHANUMERIC.test(c)) {\n buffer += c.toLowerC ase(); // ASCII-safe\n } else if (':' == c) {\n this._scheme = buffer;\n buffer = '';\n if (stateOverride) {\n break loop;\n }\n if (isRelativeScheme(this._scheme) ) {\n this._isRelative = true;\n }\n if ('fil e' == this._scheme) {\n state = 'relative';\n } else if (this._isRelative && base && base._scheme == this._scheme) {\n stat e = 'relative or authority';\n } else if (this._isRelative) {\n state = 'authority first slash';\n } else {\n st ate = 'scheme data';\n }\n } else if (!stateOverride) {\n buffer = '';\n cursor = 0;\n state = 'no scheme'; \n continue;\n } else if (EOF == c) {\n break loo p;\n } else {\n err('Code point not allowed in scheme: ' + c )\n break loop;\n }\n break;\n\n case 'schem e data':\n if ('?' == c) {\n query = '?';\n state = 'query';\n } else if ('#' == c) {\n this._fragment = '#'; \n state = 'fragment';\n } else {\n // XXX error handling\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\ n this._schemeData += percentEscape(c);\n }\n } \n break;\n\n case 'no scheme':\n if (!base || !(isRela tiveScheme(base._scheme))) {\n err('Missing scheme.');\n i nvalid.call(this);\n } else {\n state = 'relative';\n continue;\n }\n break;\n\n case 'relative or autho rity':\n if ('/' == c && '/' == input[cursor+1]) {\n state = 'authority ignore slashes';\n } else {\n err('Expected /, g ot: ' + c);\n state = 'relative';\n continue\n }\ n break;\n\n case 'relative':\n this._isRelative = true ;\n if ('file' != this._scheme)\n this._scheme = base._schem e;\n if (EOF == c) {\n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = base._query;\n break loop;\n } else if (' /' == c || '\\\\' == c) {\n if ('\\\\' == c)\n err('\\\\ is an invalid code point.');\n state = 'relative slash';\n } else if ('?' == c) {\n this._host = base._host;\n this._ port = base._port;\n this._path = base._path.slice();\n th is._query = '?';\n state = 'query';\n } else if ('#' == c) { \n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = base._quer y;\n this._fragment = '#';\n state = 'fragment';\n } else {\n var nextC = input[cursor+1]\n var nextNextC = input[cursor+2]\n if (\n 'file' != this._scheme || !ALP HA.test(c) ||\n (nextC != ':' && nextC != '|') ||\n (E OF != nextNextC && '/' != nextNextC && '\\\\' != nextNextC && '?' != nextNextC & & '#' != nextNextC)) {\n this._host = base._host;\n th is._port = base._port;\n this._path = base._path.slice();\n this._path.pop();\n }\n state = 'relative path';\n continue;\n }\n break;\n\n case 'relative sla sh':\n if ('/' == c || '\\\\' == c) {\n if ('\\\\' == c) {\n err('\\\\ is an invalid code point.');\n }\n if ('file' == this._scheme) {\n state = 'file host';\n } else {\n state = 'authority ignore slashes';\n }\n } else {\n if ('file' != this._scheme) {\n this._h ost = base._host;\n this._port = base._port;\n }\n state = 'relative path';\n continue;\n }\n br eak;\n\n case 'authority first slash':\n if ('/' == c) {\n state = 'authority second slash';\n } else {\n err(\"E xpected '/', got: \" + c);\n state = 'authority ignore slashes';\n continue;\n }\n break;\n\n case 'authority sec ond slash':\n state = 'authority ignore slashes';\n if ('/' != c) {\n err(\"Expected '/', got: \" + c);\n continue;\n }\n break;\n\n case 'authority ignore slashes':\n if ('/' != c && '\\\\' != c) {\n state = 'authority';\n continue;\n } else {\n err('Expected authority, got: ' + c); \n }\n break;\n\n case 'authority':\n if ('@' == c) {\n if (seenAt) {\n err('@ already seen.');\n buffer += '%40';\n }\n seenAt = true;\n for (var i = 0; i < buffer.length; i++) {\n var cp = buffer[i];\n if ('\\t' == cp || '\\n' == cp || '\\r' == cp) {\n err('Invalid whitespace in authority.');\n continue;\n }\n // XXX check URL code points\n if (':' == cp && null === this._password) {\n this._password = '';\n continue;\n }\n var tempC = percentEscape(cp);\n (null !== this._password) ? this._password += tempC : this._username += tempC;\n }\n buffer = '';\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n cursor -= b uffer.length;\n buffer = '';\n state = 'host';\n continue;\n } else {\n buffer += c;\n }\n break;\n\n case 'file host':\n if (EOF == c || '/' == c || '\\ \\' == c || '?' == c || '#' == c) {\n if (buffer.length == 2 && ALPHA .test(buffer[0]) && (buffer[1] == ':' || buffer[1] == '|')) {\n sta te = 'relative path';\n } else if (buffer.length == 0) {\n state = 'relative path start';\n } else {\n this._hos t = IDNAToASCII.call(this, buffer);\n buffer = '';\n s tate = 'relative path start';\n }\n continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid wh itespace in file host.');\n } else {\n buffer += c;\n }\n break;\n\n case 'host':\n case 'hostname':\n if (':' == c && !seenBracket) {\n // XXX host parsing\n this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n state = 'port';\n if ('hostname' == stateOverride) {\n break loop;\n }\n } else if (EOF == c || '/' == c || '\ \\\' == c || '?' == c || '#' == c) {\n this._host = IDNAToASCII.call( this, buffer);\n buffer = '';\n state = 'relative path sta rt';\n if (stateOverride) {\n break loop;\n } \n continue;\n } else if ('\\t' != c && '\\n' != c && '\\r' != c) {\n if ('[' == c) {\n seenBracket = true;\n } else if (']' == c) {\n seenBracket = false;\n }\n buffer += c;\n } else {\n err('Invalid code poin t in host/hostname: ' + c);\n }\n break;\n\n case 'port ':\n if (/[0-9]/.test(c)) {\n buffer += c;\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c || stateOverrid e) {\n if ('' != buffer) {\n var temp = parseInt(buffer, 10);\n if (temp != relative[this._scheme]) {\n this ._port = temp + '';\n }\n buffer = '';\n }\ n if (stateOverride) {\n break loop;\n }\n state = 'relative path start';\n continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid code po int in port: ' + c);\n } else {\n invalid.call(this);\n }\n break;\n\n case 'relative path start':\n if (' \\\\' == c)\n err(\"'\\\\' not allowed in path.\");\n state = 'relative path';\n if ('/' != c && '\\\\' != c) {\n contin ue;\n }\n break;\n\n case 'relative path':\n i f (EOF == c || '/' == c || '\\\\' == c || (!stateOverride && ('?' == c || '#' == c))) {\n if ('\\\\' == c) {\n err('\\\\ not allowed in relative path.');\n }\n var tmp;\n if (tmp = re lativePathDotMapping[buffer.toLowerCase()]) {\n buffer = tmp;\n }\n if ('..' == buffer) {\n this._path.pop();\n if ('/' != c && '\\\\' != c) {\n this._path.push('') ;\n }\n } else if ('.' == buffer && '/' != c && '\\\\' ! = c) {\n this._path.push('');\n } else if ('.' != buffer ) {\n if ('file' == this._scheme && this._path.length == 0 && buffe r.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == '|') {\n b uffer = buffer[0] + ':';\n }\n this._path.push(buffer) ;\n }\n buffer = '';\n if ('?' == c) {\n this._query = '?';\n state = 'query';\n } else if ('#' == c) {\n this._fragment = '#';\n state = 'fragm ent';\n }\n } else if ('\\t' != c && '\\n' != c && '\\r' != c) {\n buffer += percentEscape(c);\n }\n break;\n\n case 'query':\n if (!stateOverride && '#' == c) {\n this._fragment = '#';\n state = 'fragment';\n } else if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._query += p ercentEscapeQuery(c);\n }\n break;\n\n case 'fragment': \n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._fragment += c;\n }\n break;\n }\n\n cursor+ +;\n }\n }\n\n function clear() {\n this._scheme = '';\n this._scheme Data = '';\n this._username = '';\n this._password = null;\n this._host = '';\n this._port = '';\n this._path = [];\n this._query = '';\n t his._fragment = '';\n this._isInvalid = false;\n this._isRelative = false; \n }\n\n // Does not process domain names or IP addresses.\n // Does not hand le encoding for the query parameter.\n function jURL(url, base /* , encoding */ ) {\n if (base !== undefined && !(base instanceof jURL))\n base = new jU RL(String(base));\n\n this._url = url;\n clear.call(this);\n\n var inpu t = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]+$/g, '');\n // encoding = encoding || 'utf-8'\n\n parse.call(this, input, null, base);\n }\n\n jURL.p rototype = {\n get href() {\n if (this._isInvalid)\n return this. _url;\n\n var authority = '';\n if ('' != this._username || null != th is._password) {\n authority = this._username +\n (null != this ._password ? ':' + this._password : '') + '@';\n }\n\n return this.pro tocol +\n (this._isRelative ? '//' + authority + this.host : '') +\n this.pathname + this._query + this._fragment;\n },\n set href(href) {\n clear.call(this);\n parse.call(this, href);\n },\n\n get pr otocol() {\n return this._scheme + ':';\n },\n set protocol(protocol) {\n if (this._isInvalid)\n return;\n parse.call(this, protocol + ':', 'scheme start');\n },\n\n get host() {\n return this._isInval id ? '' : this._port ?\n this._host + ':' + this._port : this._host;\n },\n set host(host) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, host, 'host');\n },\n\n get hostname () {\n return this._host;\n },\n set hostname(hostname) {\n if ( this._isInvalid || !this._isRelative)\n return;\n parse.call(this, h ostname, 'hostname');\n },\n\n get port() {\n return this._port;\n },\n set port(port) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, port, 'port');\n },\n\n get pathname() {\n return this._isInvalid ? '' : this._isRelative ?\n '/' + this ._path.join('/') : this._schemeData;\n },\n set pathname(pathname) {\n if (this._isInvalid || !this._isRelative)\n return;\n this._path = [];\n parse.call(this, pathname, 'relative path start');\n },\n\n ge t search() {\n return this._isInvalid || !this._query || '?' == this._query ?\n '' : this._query;\n },\n set search(search) {\n if (thi s._isInvalid || !this._isRelative)\n return;\n this._query = '?';\n if ('?' == search[0])\n search = search.slice(1);\n parse.call( this, search, 'query');\n },\n\n get hash() {\n return this._isInvali d || !this._fragment || '#' == this._fragment ?\n '' : this._fragment;\ n },\n set hash(hash) {\n if (this._isInvalid)\n return;\n this._fragment = '#';\n if ('#' == hash[0])\n hash = hash.slice(1) ;\n parse.call(this, hash, 'fragment');\n }\n };\n\n scope.URL = jURL; \n\n})(window);\n",
144 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\n// Old versions of iOS do not have bind.\n\nif (!Function.prototype.bind) {\n Function.prototype.bind = function(s cope) {\n var self = this;\n var args = Array.prototype.slice.call(argumen ts, 1);\n return function() {\n var args2 = args.slice();\n args2.p ush.apply(args2, arguments);\n return self.apply(scope, args2);\n };\n };\n}\n\n// mixin\n\n// copy all properties from inProps (et al) to inObj\nfunct ion mixin(inObj/*, inProps, inMoreProps, ...*/) {\n var obj = inObj || {};\n f or (var i = 1; i < arguments.length; i++) {\n var p = arguments[i];\n try {\n for (var n in p) {\n copyProperty(n, p, obj);\n }\n } ca tch(x) {\n }\n }\n return obj;\n}\n\n// copy property inName from inSource object to inTarget object\nfunction copyProperty(inName, inSource, inTarget) {\n var pd = getPropertyDescriptor(inSource, inName);\n Object.defineProperty(inT arget, inName, pd);\n}\n\n// get property descriptor for inName on inObject, eve n if\n// inName exists on some link in inObject's prototype chain\nfunction getP ropertyDescriptor(inObject, inName) {\n if (inObject) {\n var pd = Object.ge tOwnPropertyDescriptor(inObject, inName);\n return pd || getPropertyDescripto r(Object.getPrototypeOf(inObject), inName);\n }\n}\n\n// export\n\nscope.mixin = mixin;\n\n})(window.Platform);", 144 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\n// Old versions of iOS do not have bind.\n\nif (!Function.prototype.bind) {\n Function.prototype.bind = function(s cope) {\n var self = this;\n var args = Array.prototype.slice.call(argumen ts, 1);\n return function() {\n var args2 = args.slice();\n args2.p ush.apply(args2, arguments);\n return self.apply(scope, args2);\n };\n };\n}\n\n// mixin\n\n// copy all properties from inProps (et al) to inObj\nfunct ion mixin(inObj/*, inProps, inMoreProps, ...*/) {\n var obj = inObj || {};\n f or (var i = 1; i < arguments.length; i++) {\n var p = arguments[i];\n try {\n for (var n in p) {\n copyProperty(n, p, obj);\n }\n } ca tch(x) {\n }\n }\n return obj;\n}\n\n// copy property inName from inSource object to inTarget object\nfunction copyProperty(inName, inSource, inTarget) {\n var pd = getPropertyDescriptor(inSource, inName);\n Object.defineProperty(inT arget, inName, pd);\n}\n\n// get property descriptor for inName on inObject, eve n if\n// inName exists on some link in inObject's prototype chain\nfunction getP ropertyDescriptor(inObject, inName) {\n if (inObject) {\n var pd = Object.ge tOwnPropertyDescriptor(inObject, inName);\n return pd || getPropertyDescripto r(Object.getPrototypeOf(inObject), inName);\n }\n}\n\n// export\n\nscope.mixin = mixin;\n\n})(window.Platform);",
145 "// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Ve rsion 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http:/ /www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o r agreed to in writing, software\n// distributed under the License is distribute d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe r express or implied.\n// See the License for the specific language governing pe rmissions and\n// limitations under the License.\n\n(function(scope) {\n\n 'use strict';\n\n // polyfill DOMTokenList\n // * add/remove: allow these methods to take multiple classNames\n // * toggle: add a 2nd argument which forces the given state rather\n // than toggling.\n\n var add = DOMTokenList.prototype.a dd;\n var remove = DOMTokenList.prototype.remove;\n DOMTokenList.prototype.add = function() {\n for (var i = 0; i < arguments.length; i++) {\n add.cal l(this, arguments[i]);\n }\n };\n DOMTokenList.prototype.remove = function( ) {\n for (var i = 0; i < arguments.length; i++) {\n remove.call(this, a rguments[i]);\n }\n };\n DOMTokenList.prototype.toggle = function(name, boo l) {\n if (arguments.length == 1) {\n bool = !this.contains(name);\n }\n bool ? this.add(name) : this.remove(name);\n };\n DOMTokenList.prototyp e.switch = function(oldName, newName) {\n oldName && this.remove(oldName);\n newName && this.add(newName);\n };\n\n // add array() to NodeList, NamedNod eMap, HTMLCollection\n\n var ArraySlice = function() {\n return Array.protot ype.slice.call(this);\n };\n\n var namedNodeMap = (window.NamedNodeMap || wind ow.MozNamedAttrMap || {});\n\n NodeList.prototype.array = ArraySlice;\n namedN odeMap.prototype.array = ArraySlice;\n HTMLCollection.prototype.array = ArraySl ice;\n\n // polyfill performance.now\n\n if (!window.performance) {\n var s tart = Date.now();\n // only at millisecond precision\n window.performance = {now: function(){ return Date.now() - start }};\n }\n\n // polyfill for req uestAnimationFrame\n\n if (!window.requestAnimationFrame) {\n window.request AnimationFrame = (function() {\n var nativeRaf = window.webkitRequestAnimat ionFrame ||\n window.mozRequestAnimationFrame;\n\n return nativeRaf ?\n function(callback) {\n return nativeRaf(function() {\n callback(performance.now());\n });\n } :\n function ( callback ){\n return window.setTimeout(callback, 1000 / 60);\n };\n })();\n }\n\n if (!window.cancelAnimationFrame) {\n window.cancelA nimationFrame = (function() {\n return window.webkitCancelAnimationFrame | |\n window.mozCancelAnimationFrame ||\n function(id) {\n clearTimeout(id);\n };\n })();\n }\n\n // TODO(sorvell): workaround for bug:\n // https://code.google.com/p/chromium/issues/detail?id=229142\n // remove when this bug is addressed\n // give main document templates a base that allows them to fetch eagerly\n // resolved paths relative to the main document \n var template = document.createElement('template');\n var base = document.cr eateElement('base');\n base.href = document.baseURI;\n template.content.ownerD ocument.appendChild(base);\n \n\n // utility\n\n function createDOM(inTagOrNo de, inHTML, inAttrs) {\n var dom = typeof inTagOrNode == 'string' ?\n document.createElement(inTagOrNode) : inTagOrNode.cloneNode(true);\n dom.inne rHTML = inHTML;\n if (inAttrs) {\n for (var n in inAttrs) {\n dom .setAttribute(n, inAttrs[n]);\n }\n }\n return dom;\n }\n // Make a stub for Polymer() for polyfill purposes; under the HTMLImports\n // polyfill, scripts in the main document run before imports. That means\n // if (1) polyme r is imported and (2) Polymer() is called in the main document\n // in a script after the import, 2 occurs before 1. We correct this here\n // by specfiically patching Polymer(); this is not necessary under native\n // HTMLImports.\n va r elementDeclarations = [];\n\n var polymerStub = function(name, dictionary) {\ n elementDeclarations.push(arguments);\n }\n window.Polymer = polymerStub;\ n\n // deliver queued delcarations\n scope.deliverDeclarations = function() {\ n scope.deliverDeclarations = null;\n return elementDeclarations;\n }\n\n // Once DOMContent has loaded, any main document scripts that depend on\n // Polymer() should have run. Calling Polymer() now is an error until\n // polymer is imported.\n window.addEventListener('DOMContentLoaded', function() {\n i f (window.Polymer === polymerStub) {\n window.Polymer = function() {\n console.error('You tried to use polymer without loading it first. To ' +\n 'load polymer, <link rel=\"import\" href=\"' + \n 'components/po lymer/polymer.html\">');\n };\n }\n });\n\n // exports\n scope.create DOM = createDOM;\n\n})(window.Platform);\n", 145 "// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Ve rsion 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http:/ /www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o r agreed to in writing, software\n// distributed under the License is distribute d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe r express or implied.\n// See the License for the specific language governing pe rmissions and\n// limitations under the License.\n\n(function(scope) {\n\n 'use strict';\n\n // polyfill DOMTokenList\n // * add/remove: allow these methods to take multiple classNames\n // * toggle: add a 2nd argument which forces the given state rather\n // than toggling.\n\n var add = DOMTokenList.prototype.a dd;\n var remove = DOMTokenList.prototype.remove;\n DOMTokenList.prototype.add = function() {\n for (var i = 0; i < arguments.length; i++) {\n add.cal l(this, arguments[i]);\n }\n };\n DOMTokenList.prototype.remove = function( ) {\n for (var i = 0; i < arguments.length; i++) {\n remove.call(this, a rguments[i]);\n }\n };\n DOMTokenList.prototype.toggle = function(name, boo l) {\n if (arguments.length == 1) {\n bool = !this.contains(name);\n }\n bool ? this.add(name) : this.remove(name);\n };\n DOMTokenList.prototyp e.switch = function(oldName, newName) {\n oldName && this.remove(oldName);\n newName && this.add(newName);\n };\n\n // add array() to NodeList, NamedNod eMap, HTMLCollection\n\n var ArraySlice = function() {\n return Array.protot ype.slice.call(this);\n };\n\n var namedNodeMap = (window.NamedNodeMap || wind ow.MozNamedAttrMap || {});\n\n NodeList.prototype.array = ArraySlice;\n namedN odeMap.prototype.array = ArraySlice;\n HTMLCollection.prototype.array = ArraySl ice;\n\n // polyfill performance.now\n\n if (!window.performance) {\n var s tart = Date.now();\n // only at millisecond precision\n window.performance = {now: function(){ return Date.now() - start }};\n }\n\n // polyfill for req uestAnimationFrame\n\n if (!window.requestAnimationFrame) {\n window.request AnimationFrame = (function() {\n var nativeRaf = window.webkitRequestAnimat ionFrame ||\n window.mozRequestAnimationFrame;\n\n return nativeRaf ?\n function(callback) {\n return nativeRaf(function() {\n callback(performance.now());\n });\n } :\n function ( callback ){\n return window.setTimeout(callback, 1000 / 60);\n };\n })();\n }\n\n if (!window.cancelAnimationFrame) {\n window.cancelA nimationFrame = (function() {\n return window.webkitCancelAnimationFrame | |\n window.mozCancelAnimationFrame ||\n function(id) {\n clearTimeout(id);\n };\n })();\n }\n\n // TODO(sorvell): workaround for bug:\n // https://code.google.com/p/chromium/issues/detail?id=229142\n // remove when this bug is addressed\n // give main document templates a base that allows them to fetch eagerly\n // resolved paths relative to the main document \n var template = document.createElement('template');\n var base = document.cr eateElement('base');\n base.href = document.baseURI;\n template.content.ownerD ocument.appendChild(base);\n \n\n // utility\n\n function createDOM(inTagOrNo de, inHTML, inAttrs) {\n var dom = typeof inTagOrNode == 'string' ?\n document.createElement(inTagOrNode) : inTagOrNode.cloneNode(true);\n dom.inne rHTML = inHTML;\n if (inAttrs) {\n for (var n in inAttrs) {\n dom .setAttribute(n, inAttrs[n]);\n }\n }\n return dom;\n }\n // Make a stub for Polymer() for polyfill purposes; under the HTMLImports\n // polyfill, scripts in the main document run before imports. That means\n // if (1) polyme r is imported and (2) Polymer() is called in the main document\n // in a script after the import, 2 occurs before 1. We correct this here\n // by specfiically patching Polymer(); this is not necessary under native\n // HTMLImports.\n va r elementDeclarations = [];\n\n var polymerStub = function(name, dictionary) {\ n elementDeclarations.push(arguments);\n }\n window.Polymer = polymerStub;\ n\n // deliver queued delcarations\n scope.deliverDeclarations = function() {\ n scope.deliverDeclarations = null;\n return elementDeclarations;\n }\n\n // Once DOMContent has loaded, any main document scripts that depend on\n // Polymer() should have run. Calling Polymer() now is an error until\n // polymer is imported.\n window.addEventListener('DOMContentLoaded', function() {\n i f (window.Polymer === polymerStub) {\n window.Polymer = function() {\n console.error('You tried to use polymer without loading it first. To ' +\n 'load polymer, <link rel=\"import\" href=\"' + \n 'components/po lymer/polymer.html\">');\n };\n }\n });\n\n // exports\n scope.create DOM = createDOM;\n\n})(window.Platform);\n",
146 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n// poor man's adapter for template.content on various pla tform scenarios\nwindow.templateContent = window.templateContent || function(inT emplate) {\n return inTemplate.content;\n};", 146 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n// poor man's adapter for template.content on various pla tform scenarios\nwindow.templateContent = window.templateContent || function(inT emplate) {\n return inTemplate.content;\n};",
147 "(function(scope) {\n \n scope = scope || (window.Inspector = {});\n \n var inspector;\n\n window.sinspect = function(inNode, inProxy) {\n if (!insp ector) {\n inspector = window.open('', 'ShadowDOM Inspector', null, true);\ n inspector.document.write(inspectorHTML);\n //inspector.document.clos e();\n inspector.api = {\n shadowize: shadowize\n };\n }\n inspect(inNode || wrap(document.body), inProxy);\n };\n\n var inspectorHTML = [\n '<!DOCTYPE html>',\n '<html>',\n ' <head>',\n ' <title>Sha dowDOM Inspector</title>',\n ' <style>',\n ' body {',\n ' }',\n ' pre {',\n ' font: 9pt \"Courier New\", monospace;',\n ' line-height: 1.5em;',\n ' }',\n ' tag {',\n ' color: purple;',\n ' }',\n ' ul {',\n ' margin: 0 ;',\n ' padding: 0;',\n ' list-style: none;',\n ' }',\n ' li {',\n ' display: inline-block;',\n ' ba ckground-color: #f1f1f1;',\n ' padding: 4px 6px;',\n ' bor der-radius: 4px;',\n ' margin-right: 4px;',\n ' }',\n ' </style>',\n ' </head>',\n ' <body>',\n ' <ul id=\"crumbs\">',\n ' </ul>',\n ' <div id=\"tree\"></div>',\n ' </body>',\n '</ht ml>'\n ].join('\\n');\n \n var crumbs = [];\n\n var displayCrumbs = function () {\n // alias our document\n var d = inspector.document;\n // get cru mbbar\n var cb = d.querySelector('#crumbs');\n // clear crumbs\n cb.tex tContent = '';\n // build new crumbs\n for (var i=0, c; c=crumbs[i]; i++) {\n var a = d.createElement('a');\n a.href = '#';\n a.textContent = c.localName;\n a.idx = i;\n a.onclick = function(event) {\n var c;\n while (crumbs.length > this.idx) {\n c = crumbs.pop();\ n }\n inspect(c.shadow || c, c);\n event.preventDefault();\ n };\n cb.appendChild(d.createElement('li')).appendChild(a);\n }\n };\n\n var inspect = function(inNode, inProxy) {\n // alias our document\n var d = inspector.document;\n // reset list of drillable nodes\n drilla ble = [];\n // memoize our crumb proxy\n var proxy = inProxy || inNode;\n crumbs.push(proxy);\n // update crumbs\n displayCrumbs();\n // refle ct local tree\n d.body.querySelector('#tree').innerHTML =\n '<pre>' + output(inNode, inNode.childNodes) + '</pre>';\n };\n\n var forEach = Array.pro totype.forEach.call.bind(Array.prototype.forEach);\n\n var blacklisted = {STYLE :1, SCRIPT:1, \"#comment\": 1, TEMPLATE: 1};\n var blacklist = function(inNode) {\n return blacklisted[inNode.nodeName];\n };\n\n var output = function(in Node, inChildNodes, inIndent) {\n if (blacklist(inNode)) {\n return '';\ n }\n var indent = inIndent || '';\n if (inNode.localName || inNode.nod eType == 11) {\n var name = inNode.localName || 'shadow-root';\n //inC hildNodes = ShadowDOM.localNodes(inNode);\n var info = indent + describe(in Node);\n // if only textNodes\n // TODO(sjmiles): make correct for Sha dowDOM\n /*if (!inNode.children.length && inNode.localName !== 'content' && inNode.localName !== 'shadow') {\n info += catTextContent(inChildNodes); \n } else*/ {\n // TODO(sjmiles): native <shadow> has no reference t o its projection\n if (name == 'content' /*|| name == 'shadow'*/) {\n inChildNodes = inNode.getDistributedNodes();\n }\n info += ' <br/>';\n var ind = indent + '&nbsp;&nbsp;';\n forEach(inChildNode s, function(n) {\n info += output(n, n.childNodes, ind);\n });\n info += indent;\n }\n if (!({br:1}[name])) {\n info += '<tag>&lt;/' + name + '&gt;</tag>';\n info += '<br/>';\n }\n } el se {\n var text = inNode.textContent.trim();\n info = text ? indent + '\"' + text + '\"' + '<br/>' : '';\n }\n return info;\n };\n\n var catTe xtContent = function(inChildNodes) {\n var info = '';\n forEach(inChildNod es, function(n) {\n info += n.textContent.trim();\n });\n return info ;\n };\n\n var drillable = [];\n\n var describe = function(inNode) {\n var tag = '<tag>' + '&lt;';\n var name = inNode.localName || 'shadow-root';\n if (inNode.webkitShadowRoot || inNode.shadowRoot) {\n tag += ' <button idx =\"' + drillable.length +\n '\" onclick=\"api.shadowize.call(this)\">' + name + '</button>';\n drillable.push(inNode);\n } else {\n tag += n ame || 'shadow-root';\n }\n if (inNode.attributes) {\n forEach(inNode .attributes, function(a) {\n tag += ' ' + a.name + (a.value ? '=\"' + a.v alue + '\"' : '');\n });\n }\n tag += '&gt;'+ '</tag>';\n return t ag;\n };\n\n // remote api\n\n shadowize = function() {\n var idx = Number (this.attributes.idx.value);\n //alert(idx);\n var node = drillable[idx];\ n if (node) {\n inspect(node.webkitShadowRoot || node.shadowRoot, node)\ n } else {\n console.log(\"bad shadowize node\");\n console.dir(thi s);\n }\n };\n \n // export\n \n scope.output = output;\n \n})(window.I nspector);\n\n\n", 147 "(function(scope) {\n \n scope = scope || (window.Inspector = {});\n \n var inspector;\n\n window.sinspect = function(inNode, inProxy) {\n if (!insp ector) {\n inspector = window.open('', 'ShadowDOM Inspector', null, true);\ n inspector.document.write(inspectorHTML);\n //inspector.document.clos e();\n inspector.api = {\n shadowize: shadowize\n };\n }\n inspect(inNode || wrap(document.body), inProxy);\n };\n\n var inspectorHTML = [\n '<!DOCTYPE html>',\n '<html>',\n ' <head>',\n ' <title>Sha dowDOM Inspector</title>',\n ' <style>',\n ' body {',\n ' }',\n ' pre {',\n ' font: 9pt \"Courier New\", monospace;',\n ' line-height: 1.5em;',\n ' }',\n ' tag {',\n ' color: purple;',\n ' }',\n ' ul {',\n ' margin: 0 ;',\n ' padding: 0;',\n ' list-style: none;',\n ' }',\n ' li {',\n ' display: inline-block;',\n ' ba ckground-color: #f1f1f1;',\n ' padding: 4px 6px;',\n ' bor der-radius: 4px;',\n ' margin-right: 4px;',\n ' }',\n ' </style>',\n ' </head>',\n ' <body>',\n ' <ul id=\"crumbs\">',\n ' </ul>',\n ' <div id=\"tree\"></div>',\n ' </body>',\n '</ht ml>'\n ].join('\\n');\n \n var crumbs = [];\n\n var displayCrumbs = function () {\n // alias our document\n var d = inspector.document;\n // get cru mbbar\n var cb = d.querySelector('#crumbs');\n // clear crumbs\n cb.tex tContent = '';\n // build new crumbs\n for (var i=0, c; c=crumbs[i]; i++) {\n var a = d.createElement('a');\n a.href = '#';\n a.textContent = c.localName;\n a.idx = i;\n a.onclick = function(event) {\n var c;\n while (crumbs.length > this.idx) {\n c = crumbs.pop();\ n }\n inspect(c.shadow || c, c);\n event.preventDefault();\ n };\n cb.appendChild(d.createElement('li')).appendChild(a);\n }\n };\n\n var inspect = function(inNode, inProxy) {\n // alias our document\n var d = inspector.document;\n // reset list of drillable nodes\n drilla ble = [];\n // memoize our crumb proxy\n var proxy = inProxy || inNode;\n crumbs.push(proxy);\n // update crumbs\n displayCrumbs();\n // refle ct local tree\n d.body.querySelector('#tree').innerHTML =\n '<pre>' + output(inNode, inNode.childNodes) + '</pre>';\n };\n\n var forEach = Array.pro totype.forEach.call.bind(Array.prototype.forEach);\n\n var blacklisted = {STYLE :1, SCRIPT:1, \"#comment\": 1, TEMPLATE: 1};\n var blacklist = function(inNode) {\n return blacklisted[inNode.nodeName];\n };\n\n var output = function(in Node, inChildNodes, inIndent) {\n if (blacklist(inNode)) {\n return '';\ n }\n var indent = inIndent || '';\n if (inNode.localName || inNode.nod eType == 11) {\n var name = inNode.localName || 'shadow-root';\n //inC hildNodes = ShadowDOM.localNodes(inNode);\n var info = indent + describe(in Node);\n // if only textNodes\n // TODO(sjmiles): make correct for Sha dowDOM\n /*if (!inNode.children.length && inNode.localName !== 'content' && inNode.localName !== 'shadow') {\n info += catTextContent(inChildNodes); \n } else*/ {\n // TODO(sjmiles): native <shadow> has no reference t o its projection\n if (name == 'content' /*|| name == 'shadow'*/) {\n inChildNodes = inNode.getDistributedNodes();\n }\n info += ' <br/>';\n var ind = indent + '&nbsp;&nbsp;';\n forEach(inChildNode s, function(n) {\n info += output(n, n.childNodes, ind);\n });\n info += indent;\n }\n if (!({br:1}[name])) {\n info += '<tag>&lt;/' + name + '&gt;</tag>';\n info += '<br/>';\n }\n } el se {\n var text = inNode.textContent.trim();\n info = text ? indent + '\"' + text + '\"' + '<br/>' : '';\n }\n return info;\n };\n\n var catTe xtContent = function(inChildNodes) {\n var info = '';\n forEach(inChildNod es, function(n) {\n info += n.textContent.trim();\n });\n return info ;\n };\n\n var drillable = [];\n\n var describe = function(inNode) {\n var tag = '<tag>' + '&lt;';\n var name = inNode.localName || 'shadow-root';\n if (inNode.webkitShadowRoot || inNode.shadowRoot) {\n tag += ' <button idx =\"' + drillable.length +\n '\" onclick=\"api.shadowize.call(this)\">' + name + '</button>';\n drillable.push(inNode);\n } else {\n tag += n ame || 'shadow-root';\n }\n if (inNode.attributes) {\n forEach(inNode .attributes, function(a) {\n tag += ' ' + a.name + (a.value ? '=\"' + a.v alue + '\"' : '');\n });\n }\n tag += '&gt;'+ '</tag>';\n return t ag;\n };\n\n // remote api\n\n shadowize = function() {\n var idx = Number (this.attributes.idx.value);\n //alert(idx);\n var node = drillable[idx];\ n if (node) {\n inspect(node.webkitShadowRoot || node.shadowRoot, node)\ n } else {\n console.log(\"bad shadowize node\");\n console.dir(thi s);\n }\n };\n \n // export\n \n scope.output = output;\n \n})(window.I nspector);\n\n\n",
148 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n // TODO(sorvell): It's desireable t o provide a default stylesheet \n // that's convenient for styling unresolved e lements, but\n // it's cumbersome to have to include this manually in every pag e.\n // It would make sense to put inside some HTMLImport but \n // the HTMLIm ports polyfill does not allow loading of stylesheets \n // that block rendering . Therefore this injection is tolerated here.\n\n var style = document.createEl ement('style');\n style.textContent = ''\n + 'body {'\n + 'transition : opacity ease-in 0.2s;' \n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidden;' \n + ' } \\n'\n ;\n var head = document.querySelector('head');\n head.insertBefore(style, head.fi rstChild);\n\n})(Platform);\n", 148 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n // TODO(sorvell): It's desireable t o provide a default stylesheet \n // that's convenient for styling unresolved e lements, but\n // it's cumbersome to have to include this manually in every pag e.\n // It would make sense to put inside some HTMLImport but \n // the HTMLIm ports polyfill does not allow loading of stylesheets \n // that block rendering . Therefore this injection is tolerated here.\n\n var style = document.createEl ement('style');\n style.textContent = ''\n + 'body {'\n + 'transition : opacity ease-in 0.2s;' \n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidden;' \n + ' } \\n'\n ;\n var head = document.querySelector('head');\n head.insertBefore(style, head.fi rstChild);\n\n})(Platform);\n",
149 "(function(scope) {\n\n function withDependencies(task, depends) {\n dep ends = depends || [];\n if (!depends.map) {\n depends = [depends];\n }\n return task.apply(this, depends.map(marshal));\n }\n\n function module( name, dependsOrFactory, moduleFactory) {\n var module;\n switch (arguments .length) {\n case 0:\n return;\n case 1:\n module = null ;\n break;\n case 2:\n module = dependsOrFactory.apply(this); \n break;\n default:\n module = withDependencies(moduleFactor y, dependsOrFactory);\n break;\n }\n modules[name] = module;\n };\ n\n function marshal(name) {\n return modules[name];\n }\n\n var modules = {};\n\n function using(depends, task) {\n HTMLImports.whenImportsReady(func tion() {\n withDependencies(task, depends);\n });\n };\n\n // exports\ n\n scope.marshal = marshal;\n scope.module = module;\n scope.using = using;\ n\n})(window);", 149 "(function(scope) {\n\n function withDependencies(task, depends) {\n dep ends = depends || [];\n if (!depends.map) {\n depends = [depends];\n }\n return task.apply(this, depends.map(marshal));\n }\n\n function module( name, dependsOrFactory, moduleFactory) {\n var module;\n switch (arguments .length) {\n case 0:\n return;\n case 1:\n module = null ;\n break;\n case 2:\n module = dependsOrFactory.apply(this); \n break;\n default:\n module = withDependencies(moduleFactor y, dependsOrFactory);\n break;\n }\n modules[name] = module;\n };\ n\n function marshal(name) {\n return modules[name];\n }\n\n var modules = {};\n\n function using(depends, task) {\n HTMLImports.whenImportsReady(func tion() {\n withDependencies(task, depends);\n });\n };\n\n // exports\ n\n scope.marshal = marshal;\n scope.module = module;\n scope.using = using;\ n\n})(window);",
150 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\nvar iterations = 0;\nvar callbacks = [];\nvar twiddle = document.createTextNode('');\n\nfunction endOfMicrotask(callb ack) {\n twiddle.textContent = iterations++;\n callbacks.push(callback);\n}\n\ nfunction atEndOfMicrotask() {\n while (callbacks.length) {\n callbacks.shif t()();\n }\n}\n\nnew (window.MutationObserver || JsMutationObserver)(atEndOfMic rotask)\n .observe(twiddle, {characterData: true})\n ;\n\n// exports\n\nscope. endOfMicrotask = endOfMicrotask;\n\n})(Platform);\n\n", 150 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\nvar iterations = 0;\nvar callbacks = [];\nvar twiddle = document.createTextNode('');\n\nfunction endOfMicrotask(callb ack) {\n twiddle.textContent = iterations++;\n callbacks.push(callback);\n}\n\ nfunction atEndOfMicrotask() {\n while (callbacks.length) {\n callbacks.shif t()();\n }\n}\n\nnew (window.MutationObserver || JsMutationObserver)(atEndOfMic rotask)\n .observe(twiddle, {characterData: true})\n ;\n\n// exports\n\nscope. endOfMicrotask = endOfMicrotask;\n\n})(Platform);\n\n",
151 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar urlResolver = {\n resolveDom: function(root, url) {\n url = url || root.ownerDocument.baseURI;\n this.re solveAttributes(root, url);\n this.resolveStyles(root, url);\n // handle t emplate.content\n var templates = root.querySelectorAll('template');\n if (templates) {\n for (var i = 0, l = templates.length, t; (i < l) && (t = te mplates[i]); i++) {\n if (t.content) {\n this.resolveDom(t.conte nt, url);\n }\n }\n }\n },\n resolveStyles: function(root, url) {\n var styles = root.querySelectorAll('style');\n if (styles) {\n f or (var i = 0, l = styles.length, s; (i < l) && (s = styles[i]); i++) {\n this.resolveStyle(s, url);\n }\n }\n },\n resolveStyle: function(styl e, url) {\n url = url || style.ownerDocument.baseURI;\n style.textContent = this.resolveCssText(style.textContent, url);\n },\n resolveCssText: function (cssText, baseUrl) {\n cssText = replaceUrlsInCssText(cssText, baseUrl, CSS_U RL_REGEXP);\n return replaceUrlsInCssText(cssText, baseUrl, CSS_IMPORT_REGEXP );\n },\n resolveAttributes: function(root, url) {\n if (root.hasAttributes && root.hasAttributes()) {\n this.resolveElementAttributes(root, url);\n }\n // search for attributes that host urls\n var nodes = root && root.q uerySelectorAll(URL_ATTRS_SELECTOR);\n if (nodes) {\n for (var i = 0, l = nodes.length, n; (i < l) && (n = nodes[i]); i++) {\n this.resolveElemen tAttributes(n, url);\n }\n }\n },\n resolveElementAttributes: function (node, url) {\n url = url || node.ownerDocument.baseURI;\n URL_ATTRS.forEa ch(function(v) {\n var attr = node.attributes[v];\n if (attr && attr.v alue &&\n (attr.value.search(URL_TEMPLATE_SEARCH) < 0)) {\n var u rlPath = resolveRelativeUrl(url, attr.value);\n attr.value = urlPath;\n }\n });\n }\n};\n\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CS S_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\nvar URL_ATTRS = ['hre f', 'src', 'action'];\nvar URL_ATTRS_SELECTOR = '[' + URL_ATTRS.join('],[') + '] ';\nvar URL_TEMPLATE_SEARCH = '{{.*}}';\n\nfunction replaceUrlsInCssText(cssText , baseUrl, regexp) {\n return cssText.replace(regexp, function(m, pre, url, pos t) {\n var urlPath = url.replace(/[\"']/g, '');\n urlPath = resolveRelativ eUrl(baseUrl, urlPath);\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n}\n\nfunction resolveRelativeUrl(baseUrl, url) {\n var u = new URL(url, baseU rl);\n return makeDocumentRelPath(u.href);\n}\n\nfunction makeDocumentRelPath(u rl) {\n var root = document.baseURI;\n var u = new URL(url, root);\n if (u.ho st === root.host && u.port === root.port &&\n u.protocol === root.protocol) {\n return makeRelPath(root.pathname, u.pathname);\n } else {\n return u rl;\n }\n}\n\n// make a relative path from source to target\nfunction makeRelPa th(source, target) {\n var s = source.split('/');\n var t = target.split('/'); \n while (s.length && s[0] === t[0]){\n s.shift();\n t.shift();\n }\n f or (var i = 0, l = s.length - 1; i < l; i++) {\n t.unshift('..');\n }\n ret urn t.join('/');\n}\n\n// exports\nscope.urlResolver = urlResolver;\n\n})(Platfo rm);\n", 151 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar urlResolver = {\n resolveDom: function(root, url) {\n url = url || root.ownerDocument.baseURI;\n this.re solveAttributes(root, url);\n this.resolveStyles(root, url);\n // handle t emplate.content\n var templates = root.querySelectorAll('template');\n if (templates) {\n for (var i = 0, l = templates.length, t; (i < l) && (t = te mplates[i]); i++) {\n if (t.content) {\n this.resolveDom(t.conte nt, url);\n }\n }\n }\n },\n resolveStyles: function(root, url) {\n var styles = root.querySelectorAll('style');\n if (styles) {\n f or (var i = 0, l = styles.length, s; (i < l) && (s = styles[i]); i++) {\n this.resolveStyle(s, url);\n }\n }\n },\n resolveStyle: function(styl e, url) {\n url = url || style.ownerDocument.baseURI;\n style.textContent = this.resolveCssText(style.textContent, url);\n },\n resolveCssText: function (cssText, baseUrl) {\n cssText = replaceUrlsInCssText(cssText, baseUrl, CSS_U RL_REGEXP);\n return replaceUrlsInCssText(cssText, baseUrl, CSS_IMPORT_REGEXP );\n },\n resolveAttributes: function(root, url) {\n if (root.hasAttributes && root.hasAttributes()) {\n this.resolveElementAttributes(root, url);\n }\n // search for attributes that host urls\n var nodes = root && root.q uerySelectorAll(URL_ATTRS_SELECTOR);\n if (nodes) {\n for (var i = 0, l = nodes.length, n; (i < l) && (n = nodes[i]); i++) {\n this.resolveElemen tAttributes(n, url);\n }\n }\n },\n resolveElementAttributes: function (node, url) {\n url = url || node.ownerDocument.baseURI;\n URL_ATTRS.forEa ch(function(v) {\n var attr = node.attributes[v];\n if (attr && attr.v alue &&\n (attr.value.search(URL_TEMPLATE_SEARCH) < 0)) {\n var u rlPath = resolveRelativeUrl(url, attr.value);\n attr.value = urlPath;\n }\n });\n }\n};\n\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CS S_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\nvar URL_ATTRS = ['hre f', 'src', 'action'];\nvar URL_ATTRS_SELECTOR = '[' + URL_ATTRS.join('],[') + '] ';\nvar URL_TEMPLATE_SEARCH = '{{.*}}';\n\nfunction replaceUrlsInCssText(cssText , baseUrl, regexp) {\n return cssText.replace(regexp, function(m, pre, url, pos t) {\n var urlPath = url.replace(/[\"']/g, '');\n urlPath = resolveRelativ eUrl(baseUrl, urlPath);\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n}\n\nfunction resolveRelativeUrl(baseUrl, url) {\n var u = new URL(url, baseU rl);\n return makeDocumentRelPath(u.href);\n}\n\nfunction makeDocumentRelPath(u rl) {\n var root = document.baseURI;\n var u = new URL(url, root);\n if (u.ho st === root.host && u.port === root.port &&\n u.protocol === root.protocol) {\n return makeRelPath(root.pathname, u.pathname);\n } else {\n return u rl;\n }\n}\n\n// make a relative path from source to target\nfunction makeRelPa th(source, target) {\n var s = source.split('/');\n var t = target.split('/'); \n while (s.length && s[0] === t[0]){\n s.shift();\n t.shift();\n }\n f or (var i = 0, l = s.length - 1; i < l; i++) {\n t.unshift('..');\n }\n ret urn t.join('/');\n}\n\n// exports\nscope.urlResolver = urlResolver;\n\n})(Platfo rm);\n",
152 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(global) {\n\n var registrationsTable = new We akMap();\n\n // We use setImmediate or postMessage for our future callback.\n var setImmediate = window.msSetImmediate;\n\n // Use post message to emulate se tImmediate.\n if (!setImmediate) {\n var setImmediateQueue = [];\n var se ntinel = String(Math.random());\n window.addEventListener('message', function (e) {\n if (e.data === sentinel) {\n var queue = setImmediateQueue;\ n setImmediateQueue = [];\n queue.forEach(function(func) {\n func();\n });\n }\n });\n setImmediate = function(func) {\ n setImmediateQueue.push(func);\n window.postMessage(sentinel, '*');\n };\n }\n\n // This is used to ensure that we never schedule 2 callas to se tImmediate\n var isScheduled = false;\n\n // Keep track of observers that need s to be notified next time.\n var scheduledObservers = [];\n\n /**\n * Sched ules |dispatchCallback| to be called in the future.\n * @param {MutationObserv er} observer\n */\n function scheduleCallback(observer) {\n scheduledObser vers.push(observer);\n if (!isScheduled) {\n isScheduled = true;\n setImmediate(dispatchCallbacks);\n }\n }\n\n function wrapIfNeeded(node) {\ n return window.ShadowDOMPolyfill &&\n window.ShadowDOMPolyfill.wrapIf Needed(node) ||\n node;\n }\n\n function dispatchCallbacks() {\n // http://dom.spec.whatwg.org/#mutation-observers\n\n isScheduled = false; // Us ed to allow a new setImmediate call above.\n\n var observers = scheduledObser vers;\n scheduledObservers = [];\n // Sort observers based on their creati on UID (incremental).\n observers.sort(function(o1, o2) {\n return o1.ui d_ - o2.uid_;\n });\n\n var anyNonEmpty = false;\n observers.forEach(fu nction(observer) {\n\n // 2.1, 2.2\n var queue = observer.takeRecords( );\n // 2.3. Remove all transient registered observers whose observer is mo .\n removeTransientObserversFor(observer);\n\n // 2.4\n if (queue .length) {\n observer.callback_(queue, observer);\n anyNonEmpty = true;\n }\n });\n\n // 3.\n if (anyNonEmpty)\n dispatchCallba cks();\n }\n\n function removeTransientObserversFor(observer) {\n observer. nodes_.forEach(function(node) {\n var registrations = registrationsTable.ge t(node);\n if (!registrations)\n return;\n registrations.forEac h(function(registration) {\n if (registration.observer === observer)\n registration.removeTransientObservers();\n });\n });\n }\n\n /* *\n * This function is used for the \"For each registered observer observer (w ith\n * observer's options as options) in target's list of registered observer s,\n * run these substeps:\" and the \"For each ancestor ancestor of target, a nd for\n * each registered observer observer (with options options) in ancesto r's list\n * of registered observers, run these substeps:\" part of the algori thms. The\n * |options.subtree| is checked to ensure that the callback is call ed\n * correctly.\n *\n * @param {Node} target\n * @param {function(Muta tionObserverInit):MutationRecord} callback\n */\n function forEachAncestorAnd ObserverEnqueueRecord(target, callback) {\n for (var node = target; node; nod e = node.parentNode) {\n var registrations = registrationsTable.get(node);\ n\n if (registrations) {\n for (var j = 0; j < registrations.length; j++) {\n var registration = registrations[j];\n var options = registration.options;\n\n // Only target ignores subtree.\n i f (node !== target && !options.subtree)\n continue;\n\n var record = callback(options);\n if (record)\n registration.enq ueue(record);\n }\n }\n }\n }\n\n var uidCounter = 0;\n\n /**\ n * The class that maps to the DOM MutationObserver interface.\n * @param {F unction} callback.\n * @constructor\n */\n function JsMutationObserver(call back) {\n this.callback_ = callback;\n this.nodes_ = [];\n this.records _ = [];\n this.uid_ = ++uidCounter;\n }\n\n JsMutationObserver.prototype = {\n observe: function(target, options) {\n target = wrapIfNeeded(target) ;\n\n // 1.1\n if (!options.childList && !options.attributes && !optio ns.characterData ||\n\n // 1.2\n options.attributeOldValue && !options.attributes ||\n\n // 1.3\n options.attributeFilter && options.attributeFilter.length &&\n !options.attributes ||\n\n // 1.4\n options.characterDataOldValue && !options.characterData) {\n\n throw new SyntaxError();\n }\n\n var registrations = reg istrationsTable.get(target);\n if (!registrations)\n registrationsTa ble.set(target, registrations = []);\n\n // 2\n // If target's list of registered observers already includes a registered\n // observer associate d with the context object, replace that registered\n // observer's options with options.\n var registration;\n for (var i = 0; i < registrations. length; i++) {\n if (registrations[i].observer === this) {\n reg istration = registrations[i];\n registration.removeListeners();\n registration.options = options;\n break;\n }\n }\n\n // 3.\n // Otherwise, add a new registered observer to target's list of registered\n // observers with the context object as the observer and optio ns as the\n // options, and add target to context object's list of nodes on which it\n // is registered.\n if (!registration) {\n registra tion = new Registration(this, target, options);\n registrations.push(regi stration);\n this.nodes_.push(target);\n }\n\n registration.add Listeners();\n },\n\n disconnect: function() {\n this.nodes_.forEach( function(node) {\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registratio n = registrations[i];\n if (registration.observer === this) {\n registration.removeListeners();\n registrations.splice(i, 1);\n // Each node can only have one registered observer associated with\n // this observer.\n break;\n }\n }\n } , this);\n this.records_ = [];\n },\n\n takeRecords: function() {\n var copyOfRecords = this.records_;\n this.records_ = [];\n return copyOfRecords;\n }\n };\n\n /**\n * @param {string} type\n * @param {No de} target\n * @constructor\n */\n function MutationRecord(type, target) {\ n this.type = type;\n this.target = target;\n this.addedNodes = [];\n this.removedNodes = [];\n this.previousSibling = null;\n this.nextSiblin g = null;\n this.attributeName = null;\n this.attributeNamespace = null;\n this.oldValue = null;\n }\n\n function copyMutationRecord(original) {\n var record = new MutationRecord(original.type, original.target);\n record.ad dedNodes = original.addedNodes.slice();\n record.removedNodes = original.remo vedNodes.slice();\n record.previousSibling = original.previousSibling;\n r ecord.nextSibling = original.nextSibling;\n record.attributeName = original.a ttributeName;\n record.attributeNamespace = original.attributeNamespace;\n record.oldValue = original.oldValue;\n return record;\n };\n\n // We keep track of the two (possibly one) records used in a single mutation.\n var curren tRecord, recordWithOldValue;\n\n /**\n * Creates a record without |oldValue| and caches it as |currentRecord| for\n * later use.\n * @param {string} oldV alue\n * @return {MutationRecord}\n */\n function getRecord(type, target) { \n return currentRecord = new MutationRecord(type, target);\n }\n\n /**\n * Gets or creates a record with |oldValue| based in the |currentRecord|\n * @ param {string} oldValue\n * @return {MutationRecord}\n */\n function getRec ordWithOldValue(oldValue) {\n if (recordWithOldValue)\n return recordWit hOldValue;\n recordWithOldValue = copyMutationRecord(currentRecord);\n rec ordWithOldValue.oldValue = oldValue;\n return recordWithOldValue;\n }\n\n f unction clearRecords() {\n currentRecord = recordWithOldValue = undefined;\n }\n\n /**\n * @param {MutationRecord} record\n * @return {boolean} Whether the record represents a record from the current\n * mutation event.\n */\n function recordRepresentsCurrentMutation(record) {\n return record === recor dWithOldValue || record === currentRecord;\n }\n\n /**\n * Selects which rec ord, if any, to replace the last record in the queue.\n * This returns |null| if no record should be replaced.\n *\n * @param {MutationRecord} lastRecord\ n * @param {MutationRecord} newRecord\n * @param {MutationRecord}\n */\n function selectRecord(lastRecord, newRecord) {\n if (lastRecord === newRecord )\n return lastRecord;\n\n // Check if the the record we are adding repr esents the same record. If\n // so, we keep the one with the oldValue in it.\ n if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord))\n return recordWithOldValue;\n\n return null;\n }\n\n /**\n * Class used to represent a registered observer.\n * @param {MutationObserver} observer\n * @param {Node} target\n * @param {MutationObserverInit} options\n * @cons tructor\n */\n function Registration(observer, target, options) {\n this.o bserver = observer;\n this.target = target;\n this.options = options;\n this.transientObservedNodes = [];\n }\n\n Registration.prototype = {\n enq ueue: function(record) {\n var records = this.observer.records_;\n var length = records.length;\n\n // There are cases where we replace the last record with the new record.\n // For example if the record represents the s ame mutation we need to use\n // the one with the oldValue. If we get same record (this can happen as we\n // walk up the tree) we ignore the new reco rd.\n if (records.length > 0) {\n var lastRecord = records[length - 1];\n var recordToReplaceLast = selectRecord(lastRecord, record);\n if (recordToReplaceLast) {\n records[length - 1] = recordToReplaceLas t;\n return;\n }\n } else {\n scheduleCallback(this. observer);\n }\n\n records[length] = record;\n },\n\n addListene rs: function() {\n this.addListeners_(this.target);\n },\n\n addListe ners_: function(node) {\n var options = this.options;\n if (options.at tributes)\n node.addEventListener('DOMAttrModified', this, true);\n\n if (options.characterData)\n node.addEventListener('DOMCharacterDataMod ified', this, true);\n\n if (options.childList)\n node.addEventListe ner('DOMNodeInserted', this, true);\n\n if (options.childList || options.su btree)\n node.addEventListener('DOMNodeRemoved', this, true);\n },\n\n removeListeners: function() {\n this.removeListeners_(this.target);\n },\n\n removeListeners_: function(node) {\n var options = this.options ;\n if (options.attributes)\n node.removeEventListener('DOMAttrModif ied', this, true);\n\n if (options.characterData)\n node.removeEvent Listener('DOMCharacterDataModified', this, true);\n\n if (options.childList )\n node.removeEventListener('DOMNodeInserted', this, true);\n\n if (options.childList || options.subtree)\n node.removeEventListener('DOMNod eRemoved', this, true);\n },\n\n /**\n * Adds a transient observer on node. The transient observer gets removed\n * next time we deliver the chang e records.\n * @param {Node} node\n */\n addTransientObserver: functi on(node) {\n // Don't add transient observers on the target itself. We alre ady have all\n // the required listeners set up on the target.\n if (n ode === this.target)\n return;\n\n this.addListeners_(node);\n this.transientObservedNodes.push(node);\n var registrations = registrations Table.get(node);\n if (!registrations)\n registrationsTable.set(node , registrations = []);\n\n // We know that registrations does not contain t his because we already\n // checked if node === this.target.\n registr ations.push(this);\n },\n\n removeTransientObservers: function() {\n var transientObservedNodes = this.transientObservedNodes;\n this.transientO bservedNodes = [];\n\n transientObservedNodes.forEach(function(node) {\n // Transient observers are never added to the target.\n this.removeL isteners_(node);\n\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n if (registrat ions[i] === this) {\n registrations.splice(i, 1);\n // Eac h node can only have one registered observer associated with\n // thi s observer.\n break;\n }\n }\n }, this);\n }, \n\n handleEvent: function(e) {\n // Stop propagation since we are manag ing the propagation manually.\n // This means that other mutation events on the page will not work\n // correctly but that is by design.\n e.stop ImmediatePropagation();\n\n switch (e.type) {\n case 'DOMAttrModifie d':\n // http://dom.spec.whatwg.org/#concept-mo-queue-attributes\n\n var name = e.attrName;\n var namespace = e.relatedNode.namespace URI;\n var target = e.target;\n\n // 1.\n var record = new getRecord('attributes', target);\n record.attributeName = name;\n record.attributeNamespace = namespace;\n\n // 2.\n v ar oldValue =\n e.attrChange === MutationEvent.ADDITION ? null : e. prevValue;\n\n forEachAncestorAndObserverEnqueueRecord(target, function (options) {\n // 3.1, 4.2\n if (!options.attributes)\n return;\n\n // 3.2, 4.3\n if (options.attributeF ilter && options.attributeFilter.length &&\n options.attributeFil ter.indexOf(name) === -1 &&\n options.attributeFilter.indexOf(nam espace) === -1) {\n return;\n }\n // 3.3, 4.4 \n if (options.attributeOldValue)\n return getRecordWith OldValue(oldValue);\n\n // 3.4, 4.5\n return record;\n });\n\n break;\n\n case 'DOMCharacterDataModified':\n // http://dom.spec.whatwg.org/#concept-mo-queue-characterdata\n va r target = e.target;\n\n // 1.\n var record = getRecord('chara cterData', target);\n\n // 2.\n var oldValue = e.prevValue;\n\ n\n forEachAncestorAndObserverEnqueueRecord(target, function(options) { \n // 3.1, 4.2\n if (!options.characterData)\n return;\n\n // 3.2, 4.3\n if (options.characterDataOldVa lue)\n return getRecordWithOldValue(oldValue);\n\n // 3. 3, 4.4\n return record;\n });\n\n break;\n\n case 'DOMNodeRemoved':\n this.addTransientObserver(e.target);\n // Fall through.\n case 'DOMNodeInserted':\n // http://dom.sp ec.whatwg.org/#concept-mo-queue-childlist\n var target = e.relatedNode; \n var changedNode = e.target;\n var addedNodes, removedNodes; \n if (e.type === 'DOMNodeInserted') {\n addedNodes = [chang edNode];\n removedNodes = [];\n } else {\n\n adde dNodes = [];\n removedNodes = [changedNode];\n }\n var previousSibling = changedNode.previousSibling;\n var nextSibling = changedNode.nextSibling;\n\n // 1.\n var record = getRecord('c hildList', target);\n record.addedNodes = addedNodes;\n record .removedNodes = removedNodes;\n record.previousSibling = previousSiblin g;\n record.nextSibling = nextSibling;\n\n forEachAncestorAndO bserverEnqueueRecord(target, function(options) {\n // 2.1, 3.2\n if (!options.childList)\n return;\n\n // 2.2, 3.3 \n return record;\n });\n\n }\n\n clearRecords();\ n }\n };\n\n global.JsMutationObserver = JsMutationObserver;\n\n if (!glob al.MutationObserver)\n global.MutationObserver = JsMutationObserver;\n\n\n})( this);\n", 152 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source code is goverened by a BSD-style\n * license that can be found in th e LICENSE file.\n */\n\n(function(global) {\n\n var registrationsTable = new We akMap();\n\n // We use setImmediate or postMessage for our future callback.\n var setImmediate = window.msSetImmediate;\n\n // Use post message to emulate se tImmediate.\n if (!setImmediate) {\n var setImmediateQueue = [];\n var se ntinel = String(Math.random());\n window.addEventListener('message', function (e) {\n if (e.data === sentinel) {\n var queue = setImmediateQueue;\ n setImmediateQueue = [];\n queue.forEach(function(func) {\n func();\n });\n }\n });\n setImmediate = function(func) {\ n setImmediateQueue.push(func);\n window.postMessage(sentinel, '*');\n };\n }\n\n // This is used to ensure that we never schedule 2 callas to se tImmediate\n var isScheduled = false;\n\n // Keep track of observers that need s to be notified next time.\n var scheduledObservers = [];\n\n /**\n * Sched ules |dispatchCallback| to be called in the future.\n * @param {MutationObserv er} observer\n */\n function scheduleCallback(observer) {\n scheduledObser vers.push(observer);\n if (!isScheduled) {\n isScheduled = true;\n setImmediate(dispatchCallbacks);\n }\n }\n\n function wrapIfNeeded(node) {\ n return window.ShadowDOMPolyfill &&\n window.ShadowDOMPolyfill.wrapIf Needed(node) ||\n node;\n }\n\n function dispatchCallbacks() {\n // http://dom.spec.whatwg.org/#mutation-observers\n\n isScheduled = false; // Us ed to allow a new setImmediate call above.\n\n var observers = scheduledObser vers;\n scheduledObservers = [];\n // Sort observers based on their creati on UID (incremental).\n observers.sort(function(o1, o2) {\n return o1.ui d_ - o2.uid_;\n });\n\n var anyNonEmpty = false;\n observers.forEach(fu nction(observer) {\n\n // 2.1, 2.2\n var queue = observer.takeRecords( );\n // 2.3. Remove all transient registered observers whose observer is mo .\n removeTransientObserversFor(observer);\n\n // 2.4\n if (queue .length) {\n observer.callback_(queue, observer);\n anyNonEmpty = true;\n }\n });\n\n // 3.\n if (anyNonEmpty)\n dispatchCallba cks();\n }\n\n function removeTransientObserversFor(observer) {\n observer. nodes_.forEach(function(node) {\n var registrations = registrationsTable.ge t(node);\n if (!registrations)\n return;\n registrations.forEac h(function(registration) {\n if (registration.observer === observer)\n registration.removeTransientObservers();\n });\n });\n }\n\n /* *\n * This function is used for the \"For each registered observer observer (w ith\n * observer's options as options) in target's list of registered observer s,\n * run these substeps:\" and the \"For each ancestor ancestor of target, a nd for\n * each registered observer observer (with options options) in ancesto r's list\n * of registered observers, run these substeps:\" part of the algori thms. The\n * |options.subtree| is checked to ensure that the callback is call ed\n * correctly.\n *\n * @param {Node} target\n * @param {function(Muta tionObserverInit):MutationRecord} callback\n */\n function forEachAncestorAnd ObserverEnqueueRecord(target, callback) {\n for (var node = target; node; nod e = node.parentNode) {\n var registrations = registrationsTable.get(node);\ n\n if (registrations) {\n for (var j = 0; j < registrations.length; j++) {\n var registration = registrations[j];\n var options = registration.options;\n\n // Only target ignores subtree.\n i f (node !== target && !options.subtree)\n continue;\n\n var record = callback(options);\n if (record)\n registration.enq ueue(record);\n }\n }\n }\n }\n\n var uidCounter = 0;\n\n /**\ n * The class that maps to the DOM MutationObserver interface.\n * @param {F unction} callback.\n * @constructor\n */\n function JsMutationObserver(call back) {\n this.callback_ = callback;\n this.nodes_ = [];\n this.records _ = [];\n this.uid_ = ++uidCounter;\n }\n\n JsMutationObserver.prototype = {\n observe: function(target, options) {\n target = wrapIfNeeded(target) ;\n\n // 1.1\n if (!options.childList && !options.attributes && !optio ns.characterData ||\n\n // 1.2\n options.attributeOldValue && !options.attributes ||\n\n // 1.3\n options.attributeFilter && options.attributeFilter.length &&\n !options.attributes ||\n\n // 1.4\n options.characterDataOldValue && !options.characterData) {\n\n throw new SyntaxError();\n }\n\n var registrations = reg istrationsTable.get(target);\n if (!registrations)\n registrationsTa ble.set(target, registrations = []);\n\n // 2\n // If target's list of registered observers already includes a registered\n // observer associate d with the context object, replace that registered\n // observer's options with options.\n var registration;\n for (var i = 0; i < registrations. length; i++) {\n if (registrations[i].observer === this) {\n reg istration = registrations[i];\n registration.removeListeners();\n registration.options = options;\n break;\n }\n }\n\n // 3.\n // Otherwise, add a new registered observer to target's list of registered\n // observers with the context object as the observer and optio ns as the\n // options, and add target to context object's list of nodes on which it\n // is registered.\n if (!registration) {\n registra tion = new Registration(this, target, options);\n registrations.push(regi stration);\n this.nodes_.push(target);\n }\n\n registration.add Listeners();\n },\n\n disconnect: function() {\n this.nodes_.forEach( function(node) {\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registratio n = registrations[i];\n if (registration.observer === this) {\n registration.removeListeners();\n registrations.splice(i, 1);\n // Each node can only have one registered observer associated with\n // this observer.\n break;\n }\n }\n } , this);\n this.records_ = [];\n },\n\n takeRecords: function() {\n var copyOfRecords = this.records_;\n this.records_ = [];\n return copyOfRecords;\n }\n };\n\n /**\n * @param {string} type\n * @param {No de} target\n * @constructor\n */\n function MutationRecord(type, target) {\ n this.type = type;\n this.target = target;\n this.addedNodes = [];\n this.removedNodes = [];\n this.previousSibling = null;\n this.nextSiblin g = null;\n this.attributeName = null;\n this.attributeNamespace = null;\n this.oldValue = null;\n }\n\n function copyMutationRecord(original) {\n var record = new MutationRecord(original.type, original.target);\n record.ad dedNodes = original.addedNodes.slice();\n record.removedNodes = original.remo vedNodes.slice();\n record.previousSibling = original.previousSibling;\n r ecord.nextSibling = original.nextSibling;\n record.attributeName = original.a ttributeName;\n record.attributeNamespace = original.attributeNamespace;\n record.oldValue = original.oldValue;\n return record;\n };\n\n // We keep track of the two (possibly one) records used in a single mutation.\n var curren tRecord, recordWithOldValue;\n\n /**\n * Creates a record without |oldValue| and caches it as |currentRecord| for\n * later use.\n * @param {string} oldV alue\n * @return {MutationRecord}\n */\n function getRecord(type, target) { \n return currentRecord = new MutationRecord(type, target);\n }\n\n /**\n * Gets or creates a record with |oldValue| based in the |currentRecord|\n * @ param {string} oldValue\n * @return {MutationRecord}\n */\n function getRec ordWithOldValue(oldValue) {\n if (recordWithOldValue)\n return recordWit hOldValue;\n recordWithOldValue = copyMutationRecord(currentRecord);\n rec ordWithOldValue.oldValue = oldValue;\n return recordWithOldValue;\n }\n\n f unction clearRecords() {\n currentRecord = recordWithOldValue = undefined;\n }\n\n /**\n * @param {MutationRecord} record\n * @return {boolean} Whether the record represents a record from the current\n * mutation event.\n */\n function recordRepresentsCurrentMutation(record) {\n return record === recor dWithOldValue || record === currentRecord;\n }\n\n /**\n * Selects which rec ord, if any, to replace the last record in the queue.\n * This returns |null| if no record should be replaced.\n *\n * @param {MutationRecord} lastRecord\ n * @param {MutationRecord} newRecord\n * @param {MutationRecord}\n */\n function selectRecord(lastRecord, newRecord) {\n if (lastRecord === newRecord )\n return lastRecord;\n\n // Check if the the record we are adding repr esents the same record. If\n // so, we keep the one with the oldValue in it.\ n if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord))\n return recordWithOldValue;\n\n return null;\n }\n\n /**\n * Class used to represent a registered observer.\n * @param {MutationObserver} observer\n * @param {Node} target\n * @param {MutationObserverInit} options\n * @cons tructor\n */\n function Registration(observer, target, options) {\n this.o bserver = observer;\n this.target = target;\n this.options = options;\n this.transientObservedNodes = [];\n }\n\n Registration.prototype = {\n enq ueue: function(record) {\n var records = this.observer.records_;\n var length = records.length;\n\n // There are cases where we replace the last record with the new record.\n // For example if the record represents the s ame mutation we need to use\n // the one with the oldValue. If we get same record (this can happen as we\n // walk up the tree) we ignore the new reco rd.\n if (records.length > 0) {\n var lastRecord = records[length - 1];\n var recordToReplaceLast = selectRecord(lastRecord, record);\n if (recordToReplaceLast) {\n records[length - 1] = recordToReplaceLas t;\n return;\n }\n } else {\n scheduleCallback(this. observer);\n }\n\n records[length] = record;\n },\n\n addListene rs: function() {\n this.addListeners_(this.target);\n },\n\n addListe ners_: function(node) {\n var options = this.options;\n if (options.at tributes)\n node.addEventListener('DOMAttrModified', this, true);\n\n if (options.characterData)\n node.addEventListener('DOMCharacterDataMod ified', this, true);\n\n if (options.childList)\n node.addEventListe ner('DOMNodeInserted', this, true);\n\n if (options.childList || options.su btree)\n node.addEventListener('DOMNodeRemoved', this, true);\n },\n\n removeListeners: function() {\n this.removeListeners_(this.target);\n },\n\n removeListeners_: function(node) {\n var options = this.options ;\n if (options.attributes)\n node.removeEventListener('DOMAttrModif ied', this, true);\n\n if (options.characterData)\n node.removeEvent Listener('DOMCharacterDataModified', this, true);\n\n if (options.childList )\n node.removeEventListener('DOMNodeInserted', this, true);\n\n if (options.childList || options.subtree)\n node.removeEventListener('DOMNod eRemoved', this, true);\n },\n\n /**\n * Adds a transient observer on node. The transient observer gets removed\n * next time we deliver the chang e records.\n * @param {Node} node\n */\n addTransientObserver: functi on(node) {\n // Don't add transient observers on the target itself. We alre ady have all\n // the required listeners set up on the target.\n if (n ode === this.target)\n return;\n\n this.addListeners_(node);\n this.transientObservedNodes.push(node);\n var registrations = registrations Table.get(node);\n if (!registrations)\n registrationsTable.set(node , registrations = []);\n\n // We know that registrations does not contain t his because we already\n // checked if node === this.target.\n registr ations.push(this);\n },\n\n removeTransientObservers: function() {\n var transientObservedNodes = this.transientObservedNodes;\n this.transientO bservedNodes = [];\n\n transientObservedNodes.forEach(function(node) {\n // Transient observers are never added to the target.\n this.removeL isteners_(node);\n\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n if (registrat ions[i] === this) {\n registrations.splice(i, 1);\n // Eac h node can only have one registered observer associated with\n // thi s observer.\n break;\n }\n }\n }, this);\n }, \n\n handleEvent: function(e) {\n // Stop propagation since we are manag ing the propagation manually.\n // This means that other mutation events on the page will not work\n // correctly but that is by design.\n e.stop ImmediatePropagation();\n\n switch (e.type) {\n case 'DOMAttrModifie d':\n // http://dom.spec.whatwg.org/#concept-mo-queue-attributes\n\n var name = e.attrName;\n var namespace = e.relatedNode.namespace URI;\n var target = e.target;\n\n // 1.\n var record = new getRecord('attributes', target);\n record.attributeName = name;\n record.attributeNamespace = namespace;\n\n // 2.\n v ar oldValue =\n e.attrChange === MutationEvent.ADDITION ? null : e. prevValue;\n\n forEachAncestorAndObserverEnqueueRecord(target, function (options) {\n // 3.1, 4.2\n if (!options.attributes)\n return;\n\n // 3.2, 4.3\n if (options.attributeF ilter && options.attributeFilter.length &&\n options.attributeFil ter.indexOf(name) === -1 &&\n options.attributeFilter.indexOf(nam espace) === -1) {\n return;\n }\n // 3.3, 4.4 \n if (options.attributeOldValue)\n return getRecordWith OldValue(oldValue);\n\n // 3.4, 4.5\n return record;\n });\n\n break;\n\n case 'DOMCharacterDataModified':\n // http://dom.spec.whatwg.org/#concept-mo-queue-characterdata\n va r target = e.target;\n\n // 1.\n var record = getRecord('chara cterData', target);\n\n // 2.\n var oldValue = e.prevValue;\n\ n\n forEachAncestorAndObserverEnqueueRecord(target, function(options) { \n // 3.1, 4.2\n if (!options.characterData)\n return;\n\n // 3.2, 4.3\n if (options.characterDataOldVa lue)\n return getRecordWithOldValue(oldValue);\n\n // 3. 3, 4.4\n return record;\n });\n\n break;\n\n case 'DOMNodeRemoved':\n this.addTransientObserver(e.target);\n // Fall through.\n case 'DOMNodeInserted':\n // http://dom.sp ec.whatwg.org/#concept-mo-queue-childlist\n var target = e.relatedNode; \n var changedNode = e.target;\n var addedNodes, removedNodes; \n if (e.type === 'DOMNodeInserted') {\n addedNodes = [chang edNode];\n removedNodes = [];\n } else {\n\n adde dNodes = [];\n removedNodes = [changedNode];\n }\n var previousSibling = changedNode.previousSibling;\n var nextSibling = changedNode.nextSibling;\n\n // 1.\n var record = getRecord('c hildList', target);\n record.addedNodes = addedNodes;\n record .removedNodes = removedNodes;\n record.previousSibling = previousSiblin g;\n record.nextSibling = nextSibling;\n\n forEachAncestorAndO bserverEnqueueRecord(target, function(options) {\n // 2.1, 3.2\n if (!options.childList)\n return;\n\n // 2.2, 3.3 \n return record;\n });\n\n }\n\n clearRecords();\ n }\n };\n\n global.JsMutationObserver = JsMutationObserver;\n\n if (!glob al.MutationObserver)\n global.MutationObserver = JsMutationObserver;\n\n\n})( this);\n",
153 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\nwindow.HTMLImports = window.HTMLImports || {flags:{}};", 153 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\nwindow.HTMLImports = window.HTMLImports || {flags:{}};",
154 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\n // imports\n var path = scope.pa th;\n var xhr = scope.xhr;\n var flags = scope.flags;\n\n // TODO(sorvell): t his loader supports a dynamic list of urls\n // and an oncomplete callback that is called when the loader is done.\n // The polyfill currently does *not* need this dynamism or the onComplete\n // concept. Because of this, the loader coul d be simplified quite a bit.\n var Loader = function(onLoad, onComplete) {\n this.cache = {};\n this.onload = onLoad;\n this.oncomplete = onComplete;\ n this.inflight = 0;\n this.pending = {};\n };\n\n Loader.prototype = {\ n addNodes: function(nodes) {\n // number of transactions to complete\n this.inflight += nodes.length;\n // commence transactions\n for ( var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\n this.require( n);\n }\n // anything to do?\n this.checkDone();\n },\n add Node: function(node) {\n // number of transactions to complete\n this. inflight++;\n // commence transactions\n this.require(node);\n // anything to do?\n this.checkDone();\n },\n require: function(elt) {\ n var url = elt.src || elt.href;\n // ensure we have a standard url th at can be used\n // reliably for deduping.\n // TODO(sjmiles): ad-hoc\ n elt.__nodeUrl = url;\n // deduplication\n if (!this.dedupe(url, elt)) {\n // fetch this resource\n this.fetch(url, elt);\n } \n },\n dedupe: function(url, elt) {\n if (this.pending[url]) {\n // add to list of nodes waiting for inUrl\n this.pending[url].push(el t);\n // don't need fetch\n return true;\n }\n var resou rce;\n if (this.cache[url]) {\n this.onload(url, elt, this.cache[url ]);\n // finished this transaction\n this.tail();\n // don' t need fetch\n return true;\n }\n // first node waiting for inU rl\n this.pending[url] = [elt];\n // need fetch (not a dupe)\n re turn false;\n },\n fetch: function(url, elt) {\n flags.load && consol e.log('fetch', url, elt);\n var receiveXhr = function(err, resource) {\n this.receive(url, elt, err, resource);\n }.bind(this);\n xhr.load (url, receiveXhr);\n // TODO(sorvell): blocked on\n // https://code.go ogle.com/p/chromium/issues/detail?id=257221\n // xhr'ing for a document mak es scripts in imports runnable; otherwise\n // they are not; however, it re quires that we have doctype=html in\n // the import which is unacceptable. This is only needed on Chrome\n // to avoid the bug above.\n /*\n if (isDocumentLink(elt)) {\n xhr.loadDocument(url, receiveXhr);\n } else {\n xhr.load(url, receiveXhr);\n }\n */\n },\n rece ive: function(url, elt, err, resource) {\n this.cache[url] = resource;\n var $p = this.pending[url];\n for (var i=0, l=$p.length, p; (i<l) && (p= $p[i]); i++) {\n //if (!err) {\n this.onload(url, p, resource);\ n //}\n this.tail();\n }\n this.pending[url] = null;\n },\n tail: function() {\n --this.inflight;\n this.checkDone();\n },\n checkDone: function() {\n if (!this.inflight) {\n this.on complete();\n }\n }\n };\n\n xhr = xhr || {\n async: true,\n ok: function(request) {\n return (request.status >= 200 && request.status < 30 0)\n || (request.status === 304)\n || (request.status === 0);\ n },\n load: function(url, next, nextContext) {\n var request = new X MLHttpRequest();\n if (scope.flags.debug || scope.flags.bust) {\n ur l += '?' + Math.random();\n }\n request.open('GET', url, xhr.async);\n request.addEventListener('readystatechange', function(e) {\n if (re quest.readyState === 4) {\n next.call(nextContext, !xhr.ok(request) && request,\n request.response || request.responseText, url);\n }\n });\n request.send();\n return request;\n },\n loadDoc ument: function(url, next, nextContext) {\n this.load(url, next, nextContex t).responseType = 'document';\n }\n };\n\n // exports\n scope.xhr = xhr;\n scope.Loader = Loader;\n\n})(window.HTMLImports);\n", 154 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\n // imports\n var path = scope.pa th;\n var xhr = scope.xhr;\n var flags = scope.flags;\n\n // TODO(sorvell): t his loader supports a dynamic list of urls\n // and an oncomplete callback that is called when the loader is done.\n // The polyfill currently does *not* need this dynamism or the onComplete\n // concept. Because of this, the loader coul d be simplified quite a bit.\n var Loader = function(onLoad, onComplete) {\n this.cache = {};\n this.onload = onLoad;\n this.oncomplete = onComplete;\ n this.inflight = 0;\n this.pending = {};\n };\n\n Loader.prototype = {\ n addNodes: function(nodes) {\n // number of transactions to complete\n this.inflight += nodes.length;\n // commence transactions\n for ( var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\n this.require( n);\n }\n // anything to do?\n this.checkDone();\n },\n add Node: function(node) {\n // number of transactions to complete\n this. inflight++;\n // commence transactions\n this.require(node);\n // anything to do?\n this.checkDone();\n },\n require: function(elt) {\ n var url = elt.src || elt.href;\n // ensure we have a standard url th at can be used\n // reliably for deduping.\n // TODO(sjmiles): ad-hoc\ n elt.__nodeUrl = url;\n // deduplication\n if (!this.dedupe(url, elt)) {\n // fetch this resource\n this.fetch(url, elt);\n } \n },\n dedupe: function(url, elt) {\n if (this.pending[url]) {\n // add to list of nodes waiting for inUrl\n this.pending[url].push(el t);\n // don't need fetch\n return true;\n }\n var resou rce;\n if (this.cache[url]) {\n this.onload(url, elt, this.cache[url ]);\n // finished this transaction\n this.tail();\n // don' t need fetch\n return true;\n }\n // first node waiting for inU rl\n this.pending[url] = [elt];\n // need fetch (not a dupe)\n re turn false;\n },\n fetch: function(url, elt) {\n flags.load && consol e.log('fetch', url, elt);\n var receiveXhr = function(err, resource) {\n this.receive(url, elt, err, resource);\n }.bind(this);\n xhr.load (url, receiveXhr);\n // TODO(sorvell): blocked on\n // https://code.go ogle.com/p/chromium/issues/detail?id=257221\n // xhr'ing for a document mak es scripts in imports runnable; otherwise\n // they are not; however, it re quires that we have doctype=html in\n // the import which is unacceptable. This is only needed on Chrome\n // to avoid the bug above.\n /*\n if (isDocumentLink(elt)) {\n xhr.loadDocument(url, receiveXhr);\n } else {\n xhr.load(url, receiveXhr);\n }\n */\n },\n rece ive: function(url, elt, err, resource) {\n this.cache[url] = resource;\n var $p = this.pending[url];\n for (var i=0, l=$p.length, p; (i<l) && (p= $p[i]); i++) {\n //if (!err) {\n this.onload(url, p, resource);\ n //}\n this.tail();\n }\n this.pending[url] = null;\n },\n tail: function() {\n --this.inflight;\n this.checkDone();\n },\n checkDone: function() {\n if (!this.inflight) {\n this.on complete();\n }\n }\n };\n\n xhr = xhr || {\n async: true,\n ok: function(request) {\n return (request.status >= 200 && request.status < 30 0)\n || (request.status === 304)\n || (request.status === 0);\ n },\n load: function(url, next, nextContext) {\n var request = new X MLHttpRequest();\n if (scope.flags.debug || scope.flags.bust) {\n ur l += '?' + Math.random();\n }\n request.open('GET', url, xhr.async);\n request.addEventListener('readystatechange', function(e) {\n if (re quest.readyState === 4) {\n next.call(nextContext, !xhr.ok(request) && request,\n request.response || request.responseText, url);\n }\n });\n request.send();\n return request;\n },\n loadDoc ument: function(url, next, nextContext) {\n this.load(url, next, nextContex t).responseType = 'document';\n }\n };\n\n // exports\n scope.xhr = xhr;\n scope.Loader = Loader;\n\n})(window.HTMLImports);\n",
155 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar IMPORT_LINK_TYPE = 'import';\nv ar flags = scope.flags;\nvar isIe = /Trident/.test(navigator.userAgent);\n// TOD O(sorvell): SD polyfill intrusion\nvar mainDoc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// importParser \n// highlander object to manage parsing of imports\n// parses import related el ements\n// and ensures proper parse order\n// parse order is enforced by crawlin g the tree and monitoring which elements\n// have been parsed; async parsing is also supported.\n\n// highlander object for parsing a document tree\nvar importP arser = {\n // parse selectors for main document elements\n documentSelectors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n // parse selectors for import document elements\n importsSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']',\n 'link[rel=stylesheet]',\n 'style',\n 'script:not([type])',\n 'script[t ype=\"text/javascript\"]'\n ].join(','),\n map: {\n link: 'parseLink',\n script: 'parseScript',\n style: 'parseStyle'\n },\n // try to parse the ne xt import in the tree\n parseNext: function() {\n var next = this.nextToPars e();\n if (next) {\n this.parse(next);\n }\n },\n parse: function(e lt) {\n if (this.isParsed(elt)) {\n flags.parse && console.log('[%s] is already parsed', elt.localName);\n return;\n }\n var fn = this[this.m ap[elt.localName]];\n if (fn) {\n this.markParsing(elt);\n fn.call( this, elt);\n }\n },\n // only 1 element may be parsed at a time; parsing i s async so, each\n // parsing implementation must inform the system that parsin g is complete\n // via markParsingComplete.\n markParsing: function(elt) {\n flags.parse && console.log('parsing', elt);\n this.parsingElement = elt;\n },\n markParsingComplete: function(elt) {\n elt.__importParsed = true;\n if (elt.__importElement) {\n elt.__importElement.__importParsed = true;\n }\n this.parsingElement = null;\n flags.parse && console.log('completed ', elt);\n this.parseNext();\n },\n parseImport: function(elt) {\n elt.i mport.__importParsed = true;\n // TODO(sorvell): consider if there's a better way to do this;\n // expose an imports parsing hook; this is needed, for exa mple, by the\n // CustomElements polyfill.\n if (HTMLImports.__importsPars ingHook) {\n HTMLImports.__importsParsingHook(elt);\n }\n // fire loa d event\n if (elt.__resource) {\n elt.dispatchEvent(new CustomEvent('loa d', {bubbles: false})); \n } else {\n elt.dispatchEvent(new CustomEve nt('error', {bubbles: false}));\n }\n // TODO(sorvell): workaround for Saf ari addEventListener not working\n // for elements not in the main document.\ n if (elt.__pending) {\n var fn;\n while (elt.__pending.length) {\n fn = elt.__pending.shift();\n if (fn) {\n fn({target: el t});\n }\n }\n }\n this.markParsingComplete(elt);\n },\n par seLink: function(linkElt) {\n if (nodeIsImport(linkElt)) {\n this.parseI mport(linkElt);\n } else {\n // make href absolute\n linkElt.href = linkElt.href;\n this.parseGeneric(linkElt);\n }\n },\n parseStyle: fu nction(elt) {\n // TODO(sorvell): style element load event can just not fire so clone styles\n var src = elt;\n elt = cloneStyle(elt);\n elt.__impor tElement = src;\n this.parseGeneric(elt);\n },\n parseGeneric: function(elt ) {\n this.trackElement(elt);\n document.head.appendChild(elt);\n },\n / / tracks when a loadable element has loaded\n trackElement: function(elt) {\n var self = this;\n var done = function() {\n self.markParsingComplete( elt);\n };\n elt.addEventListener('load', done);\n elt.addEventListener ('error', done);\n\n // NOTE: IE does not fire \"load\" event for styles that have already loaded\n // This is in violation of the spec, so we try our har dest to work around it\n if (isIe && elt.localName === 'style') {\n var fakeLoad = false;\n // If there's not @import in the textContent, assume it has loaded\n if (elt.textContent.indexOf('@import') == -1) {\n fake Load = true;\n // if we have a sheet, we have been parsed\n } else if (elt.sheet) {\n fakeLoad = true;\n var csr = elt.sheet.cssRules;\n var len = csr ? csr.length : 0;\n // search the rules for @import 's\n for (var i = 0, r; (i < len) && (r = csr[i]); i++) {\n if ( r.type === CSSRule.IMPORT_RULE) {\n // if every @import has resolved, fake the load\n fakeLoad = fakeLoad && Boolean(r.styleSheet);\n }\n }\n }\n // dispatch a fake load event and continue par sing\n if (fakeLoad) {\n elt.dispatchEvent(new CustomEvent('load', { bubbles: false}));\n }\n }\n },\n parseScript: function(scriptElt) {\n // acquire code to execute\n var code = (scriptElt.__resource || scriptEl t.textContent).trim();\n if (code) {\n // calculate source map hint\n var moniker = scriptElt.__nodeUrl;\n if (!moniker) {\n moniker = scriptElt.ownerDocument.baseURI;\n // there could be more than one script this url\n var tag = '[' + Math.floor((Math.random()+1)*1000) + ']';\n // TODO(sjmiles): Polymer hack, should be pluggable if we need to allow \n // this sort of thing\n var matches = code.match(/Polymer\\(['\"] ([^'\"]*)/);\n tag = matches && matches[1] || tag;\n // tag the mo niker\n moniker += '/' + tag + '.js';\n }\n // source map hint\ n code += \"\\n//# sourceURL=\" + moniker + \"\\n\";\n // evaluate the code\n scope.currentScript = scriptElt;\n eval.call(window, code);\n scope.currentScript = null;\n }\n this.markParsingComplete(scriptElt) ;\n },\n // determine the next element in the tree which should be parsed\n n extToParse: function() {\n return !this.parsingElement && this.nextToParseInD oc(mainDoc);\n },\n nextToParseInDoc: function(doc, link) {\n var nodes = d oc.querySelectorAll(this.parseSelectorsForNode(doc));\n for (var i=0, l=nodes .length, p=0, n; (i<l) && (n=nodes[i]); i++) {\n if (!this.isParsed(n)) {\n if (this.hasResource(n)) {\n return nodeIsImport(n) ? this.next ToParseInDoc(n.import, n) : n;\n } else {\n return;\n }\n }\n }\n // all nodes have been parsed, ready to parse import, if any \n return link;\n },\n // return the set of parse selectors relevant for th is node.\n parseSelectorsForNode: function(node) {\n var doc = node.ownerDoc ument || node;\n return doc === mainDoc ? this.documentSelectors : this.impor tsSelectors;\n },\n isParsed: function(node) {\n return node.__importParsed ;\n },\n hasResource: function(node) {\n if (nodeIsImport(node) && !node.im port) {\n return false;\n }\n if (node.localName === 'script' && node .src && !node.__resource) {\n return false;\n }\n return true;\n }\n };\n\nfunction nodeIsImport(elt) {\n return (elt.localName === 'link') && (elt. rel === IMPORT_LINK_TYPE);\n}\n\n// style/stylesheet handling\n\n// clone style with proper path resolution for main document\n// NOTE: styles are the only elem ents that require direct path fixup.\nfunction cloneStyle(style) {\n var clone = style.ownerDocument.createElement('style');\n clone.textContent = style.textC ontent;\n path.resolveUrlsInStyle(clone);\n return clone;\n}\n\n// path fixup: style elements in imports must be made relative to the main \n// document. We f ixup url's in url() and @import.\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\ nvar CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n\nvar path = { \n resolveUrlsInStyle: function(style) {\n var doc = style.ownerDocument;\n var resolver = doc.createElement('a');\n style.textContent = this.resolveU rlsInCssText(style.textContent, resolver);\n return style; \n },\n resolve UrlsInCssText: function(cssText, urlObj) {\n var r = this.replaceUrls(cssText , urlObj, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGEX P);\n return r;\n },\n replaceUrls: function(text, urlObj, regexp) {\n r eturn text.replace(regexp, function(m, pre, url, post) {\n var urlPath = ur l.replace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlObj.h ref;\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n }\n}\n\ n// exports\nscope.parser = importParser;\nscope.path = path;\nscope.isIE = isIe ;\n\n})(HTMLImports);\n", 155 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar IMPORT_LINK_TYPE = 'import';\nv ar flags = scope.flags;\nvar isIe = /Trident/.test(navigator.userAgent);\n// TOD O(sorvell): SD polyfill intrusion\nvar mainDoc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// importParser \n// highlander object to manage parsing of imports\n// parses import related el ements\n// and ensures proper parse order\n// parse order is enforced by crawlin g the tree and monitoring which elements\n// have been parsed; async parsing is also supported.\n\n// highlander object for parsing a document tree\nvar importP arser = {\n // parse selectors for main document elements\n documentSelectors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n // parse selectors for import document elements\n importsSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']',\n 'link[rel=stylesheet]',\n 'style',\n 'script:not([type])',\n 'script[t ype=\"text/javascript\"]'\n ].join(','),\n map: {\n link: 'parseLink',\n script: 'parseScript',\n style: 'parseStyle'\n },\n // try to parse the ne xt import in the tree\n parseNext: function() {\n var next = this.nextToPars e();\n if (next) {\n this.parse(next);\n }\n },\n parse: function(e lt) {\n if (this.isParsed(elt)) {\n flags.parse && console.log('[%s] is already parsed', elt.localName);\n return;\n }\n var fn = this[this.m ap[elt.localName]];\n if (fn) {\n this.markParsing(elt);\n fn.call( this, elt);\n }\n },\n // only 1 element may be parsed at a time; parsing i s async so, each\n // parsing implementation must inform the system that parsin g is complete\n // via markParsingComplete.\n markParsing: function(elt) {\n flags.parse && console.log('parsing', elt);\n this.parsingElement = elt;\n },\n markParsingComplete: function(elt) {\n elt.__importParsed = true;\n if (elt.__importElement) {\n elt.__importElement.__importParsed = true;\n }\n this.parsingElement = null;\n flags.parse && console.log('completed ', elt);\n this.parseNext();\n },\n parseImport: function(elt) {\n elt.i mport.__importParsed = true;\n // TODO(sorvell): consider if there's a better way to do this;\n // expose an imports parsing hook; this is needed, for exa mple, by the\n // CustomElements polyfill.\n if (HTMLImports.__importsPars ingHook) {\n HTMLImports.__importsParsingHook(elt);\n }\n // fire loa d event\n if (elt.__resource) {\n elt.dispatchEvent(new CustomEvent('loa d', {bubbles: false})); \n } else {\n elt.dispatchEvent(new CustomEve nt('error', {bubbles: false}));\n }\n // TODO(sorvell): workaround for Saf ari addEventListener not working\n // for elements not in the main document.\ n if (elt.__pending) {\n var fn;\n while (elt.__pending.length) {\n fn = elt.__pending.shift();\n if (fn) {\n fn({target: el t});\n }\n }\n }\n this.markParsingComplete(elt);\n },\n par seLink: function(linkElt) {\n if (nodeIsImport(linkElt)) {\n this.parseI mport(linkElt);\n } else {\n // make href absolute\n linkElt.href = linkElt.href;\n this.parseGeneric(linkElt);\n }\n },\n parseStyle: fu nction(elt) {\n // TODO(sorvell): style element load event can just not fire so clone styles\n var src = elt;\n elt = cloneStyle(elt);\n elt.__impor tElement = src;\n this.parseGeneric(elt);\n },\n parseGeneric: function(elt ) {\n this.trackElement(elt);\n document.head.appendChild(elt);\n },\n / / tracks when a loadable element has loaded\n trackElement: function(elt) {\n var self = this;\n var done = function() {\n self.markParsingComplete( elt);\n };\n elt.addEventListener('load', done);\n elt.addEventListener ('error', done);\n\n // NOTE: IE does not fire \"load\" event for styles that have already loaded\n // This is in violation of the spec, so we try our har dest to work around it\n if (isIe && elt.localName === 'style') {\n var fakeLoad = false;\n // If there's not @import in the textContent, assume it has loaded\n if (elt.textContent.indexOf('@import') == -1) {\n fake Load = true;\n // if we have a sheet, we have been parsed\n } else if (elt.sheet) {\n fakeLoad = true;\n var csr = elt.sheet.cssRules;\n var len = csr ? csr.length : 0;\n // search the rules for @import 's\n for (var i = 0, r; (i < len) && (r = csr[i]); i++) {\n if ( r.type === CSSRule.IMPORT_RULE) {\n // if every @import has resolved, fake the load\n fakeLoad = fakeLoad && Boolean(r.styleSheet);\n }\n }\n }\n // dispatch a fake load event and continue par sing\n if (fakeLoad) {\n elt.dispatchEvent(new CustomEvent('load', { bubbles: false}));\n }\n }\n },\n parseScript: function(scriptElt) {\n // acquire code to execute\n var code = (scriptElt.__resource || scriptEl t.textContent).trim();\n if (code) {\n // calculate source map hint\n var moniker = scriptElt.__nodeUrl;\n if (!moniker) {\n moniker = scriptElt.ownerDocument.baseURI;\n // there could be more than one script this url\n var tag = '[' + Math.floor((Math.random()+1)*1000) + ']';\n // TODO(sjmiles): Polymer hack, should be pluggable if we need to allow \n // this sort of thing\n var matches = code.match(/Polymer\\(['\"] ([^'\"]*)/);\n tag = matches && matches[1] || tag;\n // tag the mo niker\n moniker += '/' + tag + '.js';\n }\n // source map hint\ n code += \"\\n//# sourceURL=\" + moniker + \"\\n\";\n // evaluate the code\n scope.currentScript = scriptElt;\n eval.call(window, code);\n scope.currentScript = null;\n }\n this.markParsingComplete(scriptElt) ;\n },\n // determine the next element in the tree which should be parsed\n n extToParse: function() {\n return !this.parsingElement && this.nextToParseInD oc(mainDoc);\n },\n nextToParseInDoc: function(doc, link) {\n var nodes = d oc.querySelectorAll(this.parseSelectorsForNode(doc));\n for (var i=0, l=nodes .length, p=0, n; (i<l) && (n=nodes[i]); i++) {\n if (!this.isParsed(n)) {\n if (this.hasResource(n)) {\n return nodeIsImport(n) ? this.next ToParseInDoc(n.import, n) : n;\n } else {\n return;\n }\n }\n }\n // all nodes have been parsed, ready to parse import, if any \n return link;\n },\n // return the set of parse selectors relevant for th is node.\n parseSelectorsForNode: function(node) {\n var doc = node.ownerDoc ument || node;\n return doc === mainDoc ? this.documentSelectors : this.impor tsSelectors;\n },\n isParsed: function(node) {\n return node.__importParsed ;\n },\n hasResource: function(node) {\n if (nodeIsImport(node) && !node.im port) {\n return false;\n }\n if (node.localName === 'script' && node .src && !node.__resource) {\n return false;\n }\n return true;\n }\n };\n\nfunction nodeIsImport(elt) {\n return (elt.localName === 'link') && (elt. rel === IMPORT_LINK_TYPE);\n}\n\n// style/stylesheet handling\n\n// clone style with proper path resolution for main document\n// NOTE: styles are the only elem ents that require direct path fixup.\nfunction cloneStyle(style) {\n var clone = style.ownerDocument.createElement('style');\n clone.textContent = style.textC ontent;\n path.resolveUrlsInStyle(clone);\n return clone;\n}\n\n// path fixup: style elements in imports must be made relative to the main \n// document. We f ixup url's in url() and @import.\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\ nvar CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n\nvar path = { \n resolveUrlsInStyle: function(style) {\n var doc = style.ownerDocument;\n var resolver = doc.createElement('a');\n style.textContent = this.resolveU rlsInCssText(style.textContent, resolver);\n return style; \n },\n resolve UrlsInCssText: function(cssText, urlObj) {\n var r = this.replaceUrls(cssText , urlObj, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGEX P);\n return r;\n },\n replaceUrls: function(text, urlObj, regexp) {\n r eturn text.replace(regexp, function(m, pre, url, post) {\n var urlPath = ur l.replace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlObj.h ref;\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n }\n}\n\ n// exports\nscope.parser = importParser;\nscope.path = path;\nscope.isIE = isIe ;\n\n})(HTMLImports);\n",
156 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar hasNative = ('import' in docume nt.createElement('link'));\nvar useNative = hasNative;\nvar flags = scope.flags; \nvar IMPORT_LINK_TYPE = 'import';\n\n// TODO(sorvell): SD polyfill intrusion\nv ar mainDoc = window.ShadowDOMPolyfill ? \n ShadowDOMPolyfill.wrapIfNeeded(doc ument) : document;\n\nif (!useNative) {\n\n // imports\n var xhr = scope.xhr;\ n var Loader = scope.Loader;\n var parser = scope.parser;\n\n // importer\n // highlander object to manage loading of imports\n\n // for any document, impo rter:\n // - loads any linked import documents (with deduping)\n // for any im port document, importer also:\n // - loads text of external script tags\n\n va r importer = {\n documents: {},\n // nodes to load in the mian document\n documentPreloadSelectors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n // nodes to load in imports\n importsPreloadSelectors: [\n 'link[rel=' + IMPOR T_LINK_TYPE + ']',\n 'script[src]:not([type])',\n 'script[src][typ e=\"text/javascript\"]'\n ].join(','),\n loadNode: function(node) {\n importLoader.addNode(node);\n },\n // load all loadable elements within t he parent element\n loadSubtree: function(parent) {\n var nodes = this.m arshalNodes(parent);\n // add these nodes to loader's queue\n importLo ader.addNodes(nodes);\n },\n marshalNodes: function(parent) {\n // al l preloadable nodes in inDocument\n return parent.querySelectorAll(this.loa dSelectorsForNode(parent));\n },\n // find the proper set of load selector s for a given node\n loadSelectorsForNode: function(node) {\n var doc = node.ownerDocument || node;\n return doc === mainDoc ? this.documentPreload Selectors :\n this.importsPreloadSelectors;\n },\n loaded: functi on(url, elt, resource) {\n flags.load && console.log('loaded', url, elt);\n // store generic resource\n // TODO(sorvell): fails for nodes inside <template>.content\n // see https://code.google.com/p/chromium/issues/detai l?id=249381.\n elt.__resource = resource;\n if (isDocumentLink(elt)) { \n var doc = this.documents[url];\n // if we've never seen a docum ent at this url\n if (!doc) {\n // generate an HTMLDocument from data\n doc = makeDocument(resource, url);\n doc.__importLink = elt;\n // TODO(sorvell): we cannot use MO to detect parsed nodes beca use\n // SD polyfill does not report these as mutations.\n thi s.bootDocument(doc);\n // cache document\n this.documents[url] = doc;\n }\n // don't store import record until we're actually lo aded\n // store document resource\n elt.import = doc;\n }\n parser.parseNext();\n },\n bootDocument: function(doc) {\n this.l oadSubtree(doc);\n this.observe(doc);\n parser.parseNext();\n },\n loadedAll: function() {\n parser.parseNext();\n }\n };\n\n // loade r singleton\n var importLoader = new Loader(importer.loaded.bind(importer), \n importer.loadedAll.bind(importer));\n\n function isDocumentLink(elt) {\n return isLinkRel(elt, IMPORT_LINK_TYPE);\n }\n\n function isLinkRel(elt, rel ) {\n return elt.localName === 'link' && elt.getAttribute('rel') === rel;\n }\n\n function isScript(elt) {\n return elt.localName === 'script';\n }\n\n function makeDocument(resource, url) {\n // create a new HTML document\n var doc = resource;\n if (!(doc instanceof Document)) {\n doc = documen t.implementation.createHTMLDocument(IMPORT_LINK_TYPE);\n }\n // cache the new document's source url\n doc._URL = url;\n // establish a relative path via <base>\n var base = doc.createElement('base');\n base.setAttribute('h ref', url);\n // add baseURI support to browsers (IE) that lack it.\n if ( !doc.baseURI) {\n doc.baseURI = url;\n }\n doc.head.appendChild(base) ;\n // install HTML last as it may trigger CustomElement upgrades\n // TOD O(sjmiles): problem wrt to template boostrapping below,\n // template bootstr apping must (?) come before element upgrade\n // but we cannot bootstrap temp lates until they are in a document\n // which is too late\n if (!(resource instanceof Document)) {\n // install html\n doc.body.innerHTML = reso urce;\n }\n // TODO(sorvell): ideally this code is not aware of Template p olyfill,\n // but for now the polyfill needs help to bootstrap these template s\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemplateElement.bootstrap(doc);\n }\n return doc;\n }\n} else {\n / / do nothing if using native imports\n var importer = {};\n}\n\n// NOTE: We can not polyfill document.currentScript because it's not possible\n// both to overri de and maintain the ability to capture the native value;\n// therefore we choose to expose _currentScript both when native imports\n// and the polyfill are in u se.\nvar currentScriptDescriptor = {\n get: function() {\n return HTMLImport s.currentScript || document.currentScript;\n },\n configurable: true\n};\n\nOb ject.defineProperty(document, '_currentScript', currentScriptDescriptor);\nObjec t.defineProperty(mainDoc, '_currentScript', currentScriptDescriptor);\n\n// Poly fill document.baseURI for browsers without it.\nif (!document.baseURI) {\n var baseURIDescriptor = {\n get: function() {\n return window.location.href; \n },\n configurable: true\n };\n\n Object.defineProperty(document, 'bas eURI', baseURIDescriptor);\n Object.defineProperty(mainDoc, 'baseURI', baseURID escriptor);\n}\n\n// call a callback when all HTMLImports in the document at cal l (or at least\n// document ready) time have loaded.\n// 1. ensure the document is in a ready state (has dom), then \n// 2. watch for loading of imports and ca ll callback when done\nfunction whenImportsReady(callback, doc) {\n doc = doc | | mainDoc;\n // if document is loading, wait and try again\n whenDocumentReady (function() {\n watchImportsLoad(callback, doc);\n }, doc);\n}\n\n// call th e callback when the document is in a ready state (has dom)\nvar requiredReadySta te = HTMLImports.isIE ? 'complete' : 'interactive';\nvar READY_EVENT = 'readysta techange';\nfunction isDocumentReady(doc) {\n return (doc.readyState === 'compl ete' ||\n doc.readyState === requiredReadyState);\n}\n\n// call <callback> when we ensure the document is in a ready state\nfunction whenDocumentReady(call back, doc) {\n if (!isDocumentReady(doc)) {\n var checkReady = function() {\ n if (doc.readyState === 'complete' || \n doc.readyState === requi redReadyState) {\n doc.removeEventListener(READY_EVENT, checkReady);\n whenDocumentReady(callback, doc);\n }\n }\n doc.addEventListener (READY_EVENT, checkReady);\n } else if (callback) {\n callback();\n }\n}\n\ n// call <callback> when we ensure all imports have loaded\nfunction watchImport sLoad(callback, doc) {\n var imports = doc.querySelectorAll('link[rel=import]') ;\n var loaded = 0, l = imports.length;\n function checkDone(d) { \n if (lo aded == l) {\n // go async to ensure parser isn't stuck on a script tag\n requestAnimationFrame(callback);\n }\n }\n function loadedImport(e) {\n loaded++;\n checkDone();\n }\n if (l) {\n for (var i=0, imp; (i<l) & & (imp=imports[i]); i++) {\n if (isImportLoaded(imp)) {\n loadedImpo rt.call(imp);\n } else {\n imp.addEventListener('load', loadedImport );\n imp.addEventListener('error', loadedImport);\n }\n }\n } el se {\n checkDone();\n }\n}\n\nfunction isImportLoaded(link) {\n return useN ative ? (link.import && (link.import.readyState !== 'loading')) :\n link.__ importParsed;\n}\n\n// exports\nscope.hasNative = hasNative;\nscope.useNative = useNative;\nscope.importer = importer;\nscope.whenImportsReady = whenImportsRead y;\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\nscope.isImportLoaded = isImportL oaded;\nscope.importLoader = importLoader;\n\n})(window.HTMLImports);\n", 156 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar hasNative = ('import' in docume nt.createElement('link'));\nvar useNative = hasNative;\nvar flags = scope.flags; \nvar IMPORT_LINK_TYPE = 'import';\n\n// TODO(sorvell): SD polyfill intrusion\nv ar mainDoc = window.ShadowDOMPolyfill ? \n ShadowDOMPolyfill.wrapIfNeeded(doc ument) : document;\n\nif (!useNative) {\n\n // imports\n var xhr = scope.xhr;\ n var Loader = scope.Loader;\n var parser = scope.parser;\n\n // importer\n // highlander object to manage loading of imports\n\n // for any document, impo rter:\n // - loads any linked import documents (with deduping)\n // for any im port document, importer also:\n // - loads text of external script tags\n\n va r importer = {\n documents: {},\n // nodes to load in the mian document\n documentPreloadSelectors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n // nodes to load in imports\n importsPreloadSelectors: [\n 'link[rel=' + IMPOR T_LINK_TYPE + ']',\n 'script[src]:not([type])',\n 'script[src][typ e=\"text/javascript\"]'\n ].join(','),\n loadNode: function(node) {\n importLoader.addNode(node);\n },\n // load all loadable elements within t he parent element\n loadSubtree: function(parent) {\n var nodes = this.m arshalNodes(parent);\n // add these nodes to loader's queue\n importLo ader.addNodes(nodes);\n },\n marshalNodes: function(parent) {\n // al l preloadable nodes in inDocument\n return parent.querySelectorAll(this.loa dSelectorsForNode(parent));\n },\n // find the proper set of load selector s for a given node\n loadSelectorsForNode: function(node) {\n var doc = node.ownerDocument || node;\n return doc === mainDoc ? this.documentPreload Selectors :\n this.importsPreloadSelectors;\n },\n loaded: functi on(url, elt, resource) {\n flags.load && console.log('loaded', url, elt);\n // store generic resource\n // TODO(sorvell): fails for nodes inside <template>.content\n // see https://code.google.com/p/chromium/issues/detai l?id=249381.\n elt.__resource = resource;\n if (isDocumentLink(elt)) { \n var doc = this.documents[url];\n // if we've never seen a docum ent at this url\n if (!doc) {\n // generate an HTMLDocument from data\n doc = makeDocument(resource, url);\n doc.__importLink = elt;\n // TODO(sorvell): we cannot use MO to detect parsed nodes beca use\n // SD polyfill does not report these as mutations.\n thi s.bootDocument(doc);\n // cache document\n this.documents[url] = doc;\n }\n // don't store import record until we're actually lo aded\n // store document resource\n elt.import = doc;\n }\n parser.parseNext();\n },\n bootDocument: function(doc) {\n this.l oadSubtree(doc);\n this.observe(doc);\n parser.parseNext();\n },\n loadedAll: function() {\n parser.parseNext();\n }\n };\n\n // loade r singleton\n var importLoader = new Loader(importer.loaded.bind(importer), \n importer.loadedAll.bind(importer));\n\n function isDocumentLink(elt) {\n return isLinkRel(elt, IMPORT_LINK_TYPE);\n }\n\n function isLinkRel(elt, rel ) {\n return elt.localName === 'link' && elt.getAttribute('rel') === rel;\n }\n\n function isScript(elt) {\n return elt.localName === 'script';\n }\n\n function makeDocument(resource, url) {\n // create a new HTML document\n var doc = resource;\n if (!(doc instanceof Document)) {\n doc = documen t.implementation.createHTMLDocument(IMPORT_LINK_TYPE);\n }\n // cache the new document's source url\n doc._URL = url;\n // establish a relative path via <base>\n var base = doc.createElement('base');\n base.setAttribute('h ref', url);\n // add baseURI support to browsers (IE) that lack it.\n if ( !doc.baseURI) {\n doc.baseURI = url;\n }\n doc.head.appendChild(base) ;\n // install HTML last as it may trigger CustomElement upgrades\n // TOD O(sjmiles): problem wrt to template boostrapping below,\n // template bootstr apping must (?) come before element upgrade\n // but we cannot bootstrap temp lates until they are in a document\n // which is too late\n if (!(resource instanceof Document)) {\n // install html\n doc.body.innerHTML = reso urce;\n }\n // TODO(sorvell): ideally this code is not aware of Template p olyfill,\n // but for now the polyfill needs help to bootstrap these template s\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemplateElement.bootstrap(doc);\n }\n return doc;\n }\n} else {\n / / do nothing if using native imports\n var importer = {};\n}\n\n// NOTE: We can not polyfill document.currentScript because it's not possible\n// both to overri de and maintain the ability to capture the native value;\n// therefore we choose to expose _currentScript both when native imports\n// and the polyfill are in u se.\nvar currentScriptDescriptor = {\n get: function() {\n return HTMLImport s.currentScript || document.currentScript;\n },\n configurable: true\n};\n\nOb ject.defineProperty(document, '_currentScript', currentScriptDescriptor);\nObjec t.defineProperty(mainDoc, '_currentScript', currentScriptDescriptor);\n\n// Poly fill document.baseURI for browsers without it.\nif (!document.baseURI) {\n var baseURIDescriptor = {\n get: function() {\n return window.location.href; \n },\n configurable: true\n };\n\n Object.defineProperty(document, 'bas eURI', baseURIDescriptor);\n Object.defineProperty(mainDoc, 'baseURI', baseURID escriptor);\n}\n\n// call a callback when all HTMLImports in the document at cal l (or at least\n// document ready) time have loaded.\n// 1. ensure the document is in a ready state (has dom), then \n// 2. watch for loading of imports and ca ll callback when done\nfunction whenImportsReady(callback, doc) {\n doc = doc | | mainDoc;\n // if document is loading, wait and try again\n whenDocumentReady (function() {\n watchImportsLoad(callback, doc);\n }, doc);\n}\n\n// call th e callback when the document is in a ready state (has dom)\nvar requiredReadySta te = HTMLImports.isIE ? 'complete' : 'interactive';\nvar READY_EVENT = 'readysta techange';\nfunction isDocumentReady(doc) {\n return (doc.readyState === 'compl ete' ||\n doc.readyState === requiredReadyState);\n}\n\n// call <callback> when we ensure the document is in a ready state\nfunction whenDocumentReady(call back, doc) {\n if (!isDocumentReady(doc)) {\n var checkReady = function() {\ n if (doc.readyState === 'complete' || \n doc.readyState === requi redReadyState) {\n doc.removeEventListener(READY_EVENT, checkReady);\n whenDocumentReady(callback, doc);\n }\n }\n doc.addEventListener (READY_EVENT, checkReady);\n } else if (callback) {\n callback();\n }\n}\n\ n// call <callback> when we ensure all imports have loaded\nfunction watchImport sLoad(callback, doc) {\n var imports = doc.querySelectorAll('link[rel=import]') ;\n var loaded = 0, l = imports.length;\n function checkDone(d) { \n if (lo aded == l) {\n // go async to ensure parser isn't stuck on a script tag\n requestAnimationFrame(callback);\n }\n }\n function loadedImport(e) {\n loaded++;\n checkDone();\n }\n if (l) {\n for (var i=0, imp; (i<l) & & (imp=imports[i]); i++) {\n if (isImportLoaded(imp)) {\n loadedImpo rt.call(imp);\n } else {\n imp.addEventListener('load', loadedImport );\n imp.addEventListener('error', loadedImport);\n }\n }\n } el se {\n checkDone();\n }\n}\n\nfunction isImportLoaded(link) {\n return useN ative ? (link.import && (link.import.readyState !== 'loading')) :\n link.__ importParsed;\n}\n\n// exports\nscope.hasNative = hasNative;\nscope.useNative = useNative;\nscope.importer = importer;\nscope.whenImportsReady = whenImportsRead y;\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\nscope.isImportLoaded = isImportL oaded;\nscope.importLoader = importLoader;\n\n})(window.HTMLImports);\n",
157 " /*\nCopyright 2013 The Polymer Authors. All rights reserved.\nUse of this source code is governed by a BSD-style\nlicense that can be found in the LICENSE file.\n*/\n\n(function(scope){\n\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE ;\nvar importSelector = 'link[rel=' + IMPORT_LINK_TYPE + ']';\nvar importer = sc ope.importer;\n\n// we track mutations for addedNodes, looking for imports\nfunc tion handler(mutations) {\n for (var i=0, l=mutations.length, m; (i<l) && (m=mu tations[i]); i++) {\n if (m.type === 'childList' && m.addedNodes.length) {\n addedNodes(m.addedNodes);\n }\n }\n}\n\n// find loadable elements and a dd them to the importer\nfunction addedNodes(nodes) {\n for (var i=0, l=nodes.l ength, n; (i<l) && (n=nodes[i]); i++) {\n if (shouldLoadNode(n)) {\n imp orter.loadNode(n);\n }\n if (n.children && n.children.length) {\n add edNodes(n.children);\n }\n }\n}\n\nfunction shouldLoadNode(node) {\n return (node.nodeType === 1) && matches.call(node,\n importer.loadSelectorsForNod e(node));\n}\n\n// x-plat matches\nvar matches = HTMLElement.prototype.matches | | \n HTMLElement.prototype.matchesSelector || \n HTMLElement.prototype.web kitMatchesSelector ||\n HTMLElement.prototype.mozMatchesSelector ||\n HTML Element.prototype.msMatchesSelector;\n\nvar observer = new MutationObserver(hand ler);\n\n// observe the given root for loadable elements\nfunction observe(root) {\n observer.observe(root, {childList: true, subtree: true});\n}\n\n// exports \n// TODO(sorvell): factor so can put on scope\nscope.observe = observe;\nimport er.observe = observe;\n\n})(HTMLImports);\n", 157 " /*\nCopyright 2013 The Polymer Authors. All rights reserved.\nUse of this source code is governed by a BSD-style\nlicense that can be found in the LICENSE file.\n*/\n\n(function(scope){\n\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE ;\nvar importSelector = 'link[rel=' + IMPORT_LINK_TYPE + ']';\nvar importer = sc ope.importer;\n\n// we track mutations for addedNodes, looking for imports\nfunc tion handler(mutations) {\n for (var i=0, l=mutations.length, m; (i<l) && (m=mu tations[i]); i++) {\n if (m.type === 'childList' && m.addedNodes.length) {\n addedNodes(m.addedNodes);\n }\n }\n}\n\n// find loadable elements and a dd them to the importer\nfunction addedNodes(nodes) {\n for (var i=0, l=nodes.l ength, n; (i<l) && (n=nodes[i]); i++) {\n if (shouldLoadNode(n)) {\n imp orter.loadNode(n);\n }\n if (n.children && n.children.length) {\n add edNodes(n.children);\n }\n }\n}\n\nfunction shouldLoadNode(node) {\n return (node.nodeType === 1) && matches.call(node,\n importer.loadSelectorsForNod e(node));\n}\n\n// x-plat matches\nvar matches = HTMLElement.prototype.matches | | \n HTMLElement.prototype.matchesSelector || \n HTMLElement.prototype.web kitMatchesSelector ||\n HTMLElement.prototype.mozMatchesSelector ||\n HTML Element.prototype.msMatchesSelector;\n\nvar observer = new MutationObserver(hand ler);\n\n// observe the given root for loadable elements\nfunction observe(root) {\n observer.observe(root, {childList: true, subtree: true});\n}\n\n// exports \n// TODO(sorvell): factor so can put on scope\nscope.observe = observe;\nimport er.observe = observe;\n\n})(HTMLImports);\n",
158 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(){\n\n// bootstrap\n\n// IE shim for CustomEvent\ nif (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = functio n(inType, dictionary) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(inType,\n dictionary.bubbles === false ? false : true,\n dictionary.cancelable === false ? false : true,\n dictionary.detail);\ n return e;\n };\n}\n\n// TODO(sorvell): SD polyfill intrusion\nvar doc = w indow.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// Fire the 'HTMLImportsLoaded' event when imports in document at load time \n// have loaded. This event is required to simulate the script block ing \n// behavior of native imports. A main document script that needs to be sur e\n// imports have loaded should wait for this event.\nHTMLImports.whenImportsRe ady(function() {\n HTMLImports.ready = true;\n HTMLImports.readyTime = new Dat e().getTime();\n doc.dispatchEvent(\n new CustomEvent('HTMLImportsLoaded', { bubbles: true})\n );\n});\n\n\n// no need to bootstrap the polyfill when native imports is available.\nif (!HTMLImports.useNative) {\n function bootstrap() {\ n HTMLImports.importer.bootDocument(doc);\n }\n \n // TODO(sorvell): SD polyfill does *not* generate mutations for nodes added\n // by the parser. For this reason, we must wait until the dom exists to \n // bootstrap.\n if (docum ent.readyState === 'complete' ||\n (document.readyState === 'interactive' & & !window.attachEvent)) {\n bootstrap();\n } else {\n document.addEventLi stener('DOMContentLoaded', bootstrap);\n }\n}\n\n})();\n", 158 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(){\n\n// bootstrap\n\n// IE shim for CustomEvent\ nif (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = functio n(inType, dictionary) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(inType,\n dictionary.bubbles === false ? false : true,\n dictionary.cancelable === false ? false : true,\n dictionary.detail);\ n return e;\n };\n}\n\n// TODO(sorvell): SD polyfill intrusion\nvar doc = w indow.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// Fire the 'HTMLImportsLoaded' event when imports in document at load time \n// have loaded. This event is required to simulate the script block ing \n// behavior of native imports. A main document script that needs to be sur e\n// imports have loaded should wait for this event.\nHTMLImports.whenImportsRe ady(function() {\n HTMLImports.ready = true;\n HTMLImports.readyTime = new Dat e().getTime();\n doc.dispatchEvent(\n new CustomEvent('HTMLImportsLoaded', { bubbles: true})\n );\n});\n\n\n// no need to bootstrap the polyfill when native imports is available.\nif (!HTMLImports.useNative) {\n function bootstrap() {\ n HTMLImports.importer.bootDocument(doc);\n }\n \n // TODO(sorvell): SD polyfill does *not* generate mutations for nodes added\n // by the parser. For this reason, we must wait until the dom exists to \n // bootstrap.\n if (docum ent.readyState === 'complete' ||\n (document.readyState === 'interactive' & & !window.attachEvent)) {\n bootstrap();\n } else {\n document.addEventLi stener('DOMContentLoaded', bootstrap);\n }\n}\n\n})();\n",
159 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\nwindow.CustomElements = window.CustomElements || {flags:{}} ;", 159 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\nwindow.CustomElements = window.CustomElements || {flags:{}} ;",
160 " /*\r\nCopyright 2013 The Polymer Authors. All rights reserved.\r\nUse of t his source code is governed by a BSD-style\r\nlicense that can be found in the L ICENSE file.\r\n*/\r\n\r\n(function(scope){\r\n\r\nvar logFlags = window.logFlag s || {};\r\nvar IMPORT_LINK_TYPE = window.HTMLImports ? HTMLImports.IMPORT_LINK_ TYPE : 'none';\r\n\r\n// walk the subtree rooted at node, applying 'find(element , data)' function\r\n// to each element\r\n// if 'find' returns true for 'elemen t', do not search element's subtree\r\nfunction findAll(node, find, data) {\r\n var e = node.firstElementChild;\r\n if (!e) {\r\n e = node.firstChild;\r\n while (e && e.nodeType !== Node.ELEMENT_NODE) {\r\n e = e.nextSibling;\r \n }\r\n }\r\n while (e) {\r\n if (find(e, data) !== true) {\r\n fi ndAll(e, find, data);\r\n }\r\n e = e.nextElementSibling;\r\n }\r\n retu rn null;\r\n}\r\n\r\n// walk all shadowRoots on a given node.\r\nfunction forRoo ts(node, cb) {\r\n var root = node.shadowRoot;\r\n while(root) {\r\n forSub tree(root, cb);\r\n root = root.olderShadowRoot;\r\n }\r\n}\r\n\r\n// walk t he subtree rooted at node, including descent into shadow-roots,\r\n// applying ' cb' to each element\r\nfunction forSubtree(node, cb) {\r\n //logFlags.dom && no de.childNodes && node.childNodes.length && console.group('subTree: ', node);\r\n findAll(node, function(e) {\r\n if (cb(e)) {\r\n return true;\r\n } \r\n forRoots(e, cb);\r\n });\r\n forRoots(node, cb);\r\n //logFlags.dom & & node.childNodes && node.childNodes.length && console.groupEnd();\r\n}\r\n\r\n/ / manage lifecycle on added node\r\nfunction added(node) {\r\n if (upgrade(node )) {\r\n insertedNode(node);\r\n return true;\r\n }\r\n inserted(node);\ r\n}\r\n\r\n// manage lifecycle on added node's subtree only\r\nfunction addedSu btree(node) {\r\n forSubtree(node, function(e) {\r\n if (added(e)) {\r\n return true;\r\n }\r\n });\r\n}\r\n\r\n// manage lifecycle on added node a nd it's subtree\r\nfunction addedNode(node) {\r\n return added(node) || addedSu btree(node);\r\n}\r\n\r\n// upgrade custom elements at node, if applicable\r\nfu nction upgrade(node) {\r\n if (!node.__upgraded__ && node.nodeType === Node.ELE MENT_NODE) {\r\n var type = node.getAttribute('is') || node.localName;\r\n var definition = scope.registry[type];\r\n if (definition) {\r\n logFla gs.dom && console.group('upgrade:', node.localName);\r\n scope.upgrade(node );\r\n logFlags.dom && console.groupEnd();\r\n return true;\r\n }\r \n }\r\n}\r\n\r\nfunction insertedNode(node) {\r\n inserted(node);\r\n if (in Document(node)) {\r\n forSubtree(node, function(e) {\r\n inserted(e);\r\ n });\r\n }\r\n}\r\n\r\n\r\n// TODO(sorvell): on platforms without MutationO bserver, mutations may not be\r\n// reliable and therefore attached/detached are not reliable.\r\n// To make these callbacks less likely to fail, we defer all i nserts and removes\r\n// to give a chance for elements to be inserted into dom.\ r\n// This ensures attachedCallback fires for elements that are created and\r\n/ / immediately added to dom.\r\nvar hasPolyfillMutations = (!window.MutationObser ver ||\r\n (window.MutationObserver === window.JsMutationObserver));\r\nscope .hasPolyfillMutations = hasPolyfillMutations;\r\n\r\nvar isPendingMutations = fa lse;\r\nvar pendingMutations = [];\r\nfunction deferMutation(fn) {\r\n pendingM utations.push(fn);\r\n if (!isPendingMutations) {\r\n isPendingMutations = t rue;\r\n var async = (window.Platform && window.Platform.endOfMicrotask) ||\r \n setTimeout;\r\n async(takeMutations);\r\n }\r\n}\r\n\r\nfunction t akeMutations() {\r\n isPendingMutations = false;\r\n var $p = pendingMutations ;\r\n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\r\n p();\r\n }\r\n pendingMutations = [];\r\n}\r\n\r\nfunction inserted(element) {\r\n if (hasPolyfillMutations) {\r\n deferMutation(function() {\r\n _inserted(el ement);\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n/ / TODO(sjmiles): if there are descents into trees that can never have inDocument (*) true, fix this\r\nfunction _inserted(element) {\r\n // TODO(sjmiles): it's possible we were inserted and removed in the space\r\n // of one microtask, in which case we won't be 'inDocument' here\r\n // But there are other cases where we are testing for inserted without\r\n // specific knowledge of mutations, an d must test 'inDocument' to determine\r\n // whether to call inserted\r\n // I f we can factor these cases into separate code paths we can have\r\n // better diagnostics.\r\n // TODO(sjmiles): when logging, do work on all custom elements so we can\r\n // track behavior even when callbacks not defined\r\n //console .log('inserted: ', element.localName);\r\n if (element.attachedCallback || elem ent.detachedCallback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlag s.dom && console.group('inserted:', element.localName);\r\n if (inDocument(el ement)) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n // if we are in a 'removed' state, bluntly adjust to an 'inserted' state\r\n if (element.__inserted < 1) {\r\n element.__inserted = 1;\r\n }\r\ n // if we are 'over inserted', squelch the callback\r\n if (element._ _inserted > 1) {\r\n logFlags.dom && console.warn('inserted:', element.lo calName,\r\n 'insert/remove count:', element.__inserted)\r\n } els e if (element.attachedCallback) {\r\n logFlags.dom && console.log('insert ed:', element.localName);\r\n element.attachedCallback();\r\n }\r\n }\r\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\nfunction remo vedNode(node) {\r\n removed(node);\r\n forSubtree(node, function(e) {\r\n r emoved(e);\r\n });\r\n}\r\n\r\nfunction removed(element) {\r\n if (hasPolyfill Mutations) {\r\n deferMutation(function() {\r\n _removed(element);\r\n });\r\n } else {\r\n _removed(element);\r\n }\r\n}\r\n\r\nfunction _remov ed(element) {\r\n // TODO(sjmiles): temporary: do work on all custom elements s o we can track\r\n // behavior even when callbacks not defined\r\n if (element .attachedCallback || element.detachedCallback || (element.__upgraded__ && logFla gs.dom)) {\r\n logFlags.dom && console.group('removed:', element.localName);\ r\n if (!inDocument(element)) {\r\n element.__inserted = (element.__inse rted || 0) - 1;\r\n // if we are in a 'inserted' state, bluntly adjust to a n 'removed' state\r\n if (element.__inserted > 0) {\r\n element.__in serted = 0;\r\n }\r\n // if we are 'over removed', squelch the callbac k\r\n if (element.__inserted < 0) {\r\n logFlags.dom && console.warn ('removed:', element.localName,\r\n 'insert/remove count:', element._ _inserted)\r\n } else if (element.detachedCallback) {\r\n element.de tachedCallback();\r\n }\r\n }\r\n logFlags.dom && console.groupEnd(); \r\n }\r\n}\r\n\r\n// SD polyfill intrustion due mainly to the fact that 'docum ent'\r\n// is not entirely wrapped\r\nfunction wrapIfNeeded(node) {\r\n return window.ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node)\r\n : node; \r\n}\r\n\r\nfunction inDocument(element) {\r\n var p = element;\r\n var doc = wrapIfNeeded(document);\r\n while (p) {\r\n if (p == doc) {\r\n return true;\r\n }\r\n p = p.parentNode || p.host;\r\n }\r\n}\r\n\r\nfunction w atchShadow(node) {\r\n if (node.shadowRoot && !node.shadowRoot.__watched) {\r\n logFlags.dom && console.log('watching shadow-root for: ', node.localName);\r \n // watch all unwatched roots...\r\n var root = node.shadowRoot;\r\n while (root) {\r\n watchRoot(root);\r\n root = root.olderShadowRoot;\r \n }\r\n }\r\n}\r\n\r\nfunction watchRoot(root) {\r\n if (!root.__watched) {\r\n observe(root);\r\n root.__watched = true;\r\n }\r\n}\r\n\r\nfunctio n handler(mutations) {\r\n //\r\n if (logFlags.dom) {\r\n var mx = mutation s[0];\r\n if (mx && mx.type === 'childList' && mx.addedNodes) {\r\n if (mx.addedNodes) {\r\n var d = mx.addedNodes[0];\r\n while (d && d !== document && !d.host) {\r\n d = d.parentNode;\r\n }\ r\n var u = d && (d.URL || d._URL || (d.host && d.host.localName)) || ' ';\r\n u = u.split('/?').shift().split('/').pop();\r\n }\r\n }\r\n console.group('mutations (%d) [%s]', mutations.length, u || '');\r\n } \r\n //\r\n mutations.forEach(function(mx) {\r\n //logFlags.dom && console. group('mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx.add edNodes, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\ n if (!n.localName) {\r\n return;\r\n }\r\n // nod es added may need lifecycle management\r\n addedNode(n);\r\n });\r\n // removed nodes may need lifecycle management\r\n forEach(mx.removed Nodes, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n if (!n.localName) {\r\n return;\r\n }\r\n removedN ode(n);\r\n });\r\n }\r\n //logFlags.dom && console.groupEnd();\r\n });\r\n logFlags.dom && console.groupEnd();\r\n};\r\n\r\nvar observer = new Mut ationObserver(handler);\r\n\r\nfunction takeRecords() {\r\n // TODO(sjmiles): a sk Raf why we have to call handler ourselves\r\n handler(observer.takeRecords() );\r\n takeMutations();\r\n}\r\n\r\nvar forEach = Array.prototype.forEach.call. bind(Array.prototype.forEach);\r\n\r\nfunction observe(inRoot) {\r\n observer.o bserve(inRoot, {childList: true, subtree: true});\r\n}\r\n\r\nfunction observeDo cument(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocument(doc) {\r\n logFlags.dom && console.group('upgradeDocument: ', (doc.baseURI).split('/').po p());\r\n addedNode(doc);\r\n logFlags.dom && console.groupEnd();\r\n}\r\n\r\n function upgradeDocumentTree(doc) {\r\n doc = wrapIfNeeded(doc);\r\n upgradeDo cument(doc);\r\n //console.log('upgradeDocumentTree: ', (doc.baseURI).split('/' ).pop());\r\n // upgrade contained imported documents\r\n var imports = doc.qu erySelectorAll('link[rel=' + IMPORT_LINK_TYPE + ']');\r\n for (var i=0, l=impor ts.length, n; (i<l) && (n=imports[i]); i++) {\r\n if (n.import && n.import.__ parsed) {\r\n upgradeDocumentTree(n.import);\r\n }\r\n }\r\n}\r\n\r\n// exports\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\r\nscope.watchShadow = wa tchShadow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeA ll = addedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\n\r\nscope.observeDocu ment = observeDocument;\r\nscope.upgradeDocument = upgradeDocument;\r\n\r\nscope .takeRecords = takeRecords;\r\n\r\n})(window.CustomElements);\r\n", 160 " /*\r\nCopyright 2013 The Polymer Authors. All rights reserved.\r\nUse of t his source code is governed by a BSD-style\r\nlicense that can be found in the L ICENSE file.\r\n*/\r\n\r\n(function(scope){\r\n\r\nvar logFlags = window.logFlag s || {};\r\nvar IMPORT_LINK_TYPE = window.HTMLImports ? HTMLImports.IMPORT_LINK_ TYPE : 'none';\r\n\r\n// walk the subtree rooted at node, applying 'find(element , data)' function\r\n// to each element\r\n// if 'find' returns true for 'elemen t', do not search element's subtree\r\nfunction findAll(node, find, data) {\r\n var e = node.firstElementChild;\r\n if (!e) {\r\n e = node.firstChild;\r\n while (e && e.nodeType !== Node.ELEMENT_NODE) {\r\n e = e.nextSibling;\r \n }\r\n }\r\n while (e) {\r\n if (find(e, data) !== true) {\r\n fi ndAll(e, find, data);\r\n }\r\n e = e.nextElementSibling;\r\n }\r\n retu rn null;\r\n}\r\n\r\n// walk all shadowRoots on a given node.\r\nfunction forRoo ts(node, cb) {\r\n var root = node.shadowRoot;\r\n while(root) {\r\n forSub tree(root, cb);\r\n root = root.olderShadowRoot;\r\n }\r\n}\r\n\r\n// walk t he subtree rooted at node, including descent into shadow-roots,\r\n// applying ' cb' to each element\r\nfunction forSubtree(node, cb) {\r\n //logFlags.dom && no de.childNodes && node.childNodes.length && console.group('subTree: ', node);\r\n findAll(node, function(e) {\r\n if (cb(e)) {\r\n return true;\r\n } \r\n forRoots(e, cb);\r\n });\r\n forRoots(node, cb);\r\n //logFlags.dom & & node.childNodes && node.childNodes.length && console.groupEnd();\r\n}\r\n\r\n/ / manage lifecycle on added node\r\nfunction added(node) {\r\n if (upgrade(node )) {\r\n insertedNode(node);\r\n return true;\r\n }\r\n inserted(node);\ r\n}\r\n\r\n// manage lifecycle on added node's subtree only\r\nfunction addedSu btree(node) {\r\n forSubtree(node, function(e) {\r\n if (added(e)) {\r\n return true;\r\n }\r\n });\r\n}\r\n\r\n// manage lifecycle on added node a nd it's subtree\r\nfunction addedNode(node) {\r\n return added(node) || addedSu btree(node);\r\n}\r\n\r\n// upgrade custom elements at node, if applicable\r\nfu nction upgrade(node) {\r\n if (!node.__upgraded__ && node.nodeType === Node.ELE MENT_NODE) {\r\n var type = node.getAttribute('is') || node.localName;\r\n var definition = scope.registry[type];\r\n if (definition) {\r\n logFla gs.dom && console.group('upgrade:', node.localName);\r\n scope.upgrade(node );\r\n logFlags.dom && console.groupEnd();\r\n return true;\r\n }\r \n }\r\n}\r\n\r\nfunction insertedNode(node) {\r\n inserted(node);\r\n if (in Document(node)) {\r\n forSubtree(node, function(e) {\r\n inserted(e);\r\ n });\r\n }\r\n}\r\n\r\n// TODO(sorvell): on platforms without MutationObser ver, mutations may not be\r\n// reliable and therefore attached/detached are not reliable.\r\n// To make these callbacks less likely to fail, we defer all inser ts and removes\r\n// to give a chance for elements to be inserted into dom.\r\n/ / This ensures attachedCallback fires for elements that are created and\r\n// im mediately added to dom.\r\nvar hasPolyfillMutations = (!window.MutationObserver ||\r\n (window.MutationObserver === window.JsMutationObserver));\r\nscope.has PolyfillMutations = hasPolyfillMutations;\r\n\r\nvar isPendingMutations = false; \r\nvar pendingMutations = [];\r\nfunction deferMutation(fn) {\r\n pendingMutat ions.push(fn);\r\n if (!isPendingMutations) {\r\n isPendingMutations = true; \r\n var async = (window.Platform && window.Platform.endOfMicrotask) ||\r\n setTimeout;\r\n async(takeMutations);\r\n }\r\n}\r\n\r\nfunction takeM utations() {\r\n isPendingMutations = false;\r\n var $p = pendingMutations;\r\ n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\r\n p();\r\n }\r \n pendingMutations = [];\r\n}\r\n\r\nfunction inserted(element) {\r\n if (has PolyfillMutations) {\r\n deferMutation(function() {\r\n _inserted(elemen t);\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n// TO DO(sjmiles): if there are descents into trees that can never have inDocument(*) true, fix this\r\nfunction _inserted(element) {\r\n // TODO(sjmiles): it's poss ible we were inserted and removed in the space\r\n // of one microtask, in whic h case we won't be 'inDocument' here\r\n // But there are other cases where we are testing for inserted without\r\n // specific knowledge of mutations, and mu st test 'inDocument' to determine\r\n // whether to call inserted\r\n // If we can factor these cases into separate code paths we can have\r\n // better diag nostics.\r\n // TODO(sjmiles): when logging, do work on all custom elements so we can\r\n // track behavior even when callbacks not defined\r\n //console.log ('inserted: ', element.localName);\r\n if (element.attachedCallback || element. detachedCallback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.do m && console.group('inserted:', element.localName);\r\n if (inDocument(elemen t)) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n // i f we are in a 'removed' state, bluntly adjust to an 'inserted' state\r\n if (element.__inserted < 1) {\r\n element.__inserted = 1;\r\n }\r\n // if we are 'over inserted', squelch the callback\r\n if (element.__ins erted > 1) {\r\n logFlags.dom && console.warn('inserted:', element.localN ame,\r\n 'insert/remove count:', element.__inserted)\r\n } else if (element.attachedCallback) {\r\n logFlags.dom && console.log('inserted:' , element.localName);\r\n element.attachedCallback();\r\n }\r\n } \r\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\nfunction removedN ode(node) {\r\n removed(node);\r\n forSubtree(node, function(e) {\r\n remov ed(e);\r\n });\r\n}\r\n\r\nfunction removed(element) {\r\n if (hasPolyfillMuta tions) {\r\n deferMutation(function() {\r\n _removed(element);\r\n }) ;\r\n } else {\r\n _removed(element);\r\n }\r\n}\r\n\r\nfunction _removed(e lement) {\r\n // TODO(sjmiles): temporary: do work on all custom elements so we can track\r\n // behavior even when callbacks not defined\r\n if (element.att achedCallback || element.detachedCallback || (element.__upgraded__ && logFlags.d om)) {\r\n logFlags.dom && console.group('removed:', element.localName);\r\n if (!inDocument(element)) {\r\n element.__inserted = (element.__inserted || 0) - 1;\r\n // if we are in a 'inserted' state, bluntly adjust to an 'r emoved' state\r\n if (element.__inserted > 0) {\r\n element.__insert ed = 0;\r\n }\r\n // if we are 'over removed', squelch the callback\r\ n if (element.__inserted < 0) {\r\n logFlags.dom && console.warn('re moved:', element.localName,\r\n 'insert/remove count:', element.__ins erted)\r\n } else if (element.detachedCallback) {\r\n element.detach edCallback();\r\n }\r\n }\r\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\n// SD polyfill intrustion due mainly to the fact that 'document' \r\n// is not entirely wrapped\r\nfunction wrapIfNeeded(node) {\r\n return wind ow.ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node)\r\n : node;\r\n }\r\n\r\nfunction inDocument(element) {\r\n var p = element;\r\n var doc = wra pIfNeeded(document);\r\n while (p) {\r\n if (p == doc) {\r\n return tru e;\r\n }\r\n p = p.parentNode || p.host;\r\n }\r\n}\r\n\r\nfunction watch Shadow(node) {\r\n if (node.shadowRoot && !node.shadowRoot.__watched) {\r\n logFlags.dom && console.log('watching shadow-root for: ', node.localName);\r\n // watch all unwatched roots...\r\n var root = node.shadowRoot;\r\n whil e (root) {\r\n watchRoot(root);\r\n root = root.olderShadowRoot;\r\n }\r\n }\r\n}\r\n\r\nfunction watchRoot(root) {\r\n if (!root.__watched) {\r\ n observe(root);\r\n root.__watched = true;\r\n }\r\n}\r\n\r\nfunction ha ndler(mutations) {\r\n //\r\n if (logFlags.dom) {\r\n var mx = mutations[0] ;\r\n if (mx && mx.type === 'childList' && mx.addedNodes) {\r\n if (mx .addedNodes) {\r\n var d = mx.addedNodes[0];\r\n while (d && d !== document && !d.host) {\r\n d = d.parentNode;\r\n }\r\n var u = d && (d.URL || d._URL || (d.host && d.host.localName)) || '';\r \n u = u.split('/?').shift().split('/').pop();\r\n }\r\n }\r\ n console.group('mutations (%d) [%s]', mutations.length, u || '');\r\n }\r\n //\r\n mutations.forEach(function(mx) {\r\n //logFlags.dom && console.grou p('mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx.addedNo des, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n if (!n.localName) {\r\n return;\r\n }\r\n // nodes a dded may need lifecycle management\r\n addedNode(n);\r\n });\r\n // removed nodes may need lifecycle management\r\n forEach(mx.removedNode s, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n if (!n.localName) {\r\n return;\r\n }\r\n removedNode( n);\r\n });\r\n }\r\n //logFlags.dom && console.groupEnd();\r\n });\ r\n logFlags.dom && console.groupEnd();\r\n};\r\n\r\nvar observer = new Mutatio nObserver(handler);\r\n\r\nfunction takeRecords() {\r\n // TODO(sjmiles): ask R af why we have to call handler ourselves\r\n handler(observer.takeRecords());\r \n takeMutations();\r\n}\r\n\r\nvar forEach = Array.prototype.forEach.call.bind (Array.prototype.forEach);\r\n\r\nfunction observe(inRoot) {\r\n observer.obser ve(inRoot, {childList: true, subtree: true});\r\n}\r\n\r\nfunction observeDocume nt(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocument(doc) {\r\n lo gFlags.dom && console.group('upgradeDocument: ', (doc.baseURI).split('/').pop()) ;\r\n addedNode(doc);\r\n logFlags.dom && console.groupEnd();\r\n}\r\n\r\nfunc tion upgradeDocumentTree(doc) {\r\n doc = wrapIfNeeded(doc);\r\n upgradeDocume nt(doc);\r\n //console.log('upgradeDocumentTree: ', (doc.baseURI).split('/').po p());\r\n // upgrade contained imported documents\r\n var imports = doc.queryS electorAll('link[rel=' + IMPORT_LINK_TYPE + ']');\r\n for (var i=0, l=imports.l ength, n; (i<l) && (n=imports[i]); i++) {\r\n if (n.import && n.import.__pars ed) {\r\n upgradeDocumentTree(n.import);\r\n }\r\n }\r\n}\r\n\r\n// exp orts\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\r\nscope.watchShadow = watchS hadow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeAll = addedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\nscope.insertedNode = inse rtedNode;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDocume nt = upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(window.C ustomElements);\r\n",
161 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Implements `document.register`\n * @module Custom Elements\n*/\n\n/**\n * Polyfilled extensions to the `document` object.\n * @cla ss Document\n*/\n\n(function(scope) {\n\n// imports\n\nif (!scope) {\n scope = window.CustomElements = {flags:{}};\n}\nvar flags = scope.flags;\n\n// native do cument.registerElement?\n\nvar hasNative = Boolean(document.registerElement);\n/ / TODO(sorvell): See https://github.com/Polymer/polymer/issues/399\n// we'll add ress this by defaulting to CE polyfill in the presence of the SD\n// polyfill. T his will avoid spamming excess attached/detached callbacks.\n// If there is a co mpelling need to run CE native with SD polyfill,\n// we'll need to fix this issu e.\nvar useNative = !flags.register && hasNative && !window.ShadowDOMPolyfill;\n \nif (useNative) {\n\n // stub\n var nop = function() {};\n\n // exports\n s cope.registry = {};\n scope.upgradeElement = nop;\n\n scope.watchShadow = nop; \n scope.upgrade = nop;\n scope.upgradeAll = nop;\n scope.upgradeSubtree = no p;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop;\n scope.upgr adeDocumentTree = nop;\n scope.takeRecords = nop;\n\n} else {\n\n /**\n * Re gisters a custom tag name with the document.\n *\n * When a registered eleme nt is created, a `readyCallback` method is called\n * in the scope of the elem ent. The `readyCallback` method can be specified on\n * either `options.protot ype` or `options.lifecycle` with the latter taking\n * precedence.\n *\n * @method register\n * @param {String} name The tag name to register. Must incl ude a dash ('-'),\n * for example 'x-component'.\n * @param {Object} opti ons\n * @param {String} [options.extends]\n * (_off spec_) Tag name of an element to extend (or blank for a new\n * element). This parameter is not part of the specification, but instead\n * is a hint for the polyf ill because the extendee is difficult to infer.\n * Remember that the inp ut prototype must chain to the extended element's\n * prototype (or HTMLE lement.prototype) regardless of the value of\n * `extends`.\n * @par am {Object} options.prototype The prototype to use for the new\n * elemen t. The prototype must inherit from HTMLElement.\n * @param {Object} [option s.lifecycle]\n * Callbacks that fire at important phases in the life of t he custom\n * element.\n *\n * @example\n * FancyButton = docu ment.registerElement(\"fancy-button\", {\n * extends: 'button',\n * prototype: Object.create(HTMLButtonElement.prototype, {\n * rea dyCallback: {\n * value: function() {\n * console.lo g(\"a fancy-button was created\",\n * }\n * }\n * })\n * });\n * @return {Function} Constructor for the newly register ed type.\n */\n function register(name, options) {\n //console.warn('docum ent.registerElement(\"' + name + '\", ', options, ')');\n // construct a defi ntion out of options\n // TODO(sjmiles): probably should clone options instea d of mutating it\n var definition = options || {};\n if (!name) {\n / / TODO(sjmiles): replace with more appropriate error (EricB can probably\n // offer guidance)\n throw new Error('document.registerElement: first argum ent `name` must not be empty');\n }\n if (name.indexOf('-') < 0) {\n // TODO(sjmiles): replace with more appropriate error (EricB can probably\n // offer guidance)\n throw new Error('document.registerElement: first argu ment (\\'name\\') must contain a dash (\\'-\\'). Argument provided was \\'' + St ring(name) + '\\'.');\n }\n // elements may only be registered once\n i f (getRegisteredDefinition(name)) {\n throw new Error('DuplicateDefinitionE rror: a type with name \\'' + String(name) + '\\' is already registered');\n }\n // must have a prototype, default to an extension of HTMLElement\n // TODO(sjmiles): probably should throw if no prototype, check spec\n if (!defin ition.prototype) {\n // TODO(sjmiles): replace with more appropriate error (EricB can probably\n // offer guidance)\n throw new Error('Options mi ssing required prototype property');\n }\n // record name\n definition. __name = name.toLowerCase();\n // ensure a lifecycle object so we don't have to null test it\n definition.lifecycle = definition.lifecycle || {};\n // build a list of ancestral custom elements (for native base detection)\n // TO DO(sjmiles): we used to need to store this, but current code only\n // uses i t in 'resolveTagName': it should probably be inlined\n definition.ancestry = ancestry(definition.extends);\n // extensions of native specializations of HT MLElement require localName\n // to remain native, and use secondary 'is' spe cifier for extension type\n resolveTagName(definition);\n // some platform s require modifications to the user-supplied prototype\n // chain\n resolv ePrototypeChain(definition);\n // overrides to implement attributeChanged cal lback\n overrideAttributeApi(definition.prototype);\n // 7.1.5: Register t he DEFINITION with DOCUMENT\n registerDefinition(definition.__name, definitio n);\n // 7.1.7. Run custom element constructor generation algorithm with PROT OTYPE\n // 7.1.8. Return the output of the previous step.\n definition.cto r = generateConstructor(definition);\n definition.ctor.prototype = definition .prototype;\n // force our .constructor to be our actual constructor\n def inition.prototype.constructor = definition.ctor;\n // if initial parsing is c omplete\n if (scope.ready) {\n // upgrade any pre-existing nodes of this type\n scope.upgradeDocumentTree(document);\n }\n return definition. ctor;\n }\n\n function ancestry(extnds) {\n var extendee = getRegisteredDef inition(extnds);\n if (extendee) {\n return ancestry(extendee.extends).c oncat([extendee]);\n }\n return [];\n }\n\n function resolveTagName(defi nition) {\n // if we are explicitly extending something, that thing is our\n // baseTag, unless it represents a custom component\n var baseTag = defini tion.extends;\n // if our ancestry includes custom components, we only have a \n // baseTag if one of them does\n for (var i=0, a; (a=definition.ancestr y[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our tag is our base Tag, if it exists, and otherwise just our name\n definition.tag = baseTag || definition.__name;\n if (baseTag) {\n // if there is a base tag, use sec ondary 'is' specifier\n definition.is = definition.__name;\n }\n }\n\n function resolvePrototypeChain(definition) {\n // if we don't support __prot o__ we need to locate the native level\n // prototype for precise mixing in\n if (!Object.__proto__) {\n // default prototype\n var nativeProtot ype = HTMLElement.prototype;\n // work out prototype when using type-extens ion\n if (definition.is) {\n var inst = document.createElement(defin ition.tag);\n nativePrototype = Object.getPrototypeOf(inst);\n }\n // ensure __proto__ reference is installed at each point on the prototype\n // chain.\n // NOTE: On platforms without __proto__, a mixin strategy is used instead\n // of prototype swizzling. In this case, this generated _ _proto__ provides\n // limited support for prototype traversal.\n var proto = definition.prototype, ancestor;\n while (proto && (proto !== native Prototype)) {\n var ancestor = Object.getPrototypeOf(proto);\n pro to.__proto__ = ancestor;\n proto = ancestor;\n }\n }\n // cach e this in case of mixin\n definition.native = nativePrototype;\n }\n\n // S ECTION 4\n\n function instantiate(definition) {\n // 4.a.1. Create a new obj ect that implements PROTOTYPE\n // 4.a.2. Let ELEMENT by this new object\n //\n // the custom element instantiation algorithm must also ensure that the \n // output is a valid DOM element with the proper wrapper in place.\n // \n return upgrade(domCreateElement(definition.tag), definition);\n }\n\n fu nction upgrade(element, definition) {\n // some definitions specify an 'is' a ttribute\n if (definition.is) {\n element.setAttribute('is', definition. is);\n }\n // remove 'unresolved' attr, which is a standin for :unresolved .\n element.removeAttribute('unresolved');\n // make 'element' implement d efinition.prototype\n implement(element, definition);\n // flag as upgrade d\n element.__upgraded__ = true;\n // lifecycle management\n created(el ement);\n // there should never be a shadow root on element at this point\n // we require child nodes be upgraded before `created`\n scope.upgradeSubtr ee(element);\n // OUTPUT\n return element;\n }\n\n function implement(el ement, definition) {\n // prototype swizzling is best\n if (Object.__proto __) {\n element.__proto__ = definition.prototype;\n } else {\n // w here above we can re-acquire inPrototype via\n // getPrototypeOf(Element), we cannot do so when\n // we use mixin, so we install a magic reference\n customMixin(element, definition.prototype, definition.native);\n elemen t.__proto__ = definition.prototype;\n }\n }\n\n function customMixin(inTarg et, inSrc, inNative) {\n // TODO(sjmiles): 'used' allows us to only copy the 'youngest' version of\n // any property. This set should be precalculated. We also need to\n // consider this for supporting 'super'.\n var used = {};\ n // start with inSrc\n var p = inSrc;\n // sometimes the default is HT MLUnknownElement.prototype instead of\n // HTMLElement.prototype, so we add a test\n // the idea is to avoid mixing in native prototypes, so adding\n / / the second test is WLOG\n while (p !== inNative && p !== HTMLUnknownElement .prototype) {\n var keys = Object.getOwnPropertyNames(p);\n for (var i =0, k; k=keys[i]; i++) {\n if (!used[k]) {\n Object.defineProper ty(inTarget, k,\n Object.getOwnPropertyDescriptor(p, k));\n used[k] = 1;\n }\n }\n p = Object.getPrototypeOf(p);\n }\n }\n\n function created(element) {\n // invoke createdCallback\n if (ele ment.createdCallback) {\n element.createdCallback();\n }\n }\n\n // at tribute watching\n\n function overrideAttributeApi(prototype) {\n // overrid es to implement callbacks\n // TODO(sjmiles): should support access via .attr ibutes NamedNodeMap\n // TODO(sjmiles): preserves user defined overrides, if any\n if (prototype.setAttribute._polyfilled) {\n return;\n }\n va r setAttribute = prototype.setAttribute;\n prototype.setAttribute = function( name, value) {\n changeAttribute.call(this, name, value, setAttribute);\n }\n var removeAttribute = prototype.removeAttribute;\n prototype.removeA ttribute = function(name) {\n changeAttribute.call(this, name, null, remove Attribute);\n }\n prototype.setAttribute._polyfilled = true;\n }\n\n // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/\n // index.html# dfn-attribute-changed-callback\n function changeAttribute(name, value, operatio n) {\n var oldValue = this.getAttribute(name);\n operation.apply(this, arg uments);\n var newValue = this.getAttribute(name);\n if (this.attributeCha ngedCallback\n && (newValue !== oldValue)) {\n this.attributeChanged Callback(name, oldValue, newValue);\n }\n }\n\n // element registry (maps t ag names to definitions)\n\n var registry = {};\n\n function getRegisteredDefi nition(name) {\n if (name) {\n return registry[name.toLowerCase()];\n }\n }\n\n function registerDefinition(name, definition) {\n if (registry[n ame]) {\n throw new Error('a type with that name is already registered.');\ n }\n registry[name] = definition;\n }\n\n function generateConstructor( definition) {\n return function() {\n return instantiate(definition);\n };\n }\n\n function createElement(tag, typeExtension) {\n // TODO(sjmile s): ignore 'tag' when using 'typeExtension', we could\n // error check it, or perhaps there should only ever be one argument\n var definition = getRegiste redDefinition(typeExtension || tag);\n if (definition) {\n if (tag == de finition.tag && typeExtension == definition.is) {\n return new definition .ctor();\n }\n // Handle empty string for type extension.\n if (! typeExtension && !definition.is) {\n return new definition.ctor();\n }\n }\n\n if (typeExtension) {\n var element = createElement(tag);\n element.setAttribute('is', typeExtension);\n return element;\n }\n var element = domCreateElement(tag);\n // Custom tags should be HTMLEleme nts even if not upgraded.\n if (tag.indexOf('-') >= 0) {\n implement(ele ment, HTMLElement);\n }\n return element;\n }\n\n function upgradeElemen t(element) {\n if (!element.__upgraded__ && (element.nodeType === Node.ELEMEN T_NODE)) {\n var is = element.getAttribute('is');\n var definition = g etRegisteredDefinition(is || element.localName);\n if (definition) {\n if (is && definition.tag == element.localName) {\n return upgrade(el ement, definition);\n } else if (!is && !definition.extends) {\n return upgrade(element, definition);\n }\n }\n }\n }\n\n funct ion cloneNode(deep) {\n // call original clone\n var n = domCloneNode.call (this, deep);\n // upgrade the element and subtree\n scope.upgradeAll(n);\ n // return the clone\n return n;\n }\n // capture native createElement before we override it\n\n var domCreateElement = document.createElement.bind(do cument);\n\n // capture native cloneNode before we override it\n\n var domClon eNode = Node.prototype.cloneNode;\n\n // exports\n\n document.registerElement = register;\n document.createElement = createElement; // override\n Node.proto type.cloneNode = cloneNode; // override\n\n scope.registry = registry;\n\n /** \n * Upgrade an element to a custom element. Upgrading an element\n * causes the custom prototype to be applied, an `is` attribute\n * to be attached (as needed), and invocation of the `readyCallback`.\n * `upgrade` does nothing if the element is already upgraded, or\n * if it matches no registered custom tag name.\n *\n * @method ugprade\n * @param {Element} element The element to upgrade.\n * @return {Element} The upgraded element.\n */\n scope.upgrade = upgradeElement;\n}\n\n// bc\ndocument.register = document.registerElement;\n\n scope.hasNative = hasNative;\nscope.useNative = useNative;\n\n})(window.CustomEl ements);\n", 161 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Implements `document.register`\n * @module Custom Elements\n*/\n\n/**\n * Polyfilled extensions to the `document` object.\n * @cla ss Document\n*/\n\n(function(scope) {\n\n// imports\n\nif (!scope) {\n scope = window.CustomElements = {flags:{}};\n}\nvar flags = scope.flags;\n\n// native do cument.registerElement?\n\nvar hasNative = Boolean(document.registerElement);\n/ / TODO(sorvell): See https://github.com/Polymer/polymer/issues/399\n// we'll add ress this by defaulting to CE polyfill in the presence of the SD\n// polyfill. T his will avoid spamming excess attached/detached callbacks.\n// If there is a co mpelling need to run CE native with SD polyfill,\n// we'll need to fix this issu e.\nvar useNative = !flags.register && hasNative && !window.ShadowDOMPolyfill;\n \nif (useNative) {\n\n // stub\n var nop = function() {};\n\n // exports\n s cope.registry = {};\n scope.upgradeElement = nop;\n\n scope.watchShadow = nop; \n scope.upgrade = nop;\n scope.upgradeAll = nop;\n scope.upgradeSubtree = no p;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop;\n scope.upgr adeDocumentTree = nop;\n scope.takeRecords = nop;\n\n} else {\n\n /**\n * Re gisters a custom tag name with the document.\n *\n * When a registered eleme nt is created, a `readyCallback` method is called\n * in the scope of the elem ent. The `readyCallback` method can be specified on\n * either `options.protot ype` or `options.lifecycle` with the latter taking\n * precedence.\n *\n * @method register\n * @param {String} name The tag name to register. Must incl ude a dash ('-'),\n * for example 'x-component'.\n * @param {Object} opti ons\n * @param {String} [options.extends]\n * (_off spec_) Tag name of an element to extend (or blank for a new\n * element). This parameter is not part of the specification, but instead\n * is a hint for the polyf ill because the extendee is difficult to infer.\n * Remember that the inp ut prototype must chain to the extended element's\n * prototype (or HTMLE lement.prototype) regardless of the value of\n * `extends`.\n * @par am {Object} options.prototype The prototype to use for the new\n * elemen t. The prototype must inherit from HTMLElement.\n * @param {Object} [option s.lifecycle]\n * Callbacks that fire at important phases in the life of t he custom\n * element.\n *\n * @example\n * FancyButton = docu ment.registerElement(\"fancy-button\", {\n * extends: 'button',\n * prototype: Object.create(HTMLButtonElement.prototype, {\n * rea dyCallback: {\n * value: function() {\n * console.lo g(\"a fancy-button was created\",\n * }\n * }\n * })\n * });\n * @return {Function} Constructor for the newly register ed type.\n */\n function register(name, options) {\n //console.warn('docum ent.registerElement(\"' + name + '\", ', options, ')');\n // construct a defi ntion out of options\n // TODO(sjmiles): probably should clone options instea d of mutating it\n var definition = options || {};\n if (!name) {\n / / TODO(sjmiles): replace with more appropriate error (EricB can probably\n // offer guidance)\n throw new Error('document.registerElement: first argum ent `name` must not be empty');\n }\n if (name.indexOf('-') < 0) {\n // TODO(sjmiles): replace with more appropriate error (EricB can probably\n // offer guidance)\n throw new Error('document.registerElement: first argu ment (\\'name\\') must contain a dash (\\'-\\'). Argument provided was \\'' + St ring(name) + '\\'.');\n }\n // elements may only be registered once\n i f (getRegisteredDefinition(name)) {\n throw new Error('DuplicateDefinitionE rror: a type with name \\'' + String(name) + '\\' is already registered');\n }\n // must have a prototype, default to an extension of HTMLElement\n // TODO(sjmiles): probably should throw if no prototype, check spec\n if (!defin ition.prototype) {\n // TODO(sjmiles): replace with more appropriate error (EricB can probably\n // offer guidance)\n throw new Error('Options mi ssing required prototype property');\n }\n // record name\n definition. __name = name.toLowerCase();\n // ensure a lifecycle object so we don't have to null test it\n definition.lifecycle = definition.lifecycle || {};\n // build a list of ancestral custom elements (for native base detection)\n // TO DO(sjmiles): we used to need to store this, but current code only\n // uses i t in 'resolveTagName': it should probably be inlined\n definition.ancestry = ancestry(definition.extends);\n // extensions of native specializations of HT MLElement require localName\n // to remain native, and use secondary 'is' spe cifier for extension type\n resolveTagName(definition);\n // some platform s require modifications to the user-supplied prototype\n // chain\n resolv ePrototypeChain(definition);\n // overrides to implement attributeChanged cal lback\n overrideAttributeApi(definition.prototype);\n // 7.1.5: Register t he DEFINITION with DOCUMENT\n registerDefinition(definition.__name, definitio n);\n // 7.1.7. Run custom element constructor generation algorithm with PROT OTYPE\n // 7.1.8. Return the output of the previous step.\n definition.cto r = generateConstructor(definition);\n definition.ctor.prototype = definition .prototype;\n // force our .constructor to be our actual constructor\n def inition.prototype.constructor = definition.ctor;\n // if initial parsing is c omplete\n if (scope.ready) {\n // upgrade any pre-existing nodes of this type\n scope.upgradeDocumentTree(document);\n }\n return definition. ctor;\n }\n\n function ancestry(extnds) {\n var extendee = getRegisteredDef inition(extnds);\n if (extendee) {\n return ancestry(extendee.extends).c oncat([extendee]);\n }\n return [];\n }\n\n function resolveTagName(defi nition) {\n // if we are explicitly extending something, that thing is our\n // baseTag, unless it represents a custom component\n var baseTag = defini tion.extends;\n // if our ancestry includes custom components, we only have a \n // baseTag if one of them does\n for (var i=0, a; (a=definition.ancestr y[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our tag is our base Tag, if it exists, and otherwise just our name\n definition.tag = baseTag || definition.__name;\n if (baseTag) {\n // if there is a base tag, use sec ondary 'is' specifier\n definition.is = definition.__name;\n }\n }\n\n function resolvePrototypeChain(definition) {\n // if we don't support __prot o__ we need to locate the native level\n // prototype for precise mixing in\n if (!Object.__proto__) {\n // default prototype\n var nativeProtot ype = HTMLElement.prototype;\n // work out prototype when using type-extens ion\n if (definition.is) {\n var inst = document.createElement(defin ition.tag);\n nativePrototype = Object.getPrototypeOf(inst);\n }\n // ensure __proto__ reference is installed at each point on the prototype\n // chain.\n // NOTE: On platforms without __proto__, a mixin strategy is used instead\n // of prototype swizzling. In this case, this generated _ _proto__ provides\n // limited support for prototype traversal.\n var proto = definition.prototype, ancestor;\n while (proto && (proto !== native Prototype)) {\n var ancestor = Object.getPrototypeOf(proto);\n pro to.__proto__ = ancestor;\n proto = ancestor;\n }\n }\n // cach e this in case of mixin\n definition.native = nativePrototype;\n }\n\n // S ECTION 4\n\n function instantiate(definition) {\n // 4.a.1. Create a new obj ect that implements PROTOTYPE\n // 4.a.2. Let ELEMENT by this new object\n //\n // the custom element instantiation algorithm must also ensure that the \n // output is a valid DOM element with the proper wrapper in place.\n // \n return upgrade(domCreateElement(definition.tag), definition);\n }\n\n fu nction upgrade(element, definition) {\n // some definitions specify an 'is' a ttribute\n if (definition.is) {\n element.setAttribute('is', definition. is);\n }\n // remove 'unresolved' attr, which is a standin for :unresolved .\n element.removeAttribute('unresolved');\n // make 'element' implement d efinition.prototype\n implement(element, definition);\n // flag as upgrade d\n element.__upgraded__ = true;\n // lifecycle management\n created(el ement);\n // attachedCallback fires in tree order, call before recursing\n scope.insertedNode(element);\n // there should never be a shadow root on ele ment at this point\n scope.upgradeSubtree(element);\n // OUTPUT\n retur n element;\n }\n\n function implement(element, definition) {\n // prototype swizzling is best\n if (Object.__proto__) {\n element.__proto__ = defin ition.prototype;\n } else {\n // where above we can re-acquire inPrototy pe via\n // getPrototypeOf(Element), we cannot do so when\n // we use mixin, so we install a magic reference\n customMixin(element, definition.pr ototype, definition.native);\n element.__proto__ = definition.prototype;\n }\n }\n\n function customMixin(inTarget, inSrc, inNative) {\n // TODO(sj miles): 'used' allows us to only copy the 'youngest' version of\n // any prop erty. This set should be precalculated. We also need to\n // consider this fo r supporting 'super'.\n var used = {};\n // start with inSrc\n var p = inSrc;\n // sometimes the default is HTMLUnknownElement.prototype instead of\ n // HTMLElement.prototype, so we add a test\n // the idea is to avoid mix ing in native prototypes, so adding\n // the second test is WLOG\n while ( p !== inNative && p !== HTMLUnknownElement.prototype) {\n var keys = Object .getOwnPropertyNames(p);\n for (var i=0, k; k=keys[i]; i++) {\n if ( !used[k]) {\n Object.defineProperty(inTarget, k,\n Object. getOwnPropertyDescriptor(p, k));\n used[k] = 1;\n }\n }\n p = Object.getPrototypeOf(p);\n }\n }\n\n function created(element) {\n // invoke createdCallback\n if (element.createdCallback) {\n element .createdCallback();\n }\n }\n\n // attribute watching\n\n function overrid eAttributeApi(prototype) {\n // overrides to implement callbacks\n // TODO (sjmiles): should support access via .attributes NamedNodeMap\n // TODO(sjmil es): preserves user defined overrides, if any\n if (prototype.setAttribute._p olyfilled) {\n return;\n }\n var setAttribute = prototype.setAttribut e;\n prototype.setAttribute = function(name, value) {\n changeAttribute. call(this, name, value, setAttribute);\n }\n var removeAttribute = prototy pe.removeAttribute;\n prototype.removeAttribute = function(name) {\n cha ngeAttribute.call(this, name, null, removeAttribute);\n }\n prototype.setA ttribute._polyfilled = true;\n }\n\n // https://dvcs.w3.org/hg/webcomponents/r aw-file/tip/spec/custom/\n // index.html#dfn-attribute-changed-callback\n func tion changeAttribute(name, value, operation) {\n var oldValue = this.getAttri bute(name);\n operation.apply(this, arguments);\n var newValue = this.getA ttribute(name);\n if (this.attributeChangedCallback\n && (newValue !== oldValue)) {\n this.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n // element registry (maps tag names to definitions)\n\n var regi stry = {};\n\n function getRegisteredDefinition(name) {\n if (name) {\n return registry[name.toLowerCase()];\n }\n }\n\n function registerDefiniti on(name, definition) {\n registry[name] = definition;\n }\n\n function gene rateConstructor(definition) {\n return function() {\n return instantiate (definition);\n };\n }\n\n function createElement(tag, typeExtension) {\n // TODO(sjmiles): ignore 'tag' when using 'typeExtension', we could\n // er ror check it, or perhaps there should only ever be one argument\n var definit ion = getRegisteredDefinition(typeExtension || tag);\n if (definition) {\n if (tag == definition.tag && typeExtension == definition.is) {\n retur n new definition.ctor();\n }\n // Handle empty string for type extensi on.\n if (!typeExtension && !definition.is) {\n return new definitio n.ctor();\n }\n }\n\n if (typeExtension) {\n var element = creat eElement(tag);\n element.setAttribute('is', typeExtension);\n return e lement;\n }\n var element = domCreateElement(tag);\n // Custom tags sho uld be HTMLElements even if not upgraded.\n if (tag.indexOf('-') >= 0) {\n implement(element, HTMLElement);\n }\n return element;\n }\n\n functi on upgradeElement(element) {\n if (!element.__upgraded__ && (element.nodeType === Node.ELEMENT_NODE)) {\n var is = element.getAttribute('is');\n va r definition = getRegisteredDefinition(is || element.localName);\n if (defi nition) {\n if (is && definition.tag == element.localName) {\n r eturn upgrade(element, definition);\n } else if (!is && !definition.exten ds) {\n return upgrade(element, definition);\n }\n }\n } \n }\n\n function cloneNode(deep) {\n // call original clone\n var n = d omCloneNode.call(this, deep);\n // upgrade the element and subtree\n scope .upgradeAll(n);\n // return the clone\n return n;\n }\n // capture nativ e createElement before we override it\n\n var domCreateElement = document.creat eElement.bind(document);\n\n // capture native cloneNode before we override it\ n\n var domCloneNode = Node.prototype.cloneNode;\n\n // exports\n\n document. registerElement = register;\n document.createElement = createElement; // overri de\n Node.prototype.cloneNode = cloneNode; // override\n\n scope.registry = re gistry;\n\n /**\n * Upgrade an element to a custom element. Upgrading an elem ent\n * causes the custom prototype to be applied, an `is` attribute\n * to be attached (as needed), and invocation of the `readyCallback`.\n * `upgrade` does nothing if the element is already upgraded, or\n * if it matches no regis tered custom tag name.\n *\n * @method ugprade\n * @param {Element} elemen t The element to upgrade.\n * @return {Element} The upgraded element.\n */\n scope.upgrade = upgradeElement;\n}\n\n// bc\ndocument.register = document.regi sterElement;\n\nscope.hasNative = hasNative;\nscope.useNative = useNative;\n\n}) (window.CustomElements);\n",
162 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\n// import\n\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\n\n// highlander object for parsing a document tree\n\n var parser = {\n selectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n ],\n map: {\n link: 'parseLink'\n },\n parse: function(inDocument) {\n if ( !inDocument.__parsed) {\n // only parse once\n inDocument.__parsed = t rue;\n // all parsable elements in inDocument (depth-first pre-order traver sal)\n var elts = inDocument.querySelectorAll(parser.selectors);\n // for each parsable node type, call the mapped parsing method\n forEach(elts, function(e) {\n parser[parser.map[e.localName]](e);\n });\n // upgrade all upgradeable static elements, anything dynamically\n // created should be caught by observer\n CustomElements.upgradeDocument(inDocument); \n // observe document for dom changes\n CustomElements.observeDocumen t(inDocument);\n }\n },\n parseLink: function(linkElt) {\n // imports\n if (isDocumentLink(linkElt)) {\n this.parseImport(linkElt);\n }\n }, \n parseImport: function(linkElt) {\n if (linkElt.import) {\n parser.pa rse(linkElt.import);\n }\n }\n};\n\nfunction isDocumentLink(inElt) {\n retu rn (inElt.localName === 'link'\n && inElt.getAttribute('rel') === IMPORT_LI NK_TYPE);\n}\n\nvar forEach = Array.prototype.forEach.call.bind(Array.prototype. forEach);\n\n// exports\n\nscope.parser = parser;\nscope.IMPORT_LINK_TYPE = IMPO RT_LINK_TYPE;\n\n})(window.CustomElements);", 162 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\n// import\n\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\n\n// highlander object for parsing a document tree\n\n var parser = {\n selectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n ],\n map: {\n link: 'parseLink'\n },\n parse: function(inDocument) {\n if ( !inDocument.__parsed) {\n // only parse once\n inDocument.__parsed = t rue;\n // all parsable elements in inDocument (depth-first pre-order traver sal)\n var elts = inDocument.querySelectorAll(parser.selectors);\n // for each parsable node type, call the mapped parsing method\n forEach(elts, function(e) {\n parser[parser.map[e.localName]](e);\n });\n // upgrade all upgradeable static elements, anything dynamically\n // created should be caught by observer\n CustomElements.upgradeDocument(inDocument); \n // observe document for dom changes\n CustomElements.observeDocumen t(inDocument);\n }\n },\n parseLink: function(linkElt) {\n // imports\n if (isDocumentLink(linkElt)) {\n this.parseImport(linkElt);\n }\n }, \n parseImport: function(linkElt) {\n if (linkElt.import) {\n parser.pa rse(linkElt.import);\n }\n }\n};\n\nfunction isDocumentLink(inElt) {\n retu rn (inElt.localName === 'link'\n && inElt.getAttribute('rel') === IMPORT_LI NK_TYPE);\n}\n\nvar forEach = Array.prototype.forEach.call.bind(Array.prototype. forEach);\n\n// exports\n\nscope.parser = parser;\nscope.IMPORT_LINK_TYPE = IMPO RT_LINK_TYPE;\n\n})(window.CustomElements);",
163 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope){\n\n// bootstrap parsing\nfunction bootstr ap() {\n // parse document\n CustomElements.parser.parse(document);\n // one more pass before register is 'live'\n CustomElements.upgradeDocument(document); \n // choose async\n var async = window.Platform && Platform.endOfMicrotask ? \n Platform.endOfMicrotask :\n setTimeout;\n async(function() {\n // s et internal 'ready' flag, now document.registerElement will trigger \n // syn chronous upgrades\n CustomElements.ready = true;\n // capture blunt profil ing data\n CustomElements.readyTime = Date.now();\n if (window.HTMLImports ) {\n CustomElements.elapsed = CustomElements.readyTime - HTMLImports.ready Time;\n }\n // notify the system that we are bootstrapped\n document.di spatchEvent(\n new CustomEvent('WebComponentsReady', {bubbles: true})\n );\n\n // install upgrade hook if HTMLImports are available\n if (window.H TMLImports) {\n HTMLImports.__importsParsingHook = function(elt) {\n CustomElements.parser.parse(elt.import);\n }\n }\n });\n}\n\n// Custom Event shim for IE\nif (typeof window.CustomEvent !== 'function') {\n window.Cus tomEvent = function(inType) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(inType, true, true);\n return e;\n };\n}\n\n// When loading at readyState complete time (or via flag), boot custom elements\n// immediately. \n// If relevant, HTMLImports must already be loaded.\nif (document.readyState = == 'complete' || scope.flags.eager) {\n bootstrap();\n// When loading at readyS tate interactive time, bootstrap only if HTMLImports\n// are not pending. Also a void IE as the semantics of this state are unreliable.\n} else if (document.read yState === 'interactive' && !window.attachEvent &&\n (!window.HTMLImports || window.HTMLImports.ready)) {\n bootstrap();\n// When loading at other readyStat es, wait for the appropriate DOM event to \n// bootstrap.\n} else {\n var loadE vent = window.HTMLImports && !HTMLImports.ready ?\n 'HTMLImportsLoaded' : ' DOMContentLoaded';\n window.addEventListener(loadEvent, bootstrap);\n}\n\n})(wi ndow.CustomElements);\n", 163 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope){\n\n// bootstrap parsing\nfunction bootstr ap() {\n // parse document\n CustomElements.parser.parse(document);\n // one more pass before register is 'live'\n CustomElements.upgradeDocument(document); \n // choose async\n var async = window.Platform && Platform.endOfMicrotask ? \n Platform.endOfMicrotask :\n setTimeout;\n async(function() {\n // s et internal 'ready' flag, now document.registerElement will trigger \n // syn chronous upgrades\n CustomElements.ready = true;\n // capture blunt profil ing data\n CustomElements.readyTime = Date.now();\n if (window.HTMLImports ) {\n CustomElements.elapsed = CustomElements.readyTime - HTMLImports.ready Time;\n }\n // notify the system that we are bootstrapped\n document.di spatchEvent(\n new CustomEvent('WebComponentsReady', {bubbles: true})\n );\n\n // install upgrade hook if HTMLImports are available\n if (window.H TMLImports) {\n HTMLImports.__importsParsingHook = function(elt) {\n CustomElements.parser.parse(elt.import);\n }\n }\n });\n}\n\n// Custom Event shim for IE\nif (typeof window.CustomEvent !== 'function') {\n window.Cus tomEvent = function(inType) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(inType, true, true);\n return e;\n };\n}\n\n// When loading at readyState complete time (or via flag), boot custom elements\n// immediately. \n// If relevant, HTMLImports must already be loaded.\nif (document.readyState = == 'complete' || scope.flags.eager) {\n bootstrap();\n// When loading at readyS tate interactive time, bootstrap only if HTMLImports\n// are not pending. Also a void IE as the semantics of this state are unreliable.\n} else if (document.read yState === 'interactive' && !window.attachEvent &&\n (!window.HTMLImports || window.HTMLImports.ready)) {\n bootstrap();\n// When loading at other readyStat es, wait for the appropriate DOM event to \n// bootstrap.\n} else {\n var loadE vent = window.HTMLImports && !HTMLImports.ready ?\n 'HTMLImportsLoaded' : ' DOMContentLoaded';\n window.addEventListener(loadEvent, bootstrap);\n}\n\n})(wi ndow.CustomElements);\n",
164 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function() {\n\n// inject style sheet\nvar style = documen t.createElement('style');\nstyle.textContent = 'element {display: none !importan t;} /* injected by platform.js */';\nvar head = document.querySelector('head');\ nhead.insertBefore(style, head.firstChild);\n\nif (window.ShadowDOMPolyfill) {\n \n // ensure wrapped inputs for these functions\n var fns = ['upgradeAll', 'up gradeSubtree', 'observeDocument',\n 'upgradeDocument'];\n\n // cache origi nals\n var original = {};\n fns.forEach(function(fn) {\n original[fn] = Cus tomElements[fn];\n });\n\n // override\n fns.forEach(function(fn) {\n Cust omElements[fn] = function(inNode) {\n return original[fn](wrap(inNode));\n };\n });\n\n}\n\n})();\n", 164 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function() {\n\n// inject style sheet\nvar style = documen t.createElement('style');\nstyle.textContent = 'element {display: none !importan t;} /* injected by platform.js */';\nvar head = document.querySelector('head');\ nhead.insertBefore(style, head.firstChild);\n\nif (window.ShadowDOMPolyfill) {\n \n // ensure wrapped inputs for these functions\n var fns = ['upgradeAll', 'up gradeSubtree', 'observeDocument',\n 'upgradeDocument'];\n\n // cache origi nals\n var original = {};\n fns.forEach(function(fn) {\n original[fn] = Cus tomElements[fn];\n });\n\n // override\n fns.forEach(function(fn) {\n Cust omElements[fn] = function(inNode) {\n return original[fn](wrap(inNode));\n };\n });\n\n}\n\n})();\n",
165 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\nvar STYLE_SELECTOR = 'style';\n\nvar urlResolver = scope.urlResolver;\n\nvar loader = {\n cacheStyles: function(styl es, callback) {\n var css = [];\n for (var i=0, l=styles.length, s; (i<l) && (s=styles[i]); i++) {\n css.push(s.textContent);\n }\n cacheCssTex t(css.join('\\n'), callback);\n },\n xhrStyles: function(styles, callback) {\n var loaded=0, l = styles.length;\n // called in the context of the style\ n function loadedStyle(style) {\n //console.log(style.textContent);\n loaded++;\n if (loaded === l && callback) {\n callback();\n }\n }\n for (var i=0, s; (i<l) && (s=styles[i]); i++) {\n xhrLoadStyl e(s, loadedStyle);\n }\n }\n};\n\n// use the platform to preload styles\nvar preloadElement = document.createElement('preloader');\npreloadElement.style.dis play = 'none';\nvar preloadRoot = preloadElement.createShadowRoot();\ndocument.h ead.appendChild(preloadElement);\n\nfunction cacheCssText(cssText, callback) {\n var style = createStyleElement(cssText);\n if (callback) {\n style.addEven tListener('load', callback);\n style.addEventListener('error', callback);\n }\n preloadRoot.appendChild(style);\n}\n\nfunction createStyleElement(cssText, scope) {\n scope = scope || document;\n scope = scope.createElement ? scope : scope.ownerDocument;\n var style = scope.createElement('style');\n style.textC ontent = cssText;\n return style;\n}\n\n// TODO(sorvell): use a common loader s hared with HTMLImports polyfill\n// currently, this just loads the first @import per style element \n// and does not recurse into loaded elements; we'll address this with a \n// generalized loader that's built out of the one in the HTMLImpo rts polyfill.\n// polyfill the loading of a style element's @import via xhr\nfun ction xhrLoadStyle(style, callback) {\n HTMLImports.xhr.load(atImportUrlFromSty le(style), function (err, resource,\n url) {\n replaceAtImportWithCssTex t(this, url, resource);\n this.textContent = urlResolver.resolveCssText(this. textContent, url);\n callback && callback(this);\n }, style);\n}\n\nvar atIm portRe = /@import\\s[(]?['\"]?([^\\s'\";)]*)/;\n\n// get the first @import rule from a style\nfunction atImportUrlFromStyle(style) {\n var matches = style.text Content.match(atImportRe);\n return matches && matches[1];\n}\n\nfunction repla ceAtImportWithCssText(style, url, cssText) {\n var re = new RegExp('@import[^;] *' + url + '[^;]*;', 'i');\n style.textContent = style.textContent.replace(re, cssText);\n}\n\n// exports\nscope.loader = loader;\n\n})(window.Platform);\n", 165 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\nvar STYLE_SELECTOR = 'style';\n\nvar urlResolver = scope.urlResolver;\n\nvar loader = {\n cacheStyles: function(styl es, callback) {\n var css = [];\n for (var i=0, l=styles.length, s; (i<l) && (s=styles[i]); i++) {\n css.push(s.textContent);\n }\n cacheCssTex t(css.join('\\n'), callback);\n },\n xhrStyles: function(styles, callback) {\n var loaded=0, l = styles.length;\n // called in the context of the style\ n function loadedStyle(style) {\n //console.log(style.textContent);\n loaded++;\n if (loaded === l && callback) {\n callback();\n }\n }\n for (var i=0, s; (i<l) && (s=styles[i]); i++) {\n xhrLoadStyl e(s, loadedStyle);\n }\n }\n};\n\n// use the platform to preload styles\nvar preloadElement = document.createElement('preloader');\npreloadElement.style.dis play = 'none';\nvar preloadRoot = preloadElement.createShadowRoot();\ndocument.h ead.appendChild(preloadElement);\n\nfunction cacheCssText(cssText, callback) {\n var style = createStyleElement(cssText);\n if (callback) {\n style.addEven tListener('load', callback);\n style.addEventListener('error', callback);\n }\n preloadRoot.appendChild(style);\n}\n\nfunction createStyleElement(cssText, scope) {\n scope = scope || document;\n scope = scope.createElement ? scope : scope.ownerDocument;\n var style = scope.createElement('style');\n style.textC ontent = cssText;\n return style;\n}\n\n// TODO(sorvell): use a common loader s hared with HTMLImports polyfill\n// currently, this just loads the first @import per style element \n// and does not recurse into loaded elements; we'll address this with a \n// generalized loader that's built out of the one in the HTMLImpo rts polyfill.\n// polyfill the loading of a style element's @import via xhr\nfun ction xhrLoadStyle(style, callback) {\n HTMLImports.xhr.load(atImportUrlFromSty le(style), function (err, resource,\n url) {\n replaceAtImportWithCssTex t(this, url, resource);\n this.textContent = urlResolver.resolveCssText(this. textContent, url);\n callback && callback(this);\n }, style);\n}\n\nvar atIm portRe = /@import\\s[(]?['\"]?([^\\s'\";)]*)/;\n\n// get the first @import rule from a style\nfunction atImportUrlFromStyle(style) {\n var matches = style.text Content.match(atImportRe);\n return matches && matches[1];\n}\n\nfunction repla ceAtImportWithCssText(style, url, cssText) {\n var re = new RegExp('@import[^;] *' + url + '[^;]*;', 'i');\n style.textContent = style.textContent.replace(re, cssText);\n}\n\n// exports\nscope.loader = loader;\n\n})(window.Platform);\n",
166 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n scope = scope || {};\n scope.exter nal = scope.external || {};\n var target = {\n shadow: function(inEl) {\n if (inEl) {\n return inEl.shadowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(shadow) {\n return shadow && Boolean(sha dow.elementFromPoint);\n },\n targetingShadow: function(inEl) {\n var s = this.shadow(inEl);\n if (this.canTarget(s)) {\n return s;\n }\n },\n olderShadow: function(shadow) {\n var os = shadow.olderSha dowRoot;\n if (!os) {\n var se = shadow.querySelector('shadow');\n if (se) {\n os = se.olderShadowRoot;\n }\n }\n r eturn os;\n },\n allShadows: function(element) {\n var shadows = [], s = this.shadow(element);\n while(s) {\n shadows.push(s);\n s = this.olderShadow(s);\n }\n return shadows;\n },\n searchRoot: function(inRoot, x, y) {\n if (inRoot) {\n var t = inRoot.elementFr omPoint(x, y);\n var st, sr, os;\n // is element a shadow host?\n sr = this.targetingShadow(t);\n while (sr) {\n // find th e the element inside the shadow root\n st = sr.elementFromPoint(x, y);\ n if (!st) {\n // check for older shadows\n sr = this.olderShadow(sr);\n } else {\n // shadowed element may c ontain a shadow root\n var ssr = this.targetingShadow(st);\n return this.searchRoot(ssr, x, y) || st;\n }\n }\n // light dom element is the target\n return t;\n }\n },\n owner: function(element) {\n var s = element;\n // walk up until you hit the shadow root or document\n while (s.parentNode) {\n s = s.parentNode; \n }\n // the owner element is expected to be a Document or ShadowRoot \n if (s.nodeType != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAG MENT_NODE) {\n s = document;\n }\n return s;\n },\n findT arget: function(inEvent) {\n var x = inEvent.clientX, y = inEvent.clientY;\ n // if the listener is in the shadow root, it is much faster to start ther e\n var s = this.owner(inEvent.target);\n // if x, y is not in this ro ot, fall back to document search\n if (!s.elementFromPoint(x, y)) {\n s = document;\n }\n return this.searchRoot(s, x, y);\n }\n };\n scope.targetFinding = target;\n scope.findTarget = target.findTarget.bind(targ et);\n\n window.PointerEventsPolyfill = scope;\n})(window.PointerEventsPolyfill );\n", 166 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n scope = scope || {};\n scope.exter nal = scope.external || {};\n var target = {\n shadow: function(inEl) {\n if (inEl) {\n return inEl.shadowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(shadow) {\n return shadow && Boolean(sha dow.elementFromPoint);\n },\n targetingShadow: function(inEl) {\n var s = this.shadow(inEl);\n if (this.canTarget(s)) {\n return s;\n }\n },\n olderShadow: function(shadow) {\n var os = shadow.olderSha dowRoot;\n if (!os) {\n var se = shadow.querySelector('shadow');\n if (se) {\n os = se.olderShadowRoot;\n }\n }\n r eturn os;\n },\n allShadows: function(element) {\n var shadows = [], s = this.shadow(element);\n while(s) {\n shadows.push(s);\n s = this.olderShadow(s);\n }\n return shadows;\n },\n searchRoot: function(inRoot, x, y) {\n if (inRoot) {\n var t = inRoot.elementFr omPoint(x, y);\n var st, sr, os;\n // is element a shadow host?\n sr = this.targetingShadow(t);\n while (sr) {\n // find th e the element inside the shadow root\n st = sr.elementFromPoint(x, y);\ n if (!st) {\n // check for older shadows\n sr = this.olderShadow(sr);\n } else {\n // shadowed element may c ontain a shadow root\n var ssr = this.targetingShadow(st);\n return this.searchRoot(ssr, x, y) || st;\n }\n }\n // light dom element is the target\n return t;\n }\n },\n owner: function(element) {\n var s = element;\n // walk up until you hit the shadow root or document\n while (s.parentNode) {\n s = s.parentNode; \n }\n // the owner element is expected to be a Document or ShadowRoot \n if (s.nodeType != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAG MENT_NODE) {\n s = document;\n }\n return s;\n },\n findT arget: function(inEvent) {\n var x = inEvent.clientX, y = inEvent.clientY;\ n // if the listener is in the shadow root, it is much faster to start ther e\n var s = this.owner(inEvent.target);\n // if x, y is not in this ro ot, fall back to document search\n if (!s.elementFromPoint(x, y)) {\n s = document;\n }\n return this.searchRoot(s, x, y);\n }\n };\n scope.targetFinding = target;\n scope.findTarget = target.findTarget.bind(targ et);\n\n window.PointerEventsPolyfill = scope;\n})(window.PointerEventsPolyfill );\n",
167 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function() {\n function shadowSelector(v) {\n return ' body ^^ ' + selector(v);\n }\n function selector(v) {\n return '[touch-acti on=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + '; touch-action-delay: none; }';\n }\n var at trib2css = [\n 'none',\n 'auto',\n 'pan-x',\n 'pan-y',\n {\n rule: 'pan-x pan-y',\n selectors: [\n 'pan-x pan-y',\n 'pan- y pan-x'\n ]\n }\n ];\n var styles = '';\n attrib2css.forEach(functio n(r) {\n if (String(r) === r) {\n styles += selector(r) + rule(r) + '\\n ';\n styles += shadowSelector(r) + rule(r) + '\\n';\n } else {\n st yles += r.selectors.map(selector) + rule(r.rule) + '\\n';\n styles += r.sel ectors.map(shadowSelector) + rule(r.rule) + '\\n';\n }\n });\n var el = doc ument.createElement('style');\n el.textContent = styles;\n document.head.appen dChild(el);\n})();\n", 167 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function() {\n function shadowSelector(v) {\n return ' body ^^ ' + selector(v);\n }\n function selector(v) {\n return '[touch-acti on=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + '; touch-action-delay: none; }';\n }\n var at trib2css = [\n 'none',\n 'auto',\n 'pan-x',\n 'pan-y',\n {\n rule: 'pan-x pan-y',\n selectors: [\n 'pan-x pan-y',\n 'pan- y pan-x'\n ]\n }\n ];\n var styles = '';\n attrib2css.forEach(functio n(r) {\n if (String(r) === r) {\n styles += selector(r) + rule(r) + '\\n ';\n styles += shadowSelector(r) + rule(r) + '\\n';\n } else {\n st yles += r.selectors.map(selector) + rule(r.rule) + '\\n';\n styles += r.sel ectors.map(shadowSelector) + rule(r.rule) + '\\n';\n }\n });\n var el = doc ument.createElement('style');\n el.textContent = styles;\n document.head.appen dChild(el);\n})();\n",
168 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This is the constructor for new PointerEvents.\n *\n * New Pointer Events must be given a type, and an optional dictionary of\n * initialization properties.\n *\n * Due to certain platform requirements, events returned from the constructor\n * identify as MouseEvents.\n *\n * @constructor \n * @param {String} inType The type of the event to create.\n * @param {Object} [inDict] An optional dictionary of initial event properties.\n * @return {Event } A new PointerEvent of type `inType` and initialized with properties from `inDi ct`.\n */\n(function(scope) {\n // test for DOM Level 4 Events\n var NEW_MOUSE _EVENT = false;\n var HAS_BUTTONS = false;\n try {\n var ev = new MouseEven t('click', {buttons: 1});\n NEW_MOUSE_EVENT = true;\n HAS_BUTTONS = ev.but tons === 1;\n } catch(e) {\n }\n\n var MOUSE_PROPS = [\n 'bubbles',\n ' cancelable',\n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'c lientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'm etaKey',\n 'button',\n 'relatedTarget',\n ];\n\n var MOUSE_DEFAULTS = [\ n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null\n ];\n\n funct ion PointerEvent(inType, inDict) {\n inDict = inDict || {};\n // According to the w3c spec,\n // http://www.w3.org/TR/DOM-Level-3-Events/#events-MouseE vent-button\n // MouseEvent.button == 0 can mean either no mouse button depre ssed, or the\n // left mouse button depressed.\n //\n // As of now, the only way to distinguish between the two states of\n // MouseEvent.button is by using the deprecated MouseEvent.which property, as\n // this maps mouse bu ttons to positive integers > 0, and uses 0 to mean that\n // no mouse button is held.\n //\n // MouseEvent.which is derived from MouseEvent.button at M ouseEvent creation,\n // but initMouseEvent does not expose an argument with which to set\n // MouseEvent.which. Calling initMouseEvent with a buttonArg o f 0 will set\n // MouseEvent.button == 0 and MouseEvent.which == 1, breaking the expectations\n // of app developers.\n //\n // The only way to prop agate the correct state of MouseEvent.which and\n // MouseEvent.button to a n ew MouseEvent.button == 0 and MouseEvent.which == 0\n // is to call initMouse Event with a buttonArg value of -1.\n //\n // This is fixed with DOM Level 4's use of buttons\n var buttons;\n if (inDict.buttons || HAS_BUTTONS) {\ n buttons = inDict.buttons;\n } else {\n switch (inDict.which) {\n case 1: buttons = 1; break;\n case 2: buttons = 4; break;\n case 3: buttons = 2; break;\n default: buttons = 0;\n }\n }\n\n var e;\n if (NEW_MOUSE_EVENT) {\n e = new MouseEvent(inType, inDict); \n } else {\n e = document.createEvent('MouseEvent');\n\n // import values from the given dictionary\n var props = {}, p;\n for(var i = 0 ; i < MOUSE_PROPS.length; i++) {\n p = MOUSE_PROPS[i];\n props[p] = inDict[p] || MOUSE_DEFAULTS[i];\n }\n\n // define the properties inh erited from MouseEvent\n e.initMouseEvent(\n inType, props.bubbles, props.cancelable, props.view, props.detail,\n props.screenX, props.screen Y, props.clientX, props.clientY, props.ctrlKey,\n props.altKey, props.shi ftKey, props.metaKey, props.button, props.relatedTarget\n );\n }\n\n // make the event pass instanceof checks\n e.__proto__ = PointerEvent.prototy pe;\n\n // define the buttons property according to DOM Level 3 spec\n if (!HAS_BUTTONS) {\n // IE 10 has buttons on MouseEvent.prototype as a getter w/o any setting\n // mechanism\n Object.defineProperty(e, 'buttons', {get: function(){ return buttons; }, enumerable: true});\n }\n\n // Spec r equires that pointers without pressure specified use 0.5 for down\n // state and 0 for up state.\n var pressure = 0;\n if (inDict.pressure) {\n pr essure = inDict.pressure;\n } else {\n pressure = buttons ? 0.5 : 0;\n }\n\n // define the properties of the PointerEvent interface\n Object.de fineProperties(e, {\n pointerId: { value: inDict.pointerId || 0, enumerable : true },\n width: { value: inDict.width || 0, enumerable: true },\n h eight: { value: inDict.height || 0, enumerable: true },\n pressure: { value : pressure, enumerable: true },\n tiltX: { value: inDict.tiltX || 0, enumer able: true },\n tiltY: { value: inDict.tiltY || 0, enumerable: true },\n pointerType: { value: inDict.pointerType || '', enumerable: true },\n hw Timestamp: { value: inDict.hwTimestamp || 0, enumerable: true },\n isPrimar y: { value: inDict.isPrimary || false, enumerable: true }\n });\n return e ;\n }\n\n // PointerEvent extends MouseEvent\n PointerEvent.prototype = Objec t.create(MouseEvent.prototype);\n\n // attach to window\n if (!scope.PointerEv ent) {\n scope.PointerEvent = PointerEvent;\n }\n})(window);\n", 168 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This is the constructor for new PointerEvents.\n *\n * New Pointer Events must be given a type, and an optional dictionary of\n * initialization properties.\n *\n * Due to certain platform requirements, events returned from the constructor\n * identify as MouseEvents.\n *\n * @constructor \n * @param {String} inType The type of the event to create.\n * @param {Object} [inDict] An optional dictionary of initial event properties.\n * @return {Event } A new PointerEvent of type `inType` and initialized with properties from `inDi ct`.\n */\n(function(scope) {\n // test for DOM Level 4 Events\n var NEW_MOUSE _EVENT = false;\n var HAS_BUTTONS = false;\n try {\n var ev = new MouseEven t('click', {buttons: 1});\n NEW_MOUSE_EVENT = true;\n HAS_BUTTONS = ev.but tons === 1;\n } catch(e) {\n }\n\n var MOUSE_PROPS = [\n 'bubbles',\n ' cancelable',\n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'c lientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'm etaKey',\n 'button',\n 'relatedTarget',\n ];\n\n var MOUSE_DEFAULTS = [\ n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null\n ];\n\n funct ion PointerEvent(inType, inDict) {\n inDict = inDict || {};\n // According to the w3c spec,\n // http://www.w3.org/TR/DOM-Level-3-Events/#events-MouseE vent-button\n // MouseEvent.button == 0 can mean either no mouse button depre ssed, or the\n // left mouse button depressed.\n //\n // As of now, the only way to distinguish between the two states of\n // MouseEvent.button is by using the deprecated MouseEvent.which property, as\n // this maps mouse bu ttons to positive integers > 0, and uses 0 to mean that\n // no mouse button is held.\n //\n // MouseEvent.which is derived from MouseEvent.button at M ouseEvent creation,\n // but initMouseEvent does not expose an argument with which to set\n // MouseEvent.which. Calling initMouseEvent with a buttonArg o f 0 will set\n // MouseEvent.button == 0 and MouseEvent.which == 1, breaking the expectations\n // of app developers.\n //\n // The only way to prop agate the correct state of MouseEvent.which and\n // MouseEvent.button to a n ew MouseEvent.button == 0 and MouseEvent.which == 0\n // is to call initMouse Event with a buttonArg value of -1.\n //\n // This is fixed with DOM Level 4's use of buttons\n var buttons;\n if (inDict.buttons || HAS_BUTTONS) {\ n buttons = inDict.buttons;\n } else {\n switch (inDict.which) {\n case 1: buttons = 1; break;\n case 2: buttons = 4; break;\n case 3: buttons = 2; break;\n default: buttons = 0;\n }\n }\n\n var e;\n if (NEW_MOUSE_EVENT) {\n e = new MouseEvent(inType, inDict); \n } else {\n e = document.createEvent('MouseEvent');\n\n // import values from the given dictionary\n var props = {}, p;\n for(var i = 0 ; i < MOUSE_PROPS.length; i++) {\n p = MOUSE_PROPS[i];\n props[p] = inDict[p] || MOUSE_DEFAULTS[i];\n }\n\n // define the properties inh erited from MouseEvent\n e.initMouseEvent(\n inType, props.bubbles, props.cancelable, props.view, props.detail,\n props.screenX, props.screen Y, props.clientX, props.clientY, props.ctrlKey,\n props.altKey, props.shi ftKey, props.metaKey, props.button, props.relatedTarget\n );\n }\n\n // make the event pass instanceof checks\n e.__proto__ = PointerEvent.prototy pe;\n\n // define the buttons property according to DOM Level 3 spec\n if (!HAS_BUTTONS) {\n // IE 10 has buttons on MouseEvent.prototype as a getter w/o any setting\n // mechanism\n Object.defineProperty(e, 'buttons', {get: function(){ return buttons; }, enumerable: true});\n }\n\n // Spec r equires that pointers without pressure specified use 0.5 for down\n // state and 0 for up state.\n var pressure = 0;\n if (inDict.pressure) {\n pr essure = inDict.pressure;\n } else {\n pressure = buttons ? 0.5 : 0;\n }\n\n // define the properties of the PointerEvent interface\n Object.de fineProperties(e, {\n pointerId: { value: inDict.pointerId || 0, enumerable : true },\n width: { value: inDict.width || 0, enumerable: true },\n h eight: { value: inDict.height || 0, enumerable: true },\n pressure: { value : pressure, enumerable: true },\n tiltX: { value: inDict.tiltX || 0, enumer able: true },\n tiltY: { value: inDict.tiltY || 0, enumerable: true },\n pointerType: { value: inDict.pointerType || '', enumerable: true },\n hw Timestamp: { value: inDict.hwTimestamp || 0, enumerable: true },\n isPrimar y: { value: inDict.isPrimary || false, enumerable: true }\n });\n return e ;\n }\n\n // PointerEvent extends MouseEvent\n PointerEvent.prototype = Objec t.create(MouseEvent.prototype);\n\n // attach to window\n if (!scope.PointerEv ent) {\n scope.PointerEvent = PointerEvent;\n }\n})(window);\n",
169 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This module implements an map of pointer states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forE ach;\n var POINTERS_FN = function(){ return this.size; };\n function PointerMa p() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS _FN;\n return m;\n } else {\n this.keys = [];\n this.values = [];\n }\n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.val ues[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.v alues.push(inEvent);\n }\n },\n has: function(inId) {\n return t his.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1 );\n this.values.splice(i, 1);\n }\n },\n get: function(inId) {\n var i = this.keys.indexOf(inId);\n return this.values[i];\n },\ n clear: function() {\n this.keys.length = 0;\n this.values.length = 0;\n },\n // return value, key, map\n forEach: function(callback, thi sArg) {\n this.values.forEach(function(v, i) {\n callback.call(thisA rg, v, this.keys[i], this);\n }, this);\n },\n pointers: function() { \n return this.keys.length;\n }\n };\n\n scope.PointerMap = PointerMap ;\n})(window.PointerEventsPolyfill);\n", 169 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This module implements an map of pointer states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forE ach;\n var POINTERS_FN = function(){ return this.size; };\n function PointerMa p() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS _FN;\n return m;\n } else {\n this.keys = [];\n this.values = [];\n }\n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.val ues[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.v alues.push(inEvent);\n }\n },\n has: function(inId) {\n return t his.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1 );\n this.values.splice(i, 1);\n }\n },\n get: function(inId) {\n var i = this.keys.indexOf(inId);\n return this.values[i];\n },\ n clear: function() {\n this.keys.length = 0;\n this.values.length = 0;\n },\n // return value, key, map\n forEach: function(callback, thi sArg) {\n this.values.forEach(function(v, i) {\n callback.call(thisA rg, v, this.keys[i], this);\n }, this);\n },\n pointers: function() { \n return this.keys.length;\n }\n };\n\n scope.PointerMap = PointerMap ;\n})(window.PointerEventsPolyfill);\n",
170 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEv ent\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX ',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey' ,\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width', \n 'height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType', \n 'hwTimestamp',\n 'isPrimary',\n // event instance\n 'type',\n 'target',\n 'currentTarget',\n 'which'\n ];\n\n var CLONE_DEFAULTS = [\n // MouseEvent\n false,\n false,\n null,\n null,\n 0,\n 0,\ n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n nul l,\n // DOM Level 3\n 0,\n // PointerEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n false,\n // event instance\n '', \n null,\n null,\n 0\n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGEleme ntInstance !== 'undefined');\n\n /**\n * This module is for normalizing event s. Mouse and Touch events will be\n * collected here, and fire PointerEvents t hat have the same semantics, no\n * matter the source.\n * Events fired:\n * - pointerdown: a pointing is added\n * - pointerup: a pointer is remove d\n * - pointermove: a pointer is moved\n * - pointerover: a pointer cro sses into an element\n * - pointerout: a pointer leaves an element\n * - pointercancel: a pointer will no longer generate events\n */\n var dispatche r = {\n targets: new WeakMap(),\n handledEvents: new WeakMap(),\n point ermap: new scope.PointerMap(),\n eventMap: {},\n // Scope objects for nati ve events.\n // This exists for ease of testing.\n eventSources: {},\n eventSourceList: [],\n /**\n * Add a new event source that will generate pointer events.\n *\n * `inSource` must contain an array of event names named `events`, and\n * functions with the names specified in the `events` a rray.\n * @param {string} name A name for the event source\n * @param {O bject} source A new source of platform events.\n */\n registerSource: fun ction(name, source) {\n var s = source;\n var newEvents = s.events;\n if (newEvents) {\n newEvents.forEach(function(e) {\n if (s[ e]) {\n this.eventMap[e] = s[e].bind(s);\n }\n }, thi s);\n this.eventSources[name] = s;\n this.eventSourceList.push(s); \n }\n },\n register: function(element) {\n var l = this.eventSo urceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventSourceLis t[i]); i++) {\n // call eventsource register\n es.register.call(es , element);\n }\n },\n unregister: function(element) {\n var l = this.eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.e ventSourceList[i]); i++) {\n // call eventsource register\n es.unr egister.call(es, element);\n }\n },\n contains: scope.external.contai ns || function(container, contained) {\n return container.contains(containe d);\n },\n // EVENTS\n down: function(inEvent) {\n this.fireEvent( 'pointerdown', inEvent);\n },\n move: function(inEvent) {\n this.fire Event('pointermove', inEvent);\n },\n up: function(inEvent) {\n this. fireEvent('pointerup', inEvent);\n },\n enter: function(inEvent) {\n inEvent.bubbles = false;\n this.fireEvent('pointerenter', inEvent);\n }, \n leave: function(inEvent) {\n inEvent.bubbles = false;\n this.fir eEvent('pointerleave', inEvent);\n },\n over: function(inEvent) {\n i nEvent.bubbles = true;\n this.fireEvent('pointerover', inEvent);\n },\n out: function(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent ('pointerout', inEvent);\n },\n cancel: function(inEvent) {\n this.fi reEvent('pointercancel', inEvent);\n },\n leaveOut: function(event) {\n this.out(event);\n if (!this.contains(event.target, event.relatedTarget) ) {\n this.leave(event);\n }\n },\n enterOver: function(event) {\n this.over(event);\n if (!this.contains(event.target, event.relate dTarget)) {\n this.enter(event);\n }\n },\n // LISTENER LOGIC\ n eventHandler: function(inEvent) {\n // This is used to prevent multipl e dispatch of pointerevents from\n // platform events. This can happen when two elements in different scopes\n // are set up to create pointer events, which is relevant to Shadow DOM.\n if (this.handledEvents.get(inEvent)) {\ n return;\n }\n var type = inEvent.type;\n var fn = this.e ventMap && this.eventMap[type];\n if (fn) {\n fn(inEvent);\n }\ n this.handledEvents.set(inEvent, true);\n },\n // set up event liste ners\n listen: function(target, events) {\n events.forEach(function(e) { \n this.addEvent(target, e);\n }, this);\n },\n // remove even t listeners\n unlisten: function(target, events) {\n events.forEach(func tion(e) {\n this.removeEvent(target, e);\n }, this);\n },\n ad dEvent: scope.external.addEvent || function(target, eventName) {\n target.a ddEventListener(eventName, this.boundHandler);\n },\n removeEvent: scope.e xternal.removeEvent || function(target, eventName) {\n target.removeEventLi stener(eventName, this.boundHandler);\n },\n // EVENT CREATION AND TRACKIN G\n /**\n * Creates a new Event of type `inType`, based on the informatio n in\n * `inEvent`.\n *\n * @param {string} inType A string represen ting the type of event to create\n * @param {Event} inEvent A platform event with a target\n * @return {Event} A PointerEvent of type `inType`\n */\ n makeEvent: function(inType, inEvent) {\n // relatedTarget must be null if pointer is captured\n if (this.captureInfo) {\n inEvent.relatedT arget = null;\n }\n var e = new PointerEvent(inType, inEvent);\n if (inEvent.preventDefault) {\n e.preventDefault = inEvent.preventDefault ;\n }\n this.targets.set(e, this.targets.get(inEvent) || inEvent.targe t);\n return e;\n },\n // make and dispatch an event in one call\n fireEvent: function(inType, inEvent) {\n var e = this.makeEvent(inType, in Event);\n return this.dispatchEvent(e);\n },\n /**\n * Returns a snapshot of inEvent, with writable properties.\n *\n * @param {Event} in Event An event that contains properties to copy.\n * @return {Object} An obj ect containing shallow copies of `inEvent`'s\n * properties.\n */\n cloneEvent: function(inEvent) {\n var eventCopy = {}, p;\n for (var i = 0; i < CLONE_PROPS.length; i++) {\n p = CLONE_PROPS[i];\n even tCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n // Work around SVGInstanceE lement shadow tree\n // Return the <use> element that is represented by t he instance for Safari, Chrome, IE.\n // This is the behavior implemented by Firefox.\n if (HAS_SVG_INSTANCE && (p === 'target' || p === 'relatedT arget')) {\n if (eventCopy[p] instanceof SVGElementInstance) {\n eventCopy[p] = eventCopy[p].correspondingUseElement;\n }\n }\n }\n // keep the semantics of preventDefault\n if (inEvent.pre ventDefault) {\n eventCopy.preventDefault = function() {\n inEve nt.preventDefault();\n };\n }\n return eventCopy;\n },\n getTarget: function(inEvent) {\n // if pointer capture is set, route all ev ents for the specified pointerId\n // to the capture target\n if (this .captureInfo) {\n if (this.captureInfo.id === inEvent.pointerId) {\n return this.captureInfo.target;\n }\n }\n return this.targ ets.get(inEvent);\n },\n setCapture: function(inPointerId, inTarget) {\n if (this.captureInfo) {\n this.releaseCapture(this.captureInfo.id);\n }\n this.captureInfo = {id: inPointerId, target: inTarget};\n va r e = new PointerEvent('gotpointercapture', { bubbles: true });\n this.impl icitRelease = this.releaseCapture.bind(this, inPointerId);\n document.addEv entListener('pointerup', this.implicitRelease);\n document.addEventListener ('pointercancel', this.implicitRelease);\n this.targets.set(e, inTarget);\n this.asyncDispatchEvent(e);\n },\n releaseCapture: function(inPointe rId) {\n if (this.captureInfo && this.captureInfo.id === inPointerId) {\n var e = new PointerEvent('lostpointercapture', { bubbles: true });\n var t = this.captureInfo.target;\n this.captureInfo = null;\n do cument.removeEventListener('pointerup', this.implicitRelease);\n document .removeEventListener('pointercancel', this.implicitRelease);\n this.targe ts.set(e, t);\n this.asyncDispatchEvent(e);\n }\n },\n /**\n * Dispatches the event to its target.\n *\n * @param {Event} inEvent The event to be dispatched.\n * @return {Boolean} True if an event handler r eturns true, false otherwise.\n */\n dispatchEvent: scope.external.dispat chEvent || function(inEvent) {\n var t = this.getTarget(inEvent);\n if (t) {\n return t.dispatchEvent(inEvent);\n }\n },\n asyncDisp atchEvent: function(inEvent) {\n setTimeout(this.dispatchEvent.bind(this, i nEvent), 0);\n }\n };\n dispatcher.boundHandler = dispatcher.eventHandler.b ind(dispatcher);\n scope.dispatcher = dispatcher;\n scope.register = dispatche r.register.bind(dispatcher);\n scope.unregister = dispatcher.unregister.bind(di spatcher);\n})(window.PointerEventsPolyfill);\n", 170 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEv ent\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX ',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey' ,\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width', \n 'height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType', \n 'hwTimestamp',\n 'isPrimary',\n // event instance\n 'type',\n 'target',\n 'currentTarget',\n 'which'\n ];\n\n var CLONE_DEFAULTS = [\n // MouseEvent\n false,\n false,\n null,\n null,\n 0,\n 0,\ n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n nul l,\n // DOM Level 3\n 0,\n // PointerEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n false,\n // event instance\n '', \n null,\n null,\n 0\n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGEleme ntInstance !== 'undefined');\n\n /**\n * This module is for normalizing event s. Mouse and Touch events will be\n * collected here, and fire PointerEvents t hat have the same semantics, no\n * matter the source.\n * Events fired:\n * - pointerdown: a pointing is added\n * - pointerup: a pointer is remove d\n * - pointermove: a pointer is moved\n * - pointerover: a pointer cro sses into an element\n * - pointerout: a pointer leaves an element\n * - pointercancel: a pointer will no longer generate events\n */\n var dispatche r = {\n targets: new WeakMap(),\n handledEvents: new WeakMap(),\n point ermap: new scope.PointerMap(),\n eventMap: {},\n // Scope objects for nati ve events.\n // This exists for ease of testing.\n eventSources: {},\n eventSourceList: [],\n /**\n * Add a new event source that will generate pointer events.\n *\n * `inSource` must contain an array of event names named `events`, and\n * functions with the names specified in the `events` a rray.\n * @param {string} name A name for the event source\n * @param {O bject} source A new source of platform events.\n */\n registerSource: fun ction(name, source) {\n var s = source;\n var newEvents = s.events;\n if (newEvents) {\n newEvents.forEach(function(e) {\n if (s[ e]) {\n this.eventMap[e] = s[e].bind(s);\n }\n }, thi s);\n this.eventSources[name] = s;\n this.eventSourceList.push(s); \n }\n },\n register: function(element) {\n var l = this.eventSo urceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventSourceLis t[i]); i++) {\n // call eventsource register\n es.register.call(es , element);\n }\n },\n unregister: function(element) {\n var l = this.eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.e ventSourceList[i]); i++) {\n // call eventsource register\n es.unr egister.call(es, element);\n }\n },\n contains: scope.external.contai ns || function(container, contained) {\n return container.contains(containe d);\n },\n // EVENTS\n down: function(inEvent) {\n this.fireEvent( 'pointerdown', inEvent);\n },\n move: function(inEvent) {\n this.fire Event('pointermove', inEvent);\n },\n up: function(inEvent) {\n this. fireEvent('pointerup', inEvent);\n },\n enter: function(inEvent) {\n inEvent.bubbles = false;\n this.fireEvent('pointerenter', inEvent);\n }, \n leave: function(inEvent) {\n inEvent.bubbles = false;\n this.fir eEvent('pointerleave', inEvent);\n },\n over: function(inEvent) {\n i nEvent.bubbles = true;\n this.fireEvent('pointerover', inEvent);\n },\n out: function(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent ('pointerout', inEvent);\n },\n cancel: function(inEvent) {\n this.fi reEvent('pointercancel', inEvent);\n },\n leaveOut: function(event) {\n this.out(event);\n if (!this.contains(event.target, event.relatedTarget) ) {\n this.leave(event);\n }\n },\n enterOver: function(event) {\n this.over(event);\n if (!this.contains(event.target, event.relate dTarget)) {\n this.enter(event);\n }\n },\n // LISTENER LOGIC\ n eventHandler: function(inEvent) {\n // This is used to prevent multipl e dispatch of pointerevents from\n // platform events. This can happen when two elements in different scopes\n // are set up to create pointer events, which is relevant to Shadow DOM.\n if (this.handledEvents.get(inEvent)) {\ n return;\n }\n var type = inEvent.type;\n var fn = this.e ventMap && this.eventMap[type];\n if (fn) {\n fn(inEvent);\n }\ n this.handledEvents.set(inEvent, true);\n },\n // set up event liste ners\n listen: function(target, events) {\n events.forEach(function(e) { \n this.addEvent(target, e);\n }, this);\n },\n // remove even t listeners\n unlisten: function(target, events) {\n events.forEach(func tion(e) {\n this.removeEvent(target, e);\n }, this);\n },\n ad dEvent: scope.external.addEvent || function(target, eventName) {\n target.a ddEventListener(eventName, this.boundHandler);\n },\n removeEvent: scope.e xternal.removeEvent || function(target, eventName) {\n target.removeEventLi stener(eventName, this.boundHandler);\n },\n // EVENT CREATION AND TRACKIN G\n /**\n * Creates a new Event of type `inType`, based on the informatio n in\n * `inEvent`.\n *\n * @param {string} inType A string represen ting the type of event to create\n * @param {Event} inEvent A platform event with a target\n * @return {Event} A PointerEvent of type `inType`\n */\ n makeEvent: function(inType, inEvent) {\n // relatedTarget must be null if pointer is captured\n if (this.captureInfo) {\n inEvent.relatedT arget = null;\n }\n var e = new PointerEvent(inType, inEvent);\n if (inEvent.preventDefault) {\n e.preventDefault = inEvent.preventDefault ;\n }\n this.targets.set(e, this.targets.get(inEvent) || inEvent.targe t);\n return e;\n },\n // make and dispatch an event in one call\n fireEvent: function(inType, inEvent) {\n var e = this.makeEvent(inType, in Event);\n return this.dispatchEvent(e);\n },\n /**\n * Returns a snapshot of inEvent, with writable properties.\n *\n * @param {Event} in Event An event that contains properties to copy.\n * @return {Object} An obj ect containing shallow copies of `inEvent`'s\n * properties.\n */\n cloneEvent: function(inEvent) {\n var eventCopy = {}, p;\n for (var i = 0; i < CLONE_PROPS.length; i++) {\n p = CLONE_PROPS[i];\n even tCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n // Work around SVGInstanceE lement shadow tree\n // Return the <use> element that is represented by t he instance for Safari, Chrome, IE.\n // This is the behavior implemented by Firefox.\n if (HAS_SVG_INSTANCE && (p === 'target' || p === 'relatedT arget')) {\n if (eventCopy[p] instanceof SVGElementInstance) {\n eventCopy[p] = eventCopy[p].correspondingUseElement;\n }\n }\n }\n // keep the semantics of preventDefault\n if (inEvent.pre ventDefault) {\n eventCopy.preventDefault = function() {\n inEve nt.preventDefault();\n };\n }\n return eventCopy;\n },\n getTarget: function(inEvent) {\n // if pointer capture is set, route all ev ents for the specified pointerId\n // to the capture target\n if (this .captureInfo) {\n if (this.captureInfo.id === inEvent.pointerId) {\n return this.captureInfo.target;\n }\n }\n return this.targ ets.get(inEvent);\n },\n setCapture: function(inPointerId, inTarget) {\n if (this.captureInfo) {\n this.releaseCapture(this.captureInfo.id);\n }\n this.captureInfo = {id: inPointerId, target: inTarget};\n va r e = new PointerEvent('gotpointercapture', { bubbles: true });\n this.impl icitRelease = this.releaseCapture.bind(this, inPointerId);\n document.addEv entListener('pointerup', this.implicitRelease);\n document.addEventListener ('pointercancel', this.implicitRelease);\n this.targets.set(e, inTarget);\n this.asyncDispatchEvent(e);\n },\n releaseCapture: function(inPointe rId) {\n if (this.captureInfo && this.captureInfo.id === inPointerId) {\n var e = new PointerEvent('lostpointercapture', { bubbles: true });\n var t = this.captureInfo.target;\n this.captureInfo = null;\n do cument.removeEventListener('pointerup', this.implicitRelease);\n document .removeEventListener('pointercancel', this.implicitRelease);\n this.targe ts.set(e, t);\n this.asyncDispatchEvent(e);\n }\n },\n /**\n * Dispatches the event to its target.\n *\n * @param {Event} inEvent The event to be dispatched.\n * @return {Boolean} True if an event handler r eturns true, false otherwise.\n */\n dispatchEvent: scope.external.dispat chEvent || function(inEvent) {\n var t = this.getTarget(inEvent);\n if (t) {\n return t.dispatchEvent(inEvent);\n }\n },\n asyncDisp atchEvent: function(inEvent) {\n setTimeout(this.dispatchEvent.bind(this, i nEvent), 0);\n }\n };\n dispatcher.boundHandler = dispatcher.eventHandler.b ind(dispatcher);\n scope.dispatcher = dispatcher;\n scope.register = dispatche r.register.bind(dispatcher);\n scope.unregister = dispatcher.unregister.bind(di spatcher);\n})(window.PointerEventsPolyfill);\n",
171 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This module uses Mutation Observers to dynamicall y adjust which nodes will\n * generate Pointer Events.\n *\n * All nodes that wi sh to generate Pointer Events must have the attribute\n * `touch-action` set to `none`.\n */\n(function(scope) {\n var forEach = Array.prototype.forEach.call.b ind(Array.prototype.forEach);\n var map = Array.prototype.map.call.bind(Array.p rototype.map);\n var toArray = Array.prototype.slice.call.bind(Array.prototype. slice);\n var filter = Array.prototype.filter.call.bind(Array.prototype.filter) ;\n var MO = window.MutationObserver || window.WebKitMutationObserver;\n var S ELECTOR = '[touch-action]';\n var OBSERVER_INIT = {\n subtree: true,\n ch ildList: true,\n attributes: true,\n attributeOldValue: true,\n attribu teFilter: ['touch-action']\n };\n\n function Installer(add, remove, changed, b inder) {\n this.addCallback = add.bind(binder);\n this.removeCallback = re move.bind(binder);\n this.changedCallback = changed.bind(binder);\n if (MO ) {\n this.observer = new MO(this.mutationWatcher.bind(this));\n }\n }\ n\n Installer.prototype = {\n watchSubtree: function(target) {\n // Onl y watch scopes that can target find, as these are top-level.\n // Otherwise we can see duplicate additions and removals that add noise.\n //\n // TODO(dfreedman): For some instances with ShadowDOMPolyfill, we can see\n / / a removal without an insertion when a node is redistributed among\n // sh adows. Since it all ends up correct in the document, watching only\n // the document will yield the correct mutations to watch.\n if (scope.targetFind ing.canTarget(target)) {\n this.observer.observe(target, OBSERVER_INIT);\ n }\n },\n enableOnSubtree: function(target) {\n this.watchSubtr ee(target);\n if (target === document && document.readyState !== 'complete' ) {\n this.installOnLoad();\n } else {\n this.installNewSubtr ee(target);\n }\n },\n installNewSubtree: function(target) {\n f orEach(this.findElements(target), this.addElement, this);\n },\n findEleme nts: function(target) {\n if (target.querySelectorAll) {\n return ta rget.querySelectorAll(SELECTOR);\n }\n return [];\n },\n removeE lement: function(el) {\n this.removeCallback(el);\n },\n addElement: function(el) {\n this.addCallback(el);\n },\n elementChanged: functio n(el, oldValue) {\n this.changedCallback(el, oldValue);\n },\n concat Lists: function(accum, list) {\n return accum.concat(toArray(list));\n } ,\n // register all touch-action = none nodes on document load\n installOn Load: function() {\n document.addEventListener('DOMContentLoaded', this.ins tallNewSubtree.bind(this, document));\n },\n isElement: function(n) {\n return n.nodeType === Node.ELEMENT_NODE;\n },\n flattenMutationTree: fu nction(inNodes) {\n // find children with touch-action\n var tree = ma p(inNodes, this.findElements, this);\n // make sure the added nodes are acc ounted for\n tree.push(filter(inNodes, this.isElement));\n // flatten the list\n return tree.reduce(this.concatLists, []);\n },\n mutationW atcher: function(mutations) {\n mutations.forEach(this.mutationHandler, thi s);\n },\n mutationHandler: function(m) {\n if (m.type === 'childList ') {\n var added = this.flattenMutationTree(m.addedNodes);\n added .forEach(this.addElement, this);\n var removed = this.flattenMutationTree (m.removedNodes);\n removed.forEach(this.removeElement, this);\n } e lse if (m.type === 'attributes') {\n this.elementChanged(m.target, m.oldV alue);\n }\n }\n };\n\n if (!MO) {\n Installer.prototype.watchSubtr ee = function(){\n console.warn('PointerEventsPolyfill: MutationObservers n ot found, touch-action will not be dynamically detected');\n };\n }\n\n sco pe.Installer = Installer;\n})(window.PointerEventsPolyfill);\n", 171 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This module uses Mutation Observers to dynamicall y adjust which nodes will\n * generate Pointer Events.\n *\n * All nodes that wi sh to generate Pointer Events must have the attribute\n * `touch-action` set to `none`.\n */\n(function(scope) {\n var forEach = Array.prototype.forEach.call.b ind(Array.prototype.forEach);\n var map = Array.prototype.map.call.bind(Array.p rototype.map);\n var toArray = Array.prototype.slice.call.bind(Array.prototype. slice);\n var filter = Array.prototype.filter.call.bind(Array.prototype.filter) ;\n var MO = window.MutationObserver || window.WebKitMutationObserver;\n var S ELECTOR = '[touch-action]';\n var OBSERVER_INIT = {\n subtree: true,\n ch ildList: true,\n attributes: true,\n attributeOldValue: true,\n attribu teFilter: ['touch-action']\n };\n\n function Installer(add, remove, changed, b inder) {\n this.addCallback = add.bind(binder);\n this.removeCallback = re move.bind(binder);\n this.changedCallback = changed.bind(binder);\n if (MO ) {\n this.observer = new MO(this.mutationWatcher.bind(this));\n }\n }\ n\n Installer.prototype = {\n watchSubtree: function(target) {\n // Onl y watch scopes that can target find, as these are top-level.\n // Otherwise we can see duplicate additions and removals that add noise.\n //\n // TODO(dfreedman): For some instances with ShadowDOMPolyfill, we can see\n / / a removal without an insertion when a node is redistributed among\n // sh adows. Since it all ends up correct in the document, watching only\n // the document will yield the correct mutations to watch.\n if (scope.targetFind ing.canTarget(target)) {\n this.observer.observe(target, OBSERVER_INIT);\ n }\n },\n enableOnSubtree: function(target) {\n this.watchSubtr ee(target);\n if (target === document && document.readyState !== 'complete' ) {\n this.installOnLoad();\n } else {\n this.installNewSubtr ee(target);\n }\n },\n installNewSubtree: function(target) {\n f orEach(this.findElements(target), this.addElement, this);\n },\n findEleme nts: function(target) {\n if (target.querySelectorAll) {\n return ta rget.querySelectorAll(SELECTOR);\n }\n return [];\n },\n removeE lement: function(el) {\n this.removeCallback(el);\n },\n addElement: function(el) {\n this.addCallback(el);\n },\n elementChanged: functio n(el, oldValue) {\n this.changedCallback(el, oldValue);\n },\n concat Lists: function(accum, list) {\n return accum.concat(toArray(list));\n } ,\n // register all touch-action = none nodes on document load\n installOn Load: function() {\n document.addEventListener('DOMContentLoaded', this.ins tallNewSubtree.bind(this, document));\n },\n isElement: function(n) {\n return n.nodeType === Node.ELEMENT_NODE;\n },\n flattenMutationTree: fu nction(inNodes) {\n // find children with touch-action\n var tree = ma p(inNodes, this.findElements, this);\n // make sure the added nodes are acc ounted for\n tree.push(filter(inNodes, this.isElement));\n // flatten the list\n return tree.reduce(this.concatLists, []);\n },\n mutationW atcher: function(mutations) {\n mutations.forEach(this.mutationHandler, thi s);\n },\n mutationHandler: function(m) {\n if (m.type === 'childList ') {\n var added = this.flattenMutationTree(m.addedNodes);\n added .forEach(this.addElement, this);\n var removed = this.flattenMutationTree (m.removedNodes);\n removed.forEach(this.removeElement, this);\n } e lse if (m.type === 'attributes') {\n this.elementChanged(m.target, m.oldV alue);\n }\n }\n };\n\n if (!MO) {\n Installer.prototype.watchSubtr ee = function(){\n console.warn('PointerEventsPolyfill: MutationObservers n ot found, touch-action will not be dynamically detected');\n };\n }\n\n sco pe.Installer = Installer;\n})(window.PointerEventsPolyfill);\n",
172 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function (scope) {\n var dispatcher = scope.dispatcher; \n var pointermap = dispatcher.pointermap;\n // radius around touchend that sw allows mouse events\n var DEDUP_DIST = 25;\n\n // handler block for native mou se events\n var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse', \n events: [\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'mouseover',\n 'mouseout'\n ],\n register: function(target) {\n dispatcher.listen(target, this.events);\n },\n unregister: function(targe t) {\n dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n // collide with the global mouse listener\n isEventSimulatedFromTouc h: function(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent .clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l & & (t = lts[i]); i++) {\n // simulated mouse events will be swallowed near a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y); \n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n }\n }\n },\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n // forward mouse preventDefault\n va r pd = e.preventDefault;\n e.preventDefault = function() {\n inEvent .preventDefault();\n pd();\n };\n e.pointerId = this.POINTER_ID ;\n e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n re turn e;\n },\n mousedown: function(inEvent) {\n if (!this.isEventSimu latedFromTouch(inEvent)) {\n var p = pointermap.has(this.POINTER_ID);\n // TODO(dfreedman) workaround for some elements not sending mouseup\n // http://crbug/149091\n if (p) {\n this.cancel(inEvent);\n }\n var e = this.prepareEvent(inEvent);\n pointermap.set(thi s.POINTER_ID, inEvent);\n dispatcher.down(e);\n }\n },\n mouse move: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) { \n var e = this.prepareEvent(inEvent);\n dispatcher.move(e);\n }\n },\n mouseup: function(inEvent) {\n if (!this.isEventSimulatedF romTouch(inEvent)) {\n var p = pointermap.get(this.POINTER_ID);\n if (p && p.button === inEvent.button) {\n var e = this.prepareEvent(inE vent);\n dispatcher.up(e);\n this.cleanupMouse();\n }\n }\n },\n mouseover: function(inEvent) {\n if (!this.isEventSimu latedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n dispatcher.enterOver(e);\n }\n },\n mouseout: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = this.prepa reEvent(inEvent);\n dispatcher.leaveOut(e);\n }\n },\n cancel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatche r.cancel(e);\n this.cleanupMouse();\n },\n cleanupMouse: function() { \n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n scope.mouseEven ts = mouseEvents;\n})(window.PointerEventsPolyfill);\n", 172 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function (scope) {\n var dispatcher = scope.dispatcher; \n var pointermap = dispatcher.pointermap;\n // radius around touchend that sw allows mouse events\n var DEDUP_DIST = 25;\n\n // handler block for native mou se events\n var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse', \n events: [\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'mouseover',\n 'mouseout'\n ],\n register: function(target) {\n dispatcher.listen(target, this.events);\n },\n unregister: function(targe t) {\n dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n // collide with the global mouse listener\n isEventSimulatedFromTouc h: function(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent .clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l & & (t = lts[i]); i++) {\n // simulated mouse events will be swallowed near a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y); \n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n }\n }\n },\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n // forward mouse preventDefault\n va r pd = e.preventDefault;\n e.preventDefault = function() {\n inEvent .preventDefault();\n pd();\n };\n e.pointerId = this.POINTER_ID ;\n e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n re turn e;\n },\n mousedown: function(inEvent) {\n if (!this.isEventSimu latedFromTouch(inEvent)) {\n var p = pointermap.has(this.POINTER_ID);\n // TODO(dfreedman) workaround for some elements not sending mouseup\n // http://crbug/149091\n if (p) {\n this.cancel(inEvent);\n }\n var e = this.prepareEvent(inEvent);\n pointermap.set(thi s.POINTER_ID, inEvent);\n dispatcher.down(e);\n }\n },\n mouse move: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) { \n var e = this.prepareEvent(inEvent);\n dispatcher.move(e);\n }\n },\n mouseup: function(inEvent) {\n if (!this.isEventSimulatedF romTouch(inEvent)) {\n var p = pointermap.get(this.POINTER_ID);\n if (p && p.button === inEvent.button) {\n var e = this.prepareEvent(inE vent);\n dispatcher.up(e);\n this.cleanupMouse();\n }\n }\n },\n mouseover: function(inEvent) {\n if (!this.isEventSimu latedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n dispatcher.enterOver(e);\n }\n },\n mouseout: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = this.prepa reEvent(inEvent);\n dispatcher.leaveOut(e);\n }\n },\n cancel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatche r.cancel(e);\n this.cleanupMouse();\n },\n cleanupMouse: function() { \n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n scope.mouseEven ts = mouseEvents;\n})(window.PointerEventsPolyfill);\n",
173 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\ n var findTarget = scope.findTarget;\n var allShadows = scope.targetFinding.al lShadows.bind(scope.targetFinding);\n var pointermap = dispatcher.pointermap;\n var touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n // This should be long enough to ignore compat mouse events made by touch\n var DEDUP_T IMEOUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var ATTRIB = 'touch-action'; \n var INSTALLER;\n // The presence of touch event handlers blocks scrolling, and so we must be careful to\n // avoid adding handlers unnecessarily. Chrome plans to add a touch-action-delay property\n // (crbug.com/329559) to address t his, and once we have that we can opt-in to a simpler\n // handler registration mechanism. Rather than try to predict how exactly to opt-in to\n // that we'l l just leave this disabled until there is a build of Chrome to test.\n var HAS_ TOUCH_ACTION_DELAY = false;\n \n // handler block for native touch events\n v ar touchEvents = {\n scrollType: new WeakMap(),\n events: [\n 'touchs tart',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n ],\n register: function(target) {\n if (HAS_TOUCH_ACTION_DELAY) {\n dispa tcher.listen(target, this.events);\n } else {\n INSTALLER.enableOnSu btree(target);\n }\n },\n unregister: function(target) {\n if (H AS_TOUCH_ACTION_DELAY) {\n dispatcher.unlisten(target, this.events);\n } else {\n // TODO(dfreedman): is it worth it to disconnect the MO?\n }\n },\n elementAdded: function(el) {\n var a = el.getAttribute( ATTRIB);\n var st = this.touchActionToScrollType(a);\n if (st) {\n this.scrollType.set(el, st);\n dispatcher.listen(el, this.events);\n // set touch-action on shadows as well\n allShadows(el).forEach(fu nction(s) {\n this.scrollType.set(s, st);\n dispatcher.listen( s, this.events);\n }, this);\n }\n },\n elementRemoved: functi on(el) {\n this.scrollType['delete'](el);\n dispatcher.unlisten(el, th is.events);\n // remove touch-action from shadow\n allShadows(el).forE ach(function(s) {\n this.scrollType['delete'](s);\n dispatcher.unl isten(s, this.events);\n }, this);\n },\n elementChanged: function(el , oldValue) {\n var a = el.getAttribute(ATTRIB);\n var st = this.touch ActionToScrollType(a);\n var oldSt = this.touchActionToScrollType(oldValue) ;\n // simply update scrollType if listeners are already established\n if (st && oldSt) {\n this.scrollType.set(el, st);\n allShadows(el ).forEach(function(s) {\n this.scrollType.set(s, st);\n }, this) ;\n } else if (oldSt) {\n this.elementRemoved(el);\n } else if (st) {\n this.elementAdded(el);\n }\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x',\n YSCROLLER: 'pan-y',\n SCROLLER: /^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/\n },\n touchActionToSc rollType: function(touchAction) {\n var t = touchAction;\n var st = th is.scrollTypes;\n if (t === 'none') {\n return 'none';\n } else if (t === st.XSCROLLER) {\n return 'X';\n } else if (t === st.YSCRO LLER) {\n return 'Y';\n } else if (st.SCROLLER.exec(t)) {\n r eturn 'XY';\n }\n },\n POINTER_TYPE: 'touch',\n firstTouch: null,\ n isPrimaryTouch: function(inTouch) {\n return this.firstTouch === inTou ch.identifier;\n },\n setPrimaryTouch: function(inTouch) {\n // set p rimary touch if there no pointers, or the only pointer is the mouse\n if (p ointermap.pointers() === 0 || (pointermap.pointers() === 1 && pointermap.has(1)) ) {\n this.firstTouch = inTouch.identifier;\n this.firstXY = {X: i nTouch.clientX, Y: inTouch.clientY};\n this.scrolling = false;\n t his.cancelResetClickCount();\n }\n },\n removePrimaryPointer: functio n(inPointer) {\n if (inPointer.isPrimary) {\n this.firstTouch = null ;\n this.firstXY = null;\n this.resetClickCount();\n }\n } ,\n clickCount: 0,\n resetId: null,\n resetClickCount: function() {\n var fn = function() {\n this.clickCount = 0;\n this.resetId = null;\n }.bind(this);\n this.resetId = setTimeout(fn, CLICK_COUNT_TIME OUT);\n },\n cancelResetClickCount: function() {\n if (this.resetId) {\n clearTimeout(this.resetId);\n }\n },\n touchToPointer: fun ction(inTouch) {\n var e = dispatcher.cloneEvent(inTouch);\n // Spec s pecifies that pointerId 1 is reserved for Mouse.\n // Touch identifiers can start at 0.\n // Add 2 to the touch identifier for compatibility.\n e .pointerId = inTouch.identifier + 2;\n e.target = findTarget(e);\n e.b ubbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n e.button = 0;\n e.buttons = 1;\n e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch.radi usY || 0;\n e.pressure = inTouch.webkitForce || inTouch.force || 0.5;\n e.isPrimary = this.isPrimaryTouch(inTouch);\n e.pointerType = this.POINTE R_TYPE;\n return e;\n },\n processTouches: function(inEvent, inFuncti on) {\n var tl = inEvent.changedTouches;\n var pointers = touchMap(tl, this.touchToPointer, this);\n // forward touch preventDefaults\n poin ters.forEach(function(p) {\n p.preventDefault = function() {\n t his.scrolling = false;\n this.firstXY = null;\n inEvent.preven tDefault();\n };\n }, this);\n pointers.forEach(inFunction, thi s);\n },\n // For single axis scrollers, determines whether the element sh ould emit\n // pointer events or behave as a scroller\n shouldScroll: func tion(inEvent) {\n if (this.firstXY) {\n var ret;\n var scroll Axis = this.scrollType.get(inEvent.currentTarget);\n if (scrollAxis === ' none') {\n // this element is a touch-action: none, should never scroll \n ret = false;\n } else if (scrollAxis === 'XY') {\n / / this element should always scroll\n ret = true;\n } else {\n var t = inEvent.changedTouches[0];\n // check the intended scro ll axis, and other axis\n var a = scrollAxis;\n var oa = scrol lAxis === 'Y' ? 'X' : 'Y';\n var da = Math.abs(t['client' + a] - this.f irstXY[a]);\n var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\ n // if delta in the scroll axis > delta other axis, scroll instead of\ n // making events\n ret = da >= doa;\n }\n this .firstXY = null;\n return ret;\n }\n },\n findTouch: function( inTL, inId) {\n for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]); i++) {\n if (t.identifier === inId) {\n return true;\n } \n }\n },\n // In some instances, a touchstart can happen without a t ouchend. This\n // leaves the pointermap in a broken state.\n // Therefore , on every touchstart, we remove the touches that did not fire a\n // touchen d event.\n // To keep state globally consistent, we fire a\n // pointercan cel for this \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n var tl = inEvent.touches;\n // pointermap.pointers() should be < tl.length here, as the touchstart has not\n // been processed yet.\n if (pointer map.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach( function(value, key) {\n // Never remove pointerId == 1, which is mouse .\n // Touch identifiers are 2 smaller than their pointerId, which is t he\n // index in pointermap.\n if (key !== 1 && !this.findTouc h(tl, key - 2)) {\n var p = value.out;\n d.push(this.touch ToPointer(p));\n }\n }, this);\n d.forEach(this.cancelOut , this);\n }\n },\n touchstart: function(inEvent) {\n this.vacuu mTouches(inEvent);\n this.setPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent);\n if (!this.scrolling) {\n this.cli ckCount++;\n this.processTouches(inEvent, this.overDown);\n }\n } ,\n overDown: function(inPointer) {\n var p = pointermap.set(inPointer.p ointerId, {\n target: inPointer.target,\n out: inPointer,\n outTarget: inPointer.target\n });\n dispatcher.over(inPointer);\n dispatcher.enter(inPointer);\n dispatcher.down(inPointer);\n },\n t ouchmove: function(inEvent) {\n if (!this.scrolling) {\n if (this.sh ouldScroll(inEvent)) {\n this.scrolling = true;\n this.touchca ncel(inEvent);\n } else {\n inEvent.preventDefault();\n this.processTouches(inEvent, this.moveOverOut);\n }\n }\n },\n moveOverOut: function(inPointer) {\n var event = inPointer;\n var po inter = pointermap.get(event.pointerId);\n // a finger drifted off the scre en, ignore it\n if (!pointer) {\n return;\n }\n var outEve nt = pointer.out;\n var outTarget = pointer.outTarget;\n dispatcher.mo ve(event);\n if (outEvent && outTarget !== event.target) {\n outEven t.relatedTarget = event.target;\n event.relatedTarget = outTarget;\n // recover from retargeting by shadow\n outEvent.target = outTarget;\n if (event.target) {\n dispatcher.leaveOut(outEvent);\n dispatcher.enterOver(event);\n } else {\n // clean up case when finger leaves the screen\n event.target = outTarget;\n event. relatedTarget = null;\n this.cancelOut(event);\n }\n }\n pointer.out = event;\n pointer.outTarget = event.target;\n },\n to uchend: function(inEvent) {\n this.dedupSynthMouse(inEvent);\n this.pr ocessTouches(inEvent, this.upOut);\n },\n upOut: function(inPointer) {\n if (!this.scrolling) {\n dispatcher.up(inPointer);\n dispatche r.out(inPointer);\n dispatcher.leave(inPointer);\n }\n this.cle anUpPointer(inPointer);\n },\n touchcancel: function(inEvent) {\n thi s.processTouches(inEvent, this.cancelOut);\n },\n cancelOut: function(inPo inter) {\n dispatcher.cancel(inPointer);\n dispatcher.out(inPointer);\ n dispatcher.leave(inPointer);\n this.cleanUpPointer(inPointer);\n },\n cleanUpPointer: function(inPointer) {\n pointermap['delete'](inPoin ter.pointerId);\n this.removePrimaryPointer(inPointer);\n },\n // pre vent synth mouse events from creating pointer events\n dedupSynthMouse: funct ion(inEvent) {\n var lts = scope.mouseEvents.lastTouches;\n var t = in Event.changedTouches[0];\n // only the primary finger will synth mouse even ts\n if (this.isPrimaryTouch(t)) {\n // remember x/y of last touch\n var lt = {x: t.clientX, y: t.clientY};\n lts.push(lt);\n v ar fn = (function(lts, lt){\n var i = lts.indexOf(lt);\n if (i > -1) {\n lts.splice(i, 1);\n }\n }).bind(null, lts, lt);\n setTimeout(fn, DEDUP_TIMEOUT);\n }\n }\n };\n\n if (!HA S_TOUCH_ACTION_DELAY) {\n INSTALLER = new scope.Installer(touchEvents.element Added, touchEvents.elementRemoved, touchEvents.elementChanged, touchEvents);\n }\n\n scope.touchEvents = touchEvents;\n})(window.PointerEventsPolyfill);\n", 173 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\ n var findTarget = scope.findTarget;\n var allShadows = scope.targetFinding.al lShadows.bind(scope.targetFinding);\n var pointermap = dispatcher.pointermap;\n var touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n // This should be long enough to ignore compat mouse events made by touch\n var DEDUP_T IMEOUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var ATTRIB = 'touch-action'; \n var INSTALLER;\n // The presence of touch event handlers blocks scrolling, and so we must be careful to\n // avoid adding handlers unnecessarily. Chrome plans to add a touch-action-delay property\n // (crbug.com/329559) to address t his, and once we have that we can opt-in to a simpler\n // handler registration mechanism. Rather than try to predict how exactly to opt-in to\n // that we'l l just leave this disabled until there is a build of Chrome to test.\n var HAS_ TOUCH_ACTION_DELAY = false;\n \n // handler block for native touch events\n v ar touchEvents = {\n scrollType: new WeakMap(),\n events: [\n 'touchs tart',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n ],\n register: function(target) {\n if (HAS_TOUCH_ACTION_DELAY) {\n dispa tcher.listen(target, this.events);\n } else {\n INSTALLER.enableOnSu btree(target);\n }\n },\n unregister: function(target) {\n if (H AS_TOUCH_ACTION_DELAY) {\n dispatcher.unlisten(target, this.events);\n } else {\n // TODO(dfreedman): is it worth it to disconnect the MO?\n }\n },\n elementAdded: function(el) {\n var a = el.getAttribute( ATTRIB);\n var st = this.touchActionToScrollType(a);\n if (st) {\n this.scrollType.set(el, st);\n dispatcher.listen(el, this.events);\n // set touch-action on shadows as well\n allShadows(el).forEach(fu nction(s) {\n this.scrollType.set(s, st);\n dispatcher.listen( s, this.events);\n }, this);\n }\n },\n elementRemoved: functi on(el) {\n this.scrollType['delete'](el);\n dispatcher.unlisten(el, th is.events);\n // remove touch-action from shadow\n allShadows(el).forE ach(function(s) {\n this.scrollType['delete'](s);\n dispatcher.unl isten(s, this.events);\n }, this);\n },\n elementChanged: function(el , oldValue) {\n var a = el.getAttribute(ATTRIB);\n var st = this.touch ActionToScrollType(a);\n var oldSt = this.touchActionToScrollType(oldValue) ;\n // simply update scrollType if listeners are already established\n if (st && oldSt) {\n this.scrollType.set(el, st);\n allShadows(el ).forEach(function(s) {\n this.scrollType.set(s, st);\n }, this) ;\n } else if (oldSt) {\n this.elementRemoved(el);\n } else if (st) {\n this.elementAdded(el);\n }\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x',\n YSCROLLER: 'pan-y',\n SCROLLER: /^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/\n },\n touchActionToSc rollType: function(touchAction) {\n var t = touchAction;\n var st = th is.scrollTypes;\n if (t === 'none') {\n return 'none';\n } else if (t === st.XSCROLLER) {\n return 'X';\n } else if (t === st.YSCRO LLER) {\n return 'Y';\n } else if (st.SCROLLER.exec(t)) {\n r eturn 'XY';\n }\n },\n POINTER_TYPE: 'touch',\n firstTouch: null,\ n isPrimaryTouch: function(inTouch) {\n return this.firstTouch === inTou ch.identifier;\n },\n setPrimaryTouch: function(inTouch) {\n // set p rimary touch if there no pointers, or the only pointer is the mouse\n if (p ointermap.pointers() === 0 || (pointermap.pointers() === 1 && pointermap.has(1)) ) {\n this.firstTouch = inTouch.identifier;\n this.firstXY = {X: i nTouch.clientX, Y: inTouch.clientY};\n this.scrolling = false;\n t his.cancelResetClickCount();\n }\n },\n removePrimaryPointer: functio n(inPointer) {\n if (inPointer.isPrimary) {\n this.firstTouch = null ;\n this.firstXY = null;\n this.resetClickCount();\n }\n } ,\n clickCount: 0,\n resetId: null,\n resetClickCount: function() {\n var fn = function() {\n this.clickCount = 0;\n this.resetId = null;\n }.bind(this);\n this.resetId = setTimeout(fn, CLICK_COUNT_TIME OUT);\n },\n cancelResetClickCount: function() {\n if (this.resetId) {\n clearTimeout(this.resetId);\n }\n },\n touchToPointer: fun ction(inTouch) {\n var e = dispatcher.cloneEvent(inTouch);\n // Spec s pecifies that pointerId 1 is reserved for Mouse.\n // Touch identifiers can start at 0.\n // Add 2 to the touch identifier for compatibility.\n e .pointerId = inTouch.identifier + 2;\n e.target = findTarget(e);\n e.b ubbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n e.button = 0;\n e.buttons = 1;\n e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch.radi usY || 0;\n e.pressure = inTouch.webkitForce || inTouch.force || 0.5;\n e.isPrimary = this.isPrimaryTouch(inTouch);\n e.pointerType = this.POINTE R_TYPE;\n return e;\n },\n processTouches: function(inEvent, inFuncti on) {\n var tl = inEvent.changedTouches;\n var pointers = touchMap(tl, this.touchToPointer, this);\n // forward touch preventDefaults\n poin ters.forEach(function(p) {\n p.preventDefault = function() {\n t his.scrolling = false;\n this.firstXY = null;\n inEvent.preven tDefault();\n };\n }, this);\n pointers.forEach(inFunction, thi s);\n },\n // For single axis scrollers, determines whether the element sh ould emit\n // pointer events or behave as a scroller\n shouldScroll: func tion(inEvent) {\n if (this.firstXY) {\n var ret;\n var scroll Axis = this.scrollType.get(inEvent.currentTarget);\n if (scrollAxis === ' none') {\n // this element is a touch-action: none, should never scroll \n ret = false;\n } else if (scrollAxis === 'XY') {\n / / this element should always scroll\n ret = true;\n } else {\n var t = inEvent.changedTouches[0];\n // check the intended scro ll axis, and other axis\n var a = scrollAxis;\n var oa = scrol lAxis === 'Y' ? 'X' : 'Y';\n var da = Math.abs(t['client' + a] - this.f irstXY[a]);\n var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\ n // if delta in the scroll axis > delta other axis, scroll instead of\ n // making events\n ret = da >= doa;\n }\n this .firstXY = null;\n return ret;\n }\n },\n findTouch: function( inTL, inId) {\n for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]); i++) {\n if (t.identifier === inId) {\n return true;\n } \n }\n },\n // In some instances, a touchstart can happen without a t ouchend. This\n // leaves the pointermap in a broken state.\n // Therefore , on every touchstart, we remove the touches that did not fire a\n // touchen d event.\n // To keep state globally consistent, we fire a\n // pointercan cel for this \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n var tl = inEvent.touches;\n // pointermap.pointers() should be < tl.length here, as the touchstart has not\n // been processed yet.\n if (pointer map.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach( function(value, key) {\n // Never remove pointerId == 1, which is mouse .\n // Touch identifiers are 2 smaller than their pointerId, which is t he\n // index in pointermap.\n if (key !== 1 && !this.findTouc h(tl, key - 2)) {\n var p = value.out;\n d.push(this.touch ToPointer(p));\n }\n }, this);\n d.forEach(this.cancelOut , this);\n }\n },\n touchstart: function(inEvent) {\n this.vacuu mTouches(inEvent);\n this.setPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent);\n if (!this.scrolling) {\n this.cli ckCount++;\n this.processTouches(inEvent, this.overDown);\n }\n } ,\n overDown: function(inPointer) {\n var p = pointermap.set(inPointer.p ointerId, {\n target: inPointer.target,\n out: inPointer,\n outTarget: inPointer.target\n });\n dispatcher.over(inPointer);\n dispatcher.enter(inPointer);\n dispatcher.down(inPointer);\n },\n t ouchmove: function(inEvent) {\n if (!this.scrolling) {\n if (this.sh ouldScroll(inEvent)) {\n this.scrolling = true;\n this.touchca ncel(inEvent);\n } else {\n inEvent.preventDefault();\n this.processTouches(inEvent, this.moveOverOut);\n }\n }\n },\n moveOverOut: function(inPointer) {\n var event = inPointer;\n var po inter = pointermap.get(event.pointerId);\n // a finger drifted off the scre en, ignore it\n if (!pointer) {\n return;\n }\n var outEve nt = pointer.out;\n var outTarget = pointer.outTarget;\n dispatcher.mo ve(event);\n if (outEvent && outTarget !== event.target) {\n outEven t.relatedTarget = event.target;\n event.relatedTarget = outTarget;\n // recover from retargeting by shadow\n outEvent.target = outTarget;\n if (event.target) {\n dispatcher.leaveOut(outEvent);\n dispatcher.enterOver(event);\n } else {\n // clean up case when finger leaves the screen\n event.target = outTarget;\n event. relatedTarget = null;\n this.cancelOut(event);\n }\n }\n pointer.out = event;\n pointer.outTarget = event.target;\n },\n to uchend: function(inEvent) {\n this.dedupSynthMouse(inEvent);\n this.pr ocessTouches(inEvent, this.upOut);\n },\n upOut: function(inPointer) {\n if (!this.scrolling) {\n dispatcher.up(inPointer);\n dispatche r.out(inPointer);\n dispatcher.leave(inPointer);\n }\n this.cle anUpPointer(inPointer);\n },\n touchcancel: function(inEvent) {\n thi s.processTouches(inEvent, this.cancelOut);\n },\n cancelOut: function(inPo inter) {\n dispatcher.cancel(inPointer);\n dispatcher.out(inPointer);\ n dispatcher.leave(inPointer);\n this.cleanUpPointer(inPointer);\n },\n cleanUpPointer: function(inPointer) {\n pointermap['delete'](inPoin ter.pointerId);\n this.removePrimaryPointer(inPointer);\n },\n // pre vent synth mouse events from creating pointer events\n dedupSynthMouse: funct ion(inEvent) {\n var lts = scope.mouseEvents.lastTouches;\n var t = in Event.changedTouches[0];\n // only the primary finger will synth mouse even ts\n if (this.isPrimaryTouch(t)) {\n // remember x/y of last touch\n var lt = {x: t.clientX, y: t.clientY};\n lts.push(lt);\n v ar fn = (function(lts, lt){\n var i = lts.indexOf(lt);\n if (i > -1) {\n lts.splice(i, 1);\n }\n }).bind(null, lts, lt);\n setTimeout(fn, DEDUP_TIMEOUT);\n }\n }\n };\n\n if (!HA S_TOUCH_ACTION_DELAY) {\n INSTALLER = new scope.Installer(touchEvents.element Added, touchEvents.elementRemoved, touchEvents.elementChanged, touchEvents);\n }\n\n scope.touchEvents = touchEvents;\n})(window.PointerEventsPolyfill);\n",
174 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\ n var pointermap = dispatcher.pointermap;\n var HAS_BITMAP_TYPE = window.MSPoi nterEvent && typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE === 'number';\n var msEvents = {\n events: [\n 'MSPointerDown',\n 'MSPointerMove',\ n 'MSPointerUp',\n 'MSPointerOut',\n 'MSPointerOver',\n 'MSP ointerCancel',\n 'MSGotPointerCapture',\n 'MSLostPointerCapture'\n ],\n register: function(target) {\n dispatcher.listen(target, this.event s);\n },\n unregister: function(target) {\n dispatcher.unlisten(targe t, this.events);\n },\n POINTER_TYPES: [\n '',\n 'unavailable',\ n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareEvent: function (inEvent) {\n var e = inEvent;\n if (HAS_BITMAP_TYPE) {\n e = d ispatcher.cloneEvent(inEvent);\n e.pointerType = this.POINTER_TYPES[inEve nt.pointerType];\n }\n return e;\n },\n cleanup: function(id) {\ n pointermap['delete'](id);\n },\n MSPointerDown: function(inEvent) { \n pointermap.set(inEvent.pointerId, inEvent);\n var e = this.prepareE vent(inEvent);\n dispatcher.down(e);\n },\n MSPointerMove: function(i nEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.move(e);\ n },\n MSPointerUp: function(inEvent) {\n var e = this.prepareEvent(i nEvent);\n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n } ,\n MSPointerOut: function(inEvent) {\n var e = this.prepareEvent(inEven t);\n dispatcher.leaveOut(e);\n },\n MSPointerOver: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.enterOver(e);\n },\n MSPointerCancel: function(inEvent) {\n var e = this.prepareEvent (inEvent);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\ n },\n MSLostPointerCapture: function(inEvent) {\n var e = dispatcher .makeEvent('lostpointercapture', inEvent);\n dispatcher.dispatchEvent(e);\n },\n MSGotPointerCapture: function(inEvent) {\n var e = dispatcher.m akeEvent('gotpointercapture', inEvent);\n dispatcher.dispatchEvent(e);\n }\n };\n\n scope.msEvents = msEvents;\n})(window.PointerEventsPolyfill);\n", 174 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\ n var pointermap = dispatcher.pointermap;\n var HAS_BITMAP_TYPE = window.MSPoi nterEvent && typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE === 'number';\n var msEvents = {\n events: [\n 'MSPointerDown',\n 'MSPointerMove',\ n 'MSPointerUp',\n 'MSPointerOut',\n 'MSPointerOver',\n 'MSP ointerCancel',\n 'MSGotPointerCapture',\n 'MSLostPointerCapture'\n ],\n register: function(target) {\n dispatcher.listen(target, this.event s);\n },\n unregister: function(target) {\n dispatcher.unlisten(targe t, this.events);\n },\n POINTER_TYPES: [\n '',\n 'unavailable',\ n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareEvent: function (inEvent) {\n var e = inEvent;\n if (HAS_BITMAP_TYPE) {\n e = d ispatcher.cloneEvent(inEvent);\n e.pointerType = this.POINTER_TYPES[inEve nt.pointerType];\n }\n return e;\n },\n cleanup: function(id) {\ n pointermap['delete'](id);\n },\n MSPointerDown: function(inEvent) { \n pointermap.set(inEvent.pointerId, inEvent);\n var e = this.prepareE vent(inEvent);\n dispatcher.down(e);\n },\n MSPointerMove: function(i nEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.move(e);\ n },\n MSPointerUp: function(inEvent) {\n var e = this.prepareEvent(i nEvent);\n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n } ,\n MSPointerOut: function(inEvent) {\n var e = this.prepareEvent(inEven t);\n dispatcher.leaveOut(e);\n },\n MSPointerOver: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.enterOver(e);\n },\n MSPointerCancel: function(inEvent) {\n var e = this.prepareEvent (inEvent);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\ n },\n MSLostPointerCapture: function(inEvent) {\n var e = dispatcher .makeEvent('lostpointercapture', inEvent);\n dispatcher.dispatchEvent(e);\n },\n MSGotPointerCapture: function(inEvent) {\n var e = dispatcher.m akeEvent('gotpointercapture', inEvent);\n dispatcher.dispatchEvent(e);\n }\n };\n\n scope.msEvents = msEvents;\n})(window.PointerEventsPolyfill);\n",
175 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This module contains the handlers for native plat form events.\n * From here, the dispatcher is called to create unified pointer e vents.\n * Included are touch events (v1), mouse events, and MSPointerEvents.\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n\n // only activa te if this platform does not have pointer events\n if (window.navigator.pointer Enabled === undefined) {\n Object.defineProperty(window.navigator, 'pointerEn abled', {value: true, enumerable: true});\n\n if (window.navigator.msPointerE nabled) {\n var tp = window.navigator.msMaxTouchPoints;\n Object.defin eProperty(window.navigator, 'maxTouchPoints', {\n value: tp,\n enu merable: true\n });\n dispatcher.registerSource('ms', scope.msEvents); \n } else {\n dispatcher.registerSource('mouse', scope.mouseEvents);\n if (window.ontouchstart !== undefined) {\n dispatcher.registerSource( 'touch', scope.touchEvents);\n }\n }\n\n dispatcher.register(document );\n }\n})(window.PointerEventsPolyfill);\n", 175 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This module contains the handlers for native plat form events.\n * From here, the dispatcher is called to create unified pointer e vents.\n * Included are touch events (v1), mouse events, and MSPointerEvents.\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n\n // only activa te if this platform does not have pointer events\n if (window.navigator.pointer Enabled === undefined) {\n Object.defineProperty(window.navigator, 'pointerEn abled', {value: true, enumerable: true});\n\n if (window.navigator.msPointerE nabled) {\n var tp = window.navigator.msMaxTouchPoints;\n Object.defin eProperty(window.navigator, 'maxTouchPoints', {\n value: tp,\n enu merable: true\n });\n dispatcher.registerSource('ms', scope.msEvents); \n } else {\n dispatcher.registerSource('mouse', scope.mouseEvents);\n if (window.ontouchstart !== undefined) {\n dispatcher.registerSource( 'touch', scope.touchEvents);\n }\n }\n\n dispatcher.register(document );\n }\n})(window.PointerEventsPolyfill);\n",
176 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\ n var n = window.navigator;\n var s, r;\n function assertDown(id) {\n if ( !dispatcher.pointermap.has(id)) {\n throw new Error('InvalidPointerId');\n }\n }\n if (n.msPointerEnabled) {\n s = function(pointerId) {\n ass ertDown(pointerId);\n this.msSetPointerCapture(pointerId);\n };\n r = function(pointerId) {\n assertDown(pointerId);\n this.msReleasePointe rCapture(pointerId);\n };\n } else {\n s = function setPointerCapture(poi nterId) {\n assertDown(pointerId);\n dispatcher.setCapture(pointerId, this);\n };\n r = function releasePointerCapture(pointerId) {\n asser tDown(pointerId);\n dispatcher.releaseCapture(pointerId, this);\n };\n }\n if (window.Element && !Element.prototype.setPointerCapture) {\n Object.d efineProperties(Element.prototype, {\n 'setPointerCapture': {\n valu e: s\n },\n 'releasePointerCapture': {\n value: r\n }\n });\n }\n})(window.PointerEventsPolyfill);\n", 176 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\ n var n = window.navigator;\n var s, r;\n function assertDown(id) {\n if ( !dispatcher.pointermap.has(id)) {\n throw new Error('InvalidPointerId');\n }\n }\n if (n.msPointerEnabled) {\n s = function(pointerId) {\n ass ertDown(pointerId);\n this.msSetPointerCapture(pointerId);\n };\n r = function(pointerId) {\n assertDown(pointerId);\n this.msReleasePointe rCapture(pointerId);\n };\n } else {\n s = function setPointerCapture(poi nterId) {\n assertDown(pointerId);\n dispatcher.setCapture(pointerId, this);\n };\n r = function releasePointerCapture(pointerId) {\n asser tDown(pointerId);\n dispatcher.releaseCapture(pointerId, this);\n };\n }\n if (window.Element && !Element.prototype.setPointerCapture) {\n Object.d efineProperties(Element.prototype, {\n 'setPointerCapture': {\n valu e: s\n },\n 'releasePointerCapture': {\n value: r\n }\n });\n }\n})(window.PointerEventsPolyfill);\n",
177 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * PointerGestureEvent is the constructor for all Po interGesture events.\n *\n * @module PointerGestures\n * @class PointerGestureEv ent\n * @extends UIEvent\n * @constructor\n * @param {String} inType Event type\ n * @param {Object} [inDict] Dictionary of properties to initialize on the event \n */\n\nfunction PointerGestureEvent(inType, inDict) {\n var dict = inDict || {};\n var e = document.createEvent('Event');\n var props = {\n bubbles: Boo lean(dict.bubbles) === dict.bubbles || true,\n cancelable: Boolean(dict.cance lable) === dict.cancelable || true\n };\n\n e.initEvent(inType, props.bubbles, props.cancelable);\n\n var keys = Object.keys(dict), k;\n for (var i = 0; i < keys.length; i++) {\n k = keys[i];\n e[k] = dict[k];\n }\n\n e.preventT ap = this.preventTap;\n\n return e;\n}\n\n/**\n * Allows for any gesture to pre vent the tap gesture.\n *\n * @method preventTap\n */\nPointerGestureEvent.proto type.preventTap = function() {\n this.tapPrevented = true;\n};\n\n", 177 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * PointerGestureEvent is the constructor for all Po interGesture events.\n *\n * @module PointerGestures\n * @class PointerGestureEv ent\n * @extends UIEvent\n * @constructor\n * @param {String} inType Event type\ n * @param {Object} [inDict] Dictionary of properties to initialize on the event \n */\n\nfunction PointerGestureEvent(inType, inDict) {\n var dict = inDict || {};\n var e = document.createEvent('Event');\n var props = {\n bubbles: Boo lean(dict.bubbles) === dict.bubbles || true,\n cancelable: Boolean(dict.cance lable) === dict.cancelable || true\n };\n\n e.initEvent(inType, props.bubbles, props.cancelable);\n\n var keys = Object.keys(dict), k;\n for (var i = 0; i < keys.length; i++) {\n k = keys[i];\n e[k] = dict[k];\n }\n\n e.preventT ap = this.preventTap;\n\n return e;\n}\n\n/**\n * Allows for any gesture to pre vent the tap gesture.\n *\n * @method preventTap\n */\nPointerGestureEvent.proto type.preventTap = function() {\n this.tapPrevented = true;\n};\n\n",
178 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n /**\n * This class contains the g esture recognizers that create the PointerGesture\n * events.\n *\n * @cla ss PointerGestures\n * @static\n */\n scope = scope || {};\n scope.utils = {\n LCA: {\n // Determines the lowest node in the ancestor chain of a a nd b\n find: function(a, b) {\n if (a === b) {\n return a;\ n }\n // fast case, a is a direct descendant of b or vice versa\n if (a.contains) {\n if (a.contains(b)) {\n return a;\ n }\n if (b.contains(a)) {\n return b;\n } \n }\n var adepth = this.depth(a);\n var bdepth = this.dept h(b);\n var d = adepth - bdepth;\n if (d > 0) {\n a = thi s.walk(a, d);\n } else {\n b = this.walk(b, -d);\n }\n while(a && b && a !== b) {\n a = this.walk(a, 1);\n b = t his.walk(b, 1);\n }\n return a;\n },\n walk: function(n, u) {\n for (var i = 0; i < u; i++) {\n n = n.parentNode;\n }\n return n;\n },\n depth: function(n) {\n var d = 0 ;\n while(n) {\n d++;\n n = n.parentNode;\n }\n return d;\n }\n }\n };\n scope.findLCA = function(a, b) {\n return scope.utils.LCA.find(a, b);\n }\n window.PointerGestures = scope;\n})(w indow.PointerGestures);\n", 178 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n /**\n * This class contains the g esture recognizers that create the PointerGesture\n * events.\n *\n * @cla ss PointerGestures\n * @static\n */\n scope = scope || {};\n scope.utils = {\n LCA: {\n // Determines the lowest node in the ancestor chain of a a nd b\n find: function(a, b) {\n if (a === b) {\n return a;\ n }\n // fast case, a is a direct descendant of b or vice versa\n if (a.contains) {\n if (a.contains(b)) {\n return a;\ n }\n if (b.contains(a)) {\n return b;\n } \n }\n var adepth = this.depth(a);\n var bdepth = this.dept h(b);\n var d = adepth - bdepth;\n if (d > 0) {\n a = thi s.walk(a, d);\n } else {\n b = this.walk(b, -d);\n }\n while(a && b && a !== b) {\n a = this.walk(a, 1);\n b = t his.walk(b, 1);\n }\n return a;\n },\n walk: function(n, u) {\n for (var i = 0; i < u; i++) {\n n = n.parentNode;\n }\n return n;\n },\n depth: function(n) {\n var d = 0 ;\n while(n) {\n d++;\n n = n.parentNode;\n }\n return d;\n }\n }\n };\n scope.findLCA = function(a, b) {\n return scope.utils.LCA.find(a, b);\n }\n window.PointerGestures = scope;\n})(w indow.PointerGestures);\n",
179 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This module implements an map of pointer states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forE ach;\n var POINTERS_FN = function(){ return this.size; };\n function PointerMa p() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS _FN;\n return m;\n } else {\n this.keys = [];\n this.values = [];\n }\n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.val ues[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.v alues.push(inEvent);\n }\n },\n has: function(inId) {\n return t his.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1 );\n this.values.splice(i, 1);\n }\n },\n get: function(inId) {\n var i = this.keys.indexOf(inId);\n return this.values[i];\n },\ n clear: function() {\n this.keys.length = 0;\n this.values.length = 0;\n },\n // return value, key, map\n forEach: function(callback, thi sArg) {\n this.values.forEach(function(v, i) {\n callback.call(thisA rg, v, this.keys[i], this);\n }, this);\n },\n pointers: function() { \n return this.keys.length;\n }\n };\n\n scope.PointerMap = PointerMap ;\n})(window.PointerGestures);\n", 179 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This module implements an map of pointer states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forE ach;\n var POINTERS_FN = function(){ return this.size; };\n function PointerMa p() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS _FN;\n return m;\n } else {\n this.keys = [];\n this.values = [];\n }\n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.val ues[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.v alues.push(inEvent);\n }\n },\n has: function(inId) {\n return t his.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1 );\n this.values.splice(i, 1);\n }\n },\n get: function(inId) {\n var i = this.keys.indexOf(inId);\n return this.values[i];\n },\ n clear: function() {\n this.keys.length = 0;\n this.values.length = 0;\n },\n // return value, key, map\n forEach: function(callback, thi sArg) {\n this.values.forEach(function(v, i) {\n callback.call(thisA rg, v, this.keys[i], this);\n }, this);\n },\n pointers: function() { \n return this.keys.length;\n }\n };\n\n scope.PointerMap = PointerMap ;\n})(window.PointerGestures);\n",
180 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEv ent\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX ',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey' ,\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width', \n 'height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType', \n 'hwTimestamp',\n 'isPrimary',\n // event instance\n 'type',\n 'target',\n 'currentTarget',\n 'screenX',\n 'screenY',\n 'pageX',\n 'pageY',\n 'tapPrevented'\n ];\n\n var CLONE_DEFAULTS = [\n // MouseE vent\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n // DO M Level 3\n 0,\n // PointerEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n false,\n // event instance\n '',\n null,\n null,\n 0,\n 0,\n 0,\n 0\n ];\n\n var dispatcher = {\n hand ledEvents: new WeakMap(),\n targets: new WeakMap(),\n handlers: {},\n r ecognizers: {},\n events: {},\n // Add a new gesture recognizer to the eve nt listeners.\n // Recognizer needs an `events` property.\n registerRecogn izer: function(inName, inRecognizer) {\n var r = inRecognizer;\n this. recognizers[inName] = r;\n r.events.forEach(function(e) {\n if (r[e] ) {\n this.events[e] = true;\n var f = r[e].bind(r);\n this.addHandler(e, f);\n }\n }, this);\n },\n addHandler: fu nction(inEvent, inFn) {\n var e = inEvent;\n if (!this.handlers[e]) {\ n this.handlers[e] = [];\n }\n this.handlers[e].push(inFn);\n },\n // add event listeners for inTarget\n registerTarget: function(inTa rget) {\n this.listen(Object.keys(this.events), inTarget);\n },\n // remove event listeners for inTarget\n unregisterTarget: function(inTarget) {\ n this.unlisten(Object.keys(this.events), inTarget);\n },\n // LISTEN ER LOGIC\n eventHandler: function(inEvent) {\n if (this.handledEvents.ge t(inEvent)) {\n return;\n }\n var type = inEvent.type, fns = th is.handlers[type];\n if (fns) {\n this.makeQueue(fns, inEvent);\n }\n this.handledEvents.set(inEvent, true);\n },\n // queue event f or async dispatch\n makeQueue: function(inHandlerFns, inEvent) {\n // mu st clone events to keep the (possibly shadowed) target correct for\n // asy nc dispatching\n var e = this.cloneEvent(inEvent);\n setTimeout(this.r unQueue.bind(this, inHandlerFns, e), 0);\n },\n // Dispatch the queued eve nts\n runQueue: function(inHandlers, inEvent) {\n this.currentPointerId = inEvent.pointerId;\n for (var i = 0, f, l = inHandlers.length; (i < l) && (f = inHandlers[i]); i++) {\n f(inEvent);\n }\n this.currentPo interId = 0;\n },\n // set up event listeners\n listen: function(inEven ts, inTarget) {\n inEvents.forEach(function(e) {\n this.addEvent(e, this.boundHandler, false, inTarget);\n }, this);\n },\n // remove eve nt listeners\n unlisten: function(inEvents) {\n inEvents.forEach(functio n(e) {\n this.removeEvent(e, this.boundHandler, false, inTarget);\n }, this);\n },\n addEvent: function(inEventName, inEventHandler, inCapture , inTarget) {\n inTarget.addEventListener(inEventName, inEventHandler, inCa pture);\n },\n removeEvent: function(inEventName, inEventHandler, inCaptur e, inTarget) {\n inTarget.removeEventListener(inEventName, inEventHandler, inCapture);\n },\n // EVENT CREATION AND TRACKING\n // Creates a new Ev ent of type `inType`, based on the information in\n // `inEvent`.\n makeEv ent: function(inType, inDict) {\n return new PointerGestureEvent(inType, in Dict);\n },\n /*\n * Returns a snapshot of inEvent, with writable prop erties.\n *\n * @method cloneEvent\n * @param {Event} inEvent An eve nt that contains properties to copy.\n * @return {Object} An object containi ng shallow copies of `inEvent`'s\n * properties.\n */\n cloneEvent : function(inEvent) {\n var eventCopy = {}, p;\n for (var i = 0; i < C LONE_PROPS.length; i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = i nEvent[p] || CLONE_DEFAULTS[i];\n }\n return eventCopy;\n },\n / / Dispatches the event to its target.\n dispatchEvent: function(inEvent, inTa rget) {\n var t = inTarget || this.targets.get(inEvent);\n if (t) {\n t.dispatchEvent(inEvent);\n if (inEvent.tapPrevented) {\n this.preventTap(this.currentPointerId);\n }\n }\n },\n asyncD ispatchEvent: function(inEvent, inTarget) {\n var fn = function() {\n this.dispatchEvent(inEvent, inTarget);\n }.bind(this);\n setTimeout( fn, 0);\n },\n preventTap: function(inPointerId) {\n var t = this.rec ognizers.tap;\n if (t){\n t.preventTap(inPointerId);\n }\n } \n };\n dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher);\n scope.dispatcher = dispatcher;\n var registerQueue = [];\n var immediateRegis ter = false;\n /**\n * Enable gesture events for a given scope, typically\n * [ShadowRoots](https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/i ndex.html#shadow-root-object).\n *\n * @for PointerGestures\n * @method re gister\n * @param {ShadowRoot} scope A top level scope to enable gesture\n * support on.\n */\n scope.register = function(inScope) {\n if (immediateRe gister) {\n var pe = window.PointerEventsPolyfill;\n if (pe) {\n pe.register(inScope);\n }\n scope.dispatcher.registerTarget(inScope) ;\n } else {\n registerQueue.push(inScope);\n }\n };\n // wait to r egister scopes until recognizers load\n document.addEventListener('DOMContentLo aded', function() {\n immediateRegister = true;\n registerQueue.push(docum ent);\n registerQueue.forEach(scope.register);\n });\n})(window.PointerGestu res);\n", 180 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEv ent\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX ',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey' ,\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width', \n 'height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType', \n 'hwTimestamp',\n 'isPrimary',\n // event instance\n 'type',\n 'target',\n 'currentTarget',\n 'screenX',\n 'screenY',\n 'pageX',\n 'pageY',\n 'tapPrevented'\n ];\n\n var CLONE_DEFAULTS = [\n // MouseE vent\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n // DO M Level 3\n 0,\n // PointerEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n false,\n // event instance\n '',\n null,\n null,\n 0,\n 0,\n 0,\n 0\n ];\n\n var dispatcher = {\n hand ledEvents: new WeakMap(),\n targets: new WeakMap(),\n handlers: {},\n r ecognizers: {},\n events: {},\n // Add a new gesture recognizer to the eve nt listeners.\n // Recognizer needs an `events` property.\n registerRecogn izer: function(inName, inRecognizer) {\n var r = inRecognizer;\n this. recognizers[inName] = r;\n r.events.forEach(function(e) {\n if (r[e] ) {\n this.events[e] = true;\n var f = r[e].bind(r);\n this.addHandler(e, f);\n }\n }, this);\n },\n addHandler: fu nction(inEvent, inFn) {\n var e = inEvent;\n if (!this.handlers[e]) {\ n this.handlers[e] = [];\n }\n this.handlers[e].push(inFn);\n },\n // add event listeners for inTarget\n registerTarget: function(inTa rget) {\n this.listen(Object.keys(this.events), inTarget);\n },\n // remove event listeners for inTarget\n unregisterTarget: function(inTarget) {\ n this.unlisten(Object.keys(this.events), inTarget);\n },\n // LISTEN ER LOGIC\n eventHandler: function(inEvent) {\n if (this.handledEvents.ge t(inEvent)) {\n return;\n }\n var type = inEvent.type, fns = th is.handlers[type];\n if (fns) {\n this.makeQueue(fns, inEvent);\n }\n this.handledEvents.set(inEvent, true);\n },\n // queue event f or async dispatch\n makeQueue: function(inHandlerFns, inEvent) {\n // mu st clone events to keep the (possibly shadowed) target correct for\n // asy nc dispatching\n var e = this.cloneEvent(inEvent);\n setTimeout(this.r unQueue.bind(this, inHandlerFns, e), 0);\n },\n // Dispatch the queued eve nts\n runQueue: function(inHandlers, inEvent) {\n this.currentPointerId = inEvent.pointerId;\n for (var i = 0, f, l = inHandlers.length; (i < l) && (f = inHandlers[i]); i++) {\n f(inEvent);\n }\n this.currentPo interId = 0;\n },\n // set up event listeners\n listen: function(inEven ts, inTarget) {\n inEvents.forEach(function(e) {\n this.addEvent(e, this.boundHandler, false, inTarget);\n }, this);\n },\n // remove eve nt listeners\n unlisten: function(inEvents) {\n inEvents.forEach(functio n(e) {\n this.removeEvent(e, this.boundHandler, false, inTarget);\n }, this);\n },\n addEvent: function(inEventName, inEventHandler, inCapture , inTarget) {\n inTarget.addEventListener(inEventName, inEventHandler, inCa pture);\n },\n removeEvent: function(inEventName, inEventHandler, inCaptur e, inTarget) {\n inTarget.removeEventListener(inEventName, inEventHandler, inCapture);\n },\n // EVENT CREATION AND TRACKING\n // Creates a new Ev ent of type `inType`, based on the information in\n // `inEvent`.\n makeEv ent: function(inType, inDict) {\n return new PointerGestureEvent(inType, in Dict);\n },\n /*\n * Returns a snapshot of inEvent, with writable prop erties.\n *\n * @method cloneEvent\n * @param {Event} inEvent An eve nt that contains properties to copy.\n * @return {Object} An object containi ng shallow copies of `inEvent`'s\n * properties.\n */\n cloneEvent : function(inEvent) {\n var eventCopy = {}, p;\n for (var i = 0; i < C LONE_PROPS.length; i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = i nEvent[p] || CLONE_DEFAULTS[i];\n }\n return eventCopy;\n },\n / / Dispatches the event to its target.\n dispatchEvent: function(inEvent, inTa rget) {\n var t = inTarget || this.targets.get(inEvent);\n if (t) {\n t.dispatchEvent(inEvent);\n if (inEvent.tapPrevented) {\n this.preventTap(this.currentPointerId);\n }\n }\n },\n asyncD ispatchEvent: function(inEvent, inTarget) {\n var fn = function() {\n this.dispatchEvent(inEvent, inTarget);\n }.bind(this);\n setTimeout( fn, 0);\n },\n preventTap: function(inPointerId) {\n var t = this.rec ognizers.tap;\n if (t){\n t.preventTap(inPointerId);\n }\n } \n };\n dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher);\n scope.dispatcher = dispatcher;\n var registerQueue = [];\n var immediateRegis ter = false;\n /**\n * Enable gesture events for a given scope, typically\n * [ShadowRoots](https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/i ndex.html#shadow-root-object).\n *\n * @for PointerGestures\n * @method re gister\n * @param {ShadowRoot} scope A top level scope to enable gesture\n * support on.\n */\n scope.register = function(inScope) {\n if (immediateRe gister) {\n var pe = window.PointerEventsPolyfill;\n if (pe) {\n pe.register(inScope);\n }\n scope.dispatcher.registerTarget(inScope) ;\n } else {\n registerQueue.push(inScope);\n }\n };\n // wait to r egister scopes until recognizers load\n document.addEventListener('DOMContentLo aded', function() {\n immediateRegister = true;\n registerQueue.push(docum ent);\n registerQueue.forEach(scope.register);\n });\n})(window.PointerGestu res);\n",
181 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This event is fired when a pointer is held down f or 200ms.\n *\n * @module PointerGestures\n * @submodule Events\n * @class hold\ n */\n/**\n * Milliseconds pointer has been held down.\n * @type Number\n * @pro perty holdTime\n */\n/**\n * Type of pointer that made the holding event.\n * @t ype String\n * @property pointerType\n */\n/**\n * This event is fired every 200 ms while a pointer is held down.\n *\n * @class holdpulse\n * @extends hold\n */ \n/**\n * This event is fired when a held pointer is released or moved.\n *\n * @class released\n */\n/**\n * Type of pointer that made the holding event.\n * @ type String\n * @property pointerType\n */\n\n(function(scope) {\n var dispatch er = scope.dispatcher;\n var hold = {\n // wait at least HOLD_DELAY ms betwe en hold and pulse events\n HOLD_DELAY: 200,\n // pointer can move WIGGLE_T HRESHOLD pixels before not counting as a hold\n WIGGLE_THRESHOLD: 16,\n ev ents: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n ' pointercancel'\n ],\n heldPointer: null,\n holdJob: null,\n pulse: f unction() {\n var hold = Date.now() - this.heldPointer.timeStamp;\n va r type = this.held ? 'holdpulse' : 'hold';\n this.fireHold(type, hold);\n this.held = true;\n },\n cancel: function() {\n clearInterval(thi s.holdJob);\n if (this.held) {\n this.fireHold('release');\n }\ n this.held = false;\n this.heldPointer = null;\n this.target = n ull;\n this.holdJob = null;\n },\n pointerdown: function(inEvent) {\n if (inEvent.isPrimary && !this.heldPointer) {\n this.heldPointer = inEvent;\n this.target = inEvent.target;\n this.holdJob = setInter val(this.pulse.bind(this), this.HOLD_DELAY);\n }\n },\n pointerup: fu nction(inEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) {\n this.cancel();\n }\n },\n pointercancel : function(inEvent) {\n this.cancel();\n },\n pointermove: function(i nEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent. pointerId) {\n var x = inEvent.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - this.heldPointer.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {\n this.cancel();\n }\n }\n },\n fireHold: function(inType, inHoldTime) {\n var p = {\n poi nterType: this.heldPointer.pointerType\n };\n if (inHoldTime) {\n p.holdTime = inHoldTime;\n }\n var e = dispatcher.makeEvent(inType, p);\n dispatcher.dispatchEvent(e, this.target);\n if (e.tapPrevented) {\n dispatcher.preventTap(this.heldPointer.pointerId);\n }\n }\n };\n dispatcher.registerRecognizer('hold', hold);\n})(window.PointerGestures) ;\n", 181 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This event is fired when a pointer is held down f or 200ms.\n *\n * @module PointerGestures\n * @submodule Events\n * @class hold\ n */\n/**\n * Milliseconds pointer has been held down.\n * @type Number\n * @pro perty holdTime\n */\n/**\n * Type of pointer that made the holding event.\n * @t ype String\n * @property pointerType\n */\n/**\n * This event is fired every 200 ms while a pointer is held down.\n *\n * @class holdpulse\n * @extends hold\n */ \n/**\n * This event is fired when a held pointer is released or moved.\n *\n * @class released\n */\n/**\n * Type of pointer that made the holding event.\n * @ type String\n * @property pointerType\n */\n\n(function(scope) {\n var dispatch er = scope.dispatcher;\n var hold = {\n // wait at least HOLD_DELAY ms betwe en hold and pulse events\n HOLD_DELAY: 200,\n // pointer can move WIGGLE_T HRESHOLD pixels before not counting as a hold\n WIGGLE_THRESHOLD: 16,\n ev ents: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n ' pointercancel'\n ],\n heldPointer: null,\n holdJob: null,\n pulse: f unction() {\n var hold = Date.now() - this.heldPointer.timeStamp;\n va r type = this.held ? 'holdpulse' : 'hold';\n this.fireHold(type, hold);\n this.held = true;\n },\n cancel: function() {\n clearInterval(thi s.holdJob);\n if (this.held) {\n this.fireHold('release');\n }\ n this.held = false;\n this.heldPointer = null;\n this.target = n ull;\n this.holdJob = null;\n },\n pointerdown: function(inEvent) {\n if (inEvent.isPrimary && !this.heldPointer) {\n this.heldPointer = inEvent;\n this.target = inEvent.target;\n this.holdJob = setInter val(this.pulse.bind(this), this.HOLD_DELAY);\n }\n },\n pointerup: fu nction(inEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) {\n this.cancel();\n }\n },\n pointercancel : function(inEvent) {\n this.cancel();\n },\n pointermove: function(i nEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent. pointerId) {\n var x = inEvent.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - this.heldPointer.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {\n this.cancel();\n }\n }\n },\n fireHold: function(inType, inHoldTime) {\n var p = {\n poi nterType: this.heldPointer.pointerType\n };\n if (inHoldTime) {\n p.holdTime = inHoldTime;\n }\n var e = dispatcher.makeEvent(inType, p);\n dispatcher.dispatchEvent(e, this.target);\n if (e.tapPrevented) {\n dispatcher.preventTap(this.heldPointer.pointerId);\n }\n }\n };\n dispatcher.registerRecognizer('hold', hold);\n})(window.PointerGestures) ;\n",
182 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This event denotes the beginning of a series of t racking events.\n *\n * @module PointerGestures\n * @submodule Events\n * @class trackstart\n */\n/**\n * Pixels moved in the x direction since trackstart.\n * @type Number\n * @property dx\n */\n/**\n * Pixes moved in the y direction since trackstart.\n * @type Number\n * @property dy\n */\n/**\n * Pixels moved in the x direction since the last track.\n * @type Number\n * @property ddx\n */\n/**\ n * Pixles moved in the y direction since the last track.\n * @type Number\n * @ property ddy\n */\n/**\n * The clientX position of the track gesture.\n * @type Number\n * @property clientX\n */\n/**\n * The clientY position of the track ges ture.\n * @type Number\n * @property clientY\n */\n/**\n * The pageX position of the track gesture.\n * @type Number\n * @property pageX\n */\n/**\n * The pageY position of the track gesture.\n * @type Number\n * @property pageY\n */\n/**\n * The screenX position of the track gesture.\n * @type Number\n * @property scr eenX\n */\n/**\n * The screenY position of the track gesture.\n * @type Number\n * @property screenY\n */\n/**\n * The last x axis direction of the pointer.\n * @type Number\n * @property xDirection\n */\n/**\n * The last y axis direction o f the pointer.\n * @type Number\n * @property yDirection\n */\n/**\n * A shared object between all tracking events.\n * @type Object\n * @property trackInfo\n * /\n/**\n * The element currently under the pointer.\n * @type Element\n * @prope rty relatedTarget\n */\n/**\n * The type of pointer that make the track gesture. \n * @type String\n * @property pointerType\n */\n/**\n *\n * This event fires f or all pointer movement being tracked.\n *\n * @class track\n * @extends trackst art\n */\n/**\n * This event fires when the pointer is no longer being tracked.\ n *\n * @class trackend\n * @extends trackstart\n */\n\n (function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = new scope.PointerMap();\ n var track = {\n events: [\n 'pointerdown',\n 'pointermove',\ n 'pointerup',\n 'pointercancel'\n ],\n WIGGLE_THRESHOLD: 4, \n clampDir: function(inDelta) {\n return inDelta > 0 ? 1 : -1;\n },\n calcPositionDelta: function(inA, inB) {\n var x = 0, y = 0;\n if (inA && inB) {\n x = inB.pageX - inA.pageX;\n y = inB.page Y - inA.pageY;\n }\n return {x: x, y: y};\n },\n fireTrack: function(inType, inEvent, inTrackingData) {\n var t = inTrackingData;\n var d = this.calcPositionDelta(t.downEvent, inEvent);\n var dd = this. calcPositionDelta(t.lastMoveEvent, inEvent);\n if (dd.x) {\n t.xDi rection = this.clampDir(dd.x);\n }\n if (dd.y) {\n t.yDirect ion = this.clampDir(dd.y);\n }\n var trackData = {\n dx: d.x ,\n dy: d.y,\n ddx: dd.x,\n ddy: dd.y,\n clientX : inEvent.clientX,\n clientY: inEvent.clientY,\n pageX: inEvent. pageX,\n pageY: inEvent.pageY,\n screenX: inEvent.screenX,\n screenY: inEvent.screenY,\n xDirection: t.xDirection,\n yDi rection: t.yDirection,\n trackInfo: t.trackInfo,\n relatedTarget : inEvent.target,\n pointerType: inEvent.pointerType\n };\n var e = dispatcher.makeEvent(inType, trackData);\n t.lastMoveEvent = inEve nt;\n dispatcher.dispatchEvent(e, t.downTarget);\n },\n pointerdow n: function(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType === 'mouse' ? inEvent.buttons === 1 : true)) {\n var p = {\n down Event: inEvent,\n downTarget: inEvent.target,\n trackInfo: { },\n lastMoveEvent: null,\n xDirection: 0,\n yDire ction: 0,\n tracking: false\n };\n pointermap.set(inEv ent.pointerId, p);\n }\n },\n pointermove: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (! p.tracking) {\n var d = this.calcPositionDelta(p.downEvent, inEvent);\ n var move = d.x * d.x + d.y * d.y;\n // start tracking only if finger moves more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_T HRESHOLD) {\n p.tracking = true;\n this.fireTrack('track start', p.downEvent, p);\n this.fireTrack('track', inEvent, p);\n }\n } else {\n this.fireTrack('track', inEvent, p);\n }\n }\n },\n pointerup: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (p.tracking) {\n this.fireTrack('trackend', inEvent, p);\n }\n poin termap.delete(inEvent.pointerId);\n }\n },\n pointercancel: functi on(inEvent) {\n this.pointerup(inEvent);\n }\n };\n dispatcher.reg isterRecognizer('track', track);\n })(window.PointerGestures);\n", 182 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This event denotes the beginning of a series of t racking events.\n *\n * @module PointerGestures\n * @submodule Events\n * @class trackstart\n */\n/**\n * Pixels moved in the x direction since trackstart.\n * @type Number\n * @property dx\n */\n/**\n * Pixes moved in the y direction since trackstart.\n * @type Number\n * @property dy\n */\n/**\n * Pixels moved in the x direction since the last track.\n * @type Number\n * @property ddx\n */\n/**\ n * Pixles moved in the y direction since the last track.\n * @type Number\n * @ property ddy\n */\n/**\n * The clientX position of the track gesture.\n * @type Number\n * @property clientX\n */\n/**\n * The clientY position of the track ges ture.\n * @type Number\n * @property clientY\n */\n/**\n * The pageX position of the track gesture.\n * @type Number\n * @property pageX\n */\n/**\n * The pageY position of the track gesture.\n * @type Number\n * @property pageY\n */\n/**\n * The screenX position of the track gesture.\n * @type Number\n * @property scr eenX\n */\n/**\n * The screenY position of the track gesture.\n * @type Number\n * @property screenY\n */\n/**\n * The last x axis direction of the pointer.\n * @type Number\n * @property xDirection\n */\n/**\n * The last y axis direction o f the pointer.\n * @type Number\n * @property yDirection\n */\n/**\n * A shared object between all tracking events.\n * @type Object\n * @property trackInfo\n * /\n/**\n * The element currently under the pointer.\n * @type Element\n * @prope rty relatedTarget\n */\n/**\n * The type of pointer that make the track gesture. \n * @type String\n * @property pointerType\n */\n/**\n *\n * This event fires f or all pointer movement being tracked.\n *\n * @class track\n * @extends trackst art\n */\n/**\n * This event fires when the pointer is no longer being tracked.\ n *\n * @class trackend\n * @extends trackstart\n */\n\n (function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = new scope.PointerMap();\ n var track = {\n events: [\n 'pointerdown',\n 'pointermove',\ n 'pointerup',\n 'pointercancel'\n ],\n WIGGLE_THRESHOLD: 4, \n clampDir: function(inDelta) {\n return inDelta > 0 ? 1 : -1;\n },\n calcPositionDelta: function(inA, inB) {\n var x = 0, y = 0;\n if (inA && inB) {\n x = inB.pageX - inA.pageX;\n y = inB.page Y - inA.pageY;\n }\n return {x: x, y: y};\n },\n fireTrack: function(inType, inEvent, inTrackingData) {\n var t = inTrackingData;\n var d = this.calcPositionDelta(t.downEvent, inEvent);\n var dd = this. calcPositionDelta(t.lastMoveEvent, inEvent);\n if (dd.x) {\n t.xDi rection = this.clampDir(dd.x);\n }\n if (dd.y) {\n t.yDirect ion = this.clampDir(dd.y);\n }\n var trackData = {\n dx: d.x ,\n dy: d.y,\n ddx: dd.x,\n ddy: dd.y,\n clientX : inEvent.clientX,\n clientY: inEvent.clientY,\n pageX: inEvent. pageX,\n pageY: inEvent.pageY,\n screenX: inEvent.screenX,\n screenY: inEvent.screenY,\n xDirection: t.xDirection,\n yDi rection: t.yDirection,\n trackInfo: t.trackInfo,\n relatedTarget : inEvent.target,\n pointerType: inEvent.pointerType\n };\n var e = dispatcher.makeEvent(inType, trackData);\n t.lastMoveEvent = inEve nt;\n dispatcher.dispatchEvent(e, t.downTarget);\n },\n pointerdow n: function(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType === 'mouse' ? inEvent.buttons === 1 : true)) {\n var p = {\n down Event: inEvent,\n downTarget: inEvent.target,\n trackInfo: { },\n lastMoveEvent: null,\n xDirection: 0,\n yDire ction: 0,\n tracking: false\n };\n pointermap.set(inEv ent.pointerId, p);\n }\n },\n pointermove: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (! p.tracking) {\n var d = this.calcPositionDelta(p.downEvent, inEvent);\ n var move = d.x * d.x + d.y * d.y;\n // start tracking only if finger moves more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_T HRESHOLD) {\n p.tracking = true;\n this.fireTrack('track start', p.downEvent, p);\n this.fireTrack('track', inEvent, p);\n }\n } else {\n this.fireTrack('track', inEvent, p);\n }\n }\n },\n pointerup: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (p.tracking) {\n this.fireTrack('trackend', inEvent, p);\n }\n poin termap.delete(inEvent.pointerId);\n }\n },\n pointercancel: functi on(inEvent) {\n this.pointerup(inEvent);\n }\n };\n dispatcher.reg isterRecognizer('track', track);\n })(window.PointerGestures);\n",
183 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This event denotes a rapid down/move/up sequence from a pointer.\n *\n * The event is sent to the first element the pointer went down on.\n *\n * @module PointerGestures\n * @submodule Events\n * @class flick\ n */\n/**\n * Signed velocity of the flick in the x direction.\n * @property xVe locity\n * @type Number\n */\n/**\n * Signed velocity of the flick in the y dire ction.\n * @type Number\n * @property yVelocity\n */\n/**\n * Unsigned total vel ocity of the flick.\n * @type Number\n * @property velocity\n */\n/**\n * Angle of the flick in degrees, with 0 along the\n * positive x axis.\n * @type Number\ n * @property angle\n */\n/**\n * Axis with the greatest absolute velocity. Deno ted\n * with 'x' or 'y'.\n * @type String\n * @property majorAxis\n */\n/**\n * Type of the pointer that made the flick.\n * @type String\n * @property pointerT ype\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var flic k = {\n // TODO(dfreedman): value should be low enough for low speed flicks, but\n // high enough to remove accidental flicks\n MIN_VELOCITY: 0.5 /* px /ms */,\n MAX_QUEUE: 4,\n moveQueue: [],\n target: null,\n pointerId : null,\n events: [\n 'pointerdown',\n 'pointermove',\n 'point erup',\n 'pointercancel'\n ],\n pointerdown: function(inEvent) {\n if (inEvent.isPrimary && !this.pointerId) {\n this.pointerId = inEvent .pointerId;\n this.target = inEvent.target;\n this.addMove(inEvent );\n }\n },\n pointermove: function(inEvent) {\n if (inEvent.poi nterId === this.pointerId) {\n this.addMove(inEvent);\n }\n },\n pointerup: function(inEvent) {\n if (inEvent.pointerId === this.pointerI d) {\n this.fireFlick(inEvent);\n }\n this.cleanup();\n },\n pointercancel: function(inEvent) {\n this.cleanup();\n },\n clean up: function() {\n this.moveQueue = [];\n this.target = null;\n t his.pointerId = null;\n },\n addMove: function(inEvent) {\n if (this. moveQueue.length >= this.MAX_QUEUE) {\n this.moveQueue.shift();\n }\ n this.moveQueue.push(inEvent);\n },\n fireFlick: function(inEvent) { \n var e = inEvent;\n var l = this.moveQueue.length;\n var dt, dx , dy, tx, ty, tv, x = 0, y = 0, v = 0;\n // flick based off the fastest seg ment of movement\n for (var i = 0, m; i < l && (m = this.moveQueue[i]); i++ ) {\n dt = e.timeStamp - m.timeStamp;\n dx = e.clientX - m.clientX , dy = e.clientY - m.clientY;\n tx = dx / dt, ty = dy / dt, tv = Math.sqr t(tx * tx + ty * ty);\n if (tv > v) {\n x = tx, y = ty, v = tv;\ n }\n }\n var ma = Math.abs(x) > Math.abs(y) ? 'x' : 'y';\n var a = this.calcAngle(x, y);\n if (Math.abs(v) >= this.MIN_VELOCITY) {\n var ev = dispatcher.makeEvent('flick', {\n xVelocity: x,\n yVelocity: y,\n velocity: v,\n angle: a,\n major Axis: ma,\n pointerType: inEvent.pointerType\n });\n disp atcher.dispatchEvent(ev, this.target);\n }\n },\n calcAngle: function (inX, inY) {\n return (Math.atan2(inY, inX) * 180 / Math.PI);\n }\n };\ n dispatcher.registerRecognizer('flick', flick);\n})(window.PointerGestures);\n ", 183 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This event denotes a rapid down/move/up sequence from a pointer.\n *\n * The event is sent to the first element the pointer went down on.\n *\n * @module PointerGestures\n * @submodule Events\n * @class flick\ n */\n/**\n * Signed velocity of the flick in the x direction.\n * @property xVe locity\n * @type Number\n */\n/**\n * Signed velocity of the flick in the y dire ction.\n * @type Number\n * @property yVelocity\n */\n/**\n * Unsigned total vel ocity of the flick.\n * @type Number\n * @property velocity\n */\n/**\n * Angle of the flick in degrees, with 0 along the\n * positive x axis.\n * @type Number\ n * @property angle\n */\n/**\n * Axis with the greatest absolute velocity. Deno ted\n * with 'x' or 'y'.\n * @type String\n * @property majorAxis\n */\n/**\n * Type of the pointer that made the flick.\n * @type String\n * @property pointerT ype\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var flic k = {\n // TODO(dfreedman): value should be low enough for low speed flicks, but\n // high enough to remove accidental flicks\n MIN_VELOCITY: 0.5 /* px /ms */,\n MAX_QUEUE: 4,\n moveQueue: [],\n target: null,\n pointerId : null,\n events: [\n 'pointerdown',\n 'pointermove',\n 'point erup',\n 'pointercancel'\n ],\n pointerdown: function(inEvent) {\n if (inEvent.isPrimary && !this.pointerId) {\n this.pointerId = inEvent .pointerId;\n this.target = inEvent.target;\n this.addMove(inEvent );\n }\n },\n pointermove: function(inEvent) {\n if (inEvent.poi nterId === this.pointerId) {\n this.addMove(inEvent);\n }\n },\n pointerup: function(inEvent) {\n if (inEvent.pointerId === this.pointerI d) {\n this.fireFlick(inEvent);\n }\n this.cleanup();\n },\n pointercancel: function(inEvent) {\n this.cleanup();\n },\n clean up: function() {\n this.moveQueue = [];\n this.target = null;\n t his.pointerId = null;\n },\n addMove: function(inEvent) {\n if (this. moveQueue.length >= this.MAX_QUEUE) {\n this.moveQueue.shift();\n }\ n this.moveQueue.push(inEvent);\n },\n fireFlick: function(inEvent) { \n var e = inEvent;\n var l = this.moveQueue.length;\n var dt, dx , dy, tx, ty, tv, x = 0, y = 0, v = 0;\n // flick based off the fastest seg ment of movement\n for (var i = 0, m; i < l && (m = this.moveQueue[i]); i++ ) {\n dt = e.timeStamp - m.timeStamp;\n dx = e.clientX - m.clientX , dy = e.clientY - m.clientY;\n tx = dx / dt, ty = dy / dt, tv = Math.sqr t(tx * tx + ty * ty);\n if (tv > v) {\n x = tx, y = ty, v = tv;\ n }\n }\n var ma = Math.abs(x) > Math.abs(y) ? 'x' : 'y';\n var a = this.calcAngle(x, y);\n if (Math.abs(v) >= this.MIN_VELOCITY) {\n var ev = dispatcher.makeEvent('flick', {\n xVelocity: x,\n yVelocity: y,\n velocity: v,\n angle: a,\n major Axis: ma,\n pointerType: inEvent.pointerType\n });\n disp atcher.dispatchEvent(ev, this.target);\n }\n },\n calcAngle: function (inX, inY) {\n return (Math.atan2(inY, inX) * 180 / Math.PI);\n }\n };\ n dispatcher.registerRecognizer('flick', flick);\n})(window.PointerGestures);\n ",
184 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/*\n * Basic strategy: find the farthest apart points, us e as diameter of circle\n * react to size change and rotation of the chord\n */\ n\n/**\n * @module PointerGestures\n * @submodule Events\n * @class pinch\n */\n /**\n * Scale of the pinch zoom gesture\n * @property scale\n * @type Number\n * /\n/**\n * Center X position of pointers causing pinch\n * @property centerX\n * @type Number\n */\n/**\n * Center Y position of pointers causing pinch\n * @pro perty centerY\n * @type Number\n */\n\n/**\n * @module PointerGestures\n * @subm odule Events\n * @class rotate\n */\n/**\n * Angle (in degrees) of rotation. Mea sured from starting positions of pointers.\n * @property angle\n * @type Number\ n */\n/**\n * Center X position of pointers causing rotation\n * @property cente rX\n * @type Number\n */\n/**\n * Center Y position of pointers causing rotation \n * @property centerY\n * @type Number\n */\n(function(scope) {\n var dispatch er = scope.dispatcher;\n var pointermap = new scope.PointerMap();\n var RAD_TO _DEG = 180 / Math.PI;\n var pinch = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointercancel'\n ],\n refere nce: {},\n pointerdown: function(ev) {\n pointermap.set(ev.pointerId, ev );\n if (pointermap.pointers() == 2) {\n var points = this.calcChord ();\n var angle = this.calcAngle(points);\n this.reference = {\n angle: angle,\n diameter: points.diameter,\n target: s cope.findLCA(points.a.target, points.b.target)\n };\n }\n },\n pointerup: function(ev) {\n pointermap.delete(ev.pointerId);\n },\n pointermove: function(ev) {\n if (pointermap.has(ev.pointerId)) {\n pointermap.set(ev.pointerId, ev);\n if (pointermap.pointers() > 1) {\n this.calcPinchRotate();\n }\n }\n },\n pointercancel: f unction(ev) {\n this.pointerup(ev);\n },\n dispatchPinch: function(di ameter, points) {\n var zoom = diameter / this.reference.diameter;\n v ar ev = dispatcher.makeEvent('pinch', {\n scale: zoom,\n centerX: points.center.x,\n centerY: points.center.y\n });\n dispatcher. dispatchEvent(ev, this.reference.target);\n },\n dispatchRotate: function( angle, points) {\n var diff = Math.round((angle - this.reference.angle) % 3 60);\n var ev = dispatcher.makeEvent('rotate', {\n angle: diff,\n centerX: points.center.x,\n centerY: points.center.y\n });\n dispatcher.dispatchEvent(ev, this.reference.target);\n },\n calcPinchRo tate: function() {\n var points = this.calcChord();\n var diameter = p oints.diameter;\n var angle = this.calcAngle(points);\n if (diameter ! = this.reference.diameter) {\n this.dispatchPinch(diameter, points);\n }\n if (angle != this.reference.angle) {\n this.dispatchRotate(an gle, points);\n }\n },\n calcChord: function() {\n var pointers = [];\n pointermap.forEach(function(p) {\n pointers.push(p);\n });\n var dist = 0;\n var points = {};\n var x, y, d;\n for (var i = 0; i < pointers.length; i++) {\n var a = pointers[i];\n f or (var j = i + 1; j < pointers.length; j++) {\n var b = pointers[j];\n x = Math.abs(a.clientX - b.clientX);\n y = Math.abs(a.clientY - b.clientY);\n d = x + y;\n if (d > dist) {\n dis t = d;\n points = {a: a, b: b};\n }\n }\n }\n x = Math.abs(points.a.clientX + points.b.clientX) / 2;\n y = Math.abs(po ints.a.clientY + points.b.clientY) / 2;\n points.center = { x: x, y: y };\n points.diameter = dist;\n return points;\n },\n calcAngle: func tion(points) {\n var x = points.a.clientX - points.b.clientX;\n var y = points.a.clientY - points.b.clientY;\n return (360 + Math.atan2(y, x) * R AD_TO_DEG) % 360;\n },\n };\n dispatcher.registerRecognizer('pinch', pinch) ;\n})(window.PointerGestures);\n", 184 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/*\n * Basic strategy: find the farthest apart points, us e as diameter of circle\n * react to size change and rotation of the chord\n */\ n\n/**\n * @module PointerGestures\n * @submodule Events\n * @class pinch\n */\n /**\n * Scale of the pinch zoom gesture\n * @property scale\n * @type Number\n * /\n/**\n * Center X position of pointers causing pinch\n * @property centerX\n * @type Number\n */\n/**\n * Center Y position of pointers causing pinch\n * @pro perty centerY\n * @type Number\n */\n\n/**\n * @module PointerGestures\n * @subm odule Events\n * @class rotate\n */\n/**\n * Angle (in degrees) of rotation. Mea sured from starting positions of pointers.\n * @property angle\n * @type Number\ n */\n/**\n * Center X position of pointers causing rotation\n * @property cente rX\n * @type Number\n */\n/**\n * Center Y position of pointers causing rotation \n * @property centerY\n * @type Number\n */\n(function(scope) {\n var dispatch er = scope.dispatcher;\n var pointermap = new scope.PointerMap();\n var RAD_TO _DEG = 180 / Math.PI;\n var pinch = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointercancel'\n ],\n refere nce: {},\n pointerdown: function(ev) {\n pointermap.set(ev.pointerId, ev );\n if (pointermap.pointers() == 2) {\n var points = this.calcChord ();\n var angle = this.calcAngle(points);\n this.reference = {\n angle: angle,\n diameter: points.diameter,\n target: s cope.findLCA(points.a.target, points.b.target)\n };\n }\n },\n pointerup: function(ev) {\n pointermap.delete(ev.pointerId);\n },\n pointermove: function(ev) {\n if (pointermap.has(ev.pointerId)) {\n pointermap.set(ev.pointerId, ev);\n if (pointermap.pointers() > 1) {\n this.calcPinchRotate();\n }\n }\n },\n pointercancel: f unction(ev) {\n this.pointerup(ev);\n },\n dispatchPinch: function(di ameter, points) {\n var zoom = diameter / this.reference.diameter;\n v ar ev = dispatcher.makeEvent('pinch', {\n scale: zoom,\n centerX: points.center.x,\n centerY: points.center.y\n });\n dispatcher. dispatchEvent(ev, this.reference.target);\n },\n dispatchRotate: function( angle, points) {\n var diff = Math.round((angle - this.reference.angle) % 3 60);\n var ev = dispatcher.makeEvent('rotate', {\n angle: diff,\n centerX: points.center.x,\n centerY: points.center.y\n });\n dispatcher.dispatchEvent(ev, this.reference.target);\n },\n calcPinchRo tate: function() {\n var points = this.calcChord();\n var diameter = p oints.diameter;\n var angle = this.calcAngle(points);\n if (diameter ! = this.reference.diameter) {\n this.dispatchPinch(diameter, points);\n }\n if (angle != this.reference.angle) {\n this.dispatchRotate(an gle, points);\n }\n },\n calcChord: function() {\n var pointers = [];\n pointermap.forEach(function(p) {\n pointers.push(p);\n });\n var dist = 0;\n var points = {};\n var x, y, d;\n for (var i = 0; i < pointers.length; i++) {\n var a = pointers[i];\n f or (var j = i + 1; j < pointers.length; j++) {\n var b = pointers[j];\n x = Math.abs(a.clientX - b.clientX);\n y = Math.abs(a.clientY - b.clientY);\n d = x + y;\n if (d > dist) {\n dis t = d;\n points = {a: a, b: b};\n }\n }\n }\n x = Math.abs(points.a.clientX + points.b.clientX) / 2;\n y = Math.abs(po ints.a.clientY + points.b.clientY) / 2;\n points.center = { x: x, y: y };\n points.diameter = dist;\n return points;\n },\n calcAngle: func tion(points) {\n var x = points.a.clientX - points.b.clientX;\n var y = points.a.clientY - points.b.clientY;\n return (360 + Math.atan2(y, x) * R AD_TO_DEG) % 360;\n },\n };\n dispatcher.registerRecognizer('pinch', pinch) ;\n})(window.PointerGestures);\n",
185 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This event is fired when a pointer quickly goes d own and up, and is used to\n * denote activation.\n *\n * Any gesture event can prevent the tap event from being created by calling\n * `event.preventTap`.\n *\ n * Any pointer event can prevent the tap by setting the `tapPrevented` property \n * on itself.\n *\n * @module PointerGestures\n * @submodule Events\n * @class tap\n */\n/**\n * X axis position of the tap.\n * @property x\n * @type Number\ n */\n/**\n * Y axis position of the tap.\n * @property y\n * @type Number\n */\ n/**\n * Type of the pointer that made the tap.\n * @property pointerType\n * @t ype String\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = new scope.PointerMap();\n var tap = {\n events: [\n 'poin terdown',\n 'pointermove',\n 'pointerup',\n 'pointercancel',\n 'keyup'\n ],\n pointerdown: function(inEvent) {\n if (inEvent.isPr imary && !inEvent.tapPrevented) {\n pointermap.set(inEvent.pointerId, {\n target: inEvent.target,\n x: inEvent.clientX,\n y: i nEvent.clientY\n });\n }\n },\n pointermove: function(inEvent) {\n if (inEvent.isPrimary) {\n var start = pointermap.get(inEvent.p ointerId);\n if (start) {\n if (inEvent.tapPrevented) {\n pointermap.delete(inEvent.pointerId);\n }\n }\n }\n },\n pointerup: function(inEvent) {\n var start = pointermap.get(inEven t.pointerId);\n if (start && !inEvent.tapPrevented) {\n var t = scop e.findLCA(start.target, inEvent.target);\n if (t) {\n var e = di spatcher.makeEvent('tap', {\n x: inEvent.clientX,\n y: inE vent.clientY,\n detail: inEvent.detail,\n pointerType: inE vent.pointerType\n });\n dispatcher.dispatchEvent(e, t);\n }\n }\n pointermap.delete(inEvent.pointerId);\n },\n pointer cancel: function(inEvent) {\n pointermap.delete(inEvent.pointerId);\n }, \n keyup: function(inEvent) {\n var code = inEvent.keyCode;\n // 32 == spacebar\n if (code === 32) {\n var t = inEvent.target;\n if (!(t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement)) {\n dispatcher.dispatchEvent(dispatcher.makeEvent('tap', {\n x: 0 ,\n y: 0,\n detail: 0,\n pointerType: 'unavaila ble'\n }), t);\n }\n }\n },\n preventTap: function(in PointerId) {\n pointermap.delete(inPointerId);\n }\n };\n dispatcher.r egisterRecognizer('tap', tap);\n})(window.PointerGestures);\n", 185 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This event is fired when a pointer quickly goes d own and up, and is used to\n * denote activation.\n *\n * Any gesture event can prevent the tap event from being created by calling\n * `event.preventTap`.\n *\ n * Any pointer event can prevent the tap by setting the `tapPrevented` property \n * on itself.\n *\n * @module PointerGestures\n * @submodule Events\n * @class tap\n */\n/**\n * X axis position of the tap.\n * @property x\n * @type Number\ n */\n/**\n * Y axis position of the tap.\n * @property y\n * @type Number\n */\ n/**\n * Type of the pointer that made the tap.\n * @property pointerType\n * @t ype String\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = new scope.PointerMap();\n var tap = {\n events: [\n 'poin terdown',\n 'pointermove',\n 'pointerup',\n 'pointercancel',\n 'keyup'\n ],\n pointerdown: function(inEvent) {\n if (inEvent.isPr imary && !inEvent.tapPrevented) {\n pointermap.set(inEvent.pointerId, {\n target: inEvent.target,\n x: inEvent.clientX,\n y: i nEvent.clientY\n });\n }\n },\n pointermove: function(inEvent) {\n if (inEvent.isPrimary) {\n var start = pointermap.get(inEvent.p ointerId);\n if (start) {\n if (inEvent.tapPrevented) {\n pointermap.delete(inEvent.pointerId);\n }\n }\n }\n },\n pointerup: function(inEvent) {\n var start = pointermap.get(inEven t.pointerId);\n if (start && !inEvent.tapPrevented) {\n var t = scop e.findLCA(start.target, inEvent.target);\n if (t) {\n var e = di spatcher.makeEvent('tap', {\n x: inEvent.clientX,\n y: inE vent.clientY,\n detail: inEvent.detail,\n pointerType: inE vent.pointerType\n });\n dispatcher.dispatchEvent(e, t);\n }\n }\n pointermap.delete(inEvent.pointerId);\n },\n pointer cancel: function(inEvent) {\n pointermap.delete(inEvent.pointerId);\n }, \n keyup: function(inEvent) {\n var code = inEvent.keyCode;\n // 32 == spacebar\n if (code === 32) {\n var t = inEvent.target;\n if (!(t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement)) {\n dispatcher.dispatchEvent(dispatcher.makeEvent('tap', {\n x: 0 ,\n y: 0,\n detail: 0,\n pointerType: 'unavaila ble'\n }), t);\n }\n }\n },\n preventTap: function(in PointerId) {\n pointermap.delete(inPointerId);\n }\n };\n dispatcher.r egisterRecognizer('tap', tap);\n})(window.PointerGestures);\n",
186 "// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Ve rsion 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http:/ /www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o r agreed to in writing, software\n// distributed under the License is distribute d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe r express or implied.\n// See the License for the specific language governing pe rmissions and\n// limitations under the License.\n\n(function(global) {\n 'use strict';\n\n var filter = Array.prototype.filter.call.bind(Array.prototype.filt er);\n\n function getTreeScope(node) {\n while (node.parentNode) {\n no de = node.parentNode;\n }\n\n return typeof node.getElementById === 'funct ion' ? node : null;\n }\n\n // JScript does not have __proto__. We wrap all ob ject literals with\n // createObject which uses Object.create, Object.definePro perty and\n // Object.getOwnPropertyDescriptor to create a new object that does the exact\n // same thing. The main downside to this solution is that we have to extract\n // all those property descriptors for IE.\n var createObject = (' __proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj ;\n var newObject = Object.create(proto);\n Object.getOwnPropertyN ames(obj).forEach(function(name) {\n Object.defineProperty(newObject, n ame,\n Object.getOwnPropertyDescriptor(obj, name)) ;\n });\n return newObject;\n };\n\n // IE does not support have Document.prototype.contains.\n if (typeof document.contains != 'function') {\n Document.prototype.contains = function(node) {\n if (node === this || node.parentNode === this)\n return true;\n return this.documentEl ement.contains(node);\n }\n }\n\n Node.prototype.bind = function(name, obse rvable) {\n console.error('Unhandled binding to Node: ', this, name, observab le);\n };\n\n function unbind(node, name) {\n var bindings = node.bindings; \n if (!bindings) {\n node.bindings = {};\n return;\n }\n\n v ar binding = bindings[name];\n if (!binding)\n return;\n\n binding.cl ose();\n bindings[name] = undefined;\n }\n\n Node.prototype.unbind = functi on(name) {\n unbind(this, name);\n };\n\n Node.prototype.unbindAll = functi on() {\n if (!this.bindings)\n return;\n var names = Object.keys(this .bindings);\n for (var i = 0; i < names.length; i++) {\n var binding = t his.bindings[names[i]];\n if (binding)\n binding.close();\n }\n\n this.bindings = {};\n };\n\n function sanitizeValue(value) {\n return v alue == null ? '' : value;\n }\n\n function updateText(node, value) {\n nod e.data = sanitizeValue(value);\n }\n\n function textBinding(node) {\n retur n function(value) {\n return updateText(node, value);\n };\n }\n\n Tex t.prototype.bind = function(name, value, oneTime) {\n if (name !== 'textConte nt')\n return Node.prototype.bind.call(this, name, value, oneTime);\n\n if (oneTime)\n return updateText(this, value);\n\n unbind(this, 'textCon tent');\n updateText(this, value.open(textBinding(this)));\n return this.b indings.textContent = value;\n }\n\n function updateAttribute(el, name, condit ional, value) {\n if (conditional) {\n if (value)\n el.setAttribu te(name, '');\n else\n el.removeAttribute(name);\n return;\n }\n\n el.setAttribute(name, sanitizeValue(value));\n }\n\n function attrib uteBinding(el, name, conditional) {\n return function(value) {\n updateA ttribute(el, name, conditional, value);\n };\n }\n\n Element.prototype.bind = function(name, value, oneTime) {\n var conditional = name[name.length - 1] == '?';\n if (conditional) {\n this.removeAttribute(name);\n name = name.slice(0, -1);\n }\n\n if (oneTime)\n return updateAttribute(th is, name, conditional, value);\n\n unbind(this, name);\n updateAttribute(t his, name, conditional,\n value.open(attributeBinding(this, name, conditi onal)));\n\n return this.bindings[name] = value;\n };\n\n var checkboxEvent Type;\n (function() {\n // Attempt to feature-detect which event (change or click) is fired first\n // for checkboxes.\n var div = document.createElem ent('div');\n var checkbox = div.appendChild(document.createElement('input')) ;\n checkbox.setAttribute('type', 'checkbox');\n var first;\n var count = 0;\n checkbox.addEventListener('click', function(e) {\n count++;\n first = first || 'click';\n });\n checkbox.addEventListener('change', f unction() {\n count++;\n first = first || 'change';\n });\n\n va r event = document.createEvent('MouseEvent');\n event.initMouseEvent(\"click\ ", true, true, window, 0, 0, 0, 0, 0, false,\n false, false, false, 0, nu ll);\n checkbox.dispatchEvent(event);\n // WebKit/Blink don't fire the cha nge event if the element is outside the\n // document, so assume 'change' for that case.\n checkboxEventType = count == 1 ? 'change' : first;\n })();\n\n function getEventForInputType(element) {\n switch (element.type) {\n c ase 'checkbox':\n return checkboxEventType;\n case 'radio':\n c ase 'select-multiple':\n case 'select-one':\n return 'change';\n default:\n return 'input';\n }\n }\n\n function updateInput(input, property, value, santizeFn) {\n input[property] = (santizeFn || sanitizeValu e)(value);\n }\n\n function inputBinding(input, property, santizeFn) {\n re turn function(value) {\n return updateInput(input, property, value, santize Fn);\n }\n }\n\n function noop() {}\n\n function bindInputEvent(input, pro perty, observable, postEventFn) {\n var eventType = getEventForInputType(inpu t);\n\n function eventHandler() {\n observable.setValue(input[property]) ;\n observable.discardChanges();\n (postEventFn || noop)(input);\n Platform.performMicrotaskCheckpoint();\n }\n input.addEventListener(even tType, eventHandler);\n\n var capturedClose = observable.close;\n observab le.close = function() {\n if (!capturedClose)\n return;\n input .removeEventListener(eventType, eventHandler);\n\n observable.close = captu redClose;\n observable.close();\n capturedClose = undefined;\n }\n }\n\n function booleanSanitize(value) {\n return Boolean(value);\n }\n\n // |element| is assumed to be an HTMLInputElement with |type| == 'radio'.\n // Returns an array containing all radio buttons other than |element| that\n // ha ve the same |name|, either in the form that |element| belongs to or,\n // if no form, in the document tree to which |element| belongs.\n //\n // This impleme ntation is based upon the HTML spec definition of a\n // \"radio button group\" :\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/number-sta te.html#radio-button-group\n //\n function getAssociatedRadioButtons(element) {\n if (element.form) {\n return filter(element.form.elements, function( el) {\n return el != element &&\n el.tagName == 'INPUT' &&\n el.type == 'radio' &&\n el.name == element.name;\n }); \n } else {\n var treeScope = getTreeScope(element);\n if (!treeSco pe)\n return [];\n var radios = treeScope.querySelectorAll(\n 'input[type=\"radio\"][name=\"' + element.name + '\"]');\n return filter (radios, function(el) {\n return el != element && !el.form;\n });\n }\n }\n\n function checkedPostEvent(input) {\n // Only the radio button that is getting checked gets an event. We\n // therefore find all the associa ted radio buttons and update their\n // check binding manually.\n if (inpu t.tagName === 'INPUT' &&\n input.type === 'radio') {\n getAssociated RadioButtons(input).forEach(function(radio) {\n var checkedBinding = radi o.bindings.checked;\n if (checkedBinding) {\n // Set the value d irectly to avoid an infinite call stack.\n checkedBinding.setValue(fals e);\n }\n });\n }\n }\n\n HTMLInputElement.prototype.bind = fun ction(name, value, oneTime) {\n if (name !== 'value' && name !== 'checked')\n return HTMLElement.prototype.bind.call(this, name, value, oneTime);\n\n\n this.removeAttribute(name);\n var sanitizeFn = name == 'checked' ? boolean Sanitize : sanitizeValue;\n var postEventFn = name == 'checked' ? checkedPost Event : noop;\n\n if (oneTime)\n return updateInput(this, name, value, s anitizeFn);\n\n unbind(this, name);\n bindInputEvent(this, name, value, po stEventFn);\n updateInput(this, name,\n value.open(inputBindin g(this, name, sanitizeFn)),\n sanitizeFn);\n\n return this.bin dings[name] = value;\n }\n\n HTMLTextAreaElement.prototype.bind = function(nam e, value, oneTime) {\n if (name !== 'value')\n return HTMLElement.protot ype.bind.call(this, name, value, oneTime);\n\n this.removeAttribute('value'); \n\n if (oneTime)\n return updateInput(this, 'value', value);\n\n unb ind(this, 'value');\n bindInputEvent(this, 'value', value);\n updateInput( this, 'value',\n value.open(inputBinding(this, 'value', sanitizeV alue)));\n\n return this.bindings.value = value;\n }\n\n function updateOpt ion(option, value) {\n var parentNode = option.parentNode;;\n var select;\ n var selectBinding;\n var oldValue;\n if (parentNode instanceof HTMLSe lectElement &&\n parentNode.bindings &&\n parentNode.bindings.valu e) {\n select = parentNode;\n selectBinding = select.bindings.value;\n oldValue = select.value;\n }\n\n option.value = sanitizeValue(value) ;\n\n if (select && select.value != oldValue) {\n selectBinding.setValue (select.value);\n selectBinding.discardChanges();\n Platform.performMi crotaskCheckpoint();\n }\n }\n\n function optionBinding(option) {\n retu rn function(value) {\n updateOption(option, value);\n }\n }\n\n HTMLOp tionElement.prototype.bind = function(name, value, oneTime) {\n if (name !== 'value')\n return HTMLElement.prototype.bind.call(this, name, value, oneTim e);\n\n this.removeAttribute('value');\n\n if (oneTime)\n return upda teOption(this, value);\n\n unbind(this, 'value');\n bindInputEvent(this, ' value', value);\n updateOption(this, value.open(optionBinding(this)));\n r eturn this.bindings.value = value;\n }\n\n HTMLSelectElement.prototype.bind = function(name, value, oneTime) {\n if (name === 'selectedindex')\n name = 'selectedIndex';\n\n if (name !== 'selectedIndex' && name !== 'value')\n return HTMLElement.prototype.bind.call(this, name, value, oneTime);\n\n th is.removeAttribute(name);\n\n if (oneTime)\n return updateInput(this, na me, value);\n\n unbind(this, name);\n bindInputEvent(this, name, value);\n updateInput(this, name,\n value.open(inputBinding(this, name) ));\n return this.bindings[name] = value;\n }\n})(this);\n", 186 "// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Ve rsion 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http:/ /www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o r agreed to in writing, software\n// distributed under the License is distribute d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe r express or implied.\n// See the License for the specific language governing pe rmissions and\n// limitations under the License.\n\n(function(global) {\n 'use strict';\n\n var filter = Array.prototype.filter.call.bind(Array.prototype.filt er);\n\n function getTreeScope(node) {\n while (node.parentNode) {\n no de = node.parentNode;\n }\n\n return typeof node.getElementById === 'funct ion' ? node : null;\n }\n\n // JScript does not have __proto__. We wrap all ob ject literals with\n // createObject which uses Object.create, Object.definePro perty and\n // Object.getOwnPropertyDescriptor to create a new object that does the exact\n // same thing. The main downside to this solution is that we have to extract\n // all those property descriptors for IE.\n var createObject = (' __proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj ;\n var newObject = Object.create(proto);\n Object.getOwnPropertyN ames(obj).forEach(function(name) {\n Object.defineProperty(newObject, n ame,\n Object.getOwnPropertyDescriptor(obj, name)) ;\n });\n return newObject;\n };\n\n // IE does not support have Document.prototype.contains.\n if (typeof document.contains != 'function') {\n Document.prototype.contains = function(node) {\n if (node === this || node.parentNode === this)\n return true;\n return this.documentEl ement.contains(node);\n }\n }\n\n Node.prototype.bind = function(name, obse rvable) {\n console.error('Unhandled binding to Node: ', this, name, observab le);\n };\n\n function unbind(node, name) {\n var bindings = node.bindings; \n if (!bindings) {\n node.bindings = {};\n return;\n }\n\n v ar binding = bindings[name];\n if (!binding)\n return;\n\n binding.cl ose();\n bindings[name] = undefined;\n }\n\n Node.prototype.unbind = functi on(name) {\n unbind(this, name);\n };\n\n Node.prototype.unbindAll = functi on() {\n if (!this.bindings)\n return;\n var names = Object.keys(this .bindings);\n for (var i = 0; i < names.length; i++) {\n var binding = t his.bindings[names[i]];\n if (binding)\n binding.close();\n }\n\n this.bindings = {};\n };\n\n function sanitizeValue(value) {\n return v alue == null ? '' : value;\n }\n\n function updateText(node, value) {\n nod e.data = sanitizeValue(value);\n }\n\n function textBinding(node) {\n retur n function(value) {\n return updateText(node, value);\n };\n }\n\n Tex t.prototype.bind = function(name, value, oneTime) {\n if (name !== 'textConte nt')\n return Node.prototype.bind.call(this, name, value, oneTime);\n\n if (oneTime)\n return updateText(this, value);\n\n unbind(this, 'textCon tent');\n updateText(this, value.open(textBinding(this)));\n return this.b indings.textContent = value;\n }\n\n function updateAttribute(el, name, condit ional, value) {\n if (conditional) {\n if (value)\n el.setAttribu te(name, '');\n else\n el.removeAttribute(name);\n return;\n }\n\n el.setAttribute(name, sanitizeValue(value));\n }\n\n function attrib uteBinding(el, name, conditional) {\n return function(value) {\n updateA ttribute(el, name, conditional, value);\n };\n }\n\n Element.prototype.bind = function(name, value, oneTime) {\n var conditional = name[name.length - 1] == '?';\n if (conditional) {\n this.removeAttribute(name);\n name = name.slice(0, -1);\n }\n\n if (oneTime)\n return updateAttribute(th is, name, conditional, value);\n\n unbind(this, name);\n updateAttribute(t his, name, conditional,\n value.open(attributeBinding(this, name, conditi onal)));\n\n return this.bindings[name] = value;\n };\n\n var checkboxEvent Type;\n (function() {\n // Attempt to feature-detect which event (change or click) is fired first\n // for checkboxes.\n var div = document.createElem ent('div');\n var checkbox = div.appendChild(document.createElement('input')) ;\n checkbox.setAttribute('type', 'checkbox');\n var first;\n var count = 0;\n checkbox.addEventListener('click', function(e) {\n count++;\n first = first || 'click';\n });\n checkbox.addEventListener('change', f unction() {\n count++;\n first = first || 'change';\n });\n\n va r event = document.createEvent('MouseEvent');\n event.initMouseEvent(\"click\ ", true, true, window, 0, 0, 0, 0, 0, false,\n false, false, false, 0, nu ll);\n checkbox.dispatchEvent(event);\n // WebKit/Blink don't fire the cha nge event if the element is outside the\n // document, so assume 'change' for that case.\n checkboxEventType = count == 1 ? 'change' : first;\n })();\n\n function getEventForInputType(element) {\n switch (element.type) {\n c ase 'checkbox':\n return checkboxEventType;\n case 'radio':\n c ase 'select-multiple':\n case 'select-one':\n return 'change';\n default:\n return 'input';\n }\n }\n\n function updateInput(input, property, value, santizeFn) {\n input[property] = (santizeFn || sanitizeValu e)(value);\n }\n\n function inputBinding(input, property, santizeFn) {\n re turn function(value) {\n return updateInput(input, property, value, santize Fn);\n }\n }\n\n function noop() {}\n\n function bindInputEvent(input, pro perty, observable, postEventFn) {\n var eventType = getEventForInputType(inpu t);\n\n function eventHandler() {\n observable.setValue(input[property]) ;\n observable.discardChanges();\n (postEventFn || noop)(input);\n Platform.performMicrotaskCheckpoint();\n }\n input.addEventListener(even tType, eventHandler);\n\n var capturedClose = observable.close;\n observab le.close = function() {\n if (!capturedClose)\n return;\n input .removeEventListener(eventType, eventHandler);\n\n observable.close = captu redClose;\n observable.close();\n capturedClose = undefined;\n }\n }\n\n function booleanSanitize(value) {\n return Boolean(value);\n }\n\n // |element| is assumed to be an HTMLInputElement with |type| == 'radio'.\n // Returns an array containing all radio buttons other than |element| that\n // ha ve the same |name|, either in the form that |element| belongs to or,\n // if no form, in the document tree to which |element| belongs.\n //\n // This impleme ntation is based upon the HTML spec definition of a\n // \"radio button group\" :\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/number-sta te.html#radio-button-group\n //\n function getAssociatedRadioButtons(element) {\n if (element.form) {\n return filter(element.form.elements, function( el) {\n return el != element &&\n el.tagName == 'INPUT' &&\n el.type == 'radio' &&\n el.name == element.name;\n }); \n } else {\n var treeScope = getTreeScope(element);\n if (!treeSco pe)\n return [];\n var radios = treeScope.querySelectorAll(\n 'input[type=\"radio\"][name=\"' + element.name + '\"]');\n return filter (radios, function(el) {\n return el != element && !el.form;\n });\n }\n }\n\n function checkedPostEvent(input) {\n // Only the radio button that is getting checked gets an event. We\n // therefore find all the associa ted radio buttons and update their\n // check binding manually.\n if (inpu t.tagName === 'INPUT' &&\n input.type === 'radio') {\n getAssociated RadioButtons(input).forEach(function(radio) {\n var checkedBinding = radi o.bindings.checked;\n if (checkedBinding) {\n // Set the value d irectly to avoid an infinite call stack.\n checkedBinding.setValue(fals e);\n }\n });\n }\n }\n\n HTMLInputElement.prototype.bind = fun ction(name, value, oneTime) {\n if (name !== 'value' && name !== 'checked')\n return HTMLElement.prototype.bind.call(this, name, value, oneTime);\n\n\n this.removeAttribute(name);\n var sanitizeFn = name == 'checked' ? boolean Sanitize : sanitizeValue;\n var postEventFn = name == 'checked' ? checkedPost Event : noop;\n\n if (oneTime)\n return updateInput(this, name, value, s anitizeFn);\n\n unbind(this, name);\n bindInputEvent(this, name, value, po stEventFn);\n updateInput(this, name,\n value.open(inputBindin g(this, name, sanitizeFn)),\n sanitizeFn);\n\n return this.bin dings[name] = value;\n }\n\n HTMLTextAreaElement.prototype.bind = function(nam e, value, oneTime) {\n if (name !== 'value')\n return HTMLElement.protot ype.bind.call(this, name, value, oneTime);\n\n this.removeAttribute('value'); \n\n if (oneTime)\n return updateInput(this, 'value', value);\n\n unb ind(this, 'value');\n bindInputEvent(this, 'value', value);\n updateInput( this, 'value',\n value.open(inputBinding(this, 'value', sanitizeV alue)));\n\n return this.bindings.value = value;\n }\n\n function updateOpt ion(option, value) {\n var parentNode = option.parentNode;;\n var select;\ n var selectBinding;\n var oldValue;\n if (parentNode instanceof HTMLSe lectElement &&\n parentNode.bindings &&\n parentNode.bindings.valu e) {\n select = parentNode;\n selectBinding = select.bindings.value;\n oldValue = select.value;\n }\n\n option.value = sanitizeValue(value) ;\n\n if (select && select.value != oldValue) {\n selectBinding.setValue (select.value);\n selectBinding.discardChanges();\n Platform.performMi crotaskCheckpoint();\n }\n }\n\n function optionBinding(option) {\n retu rn function(value) {\n updateOption(option, value);\n }\n }\n\n HTMLOp tionElement.prototype.bind = function(name, value, oneTime) {\n if (name !== 'value')\n return HTMLElement.prototype.bind.call(this, name, value, oneTim e);\n\n this.removeAttribute('value');\n\n if (oneTime)\n return upda teOption(this, value);\n\n unbind(this, 'value');\n bindInputEvent(this, ' value', value);\n updateOption(this, value.open(optionBinding(this)));\n r eturn this.bindings.value = value;\n }\n\n HTMLSelectElement.prototype.bind = function(name, value, oneTime) {\n if (name === 'selectedindex')\n name = 'selectedIndex';\n\n if (name !== 'selectedIndex' && name !== 'value')\n return HTMLElement.prototype.bind.call(this, name, value, oneTime);\n\n th is.removeAttribute(name);\n\n if (oneTime)\n return updateInput(this, na me, value);\n\n unbind(this, name);\n bindInputEvent(this, name, value);\n updateInput(this, name,\n value.open(inputBinding(this, name) ));\n return this.bindings[name] = value;\n }\n})(this);\n",
187 "// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Ve rsion 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http:/ /www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o r agreed to in writing, software\n// distributed under the License is distribute d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe r express or implied.\n// See the License for the specific language governing pe rmissions and\n// limitations under the License.\n\n(function(global) {\n 'use strict';\n\n function assert(v) {\n if (!v)\n throw new Error('Assertio n failed');\n }\n\n var forEach = Array.prototype.forEach.call.bind(Array.prot otype.forEach);\n\n function getFragmentRoot(node) {\n var p;\n while (p = node.parentNode) {\n node = p;\n }\n\n return node;\n }\n\n funct ion searchRefId(node, id) {\n if (!id)\n return;\n\n var ref;\n va r selector = '#' + id;\n while (!ref) {\n node = getFragmentRoot(node);\ n\n if (node.protoContent_)\n ref = node.protoContent_.querySelector (selector);\n else if (node.getElementById)\n ref = node.getElementB yId(id);\n\n if (ref || !node.templateCreator_)\n break\n\n nod e = node.templateCreator_;\n }\n\n return ref;\n }\n\n function getInsta nceRoot(node) {\n while (node.parentNode) {\n node = node.parentNode;\n }\n return node.templateCreator_ ? node : null;\n }\n\n var Map;\n if ( global.Map && typeof global.Map.prototype.forEach === 'function') {\n Map = g lobal.Map;\n } else {\n Map = function() {\n this.keys = [];\n thi s.values = [];\n };\n\n Map.prototype = {\n set: function(key, value) {\n var index = this.keys.indexOf(key);\n if (index < 0) {\n this.keys.push(key);\n this.values.push(value);\n } else {\ n this.values[index] = value;\n }\n },\n\n get: functi on(key) {\n var index = this.keys.indexOf(key);\n if (index < 0)\n return;\n\n return this.values[index];\n },\n\n delet e: function(key, value) {\n var index = this.keys.indexOf(key);\n if (index < 0)\n return false;\n\n this.keys.splice(index, 1);\n this.values.splice(index, 1);\n return true;\n },\n\n f orEach: function(f, opt_this) {\n for (var i = 0; i < this.keys.length; i ++)\n f.call(opt_this || this, this.values[i], this.keys[i], this);\n }\n };\n }\n\n // JScript does not have __proto__. We wrap all object l iterals with\n // createObject which uses Object.create, Object.defineProperty and\n // Object.getOwnPropertyDescriptor to create a new object that does the e xact\n // same thing. The main downside to this solution is that we have to ext ract\n // all those property descriptors for IE.\n var createObject = ('__prot o__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNames(o bj).forEach(function(name) {\n Object.defineProperty(newObject, name,\n Object.getOwnPropertyDescriptor(obj, name));\n });\n return newObject;\n };\n\n // IE does not support have D ocument.prototype.contains.\n if (typeof document.contains != 'function') {\n Document.prototype.contains = function(node) {\n if (node === this || nod e.parentNode === this)\n return true;\n return this.documentElement. contains(node);\n }\n }\n\n var BIND = 'bind';\n var REPEAT = 'repeat';\n var IF = 'if';\n\n var templateAttributeDirectives = {\n 'template': true,\ n 'repeat': true,\n 'bind': true,\n 'ref': true\n };\n\n var semantic TemplateElements = {\n 'THEAD': true,\n 'TBODY': true,\n 'TFOOT': true, \n 'TH': true,\n 'TR': true,\n 'TD': true,\n 'COLGROUP': true,\n 'COL': true,\n 'CAPTION': true,\n 'OPTION': true,\n 'OPTGROUP': true\n };\n\n var hasTemplateElement = typeof HTMLTemplateElement !== 'undefined';\n\ n var allTemplatesSelectors = 'template, ' +\n Object.keys(semanticTemplat eElements).map(function(tagName) {\n return tagName.toLowerCase() + '[tem plate]';\n }).join(', ');\n\n function isSVGTemplate(el) {\n return el. tagName == 'template' &&\n el.namespaceURI == 'http://www.w3.org/2000/ svg';\n }\n\n function isHTMLTemplate(el) {\n return el.tagName == 'TEMPLAT E' &&\n el.namespaceURI == 'http://www.w3.org/1999/xhtml';\n }\n\n f unction isAttributeTemplate(el) {\n return Boolean(semanticTemplateElements[e l.tagName] &&\n el.hasAttribute('template'));\n }\n\n functi on isTemplate(el) {\n if (el.isTemplate_ === undefined)\n el.isTemplate_ = el.tagName == 'TEMPLATE' || isAttributeTemplate(el);\n\n return el.isTempl ate_;\n }\n\n // FIXME: Observe templates being added/removed from documents\n // FIXME: Expose imperative API to decorate and observe templates in\n // \"d isconnected tress\" (e.g. ShadowRoot)\n document.addEventListener('DOMContentLo aded', function(e) {\n bootstrapTemplatesRecursivelyFrom(document);\n // F IXME: Is this needed? Seems like it shouldn't be.\n Platform.performMicrotask Checkpoint();\n }, false);\n\n function forAllTemplatesFrom(node, fn) {\n v ar subTemplates = node.querySelectorAll(allTemplatesSelectors);\n\n if (isTem plate(node))\n fn(node)\n forEach(subTemplates, fn);\n }\n\n function bootstrapTemplatesRecursivelyFrom(node) {\n function bootstrap(template) {\n if (!HTMLTemplateElement.decorate(template))\n bootstrapTemplatesRec ursivelyFrom(template.content);\n }\n\n forAllTemplatesFrom(node, bootstra p);\n }\n\n if (!hasTemplateElement) {\n /**\n * This represents a <tem plate> element.\n * @constructor\n * @extends {HTMLElement}\n */\n global.HTMLTemplateElement = function() {\n throw TypeError('Illegal cons tructor');\n };\n }\n\n var hasProto = '__proto__' in {};\n\n function mix in(to, from) {\n Object.getOwnPropertyNames(from).forEach(function(name) {\n Object.defineProperty(to, name,\n Object.getOwnP ropertyDescriptor(from, name));\n });\n }\n\n // http://dvcs.w3.org/hg/webc omponents/raw-file/tip/spec/templates/index.html#dfn-template-contents-owner\n function getOrCreateTemplateContentsOwner(template) {\n var doc = template.ow nerDocument\n if (!doc.defaultView)\n return doc;\n var d = doc.templ ateContentsOwner_;\n if (!d) {\n // TODO(arv): This should either be a D ocument or HTMLDocument depending\n // on doc.\n d = doc.implementatio n.createHTMLDocument('');\n while (d.lastChild) {\n d.removeChild(d. lastChild);\n }\n doc.templateContentsOwner_ = d;\n }\n return d ;\n }\n\n function getTemplateStagingDocument(template) {\n if (!template.s tagingDocument_) {\n var owner = template.ownerDocument;\n if (!owner. stagingDocument_) {\n owner.stagingDocument_ = owner.implementation.creat eHTMLDocument('');\n owner.stagingDocument_.stagingDocument_ = owner.stag ingDocument_;\n }\n\n template.stagingDocument_ = owner.stagingDocumen t_;\n }\n\n return template.stagingDocument_;\n }\n\n // For non-templat e browsers, the parser will disallow <template> in certain\n // locations, so w e allow \"attribute templates\" which combine the template\n // element with th e top-level container node of the content, e.g.\n //\n // <tr template repea t=\"{{ foo }}\"\" class=\"bar\"><td>Bar</td></tr>\n //\n // becomes\n //\n / / <template repeat=\"{{ foo }}\">\n // + #document-fragment\n // + <tr class=\"bar\">\n // + <td>Bar</td>\n //\n function extractTemplateFrom AttributeTemplate(el) {\n var template = el.ownerDocument.createElement('temp late');\n el.parentNode.insertBefore(template, el);\n\n var attribs = el.a ttributes;\n var count = attribs.length;\n while (count-- > 0) {\n va r attrib = attribs[count];\n if (templateAttributeDirectives[attrib.name]) {\n if (attrib.name !== 'template')\n template.setAttribute(attr ib.name, attrib.value);\n el.removeAttribute(attrib.name);\n }\n }\n\n return template;\n }\n\n function extractTemplateFromSVGTemplate(el) {\n var template = el.ownerDocument.createElement('template');\n el.parent Node.insertBefore(template, el);\n\n var attribs = el.attributes;\n var co unt = attribs.length;\n while (count-- > 0) {\n var attrib = attribs[cou nt];\n template.setAttribute(attrib.name, attrib.value);\n el.removeAt tribute(attrib.name);\n }\n\n el.parentNode.removeChild(el);\n return t emplate;\n }\n\n function liftNonNativeTemplateChildrenIntoContent(template, e l, useRoot) {\n var content = template.content;\n if (useRoot) {\n co ntent.appendChild(el);\n return;\n }\n\n var child;\n while (child = el.firstChild) {\n content.appendChild(child);\n }\n }\n\n /**\n * Ensures proper API and content model for template elements.\n * @param {HTML TemplateElement} opt_instanceRef The template element which\n * |el| templ ate element will return as the value of its ref(), and whose\n * content w ill be used as source when createInstance() is invoked.\n */\n HTMLTemplateEl ement.decorate = function(el, opt_instanceRef) {\n if (el.templateIsDecorated _)\n return false;\n\n var templateElement = el;\n templateElement.te mplateIsDecorated_ = true;\n\n var isNativeHTMLTemplate = isHTMLTemplate(temp lateElement) &&\n hasTemplateElement;\n var boo tstrapContents = isNativeHTMLTemplate;\n var liftContents = !isNativeHTMLTemp late;\n var liftRoot = false;\n\n if (!isNativeHTMLTemplate) {\n if ( isAttributeTemplate(templateElement)) {\n assert(!opt_instanceRef);\n templateElement = extractTemplateFromAttributeTemplate(el);\n templat eElement.templateIsDecorated_ = true;\n isNativeHTMLTemplate = hasTemplat eElement;\n liftRoot = true;\n } else if (isSVGTemplate(templateElem ent)) {\n templateElement = extractTemplateFromSVGTemplate(el);\n templateElement.templateIsDecorated_ = true;\n isNativeHTMLTemplate = has TemplateElement;\n }\n }\n\n if (!isNativeHTMLTemplate) {\n fixT emplateElementPrototype(templateElement);\n var doc = getOrCreateTemplateCo ntentsOwner(templateElement);\n templateElement.content_ = doc.createDocume ntFragment();\n }\n\n if (opt_instanceRef) {\n // template is contain ed within an instance, its direct content must be\n // empty\n templat eElement.instanceRef_ = opt_instanceRef;\n } else if (liftContents) {\n liftNonNativeTemplateChildrenIntoContent(templateElement,\n el,\n li ftRoot);\n } else if (bootstrapContents) {\n bootstrapTemplatesRecursive lyFrom(templateElement.content);\n }\n\n return true;\n };\n\n // TODO(r afaelw): This used to decorate recursively all templates from a given\n // node . This happens by default on 'DOMContentLoaded', but may be needed\n // in subt rees not descendent from document (e.g. ShadowRoot).\n // Review whether this i s the right public API.\n HTMLTemplateElement.bootstrap = bootstrapTemplatesRec ursivelyFrom;\n\n var htmlElement = global.HTMLUnknownElement || HTMLElement;\n \n var contentDescriptor = {\n get: function() {\n return this.content_ ;\n },\n enumerable: true,\n configurable: true\n };\n\n if (!hasTemp lateElement) {\n // Gecko is more picky with the prototype than WebKit. Make sure to use the\n // same prototype as created in the constructor.\n HTMLT emplateElement.prototype = Object.create(htmlElement.prototype);\n\n Object.d efineProperty(HTMLTemplateElement.prototype, 'content',\n contentDescriptor);\n }\n\n function fixTemplateElementPrototype(el) {\n if (hasProto)\n el.__proto__ = HTMLTemplateElement.prototype;\n else\n mixin(el, HTMLTemplateElement.prototype);\n }\n\n function ensureSetModel Scheduled(template) {\n if (!template.setModelFn_) {\n template.setModel Fn_ = function() {\n template.setModelFnScheduled_ = false;\n var map = getBindings(template,\n template.delegate_ && template.delegate _.prepareBinding);\n processBindings(template, map, template.model_);\n };\n }\n\n if (!template.setModelFnScheduled_) {\n template.setMo delFnScheduled_ = true;\n Observer.runEOM_(template.setModelFn_);\n }\n }\n\n mixin(HTMLTemplateElement.prototype, {\n processBindingDirectives_: f unction(directives) {\n if (this.iterator_)\n this.iterator_.closeDe ps();\n\n if (!directives.if && !directives.bind && !directives.repeat) {\n if (this.iterator_) {\n this.iterator_.close();\n this .iterator_ = undefined;\n this.bindings.iterator = undefined;\n }\n\n return;\n }\n\n if (!this.iterator_) {\n this.iter ator_ = new TemplateIterator(this);\n this.bindings = this.bindings || {} ;\n this.bindings.iterator = this.iterator_;\n }\n\n this.itera tor_.updateDependencies(directives, this.model_);\n return this.iterator_;\ n },\n\n createInstance: function(model, bindingDelegate, delegate_,\n instanceBindings_) {\n if (bindingDelegate)\n delegate_ = this.newDelegate_(bindingDelegate);\n\n var content = this.r ef.content;\n var map = this.bindingMap_;\n if (!map || map.content != = content) {\n // TODO(rafaelw): Setup a MutationObserver on content to d etect\n // when the instanceMap is invalid.\n map = createInstance BindingMap(content,\n delegate_ && delegate_.prepareBinding) || [];\n map.content = content;\n this.bindingMap_ = map;\n }\n\n var stagingDocument = getTemplateStagingDocument(this);\n var instance = stagingDocument.createDocumentFragment();\n instance.templateCreator_ = thi s;\n instance.protoContent_ = content;\n\n var instanceRecord = {\n firstNode: null,\n lastNode: null,\n model: model\n };\n \n var i = 0;\n for (var child = content.firstChild; child; child = ch ild.nextSibling) {\n var clone = cloneAndBindInstance(child, instance, st agingDocument,\n map.children[i++],\n model,\n delegate_,\n instanceBindings_);\ n clone.templateInstance_ = instanceRecord;\n }\n\n instanceRec ord.firstNode = instance.firstChild;\n instanceRecord.lastNode = instance.l astChild;\n instance.templateCreator_ = undefined;\n instance.protoCon tent_ = undefined;\n return instance;\n },\n\n get model() {\n r eturn this.model_;\n },\n\n set model(model) {\n this.model_ = model; \n ensureSetModelScheduled(this);\n },\n\n get bindingDelegate() {\n return this.delegate_ && this.delegate_.raw;\n },\n\n setDelegate_: f unction(delegate) {\n this.delegate_ = delegate;\n this.bindingMap_ = undefined;\n if (this.iterator_) {\n this.iterator_.instancePosition ChangedFn_ = undefined;\n this.iterator_.instanceModelFn_ = undefined;\n }\n },\n\n newDelegate_: function(bindingDelegate) {\n if (!bind ingDelegate)\n return {};\n\n function delegateFn(name) {\n v ar fn = bindingDelegate && bindingDelegate[name];\n if (typeof fn != 'fun ction')\n return;\n\n return function() {\n return fn.a pply(bindingDelegate, arguments);\n };\n }\n\n return {\n raw: bindingDelegate,\n prepareBinding: delegateFn('prepareBinding'),\n prepareInstanceModel: delegateFn('prepareInstanceModel'),\n prepa reInstancePositionChanged:\n delegateFn('prepareInstancePositionChang ed')\n };\n },\n\n // TODO(rafaelw): Assigning .bindingDelegate alway s succeeds. It may\n // make sense to issue a warning or even throw if the te mplate is already\n // \"activated\", since this would be a strange thing to do.\n set bindingDelegate(bindingDelegate) {\n this.setDelegate_(this.ne wDelegate_(bindingDelegate));\n },\n\n get ref() {\n var ref = search RefId(this, this.getAttribute('ref'));\n if (!ref)\n ref = this.inst anceRef_;\n\n if (!ref)\n return this;\n\n var nextRef = ref.re f;\n return nextRef ? nextRef : ref;\n }\n });\n\n // Returns\n // a) undefined if there are no mustaches.\n // b) [TEXT, (ONE_TIME?, PATH, DELE GATE_FN, TEXT)+] if there is at least one mustache.\n function parseMustaches(s , name, node, prepareBindingFn) {\n if (!s || !s.length)\n return;\n\n var tokens;\n var length = s.length;\n var startIndex = 0, lastIndex = 0 , endIndex = 0;\n var onlyOneTime = true;\n while (lastIndex < length) {\n var startIndex = s.indexOf('{{', lastIndex);\n var oneTimeStart = s.i ndexOf('[[', lastIndex);\n var oneTime = false;\n var terminator = '}} ';\n\n if (oneTimeStart >= 0 &&\n (startIndex < 0 || oneTimeStart < startIndex)) {\n startIndex = oneTimeStart;\n oneTime = true;\n terminator = ']]';\n }\n\n endIndex = startIndex < 0 ? -1 : s.i ndexOf(terminator, startIndex + 2);\n\n if (endIndex < 0) {\n if (!t okens)\n return;\n\n tokens.push(s.slice(lastIndex)); // TEXT\n break;\n }\n\n tokens = tokens || [];\n tokens.push(s.slic e(lastIndex, startIndex)); // TEXT\n var pathString = s.slice(startIndex + 2, endIndex).trim();\n tokens.push(oneTime); // ONE_TIME?\n onlyOneTim e = onlyOneTime && oneTime;\n tokens.push(Path.get(pathString)); // PATH\n var delegateFn = prepareBindingFn &&\n prepareBinding Fn(pathString, name, node);\n tokens.push(delegateFn); // DELEGATE_FN\n lastIndex = endIndex + 2;\n }\n\n if (lastIndex === length)\n token s.push(''); // TEXT\n\n tokens.hasOnePath = tokens.length === 5;\n tokens. isSimplePath = tokens.hasOnePath &&\n tokens[0] == '' & &\n tokens[4] == '';\n tokens.onlyOneTime = onlyOneT ime;\n\n tokens.combinator = function(values) {\n var newValue = tokens[ 0];\n\n for (var i = 1; i < tokens.length; i += 4) {\n var value = t okens.hasOnePath ? values : values[(i - 1) / 4];\n if (value !== undefine d)\n newValue += value;\n newValue += tokens[i + 3];\n }\n\ n return newValue;\n }\n\n return tokens;\n };\n\n function process OneTimeBinding(name, tokens, node, model) {\n if (tokens.hasOnePath) {\n var delegateFn = tokens[3];\n var value = delegateFn ? delegateFn(model, n ode, true) :\n tokens[2].getValueFrom(model);\n return tokens.isSimplePath ? value : tokens.combinator(value);\n }\n\n var values = [];\n for (var i = 1; i < tokens.length; i += 4) {\n var de legateFn = tokens[i + 2];\n values[(i - 1) / 4] = delegateFn ? delegateFn(m odel, node) :\n tokens[i + 1].getValueFrom(model);\n }\n\n return tokens.combinator(values);\n }\n\n function processSinglePathBinding(name, to kens, node, model) {\n var delegateFn = tokens[3];\n var observer = delega teFn ? delegateFn(model, node, false) :\n new PathObserver(model, tokens[ 2]);\n\n return tokens.isSimplePath ? observer :\n new ObserverTransfo rm(observer, tokens.combinator);\n }\n\n function processBinding(name, tokens, node, model) {\n if (tokens.onlyOneTime)\n return processOneTimeBinding (name, tokens, node, model);\n\n if (tokens.hasOnePath)\n return process SinglePathBinding(name, tokens, node, model);\n\n var observer = new Compound Observer();\n\n for (var i = 1; i < tokens.length; i += 4) {\n var oneTi me = tokens[i];\n var delegateFn = tokens[i + 2];\n\n if (delegateFn) {\n var value = delegateFn(model, node, oneTime);\n if (oneTime)\n observer.addPath(value)\n else\n observer.addObserver( value);\n continue;\n }\n\n var path = tokens[i + 1];\n if (oneTime)\n observer.addPath(path.getValueFrom(model))\n else\n observer.addPath(model, path);\n }\n\n return new ObserverTransform(ob server, tokens.combinator);\n }\n\n function processBindings(node, bindings, m odel, instanceBindings) {\n for (var i = 0; i < bindings.length; i += 2) {\n var name = bindings[i]\n var tokens = bindings[i + 1];\n var valu e = processBinding(name, tokens, node, model);\n var binding = node.bind(na me, value, tokens.onlyOneTime);\n if (binding && instanceBindings)\n instanceBindings.push(binding);\n }\n\n if (!bindings.isTemplate)\n return;\n\n node.model_ = model;\n var iter = node.processBindingDirective s_(bindings);\n if (instanceBindings && iter)\n instanceBindings.push(it er);\n }\n\n function parseWithDefault(el, name, prepareBindingFn) {\n var v = el.getAttribute(name);\n return parseMustaches(v == '' ? '{{}}' : v, name , el, prepareBindingFn);\n }\n\n function parseAttributeBindings(element, prep areBindingFn) {\n assert(element);\n\n var bindings = [];\n var ifFound = false;\n var bindFound = false;\n\n for (var i = 0; i < element.attribu tes.length; i++) {\n var attr = element.attributes[i];\n var name = at tr.name;\n var value = attr.value;\n\n // Allow bindings expressed in attributes to be prefixed with underbars.\n // We do this to allow correct semantics for browsers that don't implement\n // <template> where certain a ttributes might trigger side-effects -- and\n // for IE which sanitizes cer tain attributes, disallowing mustache\n // replacements in their text.\n while (name[0] === '_') {\n name = name.substring(1);\n }\n\n if (isTemplate(element) &&\n (name === IF || name === BIND || name == = REPEAT)) {\n continue;\n }\n\n var tokens = parseMustaches(va lue, name, element,\n prepareBindingFn);\n if (!tokens)\n continue;\n\n bindings.push(name, tokens);\n }\n\ n if (isTemplate(element)) {\n bindings.isTemplate = true;\n bindin gs.if = parseWithDefault(element, IF, prepareBindingFn);\n bindings.bind = parseWithDefault(element, BIND, prepareBindingFn);\n bindings.repeat = pars eWithDefault(element, REPEAT, prepareBindingFn);\n\n if (bindings.if && !bi ndings.bind && !bindings.repeat)\n bindings.bind = parseMustaches('{{}}', BIND, element, prepareBindingFn);\n }\n\n return bindings;\n }\n\n func tion getBindings(node, prepareBindingFn) {\n if (node.nodeType === Node.ELEME NT_NODE)\n return parseAttributeBindings(node, prepareBindingFn);\n\n if (node.nodeType === Node.TEXT_NODE) {\n var tokens = parseMustaches(node.da ta, 'textContent', node,\n prepareBindingFn);\n if (tokens)\n return ['textContent', tokens];\n }\n\n return [];\n }\n\n function cloneAndBindInstance(node, parent, stagingDocument, bindi ngs, model,\n delegate,\n instanceBindings,\n instanceRecord) {\n var clone = parent.appendChild(stagingDocument.importNode(node, false));\n\n var i = 0;\n for (var child = node.firstChild; child; child = child.nextSib ling) {\n cloneAndBindInstance(child, clone, stagingDocument,\n bindings.children[i++],\n model,\n delegate,\n instanceBindings );\n }\n\n if (bindings.isTemplate) {\n HTMLTemplateElement.decorate( clone, node);\n if (delegate)\n clone.setDelegate_(delegate);\n } \n\n processBindings(clone, bindings, model, instanceBindings);\n return c lone;\n }\n\n function createInstanceBindingMap(node, prepareBindingFn) {\n var map = getBindings(node, prepareBindingFn);\n map.children = {};\n var index = 0;\n for (var child = node.firstChild; child; child = child.nextSibl ing) {\n map.children[index++] = createInstanceBindingMap(child, prepareBin dingFn);\n }\n\n return map;\n }\n\n Object.defineProperty(Node.prototyp e, 'templateInstance', {\n get: function() {\n var instance = this.templ ateInstance_;\n return instance ? instance :\n (this.parentNode ? this.parentNode.templateInstance : undefined);\n }\n });\n\n function Templ ateIterator(templateElement) {\n this.closed = false;\n this.templateEleme nt_ = templateElement;\n\n // Flattened array of tuples:\n // <instanceT erminatorNode, [bindingsSetupByInstance]>\n this.terminators = [];\n\n thi s.deps = undefined;\n this.iteratedValue = [];\n this.presentValue = undef ined;\n this.arrayObserver = undefined;\n }\n\n TemplateIterator.prototype = {\n closeDeps: function() {\n var deps = this.deps;\n if (deps) { \n if (deps.ifOneTime === false)\n deps.ifValue.close();\n if (deps.oneTime === false)\n deps.value.close();\n }\n },\n\ n updateDependencies: function(directives, model) {\n this.closeDeps();\ n\n var deps = this.deps = {};\n var template = this.templateElement_; \n\n if (directives.if) {\n deps.hasIf = true;\n deps.ifOneTi me = directives.if.onlyOneTime;\n deps.ifValue = processBinding(IF, direc tives.if, template, model);\n\n // oneTime if & predicate is false. nothi ng else to do.\n if (deps.ifOneTime && !deps.ifValue) {\n this.u pdateIteratedValue();\n return;\n }\n\n if (!deps.ifOneTi me)\n deps.ifValue.open(this.updateIteratedValue, this);\n }\n\n if (directives.repeat) {\n deps.repeat = true;\n deps.oneTime = directives.repeat.onlyOneTime;\n deps.value = processBinding(REPEAT, di rectives.repeat, template, model);\n } else {\n deps.repeat = false; \n deps.oneTime = directives.bind.onlyOneTime;\n deps.value = proc essBinding(BIND, directives.bind, template, model);\n }\n\n if (!deps. oneTime)\n deps.value.open(this.updateIteratedValue, this);\n\n this .updateIteratedValue();\n },\n\n updateIteratedValue: function() {\n if (this.deps.hasIf) {\n var ifValue = this.deps.ifValue;\n if (!t his.deps.ifOneTime)\n ifValue = ifValue.discardChanges();\n if ( !ifValue) {\n this.valueChanged();\n return;\n }\n }\n\n var value = this.deps.value;\n if (!this.deps.oneTime)\n value = value.discardChanges();\n if (!this.deps.repeat)\n value = [value];\n var observe = this.deps.repeat &&\n !this.dep s.oneTime &&\n Array.isArray(value);\n this.valueChanged (value, observe);\n },\n\n valueChanged: function(value, observeValue) {\n if (!Array.isArray(value))\n value = [];\n\n if (value === thi s.iteratedValue)\n return;\n\n this.unobserve();\n this.present Value = value;\n if (observeValue) {\n this.arrayObserver = new Arra yObserver(this.presentValue);\n this.arrayObserver.open(this.handleSplice s, this);\n }\n\n this.handleSplices(ArrayObserver.calculateSplices(th is.presentValue,\n this.i teratedValue));\n },\n\n getTerminatorAt: function(index) {\n if (ind ex == -1)\n return this.templateElement_;\n var terminator = this.te rminators[index*2];\n if (terminator.nodeType !== Node.ELEMENT_NODE ||\n this.templateElement_ === terminator) {\n return terminator;\n }\n\n var subIterator = terminator.iterator_;\n if (!subIterator)\n return terminator;\n\n return subIterator.getTerminatorAt(subIterato r.terminators.length/2 - 1);\n },\n\n // TODO(rafaelw): If we inserting se quences of instances we can probably\n // avoid lots of calls to getTerminato rAt(), or cache its result.\n insertInstanceAt: function(index, fragment, ins tanceNodes,\n instanceBindings) {\n var previ ousTerminator = this.getTerminatorAt(index - 1);\n var terminator = previou sTerminator;\n if (fragment)\n terminator = fragment.lastChild || te rminator;\n else if (instanceNodes)\n terminator = instanceNodes[ins tanceNodes.length - 1] || terminator;\n\n this.terminators.splice(index*2, 0, terminator, instanceBindings);\n var parent = this.templateElement_.pare ntNode;\n var insertBeforeNode = previousTerminator.nextSibling;\n\n i f (fragment) {\n parent.insertBefore(fragment, insertBeforeNode);\n } else if (instanceNodes) {\n for (var i = 0; i < instanceNodes.length; i ++)\n parent.insertBefore(instanceNodes[i], insertBeforeNode);\n } \n },\n\n extractInstanceAt: function(index) {\n var instanceNodes = [];\n var previousTerminator = this.getTerminatorAt(index - 1);\n var terminator = this.getTerminatorAt(index);\n instanceNodes.instanceBindings = this.terminators[index*2 + 1];\n this.terminators.splice(index*2, 2);\n\n var parent = this.templateElement_.parentNode;\n while (terminator != = previousTerminator) {\n var node = previousTerminator.nextSibling;\n if (node == terminator)\n terminator = previousTerminator;\n\n parent.removeChild(node);\n instanceNodes.push(node);\n }\n\n return instanceNodes;\n },\n\n getDelegateFn: function(fn) {\n fn = fn && fn(this.templateElement_);\n return typeof fn === 'function' ? fn : null;\n },\n\n handleSplices: function(splices) {\n if (this.closed || !splices.length)\n return;\n\n var template = this.templateElemen t_;\n\n if (!template.parentNode) {\n this.close();\n return; \n }\n\n ArrayObserver.applySplices(this.iteratedValue, this.presentVa lue,\n splices);\n\n var delegate = templat e.delegate_;\n if (this.instanceModelFn_ === undefined) {\n this.ins tanceModelFn_ =\n this.getDelegateFn(delegate && delegate.prepareInst anceModel);\n }\n\n if (this.instancePositionChangedFn_ === undefined) {\n this.instancePositionChangedFn_ =\n this.getDelegateFn(de legate &&\n delegate.prepareInstancePositionChange d);\n }\n\n var instanceCache = new Map;\n var removeDelta = 0;\n splices.forEach(function(splice) {\n splice.removed.forEach(functio n(model) {\n var instanceNodes =\n this.extractInstanceAt( splice.index + removeDelta);\n instanceCache.set(model, instanceNodes); \n }, this);\n\n removeDelta -= splice.addedCount;\n }, this) ;\n\n splices.forEach(function(splice) {\n var addIndex = splice.ind ex;\n for (; addIndex < splice.index + splice.addedCount; addIndex++) {\n var model = this.iteratedValue[addIndex];\n var fragment = un defined;\n var instanceNodes = instanceCache.get(model);\n var instanceBindings;\n if (instanceNodes) {\n instanceCache.de lete(model);\n instanceBindings = instanceNodes.instanceBindings;\n } else {\n instanceBindings = [];\n if (this.insta nceModelFn_)\n model = this.instanceModelFn_(model);\n\n if (model !== undefined) {\n fragment = template.createInstance(mo del, undefined, delegate,\n inst anceBindings);\n }\n }\n\n this.insertInstanceAt(ad dIndex, fragment, instanceNodes,\n instanceBindin gs);\n }\n }, this);\n\n instanceCache.forEach(function(instanc eNodes) {\n this.closeInstanceBindings(instanceNodes.instanceBindings);\n }, this);\n\n if (this.instancePositionChangedFn_)\n this.repo rtInstancesMoved(splices);\n },\n\n reportInstanceMoved: function(index) { \n var previousTerminator = this.getTerminatorAt(index - 1);\n var ter minator = this.getTerminatorAt(index);\n if (previousTerminator === termina tor)\n return; // instance has zero nodes.\n\n // We must use the fi rst node of the instance, because any subsequent\n // nodes may have been g enerated by sub-templates.\n // TODO(rafaelw): This is brittle WRT instance mutation -- e.g. if the\n // first node was removed by script.\n var templateInstance = previousTerminator.nextSibling.templateInstance;\n this. instancePositionChangedFn_(templateInstance, index);\n },\n\n reportInstan cesMoved: function(splices) {\n var index = 0;\n var offset = 0;\n for (var i = 0; i < splices.length; i++) {\n var splice = splices[i];\n if (offset != 0) {\n while (index < splice.index) {\n this.reportInstanceMoved(index);\n index++;\n }\n } else {\n index = splice.index;\n }\n\n while (index < sp lice.index + splice.addedCount) {\n this.reportInstanceMoved(index);\n index++;\n }\n\n offset += splice.addedCount - splice.rem oved.length;\n }\n\n if (offset == 0)\n return;\n\n var le ngth = this.terminators.length / 2;\n while (index < length) {\n thi s.reportInstanceMoved(index);\n index++;\n }\n },\n\n closeIns tanceBindings: function(instanceBindings) {\n for (var i = 0; i < instanceB indings.length; i++) {\n instanceBindings[i].close();\n }\n },\n\ n unobserve: function() {\n if (!this.arrayObserver)\n return;\n\ n this.arrayObserver.close();\n this.arrayObserver = undefined;\n } ,\n\n close: function() {\n if (this.closed)\n return;\n thi s.unobserve();\n for (var i = 1; i < this.terminators.length; i += 2) {\n this.closeInstanceBindings(this.terminators[i]);\n }\n\n this.te rminators.length = 0;\n this.closeDeps();\n this.templateElement_.iter ator_ = undefined;\n this.closed = true;\n }\n };\n\n // Polyfill-spec ific API.\n HTMLTemplateElement.forAllTemplatesFrom_ = forAllTemplatesFrom;\n}) (this);\n", 187 "// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Ve rsion 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http:/ /www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o r agreed to in writing, software\n// distributed under the License is distribute d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe r express or implied.\n// See the License for the specific language governing pe rmissions and\n// limitations under the License.\n\n(function(global) {\n 'use strict';\n\n function assert(v) {\n if (!v)\n throw new Error('Assertio n failed');\n }\n\n var forEach = Array.prototype.forEach.call.bind(Array.prot otype.forEach);\n\n function getFragmentRoot(node) {\n var p;\n while (p = node.parentNode) {\n node = p;\n }\n\n return node;\n }\n\n funct ion searchRefId(node, id) {\n if (!id)\n return;\n\n var ref;\n va r selector = '#' + id;\n while (!ref) {\n node = getFragmentRoot(node);\ n\n if (node.protoContent_)\n ref = node.protoContent_.querySelector (selector);\n else if (node.getElementById)\n ref = node.getElementB yId(id);\n\n if (ref || !node.templateCreator_)\n break\n\n nod e = node.templateCreator_;\n }\n\n return ref;\n }\n\n function getInsta nceRoot(node) {\n while (node.parentNode) {\n node = node.parentNode;\n }\n return node.templateCreator_ ? node : null;\n }\n\n var Map;\n if ( global.Map && typeof global.Map.prototype.forEach === 'function') {\n Map = g lobal.Map;\n } else {\n Map = function() {\n this.keys = [];\n thi s.values = [];\n };\n\n Map.prototype = {\n set: function(key, value) {\n var index = this.keys.indexOf(key);\n if (index < 0) {\n this.keys.push(key);\n this.values.push(value);\n } else {\ n this.values[index] = value;\n }\n },\n\n get: functi on(key) {\n var index = this.keys.indexOf(key);\n if (index < 0)\n return;\n\n return this.values[index];\n },\n\n delet e: function(key, value) {\n var index = this.keys.indexOf(key);\n if (index < 0)\n return false;\n\n this.keys.splice(index, 1);\n this.values.splice(index, 1);\n return true;\n },\n\n f orEach: function(f, opt_this) {\n for (var i = 0; i < this.keys.length; i ++)\n f.call(opt_this || this, this.values[i], this.keys[i], this);\n }\n };\n }\n\n // JScript does not have __proto__. We wrap all object l iterals with\n // createObject which uses Object.create, Object.defineProperty and\n // Object.getOwnPropertyDescriptor to create a new object that does the e xact\n // same thing. The main downside to this solution is that we have to ext ract\n // all those property descriptors for IE.\n var createObject = ('__prot o__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNames(o bj).forEach(function(name) {\n Object.defineProperty(newObject, name,\n Object.getOwnPropertyDescriptor(obj, name));\n });\n return newObject;\n };\n\n // IE does not support have D ocument.prototype.contains.\n if (typeof document.contains != 'function') {\n Document.prototype.contains = function(node) {\n if (node === this || nod e.parentNode === this)\n return true;\n return this.documentElement. contains(node);\n }\n }\n\n var BIND = 'bind';\n var REPEAT = 'repeat';\n var IF = 'if';\n\n var templateAttributeDirectives = {\n 'template': true,\ n 'repeat': true,\n 'bind': true,\n 'ref': true\n };\n\n var semantic TemplateElements = {\n 'THEAD': true,\n 'TBODY': true,\n 'TFOOT': true, \n 'TH': true,\n 'TR': true,\n 'TD': true,\n 'COLGROUP': true,\n 'COL': true,\n 'CAPTION': true,\n 'OPTION': true,\n 'OPTGROUP': true\n };\n\n var hasTemplateElement = typeof HTMLTemplateElement !== 'undefined';\n\ n var allTemplatesSelectors = 'template, ' +\n Object.keys(semanticTemplat eElements).map(function(tagName) {\n return tagName.toLowerCase() + '[tem plate]';\n }).join(', ');\n\n function isSVGTemplate(el) {\n return el. tagName == 'template' &&\n el.namespaceURI == 'http://www.w3.org/2000/ svg';\n }\n\n function isHTMLTemplate(el) {\n return el.tagName == 'TEMPLAT E' &&\n el.namespaceURI == 'http://www.w3.org/1999/xhtml';\n }\n\n f unction isAttributeTemplate(el) {\n return Boolean(semanticTemplateElements[e l.tagName] &&\n el.hasAttribute('template'));\n }\n\n functi on isTemplate(el) {\n if (el.isTemplate_ === undefined)\n el.isTemplate_ = el.tagName == 'TEMPLATE' || isAttributeTemplate(el);\n\n return el.isTempl ate_;\n }\n\n // FIXME: Observe templates being added/removed from documents\n // FIXME: Expose imperative API to decorate and observe templates in\n // \"d isconnected tress\" (e.g. ShadowRoot)\n document.addEventListener('DOMContentLo aded', function(e) {\n bootstrapTemplatesRecursivelyFrom(document);\n // F IXME: Is this needed? Seems like it shouldn't be.\n Platform.performMicrotask Checkpoint();\n }, false);\n\n function forAllTemplatesFrom(node, fn) {\n v ar subTemplates = node.querySelectorAll(allTemplatesSelectors);\n\n if (isTem plate(node))\n fn(node)\n forEach(subTemplates, fn);\n }\n\n function bootstrapTemplatesRecursivelyFrom(node) {\n function bootstrap(template) {\n if (!HTMLTemplateElement.decorate(template))\n bootstrapTemplatesRec ursivelyFrom(template.content);\n }\n\n forAllTemplatesFrom(node, bootstra p);\n }\n\n if (!hasTemplateElement) {\n /**\n * This represents a <tem plate> element.\n * @constructor\n * @extends {HTMLElement}\n */\n global.HTMLTemplateElement = function() {\n throw TypeError('Illegal cons tructor');\n };\n }\n\n var hasProto = '__proto__' in {};\n\n function mix in(to, from) {\n Object.getOwnPropertyNames(from).forEach(function(name) {\n Object.defineProperty(to, name,\n Object.getOwnP ropertyDescriptor(from, name));\n });\n }\n\n // http://dvcs.w3.org/hg/webc omponents/raw-file/tip/spec/templates/index.html#dfn-template-contents-owner\n function getOrCreateTemplateContentsOwner(template) {\n var doc = template.ow nerDocument\n if (!doc.defaultView)\n return doc;\n var d = doc.templ ateContentsOwner_;\n if (!d) {\n // TODO(arv): This should either be a D ocument or HTMLDocument depending\n // on doc.\n d = doc.implementatio n.createHTMLDocument('');\n while (d.lastChild) {\n d.removeChild(d. lastChild);\n }\n doc.templateContentsOwner_ = d;\n }\n return d ;\n }\n\n function getTemplateStagingDocument(template) {\n if (!template.s tagingDocument_) {\n var owner = template.ownerDocument;\n if (!owner. stagingDocument_) {\n owner.stagingDocument_ = owner.implementation.creat eHTMLDocument('');\n owner.stagingDocument_.stagingDocument_ = owner.stag ingDocument_;\n }\n\n template.stagingDocument_ = owner.stagingDocumen t_;\n }\n\n return template.stagingDocument_;\n }\n\n // For non-templat e browsers, the parser will disallow <template> in certain\n // locations, so w e allow \"attribute templates\" which combine the template\n // element with th e top-level container node of the content, e.g.\n //\n // <tr template repea t=\"{{ foo }}\"\" class=\"bar\"><td>Bar</td></tr>\n //\n // becomes\n //\n / / <template repeat=\"{{ foo }}\">\n // + #document-fragment\n // + <tr class=\"bar\">\n // + <td>Bar</td>\n //\n function extractTemplateFrom AttributeTemplate(el) {\n var template = el.ownerDocument.createElement('temp late');\n el.parentNode.insertBefore(template, el);\n\n var attribs = el.a ttributes;\n var count = attribs.length;\n while (count-- > 0) {\n va r attrib = attribs[count];\n if (templateAttributeDirectives[attrib.name]) {\n if (attrib.name !== 'template')\n template.setAttribute(attr ib.name, attrib.value);\n el.removeAttribute(attrib.name);\n }\n }\n\n return template;\n }\n\n function extractTemplateFromSVGTemplate(el) {\n var template = el.ownerDocument.createElement('template');\n el.parent Node.insertBefore(template, el);\n\n var attribs = el.attributes;\n var co unt = attribs.length;\n while (count-- > 0) {\n var attrib = attribs[cou nt];\n template.setAttribute(attrib.name, attrib.value);\n el.removeAt tribute(attrib.name);\n }\n\n el.parentNode.removeChild(el);\n return t emplate;\n }\n\n function liftNonNativeTemplateChildrenIntoContent(template, e l, useRoot) {\n var content = template.content;\n if (useRoot) {\n co ntent.appendChild(el);\n return;\n }\n\n var child;\n while (child = el.firstChild) {\n content.appendChild(child);\n }\n }\n\n var temp lateObserver;\n if (typeof MutationObserver == 'function') {\n templateObser ver = new MutationObserver(function(records) {\n for (var i = 0; i < record s.length; i++) {\n records[i].target.refChanged_();\n }\n });\n }\n\n /**\n * Ensures proper API and content model for template elements.\n * @param {HTMLTemplateElement} opt_instanceRef The template element which\n * |el| template element will return as the value of its ref(), and whose\n * content will be used as source when createInstance() is invoked.\n */\n HTMLTemplateElement.decorate = function(el, opt_instanceRef) {\n if (el.temp lateIsDecorated_)\n return false;\n\n var templateElement = el;\n tem plateElement.templateIsDecorated_ = true;\n\n var isNativeHTMLTemplate = isHT MLTemplate(templateElement) &&\n hasTemplateElemen t;\n var bootstrapContents = isNativeHTMLTemplate;\n var liftContents = !i sNativeHTMLTemplate;\n var liftRoot = false;\n\n if (!isNativeHTMLTemplate ) {\n if (isAttributeTemplate(templateElement)) {\n assert(!opt_inst anceRef);\n templateElement = extractTemplateFromAttributeTemplate(el);\n templateElement.templateIsDecorated_ = true;\n isNativeHTMLTempla te = hasTemplateElement;\n liftRoot = true;\n } else if (isSVGTempla te(templateElement)) {\n templateElement = extractTemplateFromSVGTemplate (el);\n templateElement.templateIsDecorated_ = true;\n isNativeHTM LTemplate = hasTemplateElement;\n }\n }\n\n if (!isNativeHTMLTemplate ) {\n fixTemplateElementPrototype(templateElement);\n var doc = getOrC reateTemplateContentsOwner(templateElement);\n templateElement.content_ = d oc.createDocumentFragment();\n }\n\n if (opt_instanceRef) {\n // temp late is contained within an instance, its direct content must be\n // empty \n templateElement.instanceRef_ = opt_instanceRef;\n } else if (liftCont ents) {\n liftNonNativeTemplateChildrenIntoContent(templateElement,\n el,\n liftRoot);\n } else if (bootstrapContents) {\n bootstrapTem platesRecursivelyFrom(templateElement.content);\n }\n\n return true;\n }; \n\n // TODO(rafaelw): This used to decorate recursively all templates from a g iven\n // node. This happens by default on 'DOMContentLoaded', but may be neede d\n // in subtrees not descendent from document (e.g. ShadowRoot).\n // Review whether this is the right public API.\n HTMLTemplateElement.bootstrap = bootst rapTemplatesRecursivelyFrom;\n\n var htmlElement = global.HTMLUnknownElement || HTMLElement;\n\n var contentDescriptor = {\n get: function() {\n retur n this.content_;\n },\n enumerable: true,\n configurable: true\n };\n\ n if (!hasTemplateElement) {\n // Gecko is more picky with the prototype tha n WebKit. Make sure to use the\n // same prototype as created in the construc tor.\n HTMLTemplateElement.prototype = Object.create(htmlElement.prototype);\ n\n Object.defineProperty(HTMLTemplateElement.prototype, 'content',\n contentDescriptor);\n }\n\n function fixTemplateElementProto type(el) {\n if (hasProto)\n el.__proto__ = HTMLTemplateElement.prototyp e;\n else\n mixin(el, HTMLTemplateElement.prototype);\n }\n\n function ensureSetModelScheduled(template) {\n if (!template.setModelFn_) {\n te mplate.setModelFn_ = function() {\n template.setModelFnScheduled_ = false ;\n var map = getBindings(template,\n template.delegate_ && te mplate.delegate_.prepareBinding);\n processBindings(template, map, templa te.model_);\n };\n }\n\n if (!template.setModelFnScheduled_) {\n template.setModelFnScheduled_ = true;\n Observer.runEOM_(template.setModel Fn_);\n }\n }\n\n mixin(HTMLTemplateElement.prototype, {\n bind: functio n(name, value, oneTime) {\n if (name != 'ref')\n return Element.prot otype.bind.call(this, name, value, oneTime);\n\n var self = this;\n va r ref = oneTime ? value : value.open(function(ref) {\n self.setAttribute( 'ref', ref);\n self.refChanged_();\n });\n\n this.setAttribute( 'ref', ref);\n this.refChanged_();\n if (oneTime)\n return;\n\n this.unbind('ref');\n return this.bindings.ref = value;\n },\n\n processBindingDirectives_: function(directives) {\n if (this.iterator_)\n this.iterator_.closeDeps();\n\n if (!directives.if && !directives.b ind && !directives.repeat) {\n if (this.iterator_) {\n this.iter ator_.close();\n this.iterator_ = undefined;\n this.bindings.i terator = undefined;\n }\n\n return;\n }\n\n if (!this.i terator_) {\n this.iterator_ = new TemplateIterator(this);\n this. bindings = this.bindings || {};\n this.bindings.iterator = this.iterator_ ;\n }\n\n this.iterator_.updateDependencies(directives, this.model_);\ n\n if (templateObserver) {\n templateObserver.observe(this, { attri butes: true,\n attributeFilter: ['ref'] });\n }\n\n return this.iterator_;\n },\n\n createInstance: func tion(model, bindingDelegate, delegate_,\n instanceBi ndings_) {\n if (bindingDelegate)\n delegate_ = this.newDelegate_(bi ndingDelegate);\n\n if (!this.refContent_)\n this.refContent_ = this .ref_.content;\n var content = this.refContent_;\n var map = this.bind ingMap_;\n if (!map || map.content !== content) {\n // TODO(rafaelw) : Setup a MutationObserver on content to detect\n // when the instanceMap is invalid.\n map = createInstanceBindingMap(content,\n deleg ate_ && delegate_.prepareBinding) || [];\n map.content = content;\n this.bindingMap_ = map;\n }\n\n var stagingDocument = getTemplateSta gingDocument(this);\n var instance = stagingDocument.createDocumentFragment ();\n instance.templateCreator_ = this;\n instance.protoContent_ = con tent;\n\n var instanceRecord = {\n firstNode: null,\n lastNod e: null,\n model: model\n };\n\n var i = 0;\n for (var chi ld = content.firstChild; child; child = child.nextSibling) {\n var clone = cloneAndBindInstance(child, instance, stagingDocument,\n map.children[i++],\n model,\n delegate_,\n instanceBindings_);\n clone.templateInstance_ = ins tanceRecord;\n }\n\n instanceRecord.firstNode = instance.firstChild;\n instanceRecord.lastNode = instance.lastChild;\n instance.templateCrea tor_ = undefined;\n instance.protoContent_ = undefined;\n return insta nce;\n },\n\n get model() {\n return this.model_;\n },\n\n set model(model) {\n this.model_ = model;\n ensureSetModelScheduled(this); \n },\n\n get bindingDelegate() {\n return this.delegate_ && this.del egate_.raw;\n },\n\n refChanged_: function() {\n if (!this.iterator_ || this.refContent_ === this.ref_.content)\n return;\n\n this.refCon tent_ = undefined;\n this.iterator_.valueChanged();\n this.iterator_.u pdateIteratedValue();\n },\n\n clear: function() {\n this.model_ = un defined;\n this.delegate_ = undefined;\n this.bindings_ = undefined;\n this.refContent_ = undefined;\n if (!this.iterator_)\n return; \n this.iterator_.valueChanged();\n this.iterator_.close()\n this .iterator_ = undefined;\n },\n\n setDelegate_: function(delegate) {\n this.delegate_ = delegate;\n this.bindingMap_ = undefined;\n if (this .iterator_) {\n this.iterator_.instancePositionChangedFn_ = undefined;\n this.iterator_.instanceModelFn_ = undefined;\n }\n },\n\n newD elegate_: function(bindingDelegate) {\n if (!bindingDelegate)\n retu rn {};\n\n function delegateFn(name) {\n var fn = bindingDelegate && bindingDelegate[name];\n if (typeof fn != 'function')\n return; \n\n return function() {\n return fn.apply(bindingDelegate, argu ments);\n };\n }\n\n return {\n raw: bindingDelegate,\n prepareBinding: delegateFn('prepareBinding'),\n prepareInstanceMod el: delegateFn('prepareInstanceModel'),\n prepareInstancePositionChanged: \n delegateFn('prepareInstancePositionChanged')\n };\n },\n\n // TODO(rafaelw): Assigning .bindingDelegate always succeeds. It may\n // make sense to issue a warning or even throw if the template is already\n // \"activated\", since this would be a strange thing to do.\n set bindingDelega te(bindingDelegate) {\n if (this.delegate_) {\n throw Error('Templat e must be cleared before a new bindingDelegate ' +\n 'can be assigned');\n }\n\n this.setDelegate_(this.newDelegate_(bindingDelegat e));\n },\n\n get ref_() {\n var ref = searchRefId(this, this.getAttr ibute('ref'));\n if (!ref)\n ref = this.instanceRef_;\n\n if (! ref)\n return this;\n\n var nextRef = ref.ref_;\n return nextRe f ? nextRef : ref;\n }\n });\n\n // Returns\n // a) undefined if there a re no mustaches.\n // b) [TEXT, (ONE_TIME?, PATH, DELEGATE_FN, TEXT)+] if the re is at least one mustache.\n function parseMustaches(s, name, node, prepareBi ndingFn) {\n if (!s || !s.length)\n return;\n\n var tokens;\n var length = s.length;\n var startIndex = 0, lastIndex = 0, endIndex = 0;\n va r onlyOneTime = true;\n while (lastIndex < length) {\n var startIndex = s.indexOf('{{', lastIndex);\n var oneTimeStart = s.indexOf('[[', lastIndex) ;\n var oneTime = false;\n var terminator = '}}';\n\n if (oneTime Start >= 0 &&\n (startIndex < 0 || oneTimeStart < startIndex)) {\n startIndex = oneTimeStart;\n oneTime = true;\n terminator = ']] ';\n }\n\n endIndex = startIndex < 0 ? -1 : s.indexOf(terminator, star tIndex + 2);\n\n if (endIndex < 0) {\n if (!tokens)\n retur n;\n\n tokens.push(s.slice(lastIndex)); // TEXT\n break;\n }\ n\n tokens = tokens || [];\n tokens.push(s.slice(lastIndex, startIndex )); // TEXT\n var pathString = s.slice(startIndex + 2, endIndex).trim();\n tokens.push(oneTime); // ONE_TIME?\n onlyOneTime = onlyOneTime && oneT ime;\n tokens.push(Path.get(pathString)); // PATH\n var delegateFn = p repareBindingFn &&\n prepareBindingFn(pathString, name, no de);\n tokens.push(delegateFn); // DELEGATE_FN\n lastIndex = endIndex + 2;\n }\n\n if (lastIndex === length)\n tokens.push(''); // TEXT\n\n tokens.hasOnePath = tokens.length === 5;\n tokens.isSimplePath = tokens.h asOnePath &&\n tokens[0] == '' &&\n tokens[4] == '';\n tokens.onlyOneTime = onlyOneTime;\n\n tokens.comb inator = function(values) {\n var newValue = tokens[0];\n\n for (var i = 1; i < tokens.length; i += 4) {\n var value = tokens.hasOnePath ? valu es : values[(i - 1) / 4];\n if (value !== undefined)\n newValue += value;\n newValue += tokens[i + 3];\n }\n\n return newValue; \n }\n\n return tokens;\n };\n\n function processOneTimeBinding(name, to kens, node, model) {\n if (tokens.hasOnePath) {\n var delegateFn = token s[3];\n var value = delegateFn ? delegateFn(model, node, true) :\n tokens[2].getValueFrom(model);\n return tokens.isSimp lePath ? value : tokens.combinator(value);\n }\n\n var values = [];\n f or (var i = 1; i < tokens.length; i += 4) {\n var delegateFn = tokens[i + 2 ];\n values[(i - 1) / 4] = delegateFn ? delegateFn(model, node) :\n tokens[i + 1].getValueFrom(model);\n }\n\n return tokens.combinator(valu es);\n }\n\n function processSinglePathBinding(name, tokens, node, model) {\n var delegateFn = tokens[3];\n var observer = delegateFn ? delegateFn(model , node, false) :\n new PathObserver(model, tokens[2]);\n\n return toke ns.isSimplePath ? observer :\n new ObserverTransform(observer, tokens.com binator);\n }\n\n function processBinding(name, tokens, node, model) {\n if (tokens.onlyOneTime)\n return processOneTimeBinding(name, tokens, node, mo del);\n\n if (tokens.hasOnePath)\n return processSinglePathBinding(name, tokens, node, model);\n\n var observer = new CompoundObserver();\n\n for (var i = 1; i < tokens.length; i += 4) {\n var oneTime = tokens[i];\n var delegateFn = tokens[i + 2];\n\n if (delegateFn) {\n var value = delegateFn(model, node, oneTime);\n if (oneTime)\n observer.addP ath(value)\n else\n observer.addObserver(value);\n contin ue;\n }\n\n var path = tokens[i + 1];\n if (oneTime)\n obs erver.addPath(path.getValueFrom(model))\n else\n observer.addPath(mo del, path);\n }\n\n return new ObserverTransform(observer, tokens.combinat or);\n }\n\n function processBindings(node, bindings, model, instanceBindings) {\n for (var i = 0; i < bindings.length; i += 2) {\n var name = binding s[i]\n var tokens = bindings[i + 1];\n var value = processBinding(name , tokens, node, model);\n var binding = node.bind(name, value, tokens.onlyO neTime);\n if (binding && instanceBindings)\n instanceBindings.push( binding);\n }\n\n if (!bindings.isTemplate)\n return;\n\n node.mod el_ = model;\n var iter = node.processBindingDirectives_(bindings);\n if ( instanceBindings && iter)\n instanceBindings.push(iter);\n }\n\n function parseWithDefault(el, name, prepareBindingFn) {\n var v = el.getAttribute(nam e);\n return parseMustaches(v == '' ? '{{}}' : v, name, el, prepareBindingFn) ;\n }\n\n function parseAttributeBindings(element, prepareBindingFn) {\n as sert(element);\n\n var bindings = [];\n var ifFound = false;\n var bind Found = false;\n\n for (var i = 0; i < element.attributes.length; i++) {\n var attr = element.attributes[i];\n var name = attr.name;\n var val ue = attr.value;\n\n // Allow bindings expressed in attributes to be prefix ed with underbars.\n // We do this to allow correct semantics for browsers that don't implement\n // <template> where certain attributes might trigger side-effects -- and\n // for IE which sanitizes certain attributes, disall owing mustache\n // replacements in their text.\n while (name[0] === ' _') {\n name = name.substring(1);\n }\n\n if (isTemplate(elemen t) &&\n (name === IF || name === BIND || name === REPEAT)) {\n c ontinue;\n }\n\n var tokens = parseMustaches(value, name, element,\n prepareBindingFn);\n if (!tokens)\n continue;\n\n bindings.push(name, tokens);\n }\n\n if (isTemplate(ele ment)) {\n bindings.isTemplate = true;\n bindings.if = parseWithDefaul t(element, IF, prepareBindingFn);\n bindings.bind = parseWithDefault(elemen t, BIND, prepareBindingFn);\n bindings.repeat = parseWithDefault(element, R EPEAT, prepareBindingFn);\n\n if (bindings.if && !bindings.bind && !binding s.repeat)\n bindings.bind = parseMustaches('{{}}', BIND, element, prepare BindingFn);\n }\n\n return bindings;\n }\n\n function getBindings(node, prepareBindingFn) {\n if (node.nodeType === Node.ELEMENT_NODE)\n return parseAttributeBindings(node, prepareBindingFn);\n\n if (node.nodeType === Nod e.TEXT_NODE) {\n var tokens = parseMustaches(node.data, 'textContent', node ,\n prepareBindingFn);\n if (tokens)\n return ['textContent', tokens];\n }\n\n return [];\n }\n\n function cloneAndBindInstance(node, parent, stagingDocument, bindings, model,\n delegate,\n instanceBinding s,\n instanceRecord) {\n var clone = parent.ap pendChild(stagingDocument.importNode(node, false));\n\n var i = 0;\n for ( var child = node.firstChild; child; child = child.nextSibling) {\n cloneAnd BindInstance(child, clone, stagingDocument,\n binding s.children[i++],\n model,\n delegate,\n instanceBindings);\n }\n\n if (bi ndings.isTemplate) {\n HTMLTemplateElement.decorate(clone, node);\n if (delegate)\n clone.setDelegate_(delegate);\n }\n\n processBindings (clone, bindings, model, instanceBindings);\n return clone;\n }\n\n functio n createInstanceBindingMap(node, prepareBindingFn) {\n var map = getBindings( node, prepareBindingFn);\n map.children = {};\n var index = 0;\n for (v ar child = node.firstChild; child; child = child.nextSibling) {\n map.child ren[index++] = createInstanceBindingMap(child, prepareBindingFn);\n }\n\n return map;\n }\n\n Object.defineProperty(Node.prototype, 'templateInstance', {\n get: function() {\n var instance = this.templateInstance_;\n re turn instance ? instance :\n (this.parentNode ? this.parentNode.templat eInstance : undefined);\n }\n });\n\n function TemplateIterator(templateEle ment) {\n this.closed = false;\n this.templateElement_ = templateElement;\ n\n // Flattened array of tuples:\n // <instanceTerminatorNode, [binding sSetupByInstance]>\n this.terminators = [];\n\n this.deps = undefined;\n this.iteratedValue = [];\n this.presentValue = undefined;\n this.arrayOb server = undefined;\n }\n\n TemplateIterator.prototype = {\n closeDeps: fun ction() {\n var deps = this.deps;\n if (deps) {\n if (deps.ifOn eTime === false)\n deps.ifValue.close();\n if (deps.oneTime === false)\n deps.value.close();\n }\n },\n\n updateDependencies : function(directives, model) {\n this.closeDeps();\n\n var deps = thi s.deps = {};\n var template = this.templateElement_;\n\n if (directive s.if) {\n deps.hasIf = true;\n deps.ifOneTime = directives.if.only OneTime;\n deps.ifValue = processBinding(IF, directives.if, template, mod el);\n\n // oneTime if & predicate is false. nothing else to do.\n if (deps.ifOneTime && !deps.ifValue) {\n this.updateIteratedValue();\n return;\n }\n\n if (!deps.ifOneTime)\n deps.ifV alue.open(this.updateIteratedValue, this);\n }\n\n if (directives.repe at) {\n deps.repeat = true;\n deps.oneTime = directives.repeat.onl yOneTime;\n deps.value = processBinding(REPEAT, directives.repeat, templa te, model);\n } else {\n deps.repeat = false;\n deps.oneTime = directives.bind.onlyOneTime;\n deps.value = processBinding(BIND, direct ives.bind, template, model);\n }\n\n if (!deps.oneTime)\n deps. value.open(this.updateIteratedValue, this);\n\n this.updateIteratedValue(); \n },\n\n updateIteratedValue: function() {\n if (this.deps.hasIf) {\ n var ifValue = this.deps.ifValue;\n if (!this.deps.ifOneTime)\n ifValue = ifValue.discardChanges();\n if (!ifValue) {\n this.valueChanged();\n return;\n }\n }\n\n var value = this.deps.value;\n if (!this.deps.oneTime)\n value = value.discardC hanges();\n if (!this.deps.repeat)\n value = [value];\n var obs erve = this.deps.repeat &&\n !this.deps.oneTime &&\n Array.isArray(value);\n this.valueChanged(value, observe);\n },\n\n valueChanged: function(value, observeValue) {\n if (!Array.isArra y(value))\n value = [];\n\n if (value === this.iteratedValue)\n return;\n\n this.unobserve();\n this.presentValue = value;\n i f (observeValue) {\n this.arrayObserver = new ArrayObserver(this.presentV alue);\n this.arrayObserver.open(this.handleSplices, this);\n }\n\n this.handleSplices(ArrayObserver.calculateSplices(this.presentValue,\n this.iteratedValue));\n }, \n\n getTerminatorAt: function(index) {\n if (index == -1)\n retu rn this.templateElement_;\n var terminator = this.terminators[index*2];\n if (terminator.nodeType !== Node.ELEMENT_NODE ||\n this.templateEle ment_ === terminator) {\n return terminator;\n }\n\n var subIte rator = terminator.iterator_;\n if (!subIterator)\n return terminato r;\n\n return subIterator.getTerminatorAt(subIterator.terminators.length/2 - 1);\n },\n\n // TODO(rafaelw): If we inserting sequences of instances we can probably\n // avoid lots of calls to getTerminatorAt(), or cache its res ult.\n insertInstanceAt: function(index, fragment, instanceNodes,\n instanceBindings) {\n var previousTerminator = this.ge tTerminatorAt(index - 1);\n var terminator = previousTerminator;\n if (fragment)\n terminator = fragment.lastChild || terminator;\n else i f (instanceNodes)\n terminator = instanceNodes[instanceNodes.length - 1] || terminator;\n\n this.terminators.splice(index*2, 0, terminator, instance Bindings);\n var parent = this.templateElement_.parentNode;\n var inse rtBeforeNode = previousTerminator.nextSibling;\n\n if (fragment) {\n parent.insertBefore(fragment, insertBeforeNode);\n } else if (instanceNode s) {\n for (var i = 0; i < instanceNodes.length; i++)\n parent.i nsertBefore(instanceNodes[i], insertBeforeNode);\n }\n },\n\n extract InstanceAt: function(index) {\n var instanceNodes = [];\n var previous Terminator = this.getTerminatorAt(index - 1);\n var terminator = this.getTe rminatorAt(index);\n instanceNodes.instanceBindings = this.terminators[inde x*2 + 1];\n this.terminators.splice(index*2, 2);\n\n var parent = this .templateElement_.parentNode;\n while (terminator !== previousTerminator) { \n var node = previousTerminator.nextSibling;\n if (node == termin ator)\n terminator = previousTerminator;\n\n parent.removeChild( node);\n instanceNodes.push(node);\n }\n\n return instanceNodes ;\n },\n\n getDelegateFn: function(fn) {\n fn = fn && fn(this.templat eElement_);\n return typeof fn === 'function' ? fn : null;\n },\n\n h andleSplices: function(splices) {\n if (this.closed || !splices.length)\n return;\n\n var template = this.templateElement_;\n\n if (!templ ate.parentNode) {\n this.close();\n return;\n }\n\n Arra yObserver.applySplices(this.iteratedValue, this.presentValue,\n splices);\n\n var delegate = template.delegate_;\n if (this.instanceModelFn_ === undefined) {\n this.instanceModelFn_ =\n this.getDelegateFn(delegate && delegate.prepareInstanceModel);\n }\n\ n if (this.instancePositionChangedFn_ === undefined) {\n this.instan cePositionChangedFn_ =\n this.getDelegateFn(delegate &&\n delegate.prepareInstancePositionChanged);\n }\n\n v ar instanceCache = new Map;\n var removeDelta = 0;\n splices.forEach(f unction(splice) {\n splice.removed.forEach(function(model) {\n v ar instanceNodes =\n this.extractInstanceAt(splice.index + removeDe lta);\n instanceCache.set(model, instanceNodes);\n }, this);\n\n removeDelta -= splice.addedCount;\n }, this);\n\n splices.forE ach(function(splice) {\n var addIndex = splice.index;\n for (; add Index < splice.index + splice.addedCount; addIndex++) {\n var model = t his.iteratedValue[addIndex];\n var fragment = undefined;\n var instanceNodes = instanceCache.get(model);\n var instanceBindings;\n if (instanceNodes) {\n instanceCache.delete(model);\n instanceBindings = instanceNodes.instanceBindings;\n } else {\n instanceBindings = [];\n if (this.instanceModelFn_)\n model = this.instanceModelFn_(model);\n\n if (model !== undefine d) {\n fragment = template.createInstance(model, undefined, delegat e,\n instanceBindings);\n }\n }\n\n this.insertInstanceAt(addIndex, fragment, insta nceNodes,\n instanceBindings);\n }\n }, this);\n\n instanceCache.forEach(function(instanceNodes) {\n this .closeInstanceBindings(instanceNodes.instanceBindings);\n }, this);\n\n if (this.instancePositionChangedFn_)\n this.reportInstancesMoved(splice s);\n },\n\n reportInstanceMoved: function(index) {\n var previousTer minator = this.getTerminatorAt(index - 1);\n var terminator = this.getTermi natorAt(index);\n if (previousTerminator === terminator)\n return; / / instance has zero nodes.\n\n // We must use the first node of the instanc e, because any subsequent\n // nodes may have been generated by sub-templat es.\n // TODO(rafaelw): This is brittle WRT instance mutation -- e.g. if th e\n // first node was removed by script.\n var templateInstance = prev iousTerminator.nextSibling.templateInstance;\n this.instancePositionChanged Fn_(templateInstance, index);\n },\n\n reportInstancesMoved: function(spli ces) {\n var index = 0;\n var offset = 0;\n for (var i = 0; i < s plices.length; i++) {\n var splice = splices[i];\n if (offset != 0 ) {\n while (index < splice.index) {\n this.reportInstanceMo ved(index);\n index++;\n }\n } else {\n inde x = splice.index;\n }\n\n while (index < splice.index + splice.add edCount) {\n this.reportInstanceMoved(index);\n index++;\n }\n\n offset += splice.addedCount - splice.removed.length;\n }\n \n if (offset == 0)\n return;\n\n var length = this.terminators .length / 2;\n while (index < length) {\n this.reportInstanceMoved(i ndex);\n index++;\n }\n },\n\n closeInstanceBindings: function (instanceBindings) {\n for (var i = 0; i < instanceBindings.length; i++) {\ n instanceBindings[i].close();\n }\n },\n\n unobserve: functio n() {\n if (!this.arrayObserver)\n return;\n\n this.arrayObserv er.close();\n this.arrayObserver = undefined;\n },\n\n close: functio n() {\n if (this.closed)\n return;\n this.unobserve();\n f or (var i = 1; i < this.terminators.length; i += 2) {\n this.closeInstanc eBindings(this.terminators[i]);\n }\n\n this.terminators.length = 0;\n this.closeDeps();\n this.templateElement_.iterator_ = undefined;\n this.closed = true;\n }\n };\n\n // Polyfill-specific API.\n HTMLTempla teElement.forAllTemplatesFrom_ = forAllTemplatesFrom;\n})(this);\n",
188 "/*\n Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyrig ht (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n Copyright (C) 2012 Ariya Hida yat <ariya.hidayat@gmail.com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi .be>\n Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n C opyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copyright (C) 2012 Arpad Borsos <arpad.borsos @googlemail.com>\n Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n \n Redistribution and use in source and binary forms, with or without\n modifi cation, are permitted provided that the following conditions are met:\n\n * R edistributions of source code must retain the above copyright\n notice, thi s list of conditions and the following disclaimer.\n * Redistributions in bin ary form must reproduce the above copyright\n notice, this list of conditio ns and the following disclaimer in the\n documentation and/or other materia ls provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIG HT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBST ITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPT ION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRI CT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH D AMAGE.\n*/\n\n(function (global) {\n 'use strict';\n\n var Token,\n TokenName,\n Syntax,\n Messages,\n source,\n index, \n length,\n delegate,\n lookahead,\n state;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8\n };\n\n TokenName = {};\n T okenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '<end>'; \n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.Nu mericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n\n Syntax = {\n ArrayExpr ession: 'ArrayExpression',\n BinaryExpression: 'BinaryExpression',\n CallExpression: 'CallExpression',\n ConditionalExpression: 'Conditiona lExpression',\n EmptyStatement: 'EmptyStatement',\n ExpressionStat ement: 'ExpressionStatement',\n Identifier: 'Identifier',\n Litera l: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExp ression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n ObjectExpression: 'ObjectExpression',\n Program: 'Program',\n Property: 'Property',\n ThisExpression: 'ThisExpression',\n Unar yExpression: 'UnaryExpression'\n };\n\n // Error messages should be identi cal to V8.\n Messages = {\n UnexpectedToken: 'Unexpected token %0',\n UnknownLabel: 'Undefined label \\'%0\\'',\n Redeclaration: '%0 \\ '%1\\' has already been declared'\n };\n\n // Ensure the condition is true , otherwise throw an error.\n // This is only to have a better contract seman tic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT use this to enforce a certain condi tion on any user input.\n\n function assert(condition, message) {\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 48 && ch <= 57 ); // 0..9\n }\n\n\n // 7.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch === 32) || // space\n (ch === 9) || // t ab\n (ch === 0xB) ||\n (ch === 0xC) ||\n (ch == = 0xA0) ||\n (ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u 2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEF F'.indexOf(String.fromCharCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\ n\n function isLineTerminator(ch) {\n return (ch === 10) || (ch === 13 ) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // 7.6 Identifier Names a nd Identifiers\n\n function isIdentifierStart(ch) {\n return (ch === 3 6) || (ch === 95) || // $ (dollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 97 && ch <= 122); // a..z\n }\n\n function isIdentifierPart(ch) {\n return (ch === 36) | | (ch === 95) || // $ (dollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 97 && ch <= 122) || // a..z \n (ch >= 48 && ch <= 57); // 0..9\n }\n\n // 7.6.1.1 Keywords\n\n function isKeyword(id) {\n return (id === 'this')\n } \n\n // 7.4 Comments\n\n function skipWhitespace() {\n while (index < length && isWhiteSpace(source.charCodeAt(index))) {\n ++index;\n }\n }\n\n function getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.c harCodeAt(index);\n if (isIdentifierPart(ch)) {\n ++in dex;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier () {\n var start, id, type;\n\n start = index;\n\n id = get Identifier();\n\n // There is no keyword or literal with only one charact er.\n // Thus, it must be an identifier.\n if (id.length === 1) {\ n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else if (id === 'null') {\n type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') { \n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n range: [start, index]\n };\n }\n\n\n // 7.7 Punctuators\n\n function scanPunctuator() {\n var start = ind ex,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 46: // . dot\n case 40: // ( open bracket\n case 41: // ) close bracket \n case 59: // ; semicolon\n case 44: // , comma\n case 123: // { open curly brace\n case 125: // } close curly brace\n case 91: // [\n case 93: // ]\n case 58: // :\n case 63: // ?\n ++index;\n return {\n type: T oken.Punctuator,\n value: String.fromCharCode(code),\n range: [start, index]\n };\n\n default:\n code 2 = source.charCodeAt(index + 1);\n\n // '=' (char #61) marks an assi gnment or comparison operator.\n if (code2 === 61) {\n switch (code) {\n case 37: // %\n case 38: // & \n case 42: // *:\n case 43: // +\n case 45: // -\n case 47: // /\n case 60: // <\n case 62: // >\n case 124: // |\n index += 2;\n return {\n type: Token.Punctuator,\n value: String.fromCharCode(code) + St ring.fromCharCode(code2),\n range: [start, index]\n };\n\n case 33: // !\n case 61: // = \n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 61) {\n ++i ndex;\n }\n return {\n type: Token.Punctuator,\n value: source.slice(start, index),\n range: [start, index]\n };\n default:\n break;\n }\n }\n break;\n }\n\n // Peek more characters.\n\n ch2 = source[index + 1];\n\n // Other 2-character punctuators: && || \n\n if (ch1 === ch2 && ('&|'.indexOf(ch1) >= 0)) {\n index += 2;\n return {\n type: Token.Punctuator,\n value: ch1 + ch2,\n range: [start, index]\n };\n }\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index; \n return {\n type: Token.Punctuator,\n value: ch1,\n range: [start, index]\n };\n }\n \n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n function scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.cha rCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a dec imal digit or a decimal point');\n\n start = index;\n number = ''; \n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({ }, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n nu mber += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\ n\n if (ch === 'e' || ch === 'E') {\n number += source[index++ ];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (i sDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigi t(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, Messages .UnexpectedToken, 'ILLEGAL');\n }\n }\n\n if (isIdentif ierStart(source.charCodeAt(index))) {\n throwError({}, Messages.Unexp ectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token. NumericLiteral,\n value: parseFloat(number),\n range: [sta rt, index]\n };\n }\n\n // 7.8.4 String Literals\n\n function sc anStringLiteral() {\n var str = '', quote, start, ch, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"' ),\n 'String literal must starts with a quote');\n\n start = i ndex;\n ++index;\n\n while (index < length) {\n ch = so urce[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCode At(0))) {\n switch (ch) {\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case ' f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n str += ch;\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.StringLitera l,\n value: str,\n octal: octal,\n range: [star t, index]\n };\n }\n\n function isIdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyw ord ||\n token.type === Token.BooleanLiteral ||\n token.ty pe === Token.NullLiteral;\n }\n\n function advance() {\n var ch;\n\ n skipWhitespace();\n\n if (index >= length) {\n return {\n type: Token.EOF,\n range: [index, index]\n };\n }\n\n ch = source.charCodeAt(index);\n\n // V ery common: ( and ) and ;\n if (ch === 40 || ch === 41 || ch === 58) {\n return scanPunctuator();\n }\n\n // String literal star ts with single quote (#39) or double quote (#34).\n if (ch === 39 || ch = == 34) {\n return scanStringLiteral();\n }\n\n if (isId entifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Dot (.) char #46 can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 46) {\n if ( isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNume ricLiteral();\n }\n return scanPunctuator();\n }\n\ n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n function lex() {\n var token;\n\n token = lookahead;\n index = token.range[1];\n\ n lookahead = advance();\n\n index = token.range[1];\n\n re turn token;\n }\n\n function peek() {\n var pos;\n\n pos = i ndex;\n lookahead = advance();\n index = pos;\n }\n\n // Thr ow an exception\n\n function throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n func tion (whole, index) {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n error = new Error(msg);\n error.inde x = index;\n error.description = msg;\n throw error;\n }\n\n // Throw an exception because of the token.\n\n function throwUnexpected(tok en) {\n throwError(token, Messages.UnexpectedToken, token.value);\n }\ n\n // Expect the next token to match the specified punctuator.\n // If no t, an exception will be thrown.\n\n function expect(value) {\n var tok en = lex();\n if (token.type !== Token.Punctuator || token.value !== valu e) {\n throwUnexpected(token);\n }\n }\n\n // Return tru e if the next token matches the specified punctuator.\n\n function match(valu e) {\n return lookahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyw ord\n\n function matchKeyword(keyword) {\n return lookahead.type === T oken.Keyword && lookahead.value === keyword;\n }\n\n function consumeSemic olon() {\n // Catch the very common case first: immediately a semicolon ( char #59).\n if (source.charCodeAt(index) === 59) {\n lex();\n return;\n }\n\n skipWhitespace();\n\n if (match (';')) {\n lex();\n return;\n }\n\n if (look ahead.type !== Token.EOF && !match('}')) {\n throwUnexpected(lookahea d);\n }\n }\n\n // 11.1.4 Array Initialiser\n\n function parseAr rayInitialiser() {\n var elements = [];\n\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elem ents.push(parseExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n ex pect(']');\n\n return delegate.createArrayExpression(elements);\n }\n\ n // 11.1.5 Object Initialiser\n\n function parseObjectPropertyKey() {\n var token;\n\n skipWhitespace();\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {\n return delegate.createLiteral(token);\n }\n\n return delegate.crea teIdentifier(token.value);\n }\n\n function parseObjectProperty() {\n var token, key;\n\n token = lookahead;\n skipWhitespace();\n\n if (token.type === Token.EOF || token.type === Token.Punctuator) {\n throwUnexpected(token);\n }\n\n key = parseObjectPropertyKe y();\n expect(':');\n return delegate.createProperty('init', key, parseExpression());\n }\n\n function parseObjectInitialiser() {\n v ar properties = [];\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parseObjectProperty());\n\n if (!match('}') ) {\n expect(',');\n }\n }\n\n expect('} ');\n\n return delegate.createObjectExpression(properties);\n }\n\n // 11.1.6 The Grouping Operator\n\n function parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n }\n\n\n // 11.1 Primary Expres sions\n\n function parsePrimaryExpression() {\n var type, token, expr; \n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n type = lookahead.type;\n\n if (type === Token.Identifier) {\n expr = delegate.createIdentifier(lex().value);\n } else i f (type === Token.StringLiteral || type === Token.NumericLiteral) {\n expr = delegate.createLiteral(lex());\n } else if (type === Token.Keywor d) {\n if (matchKeyword('this')) {\n lex();\n expr = delegate.createThisExpression();\n }\n } else if (type === Token.BooleanLiteral) {\n token = lex();\n toke n.value = (token.value === 'true');\n expr = delegate.createLiteral(t oken);\n } else if (type === Token.NullLiteral) {\n token = le x();\n token.value = null;\n expr = delegate.createLiteral (token);\n } else if (match('[')) {\n expr = parseArrayInitial iser();\n } else if (match('{')) {\n expr = parseObjectInitial iser();\n }\n\n if (expr) {\n return expr;\n }\n \n throwUnexpected(lex());\n }\n\n // 11.2 Left-Hand-Side Expressio ns\n\n function parseArguments() {\n var args = [];\n\n expect( '(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token;\n\n token = le x();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(tok en);\n }\n\n return delegate.createIdentifier(token.value);\n } \n\n function parseNonComputedMember() {\n expect('.');\n\n ret urn parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n \n expect(']');\n\n return expr;\n }\n\n function parseLeftH andSideExpression() {\n var expr, property;\n\n expr = parsePrimar yExpression();\n\n while (match('.') || match('[')) {\n if (ma tch('[')) {\n property = parseComputedMember();\n expr = delegate.createMemberExpression('[', expr, property);\n } else {\n property = parseNonComputedMember();\n expr = delegate.createMemberExpression('.', expr, property);\n }\n } \n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n var pa rsePostfixExpression = parseLeftHandSideExpression;\n\n // 11.4 Unary Operato rs\n\n function parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\ n expr = parsePostfixExpression();\n } else if (match('+') || match('-') || match('!')) {\n token = lex();\n expr = pars eUnaryExpression();\n expr = delegate.createUnaryExpression(token.val ue, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throwError({}, Messages.UnexpectedToken) ;\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n }\n\n function binaryPrecedence(token) {\n v ar prec = 0;\n\n if (token.type !== Token.Punctuator && token.type !== To ken.Keyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n cas e '&&':\n prec = 2;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = 7;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\ n break;\n\n default:\n break;\n }\n\n return prec;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Addit ive Operators\n // 11.7 Bitwise Shift Operators\n // 11.8 Relational Opera tors\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Operators\n // 11.11 Binary Logical Operators\n\n function parseBinaryExpression() {\n var expr, token, prec, stack, right, operator, left, i;\n\n left = parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrec edence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n\n right = parseUnaryExpressi on();\n\n stack = [left, token, right];\n\n while ((prec = binaryP recedence(lookahead)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n expr = delegate.createBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(tok en);\n expr = parseUnaryExpression();\n stack.push(expr);\ n }\n\n // Final reduce to clean-up the stack.\n i = stack. length - 1;\n expr = stack[i];\n while (i > 1) {\n expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n // 11.12 Con ditional Operator\n\n function parseConditionalExpression() {\n var ex pr, consequent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditiona lExpression();\n expect(':');\n alternate = parseCondition alExpression();\n\n expr = delegate.createConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n }\n\n // Sim plification since we do not support AssignmentExpression.\n var parseExpressi on = parseConditionalExpression;\n\n // Polymer Syntax extensions\n\n // F ilter ::\n // Identifier\n // Identifier \"(\" \")\"\n // Identif ier \"(\" FilterArguments \")\"\n\n function parseFilter() {\n var ide ntifier, args;\n\n identifier = lex();\n\n if (identifier.type !== Token.Identifier) {\n throwUnexpected(identifier);\n }\n\n args = match('(') ? parseArguments() : [];\n\n return delegate.creat eFilter(identifier.value, args);\n }\n\n // Filters ::\n // \"|\" Fil ter\n // Filters \"|\" Filter\n\n function parseFilters() {\n whi le (match('|')) {\n lex();\n parseFilter();\n }\n }\n\n // TopLevel ::\n // LabelledExpressions\n // AsExpression\n // InExpression\n // FilterExpression\n\n // AsExpression ::\n // FilterExpression as Identifier\n\n // InExpression ::\n // Identifi er, Identifier in FilterExpression\n // Identifier in FilterExpression\n\n // FilterExpression ::\n // Expression\n // Expression Filters\n\n function parseTopLevel() {\n skipWhitespace();\n peek();\n\n var expr = parseExpression();\n if (expr) {\n if (lookahe ad.value === ',' || lookahead.value == 'in' &&\n expr.type === Syntax.Identifier) {\n parseInExpression(expr);\n } else {\n parseFilters();\n if (lookahead.value === 'as') {\n parseAsExpression(expr);\n } els e {\n delegate.createTopLevel(expr);\n }\n }\n }\n\n if (lookahead.type !== Token.EOF) {\n throwUnexpected(lookahead);\n }\n }\n\n function parseAsExpression (expr) {\n lex(); // as\n var identifier = lex().value;\n delegate.createAsExpression(expr, identifier);\n }\n\n function parseInExp ression(identifier) {\n var indexName;\n if (lookahead.value === ' ,') {\n lex();\n if (lookahead.type !== Token.Identifier)\ n throwUnexpected(lookahead);\n indexName = lex().valu e;\n }\n\n lex(); // in\n var expr = parseExpression();\n parseFilters();\n delegate.createInExpression(identifier.name, ind exName, expr);\n }\n\n function parse(code, inDelegate) {\n delegat e = inDelegate;\n source = code;\n index = 0;\n length = so urce.length;\n lookahead = null;\n state = {\n labelSet : {}\n };\n\n return parseTopLevel();\n }\n\n global.esprima = {\n parse: parse\n };\n})(this);\n", 188 "/*\n Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyrig ht (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n Copyright (C) 2012 Ariya Hida yat <ariya.hidayat@gmail.com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi .be>\n Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n C opyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copyright (C) 2012 Arpad Borsos <arpad.borsos @googlemail.com>\n Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n \n Redistribution and use in source and binary forms, with or without\n modifi cation, are permitted provided that the following conditions are met:\n\n * R edistributions of source code must retain the above copyright\n notice, thi s list of conditions and the following disclaimer.\n * Redistributions in bin ary form must reproduce the above copyright\n notice, this list of conditio ns and the following disclaimer in the\n documentation and/or other materia ls provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIG HT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBST ITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPT ION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRI CT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH D AMAGE.\n*/\n\n(function (global) {\n 'use strict';\n\n var Token,\n TokenName,\n Syntax,\n Messages,\n source,\n index, \n length,\n delegate,\n lookahead,\n state;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8\n };\n\n TokenName = {};\n T okenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '<end>'; \n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.Nu mericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n\n Syntax = {\n ArrayExpr ession: 'ArrayExpression',\n BinaryExpression: 'BinaryExpression',\n CallExpression: 'CallExpression',\n ConditionalExpression: 'Conditiona lExpression',\n EmptyStatement: 'EmptyStatement',\n ExpressionStat ement: 'ExpressionStatement',\n Identifier: 'Identifier',\n Litera l: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExp ression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n ObjectExpression: 'ObjectExpression',\n Program: 'Program',\n Property: 'Property',\n ThisExpression: 'ThisExpression',\n Unar yExpression: 'UnaryExpression'\n };\n\n // Error messages should be identi cal to V8.\n Messages = {\n UnexpectedToken: 'Unexpected token %0',\n UnknownLabel: 'Undefined label \\'%0\\'',\n Redeclaration: '%0 \\ '%1\\' has already been declared'\n };\n\n // Ensure the condition is true , otherwise throw an error.\n // This is only to have a better contract seman tic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT use this to enforce a certain condi tion on any user input.\n\n function assert(condition, message) {\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 48 && ch <= 57 ); // 0..9\n }\n\n\n // 7.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch === 32) || // space\n (ch === 9) || // t ab\n (ch === 0xB) ||\n (ch === 0xC) ||\n (ch == = 0xA0) ||\n (ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u 2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEF F'.indexOf(String.fromCharCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\ n\n function isLineTerminator(ch) {\n return (ch === 10) || (ch === 13 ) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // 7.6 Identifier Names a nd Identifiers\n\n function isIdentifierStart(ch) {\n return (ch === 3 6) || (ch === 95) || // $ (dollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 97 && ch <= 122); // a..z\n }\n\n function isIdentifierPart(ch) {\n return (ch === 36) | | (ch === 95) || // $ (dollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 97 && ch <= 122) || // a..z \n (ch >= 48 && ch <= 57); // 0..9\n }\n\n // 7.6.1.1 Keywords\n\n function isKeyword(id) {\n return (id === 'this')\n } \n\n // 7.4 Comments\n\n function skipWhitespace() {\n while (index < length && isWhiteSpace(source.charCodeAt(index))) {\n ++index;\n }\n }\n\n function getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.c harCodeAt(index);\n if (isIdentifierPart(ch)) {\n ++in dex;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier () {\n var start, id, type;\n\n start = index;\n\n id = get Identifier();\n\n // There is no keyword or literal with only one charact er.\n // Thus, it must be an identifier.\n if (id.length === 1) {\ n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else if (id === 'null') {\n type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') { \n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n range: [start, index]\n };\n }\n\n\n // 7.7 Punctuators\n\n function scanPunctuator() {\n var start = ind ex,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 46: // . dot\n case 40: // ( open bracket\n case 41: // ) close bracket \n case 59: // ; semicolon\n case 44: // , comma\n case 123: // { open curly brace\n case 125: // } close curly brace\n case 91: // [\n case 93: // ]\n case 58: // :\n case 63: // ?\n ++index;\n return {\n type: T oken.Punctuator,\n value: String.fromCharCode(code),\n range: [start, index]\n };\n\n default:\n code 2 = source.charCodeAt(index + 1);\n\n // '=' (char #61) marks an assi gnment or comparison operator.\n if (code2 === 61) {\n switch (code) {\n case 37: // %\n case 38: // & \n case 42: // *:\n case 43: // +\n case 45: // -\n case 47: // /\n case 60: // <\n case 62: // >\n case 124: // |\n index += 2;\n return {\n type: Token.Punctuator,\n value: String.fromCharCode(code) + St ring.fromCharCode(code2),\n range: [start, index]\n };\n\n case 33: // !\n case 61: // = \n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 61) {\n ++i ndex;\n }\n return {\n type: Token.Punctuator,\n value: source.slice(start, index),\n range: [start, index]\n };\n default:\n break;\n }\n }\n break;\n }\n\n // Peek more characters.\n\n ch2 = source[index + 1];\n\n // Other 2-character punctuators: && || \n\n if (ch1 === ch2 && ('&|'.indexOf(ch1) >= 0)) {\n index += 2;\n return {\n type: Token.Punctuator,\n value: ch1 + ch2,\n range: [start, index]\n };\n }\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index; \n return {\n type: Token.Punctuator,\n value: ch1,\n range: [start, index]\n };\n }\n \n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n function scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.cha rCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a dec imal digit or a decimal point');\n\n start = index;\n number = ''; \n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({ }, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n nu mber += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\ n\n if (ch === 'e' || ch === 'E') {\n number += source[index++ ];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (i sDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigi t(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, Messages .UnexpectedToken, 'ILLEGAL');\n }\n }\n\n if (isIdentif ierStart(source.charCodeAt(index))) {\n throwError({}, Messages.Unexp ectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token. NumericLiteral,\n value: parseFloat(number),\n range: [sta rt, index]\n };\n }\n\n // 7.8.4 String Literals\n\n function sc anStringLiteral() {\n var str = '', quote, start, ch, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"' ),\n 'String literal must starts with a quote');\n\n start = i ndex;\n ++index;\n\n while (index < length) {\n ch = so urce[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCode At(0))) {\n switch (ch) {\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case ' f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n str += ch;\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.StringLitera l,\n value: str,\n octal: octal,\n range: [star t, index]\n };\n }\n\n function isIdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyw ord ||\n token.type === Token.BooleanLiteral ||\n token.ty pe === Token.NullLiteral;\n }\n\n function advance() {\n var ch;\n\ n skipWhitespace();\n\n if (index >= length) {\n return {\n type: Token.EOF,\n range: [index, index]\n };\n }\n\n ch = source.charCodeAt(index);\n\n // V ery common: ( and ) and ;\n if (ch === 40 || ch === 41 || ch === 58) {\n return scanPunctuator();\n }\n\n // String literal star ts with single quote (#39) or double quote (#34).\n if (ch === 39 || ch = == 34) {\n return scanStringLiteral();\n }\n\n if (isId entifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Dot (.) char #46 can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 46) {\n if ( isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNume ricLiteral();\n }\n return scanPunctuator();\n }\n\ n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n function lex() {\n var token;\n\n token = lookahead;\n index = token.range[1];\n\ n lookahead = advance();\n\n index = token.range[1];\n\n re turn token;\n }\n\n function peek() {\n var pos;\n\n pos = i ndex;\n lookahead = advance();\n index = pos;\n }\n\n // Thr ow an exception\n\n function throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n func tion (whole, index) {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n error = new Error(msg);\n error.inde x = index;\n error.description = msg;\n throw error;\n }\n\n // Throw an exception because of the token.\n\n function throwUnexpected(tok en) {\n throwError(token, Messages.UnexpectedToken, token.value);\n }\ n\n // Expect the next token to match the specified punctuator.\n // If no t, an exception will be thrown.\n\n function expect(value) {\n var tok en = lex();\n if (token.type !== Token.Punctuator || token.value !== valu e) {\n throwUnexpected(token);\n }\n }\n\n // Return tru e if the next token matches the specified punctuator.\n\n function match(valu e) {\n return lookahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyw ord\n\n function matchKeyword(keyword) {\n return lookahead.type === T oken.Keyword && lookahead.value === keyword;\n }\n\n function consumeSemic olon() {\n // Catch the very common case first: immediately a semicolon ( char #59).\n if (source.charCodeAt(index) === 59) {\n lex();\n return;\n }\n\n skipWhitespace();\n\n if (match (';')) {\n lex();\n return;\n }\n\n if (look ahead.type !== Token.EOF && !match('}')) {\n throwUnexpected(lookahea d);\n }\n }\n\n // 11.1.4 Array Initialiser\n\n function parseAr rayInitialiser() {\n var elements = [];\n\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elem ents.push(parseExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n ex pect(']');\n\n return delegate.createArrayExpression(elements);\n }\n\ n // 11.1.5 Object Initialiser\n\n function parseObjectPropertyKey() {\n var token;\n\n skipWhitespace();\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {\n return delegate.createLiteral(token);\n }\n\n return delegate.crea teIdentifier(token.value);\n }\n\n function parseObjectProperty() {\n var token, key;\n\n token = lookahead;\n skipWhitespace();\n\n if (token.type === Token.EOF || token.type === Token.Punctuator) {\n throwUnexpected(token);\n }\n\n key = parseObjectPropertyKe y();\n expect(':');\n return delegate.createProperty('init', key, parseExpression());\n }\n\n function parseObjectInitialiser() {\n v ar properties = [];\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parseObjectProperty());\n\n if (!match('}') ) {\n expect(',');\n }\n }\n\n expect('} ');\n\n return delegate.createObjectExpression(properties);\n }\n\n // 11.1.6 The Grouping Operator\n\n function parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n }\n\n\n // 11.1 Primary Expres sions\n\n function parsePrimaryExpression() {\n var type, token, expr; \n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n type = lookahead.type;\n\n if (type === Token.Identifier) {\n expr = delegate.createIdentifier(lex().value);\n } else i f (type === Token.StringLiteral || type === Token.NumericLiteral) {\n expr = delegate.createLiteral(lex());\n } else if (type === Token.Keywor d) {\n if (matchKeyword('this')) {\n lex();\n expr = delegate.createThisExpression();\n }\n } else if (type === Token.BooleanLiteral) {\n token = lex();\n toke n.value = (token.value === 'true');\n expr = delegate.createLiteral(t oken);\n } else if (type === Token.NullLiteral) {\n token = le x();\n token.value = null;\n expr = delegate.createLiteral (token);\n } else if (match('[')) {\n expr = parseArrayInitial iser();\n } else if (match('{')) {\n expr = parseObjectInitial iser();\n }\n\n if (expr) {\n return expr;\n }\n \n throwUnexpected(lex());\n }\n\n // 11.2 Left-Hand-Side Expressio ns\n\n function parseArguments() {\n var args = [];\n\n expect( '(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token;\n\n token = le x();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(tok en);\n }\n\n return delegate.createIdentifier(token.value);\n } \n\n function parseNonComputedMember() {\n expect('.');\n\n ret urn parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n \n expect(']');\n\n return expr;\n }\n\n function parseLeftH andSideExpression() {\n var expr, property;\n\n expr = parsePrimar yExpression();\n\n while (match('.') || match('[')) {\n if (ma tch('[')) {\n property = parseComputedMember();\n expr = delegate.createMemberExpression('[', expr, property);\n } else {\n property = parseNonComputedMember();\n expr = delegate.createMemberExpression('.', expr, property);\n }\n } \n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n var pa rsePostfixExpression = parseLeftHandSideExpression;\n\n // 11.4 Unary Operato rs\n\n function parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\ n expr = parsePostfixExpression();\n } else if (match('+') || match('-') || match('!')) {\n token = lex();\n expr = pars eUnaryExpression();\n expr = delegate.createUnaryExpression(token.val ue, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throwError({}, Messages.UnexpectedToken) ;\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n }\n\n function binaryPrecedence(token) {\n v ar prec = 0;\n\n if (token.type !== Token.Punctuator && token.type !== To ken.Keyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n cas e '&&':\n prec = 2;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = 7;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\ n break;\n\n default:\n break;\n }\n\n return prec;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Addit ive Operators\n // 11.7 Bitwise Shift Operators\n // 11.8 Relational Opera tors\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Operators\n // 11.11 Binary Logical Operators\n\n function parseBinaryExpression() {\n var expr, token, prec, stack, right, operator, left, i;\n\n left = parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrec edence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n\n right = parseUnaryExpressi on();\n\n stack = [left, token, right];\n\n while ((prec = binaryP recedence(lookahead)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n expr = delegate.createBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(tok en);\n expr = parseUnaryExpression();\n stack.push(expr);\ n }\n\n // Final reduce to clean-up the stack.\n i = stack. length - 1;\n expr = stack[i];\n while (i > 1) {\n expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n // 11.12 Con ditional Operator\n\n function parseConditionalExpression() {\n var ex pr, consequent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditiona lExpression();\n expect(':');\n alternate = parseCondition alExpression();\n\n expr = delegate.createConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n }\n\n // Sim plification since we do not support AssignmentExpression.\n var parseExpressi on = parseConditionalExpression;\n\n // Polymer Syntax extensions\n\n // F ilter ::\n // Identifier\n // Identifier \"(\" \")\"\n // Identif ier \"(\" FilterArguments \")\"\n\n function parseFilter() {\n var ide ntifier, args;\n\n identifier = lex();\n\n if (identifier.type !== Token.Identifier) {\n throwUnexpected(identifier);\n }\n\n args = match('(') ? parseArguments() : [];\n\n return delegate.creat eFilter(identifier.value, args);\n }\n\n // Filters ::\n // \"|\" Fil ter\n // Filters \"|\" Filter\n\n function parseFilters() {\n whi le (match('|')) {\n lex();\n parseFilter();\n }\n }\n\n // TopLevel ::\n // LabelledExpressions\n // AsExpression\n // InExpression\n // FilterExpression\n\n // AsExpression ::\n // FilterExpression as Identifier\n\n // InExpression ::\n // Identifi er, Identifier in FilterExpression\n // Identifier in FilterExpression\n\n // FilterExpression ::\n // Expression\n // Expression Filters\n\n function parseTopLevel() {\n skipWhitespace();\n peek();\n\n var expr = parseExpression();\n if (expr) {\n if (lookahe ad.value === ',' || lookahead.value == 'in' &&\n expr.type === Syntax.Identifier) {\n parseInExpression(expr);\n } else {\n parseFilters();\n if (lookahead.value === 'as') {\n parseAsExpression(expr);\n } els e {\n delegate.createTopLevel(expr);\n }\n }\n }\n\n if (lookahead.type !== Token.EOF) {\n throwUnexpected(lookahead);\n }\n }\n\n function parseAsExpression (expr) {\n lex(); // as\n var identifier = lex().value;\n delegate.createAsExpression(expr, identifier);\n }\n\n function parseInExp ression(identifier) {\n var indexName;\n if (lookahead.value === ' ,') {\n lex();\n if (lookahead.type !== Token.Identifier)\ n throwUnexpected(lookahead);\n indexName = lex().valu e;\n }\n\n lex(); // in\n var expr = parseExpression();\n parseFilters();\n delegate.createInExpression(identifier.name, ind exName, expr);\n }\n\n function parse(code, inDelegate) {\n delegat e = inDelegate;\n source = code;\n index = 0;\n length = so urce.length;\n lookahead = null;\n state = {\n labelSet : {}\n };\n\n return parseTopLevel();\n }\n\n global.esprima = {\n parse: parse\n };\n})(this);\n",
189 "// Copyright 2013 Google Inc.\n//\n// Licensed under the Apache License, Ve rsion 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http:/ /www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o r agreed to in writing, software\n// distributed under the License is distribute d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe r express or implied.\n// See the License for the specific language governing pe rmissions and\n// limitations under the License.\n\n(function (global) {\n 'use strict';\n\n // JScript does not have __proto__. We wrap all object literals w ith\n // createObject which uses Object.create, Object.defineProperty and\n // Object.getOwnPropertyDescriptor to create a new object that does the exact\n / / same thing. The main downside to this solution is that we have to extract\n / / all those property descriptors for IE.\n var createObject = ('__proto__' in { }) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forEa ch(function(name) {\n Object.defineProperty(newObject, name,\n Object.getOwnPropertyDescriptor(obj, name));\n });\ n return newObject;\n };\n\n function prepareBinding(expressionText , name, node, filterRegistry) {\n var expression;\n try {\n expressio n = getExpression(expressionText);\n if (expression.scopeIdent &&\n (node.nodeType !== Node.ELEMENT_NODE ||\n node.tagName !== 'TEMPLATE ' ||\n (name !== 'bind' && name !== 'repeat'))) {\n throw Error ('as and in can only be used within <template bind/repeat>');\n }\n } ca tch (ex) {\n console.error('Invalid expression syntax: ' + expressionText, ex);\n return;\n }\n\n return function(model, node, oneTime) {\n var binding = expression.getBinding(model, filterRegistry, oneTime);\n if (expression.scopeIdent && binding) {\n node.polymerExpressionScopeIdent_ = expression.scopeIdent;\n if (expression.indexIdent)\n node.pol ymerExpressionIndexIdent_ = expression.indexIdent;\n }\n\n return bind ing;\n }\n }\n\n // TODO(rafaelw): Implement simple LRU.\n var expressionP arseCache = Object.create(null);\n\n function getExpression(expressionText) {\n var expression = expressionParseCache[expressionText];\n if (!expression) {\n var delegate = new ASTDelegate();\n esprima.parse(expressionText, delegate);\n expression = new Expression(delegate);\n expressionParse Cache[expressionText] = expression;\n }\n return expression;\n }\n\n fun ction Literal(value) {\n this.value = value;\n this.valueFn_ = undefined;\ n }\n\n Literal.prototype = {\n valueFn: function() {\n if (!this.valu eFn_) {\n var value = this.value;\n this.valueFn_ = function() {\n return value;\n }\n }\n\n return this.valueFn_;\n }\n }\n\n function IdentPath(name) {\n this.name = name;\n this.path = P ath.get(name);\n }\n\n IdentPath.prototype = {\n valueFn: function() {\n if (!this.valueFn_) {\n var name = this.name;\n var path = this .path;\n this.valueFn_ = function(model, observer) {\n if (obser ver)\n observer.addPath(model, path);\n\n return path.getVal ueFrom(model);\n }\n }\n\n return this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n return this.path.setValueFrom(mode l, newValue);\n }\n };\n\n function MemberExpression(object, property, acce ssor) {\n // convert literal computed property access where literal value is a value\n // path to ident dot-access.\n if (accessor == '[' &&\n p roperty instanceof Literal &&\n Path.get(property.value).valid) {\n accessor = '.';\n property = new IdentPath(property.value);\n }\n\n t his.dynamicDeps = typeof object == 'function' || object.dynamic;\n\n this.dyn amic = typeof property == 'function' ||\n property.dynamic ||\ n accessor == '[';\n\n this.simplePath =\n !this.dyn amic &&\n !this.dynamicDeps &&\n property instanceof IdentPath &&\ n (object instanceof MemberExpression || object instanceof IdentPath);\n\ n this.object = this.simplePath ? object : getFn(object);\n this.property = accessor == '.' ? property : getFn(property);\n }\n\n MemberExpression.proto type = {\n get fullPath() {\n if (!this.fullPath_) {\n var last = this.object instanceof IdentPath ?\n this.object.name : this.object. fullPath;\n this.fullPath_ = Path.get(last + '.' + this.property.name);\n }\n\n return this.fullPath_;\n },\n\n valueFn: function() {\n if (!this.valueFn_) {\n var object = this.object;\n\n if (this .simplePath) {\n var path = this.fullPath;\n\n this.valueFn_ = function(model, observer) {\n if (observer)\n observer. addPath(model, path);\n\n return path.getValueFrom(model);\n };\n } else if (this.property instanceof IdentPath) {\n var pat h = Path.get(this.property.name);\n\n this.valueFn_ = function(model, o bserver) {\n var context = object(model, observer);\n\n if (observer)\n observer.addPath(context, path);\n\n retur n path.getValueFrom(context);\n }\n } else {\n // Compu ted property.\n var property = this.property;\n\n this.valueFn _ = function(model, observer) {\n var context = object(model, observe r);\n var propName = property(model, observer);\n if (obse rver)\n observer.addPath(context, propName);\n\n return context ? context[propName] : undefined;\n };\n }\n }\n return this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.simplePath) {\n this.fullPath.setValueFrom(model, newValue); \n return newValue;\n }\n\n var object = this.object(model);\n var propName = this.property instanceof IdentPath ? this.property.name :\n this.property(model);\n return object[propName] = newValue;\n } \n };\n\n function Filter(name, args) {\n this.name = name;\n this.args = [];\n for (var i = 0; i < args.length; i++) {\n this.args[i] = getFn(a rgs[i]);\n }\n }\n\n Filter.prototype = {\n transform: function(value, t oModelDirection, filterRegistry, model,\n observer) {\n var fn = filterRegistry[this.name];\n var context = model;\n if (f n) {\n context = undefined;\n } else {\n fn = context[this.na me];\n if (!fn) {\n console.error('Cannot find filter: ' + this. name);\n return;\n }\n }\n\n // If toModelDirection is falsey, then the \"normal\" (dom-bound) direction\n // is used. Otherwise, it looks for a 'toModel' property function on the\n // object.\n if ( toModelDirection) {\n fn = fn.toModel;\n } else if (typeof fn.toDOM == 'function') {\n fn = fn.toDOM;\n }\n\n if (typeof fn != 'fun ction') {\n console.error('No ' + (toModelDirection ? 'toModel' : 'toDOM' ) +\n ' found on' + this.name);\n return;\n }\n \n var args = [value];\n for (var i = 0; i < this.args.length; i++) {\ n args[i + 1] = getFn(this.args[i])(model, observer);\n }\n\n r eturn fn.apply(context, args);\n }\n };\n\n function notImplemented() { thr ow Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': function(v) { return +v; },\n '-': function(v) { return -v; },\n '!': function(v) { r eturn !v; }\n };\n\n var binaryOperators = {\n '+': function(l, r) { return l+r; },\n '-': function(l, r) { return l-r; },\n '*': function(l, r) { re turn l*r; },\n '/': function(l, r) { return l/r; },\n '%': function(l, r) { return l%r; },\n '<': function(l, r) { return l<r; },\n '>': function(l, r) { return l>r; },\n '<=': function(l, r) { return l<=r; },\n '>=': func tion(l, r) { return l>=r; },\n '==': function(l, r) { return l==r; },\n '! =': function(l, r) { return l!=r; },\n '===': function(l, r) { return l===r; },\n '!==': function(l, r) { return l!==r; },\n '&&': function(l, r) { ret urn l&&r; },\n '||': function(l, r) { return l||r; },\n };\n\n function get Fn(arg) {\n return typeof arg == 'function' ? arg : arg.valueFn();\n }\n\n function ASTDelegate() {\n this.expression = null;\n this.filters = [];\n this.deps = {};\n this.currentPath = undefined;\n this.scopeIdent = und efined;\n this.indexIdent = undefined;\n this.dynamicDeps = false;\n }\n\ n ASTDelegate.prototype = {\n createUnaryExpression: function(op, argument) {\n if (!unaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\n argument = getFn(argument);\n\n return function(model, obser ver) {\n return unaryOperators[op](argument(model, observer));\n };\ n },\n\n createBinaryExpression: function(op, left, right) {\n if (!b inaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\n left = getFn(left);\n right = getFn(right);\n\n return function(model , observer) {\n return binaryOperators[op](left(model, observer),\n right(model, observer));\n };\n },\n\n c reateConditionalExpression: function(test, consequent, alternate) {\n test = getFn(test);\n consequent = getFn(consequent);\n alternate = getFn(a lternate);\n\n return function(model, observer) {\n return test(mode l, observer) ?\n consequent(model, observer) : alternate(model, obser ver);\n }\n },\n\n createIdentifier: function(name) {\n var iden t = new IdentPath(name);\n ident.type = 'Identifier';\n return ident;\ n },\n\n createMemberExpression: function(accessor, object, property) {\n var ex = new MemberExpression(object, property, accessor);\n if (ex.dy namicDeps)\n this.dynamicDeps = true;\n return ex;\n },\n\n cr eateLiteral: function(token) {\n return new Literal(token.value);\n },\n \n createArrayExpression: function(elements) {\n for (var i = 0; i < ele ments.length; i++)\n elements[i] = getFn(elements[i]);\n\n return fu nction(model, observer) {\n var arr = []\n for (var i = 0; i < ele ments.length; i++)\n arr.push(elements[i](model, observer));\n r eturn arr;\n }\n },\n\n createProperty: function(kind, key, value) {\ n return {\n key: key instanceof IdentPath ? key.name : key.value,\n value: value\n };\n },\n\n createObjectExpression: function(p roperties) {\n for (var i = 0; i < properties.length; i++)\n propert ies[i].value = getFn(properties[i].value);\n\n return function(model, obser ver) {\n var obj = {};\n for (var i = 0; i < properties.length; i+ +)\n obj[properties[i].key] = properties[i].value(model, observer);\n return obj;\n }\n },\n\n createFilter: function(name, args) {\n this.filters.push(new Filter(name, args));\n },\n\n createAsExpressi on: function(expression, scopeIdent) {\n this.expression = expression;\n this.scopeIdent = scopeIdent;\n },\n\n createInExpression: function(sco peIdent, indexIdent, expression) {\n this.expression = expression;\n t his.scopeIdent = scopeIdent;\n this.indexIdent = indexIdent;\n },\n\n createTopLevel: function(expression) {\n this.expression = expression;\n },\n\n createThisExpression: notImplemented\n }\n\n function ConstantObse rvable(value) {\n this.value_ = value;\n }\n\n ConstantObservable.prototype = {\n open: function() { return this.value_; },\n discardChanges: functio n() { return this.value_; },\n deliver: function() {},\n close: function() {},\n }\n\n function Expression(delegate) {\n this.scopeIdent = delegate.s copeIdent;\n this.indexIdent = delegate.indexIdent;\n\n if (!delegate.expr ession)\n throw Error('No expression found.');\n\n this.expression = del egate.expression;\n getFn(this.expression); // forces enumeration of path dep endencies\n\n this.filters = delegate.filters;\n this.dynamicDeps = delega te.dynamicDeps;\n }\n\n Expression.prototype = {\n getBinding: function(mod el, filterRegistry, oneTime) {\n if (oneTime)\n return this.getValue (model, undefined, filterRegistry);\n\n var observer = new CompoundObserver ();\n this.getValue(model, observer, filterRegistry); // captures deps.\n var self = this;\n\n function valueFn() {\n if (self.dynamicDep s)\n observer.startReset();\n\n var value = self.getValue(model, \n self.dynamicDeps ? observer : undefined,\n filterRegistry);\n if (self.dynamicDeps)\ n observer.finishReset();\n\n return value;\n }\n\n fu nction setValueFn(newValue) {\n self.setValue(model, newValue, filterRegi stry);\n return newValue;\n }\n\n return new ObserverTransform( observer, valueFn, setValueFn, true);\n },\n\n getValue: function(model, o bserver, filterRegistry) {\n var value = getFn(this.expression)(model, obse rver);\n for (var i = 0; i < this.filters.length; i++) {\n value = t his.filters[i].transform(value, false, filterRegistry, model,\n observer);\n }\n\n return value;\n },\n\n setValue: function(model, newValue, filterRegistry) {\n var count = this .filters ? this.filters.length : 0;\n while (count-- > 0) {\n newVal ue = this.filters[count].transform(newValue, true, filterRegistry,\n model);\n }\n\n if (this.expressi on.setValue)\n return this.expression.setValue(model, newValue);\n }\n }\n\n /**\n * Converts a style property name to a css property name. For ex ample:\n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n function convertStylePropertyName(name) {\n return String(name).replace(/[A-Z]/g, func tion(c) {\n return '-' + c.toLowerCase();\n });\n }\n\n function isEve ntHandler(name) {\n return name[0] === 'o' &&\n name[1] === 'n' &&\ n name[2] === '-';\n }\n\n var mixedCaseEventTypes = {};\n [\n ' webkitAnimationStart',\n 'webkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocusOut',\n 'DOMFocusIn',\n 'DOMMouseScroll'\n ].forEach(function (e) {\n mixedCaseEventTypes[e.toLowerCase()] = e;\n });\n\n function prepar eEventBinding(path, name) {\n var eventType = name.substring(3);\n eventTy pe = mixedCaseEventTypes[eventType] || eventType;\n\n return function(model, node, oneTime) {\n var fn = path.getValueFrom(model);\n\n function han dler(e) {\n if (!oneTime)\n fn = path.getValueFrom(model);\n\n fn.apply(model, [e, e.detail, e.currentTarget]);\n\n if (Platform & & typeof Platform.flush == 'function')\n Platform.flush();\n }\n\n node.addEventListener(eventType, handler);\n\n if (oneTime)\n return;\n\n function bindingValue() {\n return '{{ ' + path + ' }}'; \n }\n\n return {\n open: bindingValue,\n discardChanges : bindingValue,\n close: function() {\n node.removeEventListener (eventType, handler);\n }\n };\n }\n }\n\n function PolymerExpr essions() {}\n\n PolymerExpressions.prototype = {\n // \"built-in\" filters\ n styleObject: function(value) {\n var parts = [];\n for (var key i n value) {\n parts.push(convertStylePropertyName(key) + ': ' + value[key] );\n }\n return parts.join('; ');\n },\n\n tokenList: function(v alue) {\n var tokens = [];\n for (var key in value) {\n if (val ue[key])\n tokens.push(key);\n }\n return tokens.join(' ');\n },\n\n // binding delegate API\n prepareInstancePositionChanged: funct ion(template) {\n var indexIdent = template.polymerExpressionIndexIdent_;\n if (!indexIdent)\n return;\n\n return function(templateInstanc e, index) {\n templateInstance.model[indexIdent] = index;\n };\n },\n\n prepareBinding: function(pathString, name, node) {\n if (isEventH andler(name)) {\n var path = Path.get(pathString);\n if (!path.val id) {\n console.error('on-* bindings must be simple path expressions'); \n return;\n }\n\n return prepareEventBinding(path, name) ;\n }\n\n if (Path.get(pathString).valid)\n return; // bail out early if pathString is simple path.\n\n return prepareBinding(pathString, name, node, this);\n },\n\n prepareInstanceModel: function(template) {\n var scopeName = template.polymerExpressionScopeIdent_;\n if (!scopeName )\n return;\n\n var parentScope = template.templateInstance ?\n template.templateInstance.model :\n template.model;\n\n retur n function(model) {\n var scope = Object.create(parentScope);\n sc ope[scopeName] = model;\n return scope;\n };\n }\n };\n\n globa l.PolymerExpressions = PolymerExpressions;\n if (global.exposeGetExpression)\n global.getExpression_ = getExpression;\n\n global.PolymerExpressions.prepare EventBinding = prepareEventBinding;\n})(this);\n", 189 "// Copyright 2013 Google Inc.\n//\n// Licensed under the Apache License, Ve rsion 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http:/ /www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o r agreed to in writing, software\n// distributed under the License is distribute d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe r express or implied.\n// See the License for the specific language governing pe rmissions and\n// limitations under the License.\n\n(function (global) {\n 'use strict';\n\n // JScript does not have __proto__. We wrap all object literals w ith\n // createObject which uses Object.create, Object.defineProperty and\n // Object.getOwnPropertyDescriptor to create a new object that does the exact\n / / same thing. The main downside to this solution is that we have to extract\n / / all those property descriptors for IE.\n var createObject = ('__proto__' in { }) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forEa ch(function(name) {\n Object.defineProperty(newObject, name,\n Object.getOwnPropertyDescriptor(obj, name));\n });\ n return newObject;\n };\n\n function prepareBinding(expressionText , name, node, filterRegistry) {\n var expression;\n try {\n expressio n = getExpression(expressionText);\n if (expression.scopeIdent &&\n (node.nodeType !== Node.ELEMENT_NODE ||\n node.tagName !== 'TEMPLATE ' ||\n (name !== 'bind' && name !== 'repeat'))) {\n throw Error ('as and in can only be used within <template bind/repeat>');\n }\n } ca tch (ex) {\n console.error('Invalid expression syntax: ' + expressionText, ex);\n return;\n }\n\n return function(model, node, oneTime) {\n var binding = expression.getBinding(model, filterRegistry, oneTime);\n if (expression.scopeIdent && binding) {\n node.polymerExpressionScopeIdent_ = expression.scopeIdent;\n if (expression.indexIdent)\n node.pol ymerExpressionIndexIdent_ = expression.indexIdent;\n }\n\n return bind ing;\n }\n }\n\n // TODO(rafaelw): Implement simple LRU.\n var expressionP arseCache = Object.create(null);\n\n function getExpression(expressionText) {\n var expression = expressionParseCache[expressionText];\n if (!expression) {\n var delegate = new ASTDelegate();\n esprima.parse(expressionText, delegate);\n expression = new Expression(delegate);\n expressionParse Cache[expressionText] = expression;\n }\n return expression;\n }\n\n fun ction Literal(value) {\n this.value = value;\n this.valueFn_ = undefined;\ n }\n\n Literal.prototype = {\n valueFn: function() {\n if (!this.valu eFn_) {\n var value = this.value;\n this.valueFn_ = function() {\n return value;\n }\n }\n\n return this.valueFn_;\n }\n }\n\n function IdentPath(name) {\n this.name = name;\n this.path = P ath.get(name);\n }\n\n IdentPath.prototype = {\n valueFn: function() {\n if (!this.valueFn_) {\n var name = this.name;\n var path = this .path;\n this.valueFn_ = function(model, observer) {\n if (obser ver)\n observer.addPath(model, path);\n\n return path.getVal ueFrom(model);\n }\n }\n\n return this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.path.length == 1);\n model = findScope(model, this.path[0]);\n\n return this.path.setValueFro m(model, newValue);\n }\n };\n\n function MemberExpression(object, property , accessor) {\n // convert literal computed property access where literal val ue is a value\n // path to ident dot-access.\n if (accessor == '[' &&\n property instanceof Literal &&\n Path.get(property.value).valid) {\n accessor = '.';\n property = new IdentPath(property.value);\n }\n\ n this.dynamicDeps = typeof object == 'function' || object.dynamic;\n\n th is.dynamic = typeof property == 'function' ||\n property.dynam ic ||\n accessor == '[';\n\n this.simplePath =\n !th is.dynamic &&\n !this.dynamicDeps &&\n property instanceof IdentPa th &&\n (object instanceof MemberExpression || object instanceof IdentPat h);\n\n this.object = this.simplePath ? object : getFn(object);\n this.pro perty = accessor == '.' ? property : getFn(property);\n }\n\n MemberExpression .prototype = {\n get fullPath() {\n if (!this.fullPath_) {\n var last = this.object instanceof IdentPath ?\n this.object.name : this.o bject.fullPath;\n this.fullPath_ = Path.get(last + '.' + this.property.na me);\n }\n\n return this.fullPath_;\n },\n\n valueFn: function() {\n if (!this.valueFn_) {\n var object = this.object;\n\n if (this.simplePath) {\n var path = this.fullPath;\n\n this.valu eFn_ = function(model, observer) {\n if (observer)\n obs erver.addPath(model, path);\n\n return path.getValueFrom(model);\n };\n } else if (this.property instanceof IdentPath) {\n v ar path = Path.get(this.property.name);\n\n this.valueFn_ = function(mo del, observer) {\n var context = object(model, observer);\n\n if (observer)\n observer.addPath(context, path);\n\n return path.getValueFrom(context);\n }\n } else {\n // Computed property.\n var property = this.property;\n\n this.v alueFn_ = function(model, observer) {\n var context = object(model, o bserver);\n var propName = property(model, observer);\n if (observer)\n observer.addPath(context, propName);\n\n r eturn context ? context[propName] : undefined;\n };\n }\n } \n return this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.simplePath) {\n this.fullPath.setValueFrom(model, newV alue);\n return newValue;\n }\n\n var object = this.object(mode l);\n var propName = this.property instanceof IdentPath ? this.property.nam e :\n this.property(model);\n return object[propName] = newValue;\ n }\n };\n\n function Filter(name, args) {\n this.name = name;\n this .args = [];\n for (var i = 0; i < args.length; i++) {\n this.args[i] = g etFn(args[i]);\n }\n }\n\n Filter.prototype = {\n transform: function(va lue, toModelDirection, filterRegistry, model,\n observer) {\n var fn = filterRegistry[this.name];\n var context = model;\n if (fn) {\n context = undefined;\n } else {\n fn = context[t his.name];\n if (!fn) {\n console.error('Cannot find filter: ' + this.name);\n return;\n }\n }\n\n // If toModelDirect ion is falsey, then the \"normal\" (dom-bound) direction\n // is used. Othe rwise, it looks for a 'toModel' property function on the\n // object.\n if (toModelDirection) {\n fn = fn.toModel;\n } else if (typeof fn. toDOM == 'function') {\n fn = fn.toDOM;\n }\n\n if (typeof fn ! = 'function') {\n console.error('No ' + (toModelDirection ? 'toModel' : ' toDOM') +\n ' found on' + this.name);\n return;\n }\n\n var args = [value];\n for (var i = 0; i < this.args.length; i ++) {\n args[i + 1] = getFn(this.args[i])(model, observer);\n }\n\n return fn.apply(context, args);\n }\n };\n\n function notImplemented() { throw Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': funct ion(v) { return +v; },\n '-': function(v) { return -v; },\n '!': function( v) { return !v; }\n };\n\n var binaryOperators = {\n '+': function(l, r) { return l+r; },\n '-': function(l, r) { return l-r; },\n '*': function(l, r ) { return l*r; },\n '/': function(l, r) { return l/r; },\n '%': function( l, r) { return l%r; },\n '<': function(l, r) { return l<r; },\n '>': funct ion(l, r) { return l>r; },\n '<=': function(l, r) { return l<=r; },\n '>=' : function(l, r) { return l>=r; },\n '==': function(l, r) { return l==r; },\n '!=': function(l, r) { return l!=r; },\n '===': function(l, r) { return l ===r; },\n '!==': function(l, r) { return l!==r; },\n '&&': function(l, r) { return l&&r; },\n '||': function(l, r) { return l||r; },\n };\n\n functi on getFn(arg) {\n return typeof arg == 'function' ? arg : arg.valueFn();\n } \n\n function ASTDelegate() {\n this.expression = null;\n this.filters = [];\n this.deps = {};\n this.currentPath = undefined;\n this.scopeIdent = undefined;\n this.indexIdent = undefined;\n this.dynamicDeps = false;\n }\n\n ASTDelegate.prototype = {\n createUnaryExpression: function(op, argu ment) {\n if (!unaryOperators[op])\n throw Error('Disallowed operato r: ' + op);\n\n argument = getFn(argument);\n\n return function(model, observer) {\n return unaryOperators[op](argument(model, observer));\n };\n },\n\n createBinaryExpression: function(op, left, right) {\n if (!binaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\ n left = getFn(left);\n right = getFn(right);\n\n return function (model, observer) {\n return binaryOperators[op](left(model, observer),\n right(model, observer));\n };\n },\n\ n createConditionalExpression: function(test, consequent, alternate) {\n test = getFn(test);\n consequent = getFn(consequent);\n alternate = g etFn(alternate);\n\n return function(model, observer) {\n return tes t(model, observer) ?\n consequent(model, observer) : alternate(model, observer);\n }\n },\n\n createIdentifier: function(name) {\n va r ident = new IdentPath(name);\n ident.type = 'Identifier';\n return i dent;\n },\n\n createMemberExpression: function(accessor, object, property ) {\n var ex = new MemberExpression(object, property, accessor);\n if (ex.dynamicDeps)\n this.dynamicDeps = true;\n return ex;\n },\n\n createLiteral: function(token) {\n return new Literal(token.value);\n },\n\n createArrayExpression: function(elements) {\n for (var i = 0; i < elements.length; i++)\n elements[i] = getFn(elements[i]);\n\n ret urn function(model, observer) {\n var arr = []\n for (var i = 0; i < elements.length; i++)\n arr.push(elements[i](model, observer));\n return arr;\n }\n },\n\n createProperty: function(kind, key, val ue) {\n return {\n key: key instanceof IdentPath ? key.name : key.va lue,\n value: value\n };\n },\n\n createObjectExpression: func tion(properties) {\n for (var i = 0; i < properties.length; i++)\n p roperties[i].value = getFn(properties[i].value);\n\n return function(model, observer) {\n var obj = {};\n for (var i = 0; i < properties.leng th; i++)\n obj[properties[i].key] = properties[i].value(model, observer );\n return obj;\n }\n },\n\n createFilter: function(name, arg s) {\n this.filters.push(new Filter(name, args));\n },\n\n createAsEx pression: function(expression, scopeIdent) {\n this.expression = expression ;\n this.scopeIdent = scopeIdent;\n },\n\n createInExpression: functi on(scopeIdent, indexIdent, expression) {\n this.expression = expression;\n this.scopeIdent = scopeIdent;\n this.indexIdent = indexIdent;\n },\ n\n createTopLevel: function(expression) {\n this.expression = expressio n;\n },\n\n createThisExpression: notImplemented\n }\n\n function Consta ntObservable(value) {\n this.value_ = value;\n }\n\n ConstantObservable.pro totype = {\n open: function() { return this.value_; },\n discardChanges: f unction() { return this.value_; },\n deliver: function() {},\n close: func tion() {},\n }\n\n function Expression(delegate) {\n this.scopeIdent = dele gate.scopeIdent;\n this.indexIdent = delegate.indexIdent;\n\n if (!delegat e.expression)\n throw Error('No expression found.');\n\n this.expression = delegate.expression;\n getFn(this.expression); // forces enumeration of pa th dependencies\n\n this.filters = delegate.filters;\n this.dynamicDeps = delegate.dynamicDeps;\n }\n\n Expression.prototype = {\n getBinding: functi on(model, filterRegistry, oneTime) {\n if (oneTime)\n return this.ge tValue(model, undefined, filterRegistry);\n\n var observer = new CompoundOb server();\n this.getValue(model, observer, filterRegistry); // captures de ps.\n var self = this;\n\n function valueFn() {\n if (self.dyna micDeps)\n observer.startReset();\n\n var value = self.getValue( model,\n self.dynamicDeps ? observer : undefine d,\n filterRegistry);\n if (self.dynamic Deps)\n observer.finishReset();\n\n return value;\n }\n\n function setValueFn(newValue) {\n self.setValue(model, newValue, filt erRegistry);\n return newValue;\n }\n\n return new ObserverTran sform(observer, valueFn, setValueFn, true);\n },\n\n getValue: function(mo del, observer, filterRegistry) {\n var value = getFn(this.expression)(model , observer);\n for (var i = 0; i < this.filters.length; i++) {\n val ue = this.filters[i].transform(value, false, filterRegistry, model,\n observer);\n }\n\n return value;\n } ,\n\n setValue: function(model, newValue, filterRegistry) {\n var count = this.filters ? this.filters.length : 0;\n while (count-- > 0) {\n newValue = this.filters[count].transform(newValue, true, filterRegistry,\n model);\n }\n\n if (this.ex pression.setValue)\n return this.expression.setValue(model, newValue);\n }\n }\n\n /**\n * Converts a style property name to a css property name. For example:\n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n fun ction convertStylePropertyName(name) {\n return String(name).replace(/[A-Z]/g , function(c) {\n return '-' + c.toLowerCase();\n });\n }\n\n function isEventHandler(name) {\n return name[0] === 'o' &&\n name[1] === ' n' &&\n name[2] === '-';\n }\n\n var mixedCaseEventTypes = {};\n [\ n 'webkitAnimationStart',\n 'webkitAnimationEnd',\n 'webkitTransitionEn d',\n 'DOMFocusOut',\n 'DOMFocusIn',\n 'DOMMouseScroll'\n ].forEach(fu nction(e) {\n mixedCaseEventTypes[e.toLowerCase()] = e;\n });\n\n var paren tScopeName = '@' + Math.random().toString(36).slice(2);\n\n // Single ident pat hs must bind directly to the appropriate scope object.\n // I.e. Pushed values in two-bindings need to be assigned to the actual model\n // object.\n functio n findScope(model, prop) {\n while (model[parentScopeName] &&\n !Ob ject.prototype.hasOwnProperty.call(model, prop)) {\n model = model[parentSc opeName];\n }\n\n return model;\n }\n\n function resolveEventReceiver(mo del, path, node) {\n if (path.length == 0)\n return undefined;\n\n if (path.length == 1)\n return findScope(model, path[0]);\n\n for (var i = 0; model != null && i < path.length - 1; i++) {\n model = model[path[i]];\ n }\n\n return model;\n }\n\n function prepareEventBinding(path, name, p olymerExpressions) {\n var eventType = name.substring(3);\n eventType = mi xedCaseEventTypes[eventType] || eventType;\n\n return function(model, node, o neTime) {\n var fn, receiver, handler;\n if (typeof polymerExpressions .resolveEventHandler == 'function') {\n handler = function(e) {\n fn = fn || polymerExpressions.resolveEventHandler(model, path, node);\n fn(e, e.detail, e.currentTarget);\n\n if (Platform && typeof Platfor m.flush == 'function')\n Platform.flush();\n };\n } else {\n handler = function(e) {\n fn = fn || path.getValueFrom(model );\n receiver = receiver || resolveEventReceiver(model, path, node);\n\ n fn.apply(receiver, [e, e.detail, e.currentTarget]);\n\n if ( Platform && typeof Platform.flush == 'function')\n Platform.flush();\ n };\n }\n\n node.addEventListener(eventType, handler);\n\n if (oneTime)\n return;\n\n function bindingValue() {\n retu rn '{{ ' + path + ' }}';\n }\n\n return {\n open: bindingValue, \n discardChanges: bindingValue,\n close: function() {\n node.removeEventListener(eventType, handler);\n }\n };\n }\n }\n \n function PolymerExpressions() {}\n\n PolymerExpressions.prototype = {\n // \"built-in\" filters\n styleObject: function(value) {\n var parts = [ ];\n for (var key in value) {\n parts.push(convertStylePropertyName( key) + ': ' + value[key]);\n }\n return parts.join('; ');\n },\n\n tokenList: function(value) {\n var tokens = [];\n for (var key in v alue) {\n if (value[key])\n tokens.push(key);\n }\n re turn tokens.join(' ');\n },\n\n // binding delegate API\n prepareInstan cePositionChanged: function(template) {\n var indexIdent = template.polymer ExpressionIndexIdent_;\n if (!indexIdent)\n return;\n\n return function(templateInstance, index) {\n templateInstance.model[indexIdent] = index;\n };\n },\n\n prepareBinding: function(pathString, name, nod e) {\n var path = Path.get(pathString);\n if (isEventHandler(name)) {\ n if (!path.valid) {\n console.error('on-* bindings must be simp le path expressions');\n return;\n }\n\n return prepareEv entBinding(path, name, this);\n }\n\n if (path.valid) {\n if (p ath.length == 1) {\n return function(model, node, oneTime) {\n if (oneTime)\n return path.getValueFrom(model);\n\n v ar scope = findScope(model, path[0]);\n return new PathObserver(scope , path);\n }\n }\n\n return; // bail out early if pathStr ing is simple path.\n }\n\n return prepareBinding(pathString, name, no de, this);\n },\n\n prepareInstanceModel: function(template) {\n var scopeName = template.polymerExpressionScopeIdent_;\n if (!scopeName)\n return;\n\n var parentScope = template.templateInstance ?\n tem plate.templateInstance.model :\n template.model;\n\n var indexName = template.polymerExpressionIndexIdent_;\n\n return function(model) {\n var scope = Object.create(parentScope);\n scope[scopeName] = model;\ n scope[indexName] = undefined;\n scope[parentScopeName] = parentS cope;\n return scope;\n };\n }\n };\n\n global.PolymerExpressio ns = PolymerExpressions;\n if (global.exposeGetExpression)\n global.getExpre ssion_ = getExpression;\n\n global.PolymerExpressions.prepareEventBinding = pre pareEventBinding;\n})(this);\n",
190 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n// inject style sheet\nvar style = do cument.createElement('style');\nstyle.textContent = 'template {display: none !im portant;} /* injected by platform.js */';\nvar head = document.querySelector('he ad');\nhead.insertBefore(style, head.firstChild);\n\n// flush (with logging)\nva r flushing;\nfunction flush() {\n if (!flushing) {\n flushing = true;\n s cope.endOfMicrotask(function() {\n flushing = false;\n logFlags.data & & console.group('Platform.flush()');\n scope.performMicrotaskCheckpoint();\ n logFlags.data && console.groupEnd();\n });\n }\n};\n\n// polling dirt y checker\nvar FLUSH_POLL_INTERVAL = 125;\nwindow.addEventListener('WebComponent sReady', function() {\n flush();\n // flush periodically if platform does not have object observe.\n if (!Observer.hasObjectObserve) {\n scope.flushPoll = setInterval(flush, FLUSH_POLL_INTERVAL);\n }\n});\n\nif (window.CustomElements && !CustomElements.useNative) {\n var originalImportNode = Document.prototype. importNode;\n Document.prototype.importNode = function(node, deep) {\n var i mported = originalImportNode.call(this, node, deep);\n CustomElements.upgrade All(imported);\n return imported;\n }\n}\n\n// exports\nscope.flush = flush; \n\n})(window.Platform);\n\n" 190 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n// inject style sheet\nvar style = do cument.createElement('style');\nstyle.textContent = 'template {display: none !im portant;} /* injected by platform.js */';\nvar head = document.querySelector('he ad');\nhead.insertBefore(style, head.firstChild);\n\n// flush (with logging)\nva r flushing;\nfunction flush() {\n if (!flushing) {\n flushing = true;\n s cope.endOfMicrotask(function() {\n flushing = false;\n logFlags.data & & console.group('Platform.flush()');\n scope.performMicrotaskCheckpoint();\ n logFlags.data && console.groupEnd();\n });\n }\n};\n\n// polling dirt y checker\nvar FLUSH_POLL_INTERVAL = 125;\nwindow.addEventListener('WebComponent sReady', function() {\n flush();\n // flush periodically if platform does not have object observe.\n if (!Observer.hasObjectObserve) {\n scope.flushPoll = setInterval(flush, FLUSH_POLL_INTERVAL);\n }\n});\n\nif (window.CustomElements && !CustomElements.useNative) {\n var originalImportNode = Document.prototype. importNode;\n Document.prototype.importNode = function(node, deep) {\n var i mported = originalImportNode.call(this, node, deep);\n CustomElements.upgrade All(imported);\n return imported;\n }\n}\n\n// exports\nscope.flush = flush; \n\n})(window.Platform);\n\n"
191 ] 191 ]
192 } 192 }
OLDNEW
« no previous file with comments | « pkg/web_components/lib/platform.concat.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698