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

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

Issue 612533004: Revert "update platform.js to get memory leak fixes" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: update version Created 6 years, 2 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') | pkg/web_components/pubspec.yaml » ('j') | 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 "build/boot.js", 5 "build/boot.js",
6 "../WeakMap/weakmap.js", 6 "../WeakMap/weakmap.js",
7 "build/if-poly.js", 7 "build/if-poly.js",
8 "../observe-js/src/observe.js", 8 "../observe-js/src/observe.js",
9 "../ShadowDOM/src/wrappers.js", 9 "../ShadowDOM/src/wrappers.js",
10 "../ShadowDOM/src/microtask.js", 10 "../ShadowDOM/src/microtask.js",
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 "../CustomElements/src/Observer.js", 72 "../CustomElements/src/Observer.js",
73 "../CustomElements/src/CustomElements.js", 73 "../CustomElements/src/CustomElements.js",
74 "../CustomElements/src/Parser.js", 74 "../CustomElements/src/Parser.js",
75 "../CustomElements/src/boot.js", 75 "../CustomElements/src/boot.js",
76 "src/patches-custom-elements.js", 76 "src/patches-custom-elements.js",
77 "src/dom.js", 77 "src/dom.js",
78 "src/unresolved.js", 78 "src/unresolved.js",
79 "src/module.js" 79 "src/module.js"
80 ], 80 ],
81 "names": [], 81 "names": [],
82 "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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC5CA;AACA;A;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC3qDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;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;ACxaA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;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;AChDA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;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;AC5XA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;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;AChFA;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;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;A;ACv5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;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;ACjuBA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; 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;AC7QA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC7CA;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;ACzCA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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 CjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtUA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;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;AC/BA;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;A;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;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;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;A;AC1CA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;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;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;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC/DA;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;ACpCA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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 CpCA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC9 BA;AACA;AACA;AACA;AACA;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;AC3BA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;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;AC7CA;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;ACnE A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;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;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;A;ACnDA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A; AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvBA;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;A;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACvpBA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACrDA;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;ACpEA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5UA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACvFA;AACA;AACA;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;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;A;AC9BA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClB A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;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;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;A;ACjGA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3wBA,Q;ACAA;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;A;AC3BA,C;ACAA;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;A;ACjkBA;AACA;AA CA;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;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;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;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;AACA;AACA;AACA,sD;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uB;ACvMA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;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;AC/KA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; 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;ACzUA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;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;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;ACjC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4D;ACRA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACzXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC5dA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChCA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC hGA;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;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;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", 82 "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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC5CA;AACA;A;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC3qDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;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;ACxaA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;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;AChDA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;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;ACxXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;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;AChFA;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;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;A;ACv5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;A;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACjuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC7QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A; AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;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;AC7CA;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;A;ACzCA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;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;ACjDA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;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;ACtUA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;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;AC/BA;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;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;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;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;A;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;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;AACA;AACA ;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;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;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;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;AC3CA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;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;AC9DA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A; ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC/DA;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;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;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;ACpCA;AACA;AACA;AACA; AACA;AACA;AACA;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;AC9BA;AACA;AACA;AACA;AA CA;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;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC7CA;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;ACnEA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;A;ACnDA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;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;AChGA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;A;ACvBA;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;A;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvpBA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACrDA;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;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC5UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;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;ACvFA;AACA;AA CA;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;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;A;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClBA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;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;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;A;ACjGA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA 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;AC3wBA,Q;ACAA;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;AC3BA,C;ACAA;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;A;ACjkBA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA, sD;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uB;ACvMA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;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;AC/KA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACzUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;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;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;ACjCA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA,4D;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC9WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;A;AC5dA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA; AACA;AACA;AACA;AACA;AACA;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;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChCA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AChGA;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;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC A;AACA;AACA;AACA;AACA;AACA;AACA;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",
83 "sourcesContent": [ 83 "sourcesContent": [
84 "/**\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved .\n * This code may only be used under the BSD style license found at http://pol ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http: //polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights gran t found at http://polymer.github.io/PATENTS.txt\n */\n\nwindow.Platform = window .Platform || {};\n// prepopulate window.logFlags if necessary\nwindow.logFlags = window.logFlags || {};\n// process flags\n(function(scope){\n // import\n var flags = scope.flags || {};\n // populate flags from location\n location.searc h.slice(1).split('&').forEach(function(o) {\n o = o.split('=');\n o[0] && (flags[o[0]] = o[1] || true);\n });\n var entryPoint = document.currentScript ||\n document.querySelector('script[src*=\"platform.js\"]');\n if (entryPo int) {\n var a = entryPoint.attributes;\n for (var i = 0, n; i < a.length; i++) {\n n = a[i];\n if (n.name !== 'src') {\n flags[n.name] = n.value || true;\n }\n }\n }\n if (flags.log) {\n flags.log.split( ',').forEach(function(f) {\n window.logFlags[f] = true;\n });\n }\n // If any of these flags match 'native', then force native ShadowDOM; any\n // ot her truthy value, or failure to detect native\n // ShadowDOM, results in polyfi ll\n flags.shadow = flags.shadow || flags.shadowdom || flags.polyfill;\n if (f lags.shadow === 'native') {\n flags.shadow = false;\n } else {\n flags.sh adow = flags.shadow || !HTMLElement.prototype.createShadowRoot;\n }\n\n if (fl ags.shadow && document.querySelectorAll('script').length > 1) {\n console.war n('platform.js is not the first script on the page. ' +\n 'See http://www .polymer-project.org/docs/start/platform.html#setup ' +\n 'for details.') ;\n }\n\n // CustomElements polyfill flag\n if (flags.register) {\n window .CustomElements = window.CustomElements || {flags: {}};\n window.CustomElemen ts.flags.register = flags.register;\n }\n\n if (flags.imports) {\n window.H TMLImports = window.HTMLImports || {flags: {}};\n window.HTMLImports.flags.im ports = flags.imports;\n }\n\n // export\n scope.flags = flags;\n})(Platform) ;\n", 84 "/**\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved .\n * This code may only be used under the BSD style license found at http://pol ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http: //polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights gran t found at http://polymer.github.io/PATENTS.txt\n */\n\nwindow.Platform = window .Platform || {};\n// prepopulate window.logFlags if necessary\nwindow.logFlags = window.logFlags || {};\n// process flags\n(function(scope){\n // import\n var flags = scope.flags || {};\n // populate flags from location\n location.searc h.slice(1).split('&').forEach(function(o) {\n o = o.split('=');\n o[0] && (flags[o[0]] = o[1] || true);\n });\n var entryPoint = document.currentScript ||\n document.querySelector('script[src*=\"platform.js\"]');\n if (entryPo int) {\n var a = entryPoint.attributes;\n for (var i = 0, n; i < a.length; i++) {\n n = a[i];\n if (n.name !== 'src') {\n flags[n.name] = n.value || true;\n }\n }\n }\n if (flags.log) {\n flags.log.split( ',').forEach(function(f) {\n window.logFlags[f] = true;\n });\n }\n // If any of these flags match 'native', then force native ShadowDOM; any\n // ot her truthy value, or failure to detect native\n // ShadowDOM, results in polyfi ll\n flags.shadow = flags.shadow || flags.shadowdom || flags.polyfill;\n if (f lags.shadow === 'native') {\n flags.shadow = false;\n } else {\n flags.sh adow = flags.shadow || !HTMLElement.prototype.createShadowRoot;\n }\n\n if (fl ags.shadow && document.querySelectorAll('script').length > 1) {\n console.war n('platform.js is not the first script on the page. ' +\n 'See http://www .polymer-project.org/docs/start/platform.html#setup ' +\n 'for details.') ;\n }\n\n // CustomElements polyfill flag\n if (flags.register) {\n window .CustomElements = window.CustomElements || {flags: {}};\n window.CustomElemen ts.flags.register = flags.register;\n }\n\n if (flags.imports) {\n window.H TMLImports = window.HTMLImports || {flags: {}};\n window.HTMLImports.flags.im ports = flags.imports;\n }\n\n // export\n scope.flags = flags;\n})(Platform) ;\n",
85 "/*\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 var entry = key[this.name];\n if (!en try) return false;\n var hasValue = entry[0] === key;\n entry[0] = entry[1] = undefined;\n return hasValue;\n },\n has: function( key) {\n var entry = key[this.name];\n if (!entry) return false;\n return entry[0] === key;\n }\n };\n\n window.WeakMap = WeakMa p;\n })();\n}\n", 85 "/*\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 var entry = key[this.name];\n if (!en try) return false;\n var hasValue = entry[0] === key;\n entry[0] = entry[1] = undefined;\n return hasValue;\n },\n has: function( key) {\n var entry = key[this.name];\n if (!entry) return false;\n return entry[0] === key;\n }\n };\n\n window.WeakMap = WeakMa p;\n })();\n}\n",
86 "// select ShadowDOM impl\r\nif (Platform.flags.shadow) {\r\n", 86 "// select ShadowDOM impl\r\nif (Platform.flags.shadow) {\r\n",
87 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(global) {\n 'u se strict';\n\n var testingExposeCycleCount = global.testingExposeCycleCount;\n \n // Detect and do basic sanity checking on Object/Array.observe.\n function detectObjectObserve() {\n if (typeof Object.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 var arr = [];\n Object.observe(test, callback);\n Array.observe(arr, callback);\n test.id = 1;\n test.id = 2;\n delete te st.id;\n arr.push(1, 2);\n arr.length = 0;\n\n Object.deliverChangeReco rds(callback);\n if (records.length !== 5)\n return false;\n\n if (re cords[0].type != 'add' ||\n records[1].type != 'update' ||\n recor ds[2].type != 'delete' ||\n records[3].type != 'splice' ||\n recor ds[4].type != 'splice') {\n return false;\n }\n\n Object.unobserve(te st, callback);\n Array.unobserve(arr, callback);\n\n return true;\n }\n\n var hasObserve = detectObjectObserve();\n\n function detectEval() {\n // D on't test for eval if we're running in a Chrome App environment.\n // We chec k for APIs set that only exist in a Chrome App context.\n if (typeof chrome ! == 'undefined' && chrome.app && chrome.app.runtime) {\n return false;\n }\n\n // Firefox OS Apps do not allow eval. This feature detection is very ha cky\n // but even if some other platform adds support for this function this code\n // will continue to work.\n if (typeof navigator != 'undefined' && navigator.getDeviceStorage) {\n return false;\n }\n\n try {\n va r f = new Function('', 'return true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasEval = detectEval();\n\n function i sIndex(s) {\n return +s === s >>> 0 && s !== '';\n }\n\n function toNumber( s) {\n return +s;\n }\n\n function isObject(obj) {\n return obj === Obje ct(obj);\n }\n\n var numberIsNaN = global.Number.isNaN || function(value) {\n return typeof value === 'number' && global.isNaN(value);\n }\n\n function a reSameValue(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 crea teObject = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n funct ion(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNa mes(obj).forEach(function(name) {\n Object.defineProperty(newObject, name ,\n Object.getOwnPropertyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var identStart = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var identRegExp = new RegExp('^' + ident Start + '+' + identPart + '*' + '$');\n\n function getPathCharType(char) {\n if (char === undefined)\n return 'eof';\n\n var code = char.charCodeAt( 0);\n\n switch(code) {\n case 0x5B: // [\n case 0x5D: // ]\n c ase 0x2E: // .\n case 0x22: // \"\n case 0x27: // '\n case 0x30: // 0\n return char;\n\n case 0x5F: // _\n case 0x24: // $\n return 'ident';\n\n case 0x20: // Space\n case 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n case 0xA0: // No-brea k space\n case 0xFEFF: // Byte Order Mark\n case 0x2028: // Line Sep arator\n case 0x2029: // Paragraph Separator\n return 'ws';\n }\ n\n // a-z, A-Z\n if ((0x61 <= code && code <= 0x7A) || (0x41 <= code && c ode <= 0x5A))\n return 'ident';\n\n // 1-9\n if (0x31 <= code && code <= 0x39)\n return 'number';\n\n return 'else';\n }\n\n var pathStateM achine = {\n 'beforePath': {\n 'ws': ['beforePath'],\n 'ident': ['i nIdent', 'append'],\n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'inPath': {\n 'ws': ['inPath'],\n '.': ['beforeIdent'],\ n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'befor eIdent': {\n 'ws': ['beforeIdent'],\n 'ident': ['inIdent', 'append']\n },\n\n 'inIdent': {\n 'ident': ['inIdent', 'append'],\n '0': [' inIdent', 'append'],\n 'number': ['inIdent', 'append'],\n 'ws': ['inPa th', 'push'],\n '.': ['beforeIdent', 'push'],\n '[': ['beforeElement', 'push'],\n 'eof': ['afterPath', 'push']\n },\n\n 'beforeElement': {\ n 'ws': ['beforeElement'],\n '0': ['afterZero', 'append'],\n 'num ber': ['inIndex', 'append'],\n \"'\": ['inSingleQuote', 'append', ''],\n '\"': ['inDoubleQuote', 'append', '']\n },\n\n 'afterZero': {\n 'w s': ['afterElement', 'push'],\n ']': ['inPath', 'push']\n },\n\n 'inI ndex': {\n '0': ['inIndex', 'append'],\n 'number': ['inIndex', 'append '],\n 'ws': ['afterElement'],\n ']': ['inPath', 'push']\n },\n\n 'inSingleQuote': {\n \"'\": ['afterElement'],\n 'eof': ['error'],\n 'else': ['inSingleQuote', 'append']\n },\n\n 'inDoubleQuote': {\n '\"': ['afterElement'],\n 'eof': ['error'],\n 'else': ['inDoubleQuote ', 'append']\n },\n\n 'afterElement': {\n 'ws': ['afterElement'],\n ']': ['inPath', 'push']\n }\n }\n\n function noop() {}\n\n function pa rsePath(path) {\n var keys = [];\n var index = -1;\n var c, newChar, ke y, type, transition, action, typeMap, mode = 'beforePath';\n\n var actions = {\n push: function() {\n if (key === undefined)\n return;\n \n keys.push(key);\n key = undefined;\n },\n\n append: f unction() {\n if (key === undefined)\n key = newChar\n el se\n key += newChar;\n }\n };\n\n function maybeUnescapeQuot e() {\n if (index >= path.length)\n return;\n\n var nextChar = path[index + 1];\n if ((mode == 'inSingleQuote' && nextChar == \"'\") ||\n (mode == 'inDoubleQuote' && nextChar == '\"')) {\n index++;\n newChar = nextChar;\n actions.append();\n return true;\n }\n }\n\n while (mode) {\n index++;\n c = path[index];\n\n if (c == '\\\\' && maybeUnescapeQuote(mode))\n continue;\n\n type = getPathCharType(c);\n typeMap = pathStateMachine[mode];\n transition = typeMap[type] || typeMap['else'] || 'error';\n\n if (transition == 'error ')\n return; // parse error;\n\n mode = transition[0];\n action = actions[transition[1]] || noop;\n newChar = transition[2] === undefined ? c : transition[2];\n action();\n\n if (mode === 'afterPath') {\n return keys;\n }\n }\n\n return; // parse error\n }\n\n functio n isIdent(s) {\n return identRegExp.test(s);\n }\n\n var constructorIsPriva te = {};\n\n function Path(parts, privateToken) {\n if (privateToken !== con structorIsPrivate)\n throw Error('Use Path.get to retrieve path objects');\ n\n for (var i = 0; i < parts.length; i++) {\n this.push(String(parts[i] ));\n }\n\n if (hasEval && this.length) {\n this.getValueFrom = this. compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw): Make simple LRU cac he\n var pathCache = {};\n\n function getPath(pathString) {\n if (pathStrin g instanceof Path)\n return pathString;\n\n if (pathString == null || pa thString.length == 0)\n pathString = '';\n\n if (typeof pathString != 's tring') {\n if (isIndex(pathString.length)) {\n // Constructed with array-like (pre-parsed) keys\n return new Path(pathString, constructorIsP rivate);\n }\n\n pathString = String(pathString);\n }\n\n var pa th = pathCache[pathString];\n if (path)\n return path;\n\n var parts = parsePath(pathString);\n if (!parts)\n return invalidPath;\n\n var path = new Path(parts, constructorIsPrivate);\n pathCache[pathString] = path; \n return path;\n }\n\n Path.get = getPath;\n\n function formatAccessor(ke y) {\n if (isIndex(key)) {\n return '[' + key + ']';\n } else {\n return '[\"' + key.replace(/\"/g, '\\\\\"') + '\"]';\n }\n }\n\n Path.pro totype = createObject({\n __proto__: [],\n valid: true,\n\n toString: f unction() {\n var pathString = '';\n for (var i = 0; i < this.length; i++) {\n var key = this[i];\n if (isIdent(key)) {\n pathS tring += i ? '.' + key : key;\n } else {\n pathString += formatA ccessor(key);\n }\n }\n\n return pathString;\n },\n\n get ValueFrom: function(obj, directObserver) {\n for (var i = 0; i < this.lengt h; i++) {\n if (obj == null)\n return;\n obj = obj[this[i ]];\n }\n return obj;\n },\n\n iterateObjects: function(obj, obs erve) {\n for (var i = 0; i < this.length; i++) {\n if (i)\n obj = obj[this[i - 1]];\n if (!isObject(obj))\n return;\n observe(obj, this[0]);\n }\n },\n\n compiledGetValueFromFn: functi on() {\n var str = '';\n var pathString = 'obj';\n str += 'if (ob j != null';\n var i = 0;\n var key;\n for (; i < (this.length - 1 ); i++) {\n key = this[i];\n pathString += isIdent(key) ? '.' + ke y : formatAccessor(key);\n str += ' &&\\n ' + pathString + ' != null' ;\n }\n str += ')\\n';\n\n var key = this[i];\n pathString + = isIdent(key) ? '.' + key : formatAccessor(key);\n\n str += ' return ' + pathString + ';\\nelse\\n return undefined;';\n return new Function('obj', str);\n },\n\n setValueFrom: function(obj, value) {\n if (!this.leng th)\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[thi s[i]] = value;\n return true;\n }\n });\n\n var invalidPath = new Path ('', constructorIsPrivate);\n invalidPath.valid = false;\n invalidPath.getValu eFrom = invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY_CHECK_CYCLE S = 1000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n while ( cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\n }\ n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n \n return cycles > 0;\n }\n\n function objectIsEmpty(object) {\n for (va r prop in object)\n return false;\n return true;\n }\n\n function diff IsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n objectIsEmp ty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\n\n function diffObjectFromOldObject(object, oldObject) {\n var added = {};\n var remov ed = {};\n var changed = {};\n\n for (var prop in oldObject) {\n var newValue = object[prop];\n\n if (newValue !== undefined && newValue === old Object[prop])\n continue;\n\n if (!(prop in object)) {\n remo ved[prop] = undefined;\n continue;\n }\n\n if (newValue !== old Object[prop])\n changed[prop] = newValue;\n }\n\n for (var prop in object) {\n if (prop in oldObject)\n continue;\n\n added[prop] = object[prop];\n }\n\n if (Array.isArray(object) && object.length !== old Object.length)\n changed.length = object.length;\n\n return {\n add ed: added,\n removed: removed,\n changed: changed\n };\n }\n\n va r eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.length)\n r eturn false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n eomTasks[ i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong: true };\n var eomRunS cheduled = false;\n\n Object.observe(eomObj, function() {\n runEOMTasks( );\n eomRunScheduled = false;\n });\n\n return function(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n eomRunScheduled = tru e;\n eomObj.pingPong = !eomObj.pingPong;\n }\n };\n })() :\n (f unction() {\n return function(fn) {\n eomTasks.push(fn);\n };\n })() ;\n\n var observedObjectCache = [];\n\n function newObservedObject() {\n va r observer;\n var object;\n var discardRecords = false;\n var first = t rue;\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 Er ror('ObservedObject in use');\n\n if (!first)\n Object.deliverCh angeRecords(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(di scard) {\n discardRecords = discard;\n Object.deliverChangeRecords (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 /*\n * The o bservedSet abstraction is a perf optimization which reduces the total\n * numb er of Object.observe observations of a set of objects. The idea is that\n * gr oups of Observers will have some object dependencies in common and this\n * ob served set ensures that each object in the transitive closure of\n * dependenc ies is only observed once. The observedSet acts as a write barrier\n * such th at whenever any change comes through, all Observers are checked for\n * change d values.\n *\n * Note that this optimization is explicitly moving work from setup-time to\n * change-time.\n *\n * TODO(rafaelw): Implement \"garbage collection\". In order to move work off\n * the critical path, when Observers are closed, their observed objects are\n * not Object.unobserve(d). As a resu lt, it's possible that if the observedSet\n * is kept open, but some Observers have been closed, it could cause \"leaks\"\n * (prevent otherwise collectable objects from being collected). At some\n * point, we should implement increme ntal \"gc\" which keeps a list of\n * observedSets which may need clean-up and does small amounts of cleanup on a\n * timeout until all is clean.\n */\n\n function getObservedObject(observer, object, arrayObserve) {\n var dir = ob servedObjectCache.pop() || newObservedObject();\n dir.open(observer);\n di r.observe(object, arrayObserve);\n return dir;\n }\n\n var observedSetCache = [];\n\n function newObservedSet() {\n var observerCount = 0;\n var obs ervers = [];\n var objects = [];\n var rootObj;\n var rootObjProps;\n\n function observe(obj, prop) {\n if (!obj)\n return;\n\n if (obj === rootObj)\n rootObjProps[prop] = true;\n\n if (objects.index Of(obj) < 0) {\n objects.push(obj);\n Object.observe(obj, callback );\n }\n\n observe(Object.getPrototypeOf(obj), prop);\n }\n\n fu nction allRootObjNonObservedProps(recs) {\n for (var i = 0; i < recs.length ; i++) {\n var rec = recs[i];\n if (rec.object !== rootObj ||\n rootObjProps[rec.name] ||\n rec.type === 'setPrototype') {\n return false;\n }\n }\n return true;\n }\n\n fu nction callback(recs) {\n if (allRootObjNonObservedProps(recs))\n re turn;\n\n var observer;\n for (var i = 0; i < observers.length; i++) { \n observer = observers[i];\n if (observer.state_ == OPENED) {\n observer.iterateObjects_(observe);\n }\n }\n\n for (var i = 0; i < observers.length; i++) {\n observer = observers[i];\n if (observer.state_ == OPENED) {\n observer.check_();\n }\n }\n }\n\n var record = {\n object: undefined,\n objects: object s,\n open: function(obs, object) {\n if (!rootObj) {\n root Obj = object;\n rootObjProps = {};\n }\n\n observers.push (obs);\n observerCount++;\n obs.iterateObjects_(observe);\n } ,\n close: function(obs) {\n observerCount--;\n if (observerC ount > 0) {\n return;\n }\n\n for (var i = 0; i < objects .length; i++) {\n Object.unobserve(objects[i], callback);\n Ob server.unobservedCount++;\n }\n\n observers.length = 0;\n o bjects.length = 0;\n rootObj = undefined;\n rootObjProps = undefin ed;\n observedSetCache.push(this);\n }\n };\n\n return record; \n }\n\n var lastObservedSet;\n\n function getObservedSet(observer, obj) {\n if (!lastObservedSet || lastObservedSet.object !== obj) {\n lastObserved Set = observedSetCache.pop() || newObservedSet();\n lastObservedSet.object = obj;\n }\n lastObservedSet.open(observer, obj);\n return lastObserved Set;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n var CLOSED = 2;\n var RE SETTING = 3;\n\n var nextObserverId = 1;\n\n function Observer() {\n this.s tate_ = UNOPENED;\n this.callback_ = undefined;\n this.target_ = undefined ; // TODO(rafaelw): Should be WeakRef\n this.directObserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserverId++;\n }\n\n Observer. prototype = {\n open: function(callback, target) {\n if (this.state_ != UNOPENED)\n throw Error('Observer has already been opened.');\n\n ad dToAll(this);\n this.callback_ = callback;\n this.target_ = target;\n this.connect_();\n this.state_ = OPENED;\n return this.value_;\n },\n\n close: function() {\n if (this.state_ != OPENED)\n retu rn;\n\n removeFromAll(this);\n this.disconnect_();\n this.value_ = undefined;\n this.callback_ = undefined;\n this.target_ = undefined; \n this.state_ = CLOSED;\n },\n\n deliver: function() {\n if (th is.state_ != OPENED)\n return;\n\n dirtyCheck(this);\n },\n\n report_: function(changes) {\n try {\n this.callback_.apply(this.tar get_, changes);\n } catch (ex) {\n Observer._errorThrownDuringCallba ck = true;\n console.error('Exception caught during observer callback: ' +\n (ex.stack || ex));\n }\n },\n\n discardChan ges: function() {\n this.check_(undefined, true);\n return this.value_ ;\n }\n }\n\n var collectObservers = !hasObserve;\n var allObservers;\n O bserver._allObserversCount = 0;\n\n if (collectObservers) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n Observer._allObserversCount++; \n if (!collectObservers)\n return;\n\n allObservers.push(observer);\ n }\n\n function removeFromAll(observer) {\n Observer._allObserversCount--; \n }\n\n var runningMicrotaskCheckpoint = false;\n\n global.Platform = global .Platform || {};\n\n global.Platform.performMicrotaskCheckpoint = function() {\ n if (runningMicrotaskCheckpoint)\n return;\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 = al lObservers;\n allObservers = [];\n anyChanged = false;\n\n for (v ar i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n if (observer.state_ != OPENED)\n continue;\n\n if (observer.ch eck_())\n anyChanged = true;\n\n allObservers.push(observer);\n }\n if (runEOMTasks())\n anyChanged = true;\n } while (cycle s < MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = false;\n };\n\n if (collectObservers) {\n global.Platform.clearObservers = function() {\n allObservers = [];\n };\n }\n\n function ObjectObserver (object) {\n Observer.call(this);\n this.value_ = object;\n this.oldObj ect_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n __pro to__: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: function( callback, target) {\n if (hasObserve) {\n this.directObserver_ = get ObservedObject(this, this.value_,\n this.arrayObserve);\n } else {\n this.oldObject_ = this.copyObje ct(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 check_: 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.value_, changeRecords,\n oldValues);\n } else {\n oldValues = this.oldObject_;\n diff = diffObjectFromOldO bject(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n return false;\n\n if (!hasObserve)\n this.oldObject_ = this.c opyObject(this.value_);\n\n this.report_([\n diff.added || {},\n diff.removed || {},\n diff.changed || {},\n function(property) {\n return oldValues[property];\n }\n ]);\n\n return 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 deliver: function() {\n if (this.state_ != OPENED)\n return;\n\n if (ha sObserve)\n this.directObserver_.deliver(false);\n else\n dir tyCheck(this);\n },\n\n discardChanges: function() {\n if (this.direc tObserver_)\n this.directObserver_.deliver(true);\n else\n th is.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.call(th is, array);\n }\n\n ArrayObserver.prototype = createObject({\n\n __proto__: ObjectObserver.prototype,\n\n arrayObserve: true,\n\n copyObject: functio n(arr) {\n return arr.slice();\n },\n\n check_: function(changeRecord s) {\n var splices;\n if (hasObserve) {\n if (!changeRecords)\n return false;\n splices = projectArraySplices(this.value_, chan geRecords);\n } else {\n splices = calcSplices(this.value_, 0, this. value_.length,\n this.oldObject_, 0, this.oldObject _.length);\n }\n\n if (!splices || !splices.length)\n return fa lse;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(this.v alue_);\n\n this.report_([splices]);\n return true;\n }\n });\n\n ArrayObserver.applySplices = function(previous, current, splices) {\n splice s.forEach(function(splice) {\n var spliceArgs = [splice.index, splice.remov ed.length];\n var addIndex = splice.index;\n while (addIndex < splice. index + splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n addIndex++;\n }\n\n Array.prototype.splice.apply(previous, spliceAr gs);\n });\n };\n\n function PathObserver(object, path) {\n Observer.cal l(this);\n\n this.object_ = object;\n this.path_ = getPath(path);\n thi s.directObserver_ = undefined;\n }\n\n PathObserver.prototype = createObject({ \n __proto__: Observer.prototype,\n\n get path() {\n return this.path _;\n },\n\n connect_: function() {\n if (hasObserve)\n this.di rectObserver_ = getObservedSet(this, this.object_);\n\n this.check_(undefin ed, true);\n },\n\n disconnect_: function() {\n this.value_ = undefin ed;\n\n if (this.directObserver_) {\n this.directObserver_.close(thi s);\n this.directObserver_ = undefined;\n }\n },\n\n iterateOb jects_: function(observe) {\n this.path_.iterateObjects(this.object_, obser ve);\n },\n\n check_: function(changeRecords, skipChanges) {\n var ol dValue = this.value_;\n this.value_ = this.path_.getValueFrom(this.object_) ;\n if (skipChanges || areSameValue(this.value_, oldValue))\n return false;\n\n this.report_([this.value_, oldValue, this]);\n return true ;\n },\n\n setValue: function(newValue) {\n if (this.path_)\n this.path_.setValueFrom(this.object_, newValue);\n }\n });\n\n function Com poundObserver(reportChangesOnOpen) {\n Observer.call(this);\n\n this.repor tChangesOnOpen_ = reportChangesOnOpen;\n this.value_ = [];\n this.directOb server_ = undefined;\n this.observed_ = [];\n }\n\n var observerSentinel = {};\n\n CompoundObserver.prototype = createObject({\n __proto__: Observer.pr ototype,\n\n connect_: function() {\n if (hasObserve) {\n var obj ect;\n var needsDirectObserver = false;\n for (var i = 0; i < this .observed_.length; i += 2) {\n object = this.observed_[i]\n if (object !== observerSentinel) {\n needsDirectObserver = true;\n break;\n }\n }\n\n if (needsDirectObserver)\n this.directObserver_ = getObservedSet(this, object);\n }\n\n this .check_(undefined, !this.reportChangesOnOpen_);\n },\n\n disconnect_: func tion() {\n for (var i = 0; i < this.observed_.length; i += 2) {\n if (this.observed_[i] === observerSentinel)\n this.observed_[i + 1].close ();\n }\n this.observed_.length = 0;\n this.value_.length = 0;\n\ n if (this.directObserver_) {\n this.directObserver_.close(this);\n this.directObserver_ = undefined;\n }\n },\n\n addPath: functi on(object, path) {\n if (this.state_ != UNOPENED && this.state_ != RESETTIN G)\n throw Error('Cannot add paths once started.');\n\n var path = g etPath(path);\n this.observed_.push(object, path);\n if (!this.reportC hangesOnOpen_)\n return;\n var index = this.observed_.length / 2 - 1 ;\n this.value_[index] = path.getValueFrom(object);\n },\n\n addObser ver: function(observer) {\n if (this.state_ != UNOPENED && this.state_ != R ESETTING)\n throw Error('Cannot add observers once started.');\n\n t his.observed_.push(observerSentinel, observer);\n if (!this.reportChangesOn Open_)\n return;\n var index = this.observed_.length / 2 - 1;\n this.value_[index] = observer.open(this.deliver, this);\n },\n\n startRes et: function() {\n if (this.state_ != OPENED)\n throw Error('Can onl y reset while open');\n\n this.state_ = RESETTING;\n this.disconnect_( );\n },\n\n finishReset: function() {\n if (this.state_ != RESETTING) \n throw Error('Can only finishReset after startReset');\n this.stat e_ = 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].iterateObjec ts(object, observe)\n }\n },\n\n check_: function(changeRecords, skip Changes) {\n var oldValues;\n for (var i = 0; i < this.observed_.lengt h; i += 2) {\n var object = this.observed_[i];\n var path = this.o bserved_[i+1];\n var value;\n if (object === observerSentinel) {\n var observable = path;\n value = this.state_ === UNOPENED ?\n observable.open(this.deliver, this) :\n observable.di scardChanges();\n } else {\n value = path.getValueFrom(object);\ n }\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 add: true,\n update: true,\n delete: true\n };\n\n function diffObjectFromChangeRecords(object, changeRecords, oldValues) {\n var added = {};\n var removed = {};\n\n for (var i = 0; i < changeR ecords.length; i++) {\n var record = changeRecords[i];\n if (!expected RecordTypes[record.type]) {\n console.error('Unknown changeRecord type: ' + record.type);\n console.error(record);\n continue;\n }\n\n if (!(record.name in oldValues))\n oldValues[record.name] = record. oldValue;\n\n if (record.type == 'update')\n continue;\n\n if ( record.type == 'add') {\n if (record.name in removed)\n delete r emoved[record.name];\n else\n added[record.name] = true;\n\n continue;\n }\n\n // type = 'delete'\n if (record.name in add ed) {\n delete added[record.name];\n delete oldValues[record.name] ;\n } else {\n removed[record.name] = true;\n }\n }\n\n f or (var prop in added)\n added[prop] = object[prop];\n\n for (var prop i n removed)\n removed[prop] = undefined;\n\n var changed = {};\n for ( var prop in oldValues) {\n if (prop in added || prop in removed)\n c ontinue;\n\n var newValue = object[prop];\n if (oldValues[prop] !== ne wValue)\n changed[prop] = newValue;\n }\n\n return {\n added: added,\n removed: removed,\n changed: changed\n };\n }\n\n functi on 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: Th is function is *based* on the computation of the Levenshtein\n // \"edit\" di stance. The one change is that \"updates\" are treated as two\n // edits - no t one. With Array splices, an update is really a delete\n // followed by an a dd. By retaining this, we optimize for \"keeping\" the\n // maximum array ite ms in the original array. For example:\n //\n // 'xxxx123' -> '123yyyy'\ n //\n // With 1-edit updates, the shortest path would be just to update a ll seven\n // characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n // leaves the substring '123' intact.\n calcEditDistances: funct ion(current, currentStart, currentEnd,\n old, old Start, oldEnd) {\n // \"Deletion\" columns\n var rowCount = oldEnd - o ldStart + 1;\n var columnCount = currentEnd - currentStart + 1;\n var distances = new Array(rowCount);\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 // Initializ e 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], o ld[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 spliceOperationsFromEditDistances: 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(EDI T_DELETE);\n i--;\n continue;\n }\n var northWes t = distances[i - 1][j - 1];\n var west = distances[i - 1][j];\n v ar north = distances[i][j - 1];\n\n var min;\n if (west < north)\n min = west < northWest ? west : northWest;\n else\n mi n = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = north West;\n }\n i--;\n j--;\n } else if (min == we st) {\n edits.push(EDIT_DELETE);\n i--;\n current = w est;\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 representation of how a previous array of items\n * was tra nsformed 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 were removed, and counting forward\n * from |ind ex|, |addedCount| items were added.\n */\n\n /**\n * Lacking individu al splice mutation information, the minimal set of\n * splices can be synthe sized given the previous state and final state of an\n * array. The basic ap proach is to calculate the edit 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 calcSp lices: function(current, currentStart, currentEnd,\n ol d, 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.share dPrefix(current, old, minLength);\n\n if (currentEnd == current.length && o ldEnd == old.length)\n suffixCount = this.sharedSuffix(current, old, minL ength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += p refixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n retu rn [];\n\n if (currentStart == currentEnd) {\n var splice = newSplic e(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.rem oved.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldS tart == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - curre ntStart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\n this.calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n var splice = undefined;\n v ar splices = [];\n var index = 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(spl ice);\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.pus h(old[oldIndex]);\n oldIndex++;\n break;\n case E DIT_ADD:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\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 (splic e) {\n splices.push(splice);\n }\n return splices;\n },\n\n sharedPrefix: function(current, old, searchLength) {\n for (var i = 0; i < searchLength; i++)\n if (!this.equals(current[i], old[i]))\n return i;\n return searchLength;\n },\n\n sharedSuffix: function(curr ent, old, searchLength) {\n var index1 = current.length;\n var index2 = old.length;\n var count = 0;\n while (count < searchLength && this.e quals(current[--index1], old[--index2]))\n count++;\n\n return count ;\n },\n\n calculateSplices: function(current, previous) {\n return t his.calcSplices(current, 0, current.length, previous, 0,\n previous.length);\n },\n\n equals: function(currentValue, previous Value) {\n return currentValue === previousValue;\n }\n };\n\n var arr aySplice = new ArraySplice();\n\n function calcSplices(current, currentStart, c urrentEnd,\n old, oldStart, oldEnd) {\n return arraySpl ice.calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd);\n }\n\n function intersect(start1, end1, start2 , end2) {\n // Disjoint\n if (end1 < start2 || end2 < start1)\n retur n -1;\n\n // Adjacent\n if (end1 == start2 || end2 == start1)\n retur n 0;\n\n // Non-zero intersect, span1 first\n if (start1 < start2) {\n if (end1 < end2)\n return end1 - start2; // Overlap\n else\n return end2 - start2; // Contained\n } else {\n // Non-zero intersect, span2 first\n if (end2 < end1)\n return end2 - start1; // Overlap\n else\n return end1 - start1; // Contained\n }\n }\n\n function mergeSplice(splices, index, removed, addedCount) {\n\n var splice = newSplic e(index, removed, addedCount);\n\n var inserted = false;\n var insertionOf fset = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var current = splices[i];\n current.index += insertionOffset;\n\n if (inserted)\n continue;\n\n var intersectCount = intersect(splice.index,\n splice.index + splice.removed.length,\n current.index,\n cur rent.index + current.addedCount);\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 spl ice.addedCount += current.addedCount - intersectCount;\n var deleteCount = splice.removed.length +\n current.removed.length - in tersectCount;\n\n if (!splice.addedCount && !deleteCount) {\n // merged splice is a noop. discard.\n inserted = true;\n } else { \n var removed = current.removed;\n\n if (splice.index < curre nt.index) {\n // some prefix of splice.removed is prepended to curren t.removed.\n var prepend = splice.removed.slice(0, current.index - sp lice.index);\n Array.prototype.push.apply(prepend, removed);\n removed = prepend;\n }\n\n if (splice.index + splice.remo ved.length > current.index + current.addedCount) {\n // some suffix o f splice.removed is appended to current.removed.\n var append = splic e.removed.slice(current.index + current.addedCount - splice.index);\n Array.prototype.push.apply(removed, append);\n }\n\n splice.r emoved = removed;\n if (current.index < splice.index) {\n sp lice.index = current.index;\n }\n }\n } else if (splice.ind ex < 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.removed.length\n current.index += offset;\n insertionOffset += offset;\n }\n }\n\n if (!inserted)\n sp lices.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 = changeRecords[i];\n switch(record.type) {\n c ase 'splice':\n mergeSplice(splices, record.index, record.removed.slice (), record.addedCount);\n break;\n case 'add':\n case 'up date':\n case 'delete':\n if (!isIndex(record.name))\n continue;\n var index = toNumber(record.name);\n if (index < 0)\n continue;\n mergeSplice(splices, index, [record.oldVal ue], 1);\n break;\n default:\n console.error('Unexpecte d record type: ' + JSON.stringify(record));\n break;\n }\n }\n\ n return splices;\n }\n\n function projectArraySplices(array, changeRecords ) {\n var splices = [];\n\n createInitialSplices(array, changeRecords).for Each(function(splice) {\n if (splice.addedCount == 1 && splice.removed.leng th == 1) {\n if (splice.removed[0] !== array[splice.index])\n sp lices.push(splice);\n\n return\n };\n\n splices = splices.conca t(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.Obs erver.runEOM_ = runEOM;\n global.Observer.observerSentinel_ = observerSentinel; // for testing.\n global.Observer.hasObjectObserve = hasObserve;\n global.Arr ayObserver = ArrayObserver;\n global.ArrayObserver.calculateSplices = function( current, previous) {\n return arraySplice.calculateSplices(current, previous) ;\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserver = Object Observer;\n global.PathObserver = PathObserver;\n global.CompoundObserver = Co mpoundObserver;\n global.Path = Path;\n global.ObserverTransform = ObserverTra nsform;\n})(typeof global !== 'undefined' && global && typeof module !== 'undefi ned' && module ? global : this || window);\n", 87 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(global) {\n 'u se strict';\n\n var testingExposeCycleCount = global.testingExposeCycleCount;\n \n // Detect and do basic sanity checking on Object/Array.observe.\n function detectObjectObserve() {\n if (typeof Object.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 var arr = [];\n Object.observe(test, callback);\n Array.observe(arr, callback);\n test.id = 1;\n test.id = 2;\n delete te st.id;\n arr.push(1, 2);\n arr.length = 0;\n\n Object.deliverChangeReco rds(callback);\n if (records.length !== 5)\n return false;\n\n if (re cords[0].type != 'add' ||\n records[1].type != 'update' ||\n recor ds[2].type != 'delete' ||\n records[3].type != 'splice' ||\n recor ds[4].type != 'splice') {\n return false;\n }\n\n Object.unobserve(te st, callback);\n Array.unobserve(arr, callback);\n\n return true;\n }\n\n var hasObserve = detectObjectObserve();\n\n function detectEval() {\n // D on't test for eval if we're running in a Chrome App environment.\n // We chec k for APIs set that only exist in a Chrome App context.\n if (typeof chrome ! == 'undefined' && chrome.app && chrome.app.runtime) {\n return false;\n }\n\n // Firefox OS Apps do not allow eval. This feature detection is very ha cky\n // but even if some other platform adds support for this function this code\n // will continue to work.\n if (typeof navigator != 'undefined' && navigator.getDeviceStorage) {\n return false;\n }\n\n try {\n va r f = new Function('', 'return true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasEval = detectEval();\n\n function i sIndex(s) {\n return +s === s >>> 0 && s !== '';\n }\n\n function toNumber( s) {\n return +s;\n }\n\n function isObject(obj) {\n return obj === Obje ct(obj);\n }\n\n var numberIsNaN = global.Number.isNaN || function(value) {\n return typeof value === 'number' && global.isNaN(value);\n }\n\n function a reSameValue(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 crea teObject = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n funct ion(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNa mes(obj).forEach(function(name) {\n Object.defineProperty(newObject, name ,\n Object.getOwnPropertyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var identStart = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var identRegExp = new RegExp('^' + ident Start + '+' + identPart + '*' + '$');\n\n function getPathCharType(char) {\n if (char === undefined)\n return 'eof';\n\n var code = char.charCodeAt( 0);\n\n switch(code) {\n case 0x5B: // [\n case 0x5D: // ]\n c ase 0x2E: // .\n case 0x22: // \"\n case 0x27: // '\n case 0x30: // 0\n return char;\n\n case 0x5F: // _\n case 0x24: // $\n return 'ident';\n\n case 0x20: // Space\n case 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n case 0xA0: // No-brea k space\n case 0xFEFF: // Byte Order Mark\n case 0x2028: // Line Sep arator\n case 0x2029: // Paragraph Separator\n return 'ws';\n }\ n\n // a-z, A-Z\n if ((0x61 <= code && code <= 0x7A) || (0x41 <= code && c ode <= 0x5A))\n return 'ident';\n\n // 1-9\n if (0x31 <= code && code <= 0x39)\n return 'number';\n\n return 'else';\n }\n\n var pathStateM achine = {\n 'beforePath': {\n 'ws': ['beforePath'],\n 'ident': ['i nIdent', 'append'],\n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'inPath': {\n 'ws': ['inPath'],\n '.': ['beforeIdent'],\ n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'befor eIdent': {\n 'ws': ['beforeIdent'],\n 'ident': ['inIdent', 'append']\n },\n\n 'inIdent': {\n 'ident': ['inIdent', 'append'],\n '0': [' inIdent', 'append'],\n 'number': ['inIdent', 'append'],\n 'ws': ['inPa th', 'push'],\n '.': ['beforeIdent', 'push'],\n '[': ['beforeElement', 'push'],\n 'eof': ['afterPath', 'push']\n },\n\n 'beforeElement': {\ n 'ws': ['beforeElement'],\n '0': ['afterZero', 'append'],\n 'num ber': ['inIndex', 'append'],\n \"'\": ['inSingleQuote', 'append', ''],\n '\"': ['inDoubleQuote', 'append', '']\n },\n\n 'afterZero': {\n 'w s': ['afterElement', 'push'],\n ']': ['inPath', 'push']\n },\n\n 'inI ndex': {\n '0': ['inIndex', 'append'],\n 'number': ['inIndex', 'append '],\n 'ws': ['afterElement'],\n ']': ['inPath', 'push']\n },\n\n 'inSingleQuote': {\n \"'\": ['afterElement'],\n 'eof': ['error'],\n 'else': ['inSingleQuote', 'append']\n },\n\n 'inDoubleQuote': {\n '\"': ['afterElement'],\n 'eof': ['error'],\n 'else': ['inDoubleQuote ', 'append']\n },\n\n 'afterElement': {\n 'ws': ['afterElement'],\n ']': ['inPath', 'push']\n }\n }\n\n function noop() {}\n\n function pa rsePath(path) {\n var keys = [];\n var index = -1;\n var c, newChar, ke y, type, transition, action, typeMap, mode = 'beforePath';\n\n var actions = {\n push: function() {\n if (key === undefined)\n return;\n \n keys.push(key);\n key = undefined;\n },\n\n append: f unction() {\n if (key === undefined)\n key = newChar\n el se\n key += newChar;\n }\n };\n\n function maybeUnescapeQuot e() {\n if (index >= path.length)\n return;\n\n var nextChar = path[index + 1];\n if ((mode == 'inSingleQuote' && nextChar == \"'\") ||\n (mode == 'inDoubleQuote' && nextChar == '\"')) {\n index++;\n newChar = nextChar;\n actions.append();\n return true;\n }\n }\n\n while (mode) {\n index++;\n c = path[index];\n\n if (c == '\\\\' && maybeUnescapeQuote(mode))\n continue;\n\n type = getPathCharType(c);\n typeMap = pathStateMachine[mode];\n transition = typeMap[type] || typeMap['else'] || 'error';\n\n if (transition == 'error ')\n return; // parse error;\n\n mode = transition[0];\n action = actions[transition[1]] || noop;\n newChar = transition[2] === undefined ? c : transition[2];\n action();\n\n if (mode === 'afterPath') {\n return keys;\n }\n }\n\n return; // parse error\n }\n\n functio n isIdent(s) {\n return identRegExp.test(s);\n }\n\n var constructorIsPriva te = {};\n\n function Path(parts, privateToken) {\n if (privateToken !== con structorIsPrivate)\n throw Error('Use Path.get to retrieve path objects');\ n\n for (var i = 0; i < parts.length; i++) {\n this.push(String(parts[i] ));\n }\n\n if (hasEval && this.length) {\n this.getValueFrom = this. compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw): Make simple LRU cac he\n var pathCache = {};\n\n function getPath(pathString) {\n if (pathStrin g instanceof Path)\n return pathString;\n\n if (pathString == null || pa thString.length == 0)\n pathString = '';\n\n if (typeof pathString != 's tring') {\n if (isIndex(pathString.length)) {\n // Constructed with array-like (pre-parsed) keys\n return new Path(pathString, constructorIsP rivate);\n }\n\n pathString = String(pathString);\n }\n\n var pa th = pathCache[pathString];\n if (path)\n return path;\n\n var parts = parsePath(pathString);\n if (!parts)\n return invalidPath;\n\n var path = new Path(parts, constructorIsPrivate);\n pathCache[pathString] = path; \n return path;\n }\n\n Path.get = getPath;\n\n function formatAccessor(ke y) {\n if (isIndex(key)) {\n return '[' + key + ']';\n } else {\n return '[\"' + key.replace(/\"/g, '\\\\\"') + '\"]';\n }\n }\n\n Path.pro totype = createObject({\n __proto__: [],\n valid: true,\n\n toString: f unction() {\n var pathString = '';\n for (var i = 0; i < this.length; i++) {\n var key = this[i];\n if (isIdent(key)) {\n pathS tring += i ? '.' + key : key;\n } else {\n pathString += formatA ccessor(key);\n }\n }\n\n return pathString;\n },\n\n get ValueFrom: function(obj, directObserver) {\n for (var i = 0; i < this.lengt h; i++) {\n if (obj == null)\n return;\n obj = obj[this[i ]];\n }\n return obj;\n },\n\n iterateObjects: function(obj, obs erve) {\n for (var i = 0; i < this.length; i++) {\n if (i)\n obj = obj[this[i - 1]];\n if (!isObject(obj))\n return;\n observe(obj, this[0]);\n }\n },\n\n compiledGetValueFromFn: functi on() {\n var str = '';\n var pathString = 'obj';\n str += 'if (ob j != null';\n var i = 0;\n var key;\n for (; i < (this.length - 1 ); i++) {\n key = this[i];\n pathString += isIdent(key) ? '.' + ke y : formatAccessor(key);\n str += ' &&\\n ' + pathString + ' != null' ;\n }\n str += ')\\n';\n\n var key = this[i];\n pathString + = isIdent(key) ? '.' + key : formatAccessor(key);\n\n str += ' return ' + pathString + ';\\nelse\\n return undefined;';\n return new Function('obj', str);\n },\n\n setValueFrom: function(obj, value) {\n if (!this.leng th)\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[thi s[i]] = value;\n return true;\n }\n });\n\n var invalidPath = new Path ('', constructorIsPrivate);\n invalidPath.valid = false;\n invalidPath.getValu eFrom = invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY_CHECK_CYCLE S = 1000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n while ( cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\n }\ n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n \n return cycles > 0;\n }\n\n function objectIsEmpty(object) {\n for (va r prop in object)\n return false;\n return true;\n }\n\n function diff IsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n objectIsEmp ty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\n\n function diffObjectFromOldObject(object, oldObject) {\n var added = {};\n var remov ed = {};\n var changed = {};\n\n for (var prop in oldObject) {\n var newValue = object[prop];\n\n if (newValue !== undefined && newValue === old Object[prop])\n continue;\n\n if (!(prop in object)) {\n remo ved[prop] = undefined;\n continue;\n }\n\n if (newValue !== old Object[prop])\n changed[prop] = newValue;\n }\n\n for (var prop in object) {\n if (prop in oldObject)\n continue;\n\n added[prop] = object[prop];\n }\n\n if (Array.isArray(object) && object.length !== old Object.length)\n changed.length = object.length;\n\n return {\n add ed: added,\n removed: removed,\n changed: changed\n };\n }\n\n va r eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.length)\n r eturn false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n eomTasks[ i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong: true };\n var eomRunS cheduled = false;\n\n Object.observe(eomObj, function() {\n runEOMTasks( );\n eomRunScheduled = false;\n });\n\n return function(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n eomRunScheduled = tru e;\n eomObj.pingPong = !eomObj.pingPong;\n }\n };\n })() :\n (f unction() {\n return function(fn) {\n eomTasks.push(fn);\n };\n })() ;\n\n var observedObjectCache = [];\n\n function newObservedObject() {\n va r observer;\n var object;\n var discardRecords = false;\n var first = t rue;\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 Er ror('ObservedObject in use');\n\n if (!first)\n Object.deliverCh angeRecords(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(di scard) {\n discardRecords = discard;\n Object.deliverChangeRecords (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 /*\n * The o bservedSet abstraction is a perf optimization which reduces the total\n * numb er of Object.observe observations of a set of objects. The idea is that\n * gr oups of Observers will have some object dependencies in common and this\n * ob served set ensures that each object in the transitive closure of\n * dependenc ies is only observed once. The observedSet acts as a write barrier\n * such th at whenever any change comes through, all Observers are checked for\n * change d values.\n *\n * Note that this optimization is explicitly moving work from setup-time to\n * change-time.\n *\n * TODO(rafaelw): Implement \"garbage collection\". In order to move work off\n * the critical path, when Observers are closed, their observed objects are\n * not Object.unobserve(d). As a resu lt, it's possible that if the observedSet\n * is kept open, but some Observers have been closed, it could cause \"leaks\"\n * (prevent otherwise collectable objects from being collected). At some\n * point, we should implement increme ntal \"gc\" which keeps a list of\n * observedSets which may need clean-up and does small amounts of cleanup on a\n * timeout until all is clean.\n */\n\n function getObservedObject(observer, object, arrayObserve) {\n var dir = ob servedObjectCache.pop() || newObservedObject();\n dir.open(observer);\n di r.observe(object, arrayObserve);\n return dir;\n }\n\n var observedSetCache = [];\n\n function newObservedSet() {\n var observerCount = 0;\n var obs ervers = [];\n var objects = [];\n var rootObj;\n var rootObjProps;\n\n function observe(obj, prop) {\n if (!obj)\n return;\n\n if (obj === rootObj)\n rootObjProps[prop] = true;\n\n if (objects.index Of(obj) < 0) {\n objects.push(obj);\n Object.observe(obj, callback );\n }\n\n observe(Object.getPrototypeOf(obj), prop);\n }\n\n fu nction allRootObjNonObservedProps(recs) {\n for (var i = 0; i < recs.length ; i++) {\n var rec = recs[i];\n if (rec.object !== rootObj ||\n rootObjProps[rec.name] ||\n rec.type === 'setPrototype') {\n return false;\n }\n }\n return true;\n }\n\n fu nction callback(recs) {\n if (allRootObjNonObservedProps(recs))\n re turn;\n\n var observer;\n for (var i = 0; i < observers.length; i++) { \n observer = observers[i];\n if (observer.state_ == OPENED) {\n observer.iterateObjects_(observe);\n }\n }\n\n for (var i = 0; i < observers.length; i++) {\n observer = observers[i];\n if (observer.state_ == OPENED) {\n observer.check_();\n }\n }\n }\n\n var record = {\n object: undefined,\n objects: object s,\n open: function(obs, object) {\n if (!rootObj) {\n root Obj = object;\n rootObjProps = {};\n }\n\n observers.push (obs);\n observerCount++;\n obs.iterateObjects_(observe);\n } ,\n close: function(obs) {\n observerCount--;\n if (observerC ount > 0) {\n return;\n }\n\n for (var i = 0; i < objects .length; i++) {\n Object.unobserve(objects[i], callback);\n Ob server.unobservedCount++;\n }\n\n observers.length = 0;\n o bjects.length = 0;\n rootObj = undefined;\n rootObjProps = undefin ed;\n observedSetCache.push(this);\n }\n };\n\n return record; \n }\n\n var lastObservedSet;\n\n function getObservedSet(observer, obj) {\n if (!lastObservedSet || lastObservedSet.object !== obj) {\n lastObserved Set = observedSetCache.pop() || newObservedSet();\n lastObservedSet.object = obj;\n }\n lastObservedSet.open(observer, obj);\n return lastObserved Set;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n var CLOSED = 2;\n var RE SETTING = 3;\n\n var nextObserverId = 1;\n\n function Observer() {\n this.s tate_ = UNOPENED;\n this.callback_ = undefined;\n this.target_ = undefined ; // TODO(rafaelw): Should be WeakRef\n this.directObserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserverId++;\n }\n\n Observer. prototype = {\n open: function(callback, target) {\n if (this.state_ != UNOPENED)\n throw Error('Observer has already been opened.');\n\n ad dToAll(this);\n this.callback_ = callback;\n this.target_ = target;\n this.connect_();\n this.state_ = OPENED;\n return this.value_;\n },\n\n close: function() {\n if (this.state_ != OPENED)\n retu rn;\n\n removeFromAll(this);\n this.disconnect_();\n this.value_ = undefined;\n this.callback_ = undefined;\n this.target_ = undefined; \n this.state_ = CLOSED;\n },\n\n deliver: function() {\n if (th is.state_ != OPENED)\n return;\n\n dirtyCheck(this);\n },\n\n report_: function(changes) {\n try {\n this.callback_.apply(this.tar get_, changes);\n } catch (ex) {\n Observer._errorThrownDuringCallba ck = true;\n console.error('Exception caught during observer callback: ' +\n (ex.stack || ex));\n }\n },\n\n discardChan ges: function() {\n this.check_(undefined, true);\n return this.value_ ;\n }\n }\n\n var collectObservers = !hasObserve;\n var allObservers;\n O bserver._allObserversCount = 0;\n\n if (collectObservers) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n Observer._allObserversCount++; \n if (!collectObservers)\n return;\n\n allObservers.push(observer);\ n }\n\n function removeFromAll(observer) {\n Observer._allObserversCount--; \n }\n\n var runningMicrotaskCheckpoint = false;\n\n global.Platform = global .Platform || {};\n\n global.Platform.performMicrotaskCheckpoint = function() {\ n if (runningMicrotaskCheckpoint)\n return;\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 = al lObservers;\n allObservers = [];\n anyChanged = false;\n\n for (v ar i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n if (observer.state_ != OPENED)\n continue;\n\n if (observer.ch eck_())\n anyChanged = true;\n\n allObservers.push(observer);\n }\n if (runEOMTasks())\n anyChanged = true;\n } while (cycle s < MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = false;\n };\n\n if (collectObservers) {\n global.Platform.clearObservers = function() {\n allObservers = [];\n };\n }\n\n function ObjectObserver (object) {\n Observer.call(this);\n this.value_ = object;\n this.oldObj ect_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n __pro to__: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: function( callback, target) {\n if (hasObserve) {\n this.directObserver_ = get ObservedObject(this, this.value_,\n this.arrayObserve);\n } else {\n this.oldObject_ = this.copyObje ct(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 check_: 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.value_, changeRecords,\n oldValues);\n } else {\n oldValues = this.oldObject_;\n diff = diffObjectFromOldO bject(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n return false;\n\n if (!hasObserve)\n this.oldObject_ = this.c opyObject(this.value_);\n\n this.report_([\n diff.added || {},\n diff.removed || {},\n diff.changed || {},\n function(property) {\n return oldValues[property];\n }\n ]);\n\n return 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 deliver: function() {\n if (this.state_ != OPENED)\n return;\n\n if (ha sObserve)\n this.directObserver_.deliver(false);\n else\n dir tyCheck(this);\n },\n\n discardChanges: function() {\n if (this.direc tObserver_)\n this.directObserver_.deliver(true);\n else\n th is.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.call(th is, array);\n }\n\n ArrayObserver.prototype = createObject({\n\n __proto__: ObjectObserver.prototype,\n\n arrayObserve: true,\n\n copyObject: functio n(arr) {\n return arr.slice();\n },\n\n check_: function(changeRecord s) {\n var splices;\n if (hasObserve) {\n if (!changeRecords)\n return false;\n splices = projectArraySplices(this.value_, chan geRecords);\n } else {\n splices = calcSplices(this.value_, 0, this. value_.length,\n this.oldObject_, 0, this.oldObject _.length);\n }\n\n if (!splices || !splices.length)\n return fa lse;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(this.v alue_);\n\n this.report_([splices]);\n return true;\n }\n });\n\n ArrayObserver.applySplices = function(previous, current, splices) {\n splice s.forEach(function(splice) {\n var spliceArgs = [splice.index, splice.remov ed.length];\n var addIndex = splice.index;\n while (addIndex < splice. index + splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n addIndex++;\n }\n\n Array.prototype.splice.apply(previous, spliceAr gs);\n });\n };\n\n function PathObserver(object, path) {\n Observer.cal l(this);\n\n this.object_ = object;\n this.path_ = getPath(path);\n thi s.directObserver_ = undefined;\n }\n\n PathObserver.prototype = createObject({ \n __proto__: Observer.prototype,\n\n get path() {\n return this.path _;\n },\n\n connect_: function() {\n if (hasObserve)\n this.di rectObserver_ = getObservedSet(this, this.object_);\n\n this.check_(undefin ed, true);\n },\n\n disconnect_: function() {\n this.value_ = undefin ed;\n\n if (this.directObserver_) {\n this.directObserver_.close(thi s);\n this.directObserver_ = undefined;\n }\n },\n\n iterateOb jects_: function(observe) {\n this.path_.iterateObjects(this.object_, obser ve);\n },\n\n check_: function(changeRecords, skipChanges) {\n var ol dValue = this.value_;\n this.value_ = this.path_.getValueFrom(this.object_) ;\n if (skipChanges || areSameValue(this.value_, oldValue))\n return false;\n\n this.report_([this.value_, oldValue, this]);\n return true ;\n },\n\n setValue: function(newValue) {\n if (this.path_)\n this.path_.setValueFrom(this.object_, newValue);\n }\n });\n\n function Com poundObserver(reportChangesOnOpen) {\n Observer.call(this);\n\n this.repor tChangesOnOpen_ = reportChangesOnOpen;\n this.value_ = [];\n this.directOb server_ = undefined;\n this.observed_ = [];\n }\n\n var observerSentinel = {};\n\n CompoundObserver.prototype = createObject({\n __proto__: Observer.pr ototype,\n\n connect_: function() {\n if (hasObserve) {\n var obj ect;\n var needsDirectObserver = false;\n for (var i = 0; i < this .observed_.length; i += 2) {\n object = this.observed_[i]\n if (object !== observerSentinel) {\n needsDirectObserver = true;\n break;\n }\n }\n\n if (needsDirectObserver)\n this.directObserver_ = getObservedSet(this, object);\n }\n\n this .check_(undefined, !this.reportChangesOnOpen_);\n },\n\n disconnect_: func tion() {\n for (var i = 0; i < this.observed_.length; i += 2) {\n if (this.observed_[i] === observerSentinel)\n this.observed_[i + 1].close ();\n }\n this.observed_.length = 0;\n this.value_.length = 0;\n\ n if (this.directObserver_) {\n this.directObserver_.close(this);\n this.directObserver_ = undefined;\n }\n },\n\n addPath: functi on(object, path) {\n if (this.state_ != UNOPENED && this.state_ != RESETTIN G)\n throw Error('Cannot add paths once started.');\n\n var path = g etPath(path);\n this.observed_.push(object, path);\n if (!this.reportC hangesOnOpen_)\n return;\n var index = this.observed_.length / 2 - 1 ;\n this.value_[index] = path.getValueFrom(object);\n },\n\n addObser ver: function(observer) {\n if (this.state_ != UNOPENED && this.state_ != R ESETTING)\n throw Error('Cannot add observers once started.');\n\n t his.observed_.push(observerSentinel, observer);\n if (!this.reportChangesOn Open_)\n return;\n var index = this.observed_.length / 2 - 1;\n this.value_[index] = observer.open(this.deliver, this);\n },\n\n startRes et: function() {\n if (this.state_ != OPENED)\n throw Error('Can onl y reset while open');\n\n this.state_ = RESETTING;\n this.disconnect_( );\n },\n\n finishReset: function() {\n if (this.state_ != RESETTING) \n throw Error('Can only finishReset after startReset');\n this.stat e_ = 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].iterateObjec ts(object, observe)\n }\n },\n\n check_: function(changeRecords, skip Changes) {\n var oldValues;\n for (var i = 0; i < this.observed_.lengt h; i += 2) {\n var object = this.observed_[i];\n var path = this.o bserved_[i+1];\n var value;\n if (object === observerSentinel) {\n var observable = path;\n value = this.state_ === UNOPENED ?\n observable.open(this.deliver, this) :\n observable.di scardChanges();\n } else {\n value = path.getValueFrom(object);\ n }\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 add: true,\n update: true,\n delete: true\n };\n\n function diffObjectFromChangeRecords(object, changeRecords, oldValues) {\n var added = {};\n var removed = {};\n\n for (var i = 0; i < changeR ecords.length; i++) {\n var record = changeRecords[i];\n if (!expected RecordTypes[record.type]) {\n console.error('Unknown changeRecord type: ' + record.type);\n console.error(record);\n continue;\n }\n\n if (!(record.name in oldValues))\n oldValues[record.name] = record. oldValue;\n\n if (record.type == 'update')\n continue;\n\n if ( record.type == 'add') {\n if (record.name in removed)\n delete r emoved[record.name];\n else\n added[record.name] = true;\n\n continue;\n }\n\n // type = 'delete'\n if (record.name in add ed) {\n delete added[record.name];\n delete oldValues[record.name] ;\n } else {\n removed[record.name] = true;\n }\n }\n\n f or (var prop in added)\n added[prop] = object[prop];\n\n for (var prop i n removed)\n removed[prop] = undefined;\n\n var changed = {};\n for ( var prop in oldValues) {\n if (prop in added || prop in removed)\n c ontinue;\n\n var newValue = object[prop];\n if (oldValues[prop] !== ne wValue)\n changed[prop] = newValue;\n }\n\n return {\n added: added,\n removed: removed,\n changed: changed\n };\n }\n\n functi on 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: Th is function is *based* on the computation of the Levenshtein\n // \"edit\" di stance. The one change is that \"updates\" are treated as two\n // edits - no t one. With Array splices, an update is really a delete\n // followed by an a dd. By retaining this, we optimize for \"keeping\" the\n // maximum array ite ms in the original array. For example:\n //\n // 'xxxx123' -> '123yyyy'\ n //\n // With 1-edit updates, the shortest path would be just to update a ll seven\n // characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n // leaves the substring '123' intact.\n calcEditDistances: funct ion(current, currentStart, currentEnd,\n old, old Start, oldEnd) {\n // \"Deletion\" columns\n var rowCount = oldEnd - o ldStart + 1;\n var columnCount = currentEnd - currentStart + 1;\n var distances = new Array(rowCount);\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 // Initializ e 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], o ld[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 spliceOperationsFromEditDistances: 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(EDI T_DELETE);\n i--;\n continue;\n }\n var northWes t = distances[i - 1][j - 1];\n var west = distances[i - 1][j];\n v ar north = distances[i][j - 1];\n\n var min;\n if (west < north)\n min = west < northWest ? west : northWest;\n else\n mi n = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = north West;\n }\n i--;\n j--;\n } else if (min == we st) {\n edits.push(EDIT_DELETE);\n i--;\n current = w est;\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 representation of how a previous array of items\n * was tra nsformed 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 were removed, and counting forward\n * from |ind ex|, |addedCount| items were added.\n */\n\n /**\n * Lacking individu al splice mutation information, the minimal set of\n * splices can be synthe sized given the previous state and final state of an\n * array. The basic ap proach is to calculate the edit 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 calcSp lices: function(current, currentStart, currentEnd,\n ol d, 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.share dPrefix(current, old, minLength);\n\n if (currentEnd == current.length && o ldEnd == old.length)\n suffixCount = this.sharedSuffix(current, old, minL ength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += p refixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n retu rn [];\n\n if (currentStart == currentEnd) {\n var splice = newSplic e(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.rem oved.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldS tart == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - curre ntStart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\n this.calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n var splice = undefined;\n v ar splices = [];\n var index = 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(spl ice);\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.pus h(old[oldIndex]);\n oldIndex++;\n break;\n case E DIT_ADD:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\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 (splic e) {\n splices.push(splice);\n }\n return splices;\n },\n\n sharedPrefix: function(current, old, searchLength) {\n for (var i = 0; i < searchLength; i++)\n if (!this.equals(current[i], old[i]))\n return i;\n return searchLength;\n },\n\n sharedSuffix: function(curr ent, old, searchLength) {\n var index1 = current.length;\n var index2 = old.length;\n var count = 0;\n while (count < searchLength && this.e quals(current[--index1], old[--index2]))\n count++;\n\n return count ;\n },\n\n calculateSplices: function(current, previous) {\n return t his.calcSplices(current, 0, current.length, previous, 0,\n previous.length);\n },\n\n equals: function(currentValue, previous Value) {\n return currentValue === previousValue;\n }\n };\n\n var arr aySplice = new ArraySplice();\n\n function calcSplices(current, currentStart, c urrentEnd,\n old, oldStart, oldEnd) {\n return arraySpl ice.calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd);\n }\n\n function intersect(start1, end1, start2 , end2) {\n // Disjoint\n if (end1 < start2 || end2 < start1)\n retur n -1;\n\n // Adjacent\n if (end1 == start2 || end2 == start1)\n retur n 0;\n\n // Non-zero intersect, span1 first\n if (start1 < start2) {\n if (end1 < end2)\n return end1 - start2; // Overlap\n else\n return end2 - start2; // Contained\n } else {\n // Non-zero intersect, span2 first\n if (end2 < end1)\n return end2 - start1; // Overlap\n else\n return end1 - start1; // Contained\n }\n }\n\n function mergeSplice(splices, index, removed, addedCount) {\n\n var splice = newSplic e(index, removed, addedCount);\n\n var inserted = false;\n var insertionOf fset = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var current = splices[i];\n current.index += insertionOffset;\n\n if (inserted)\n continue;\n\n var intersectCount = intersect(splice.index,\n splice.index + splice.removed.length,\n current.index,\n cur rent.index + current.addedCount);\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 spl ice.addedCount += current.addedCount - intersectCount;\n var deleteCount = splice.removed.length +\n current.removed.length - in tersectCount;\n\n if (!splice.addedCount && !deleteCount) {\n // merged splice is a noop. discard.\n inserted = true;\n } else { \n var removed = current.removed;\n\n if (splice.index < curre nt.index) {\n // some prefix of splice.removed is prepended to curren t.removed.\n var prepend = splice.removed.slice(0, current.index - sp lice.index);\n Array.prototype.push.apply(prepend, removed);\n removed = prepend;\n }\n\n if (splice.index + splice.remo ved.length > current.index + current.addedCount) {\n // some suffix o f splice.removed is appended to current.removed.\n var append = splic e.removed.slice(current.index + current.addedCount - splice.index);\n Array.prototype.push.apply(removed, append);\n }\n\n splice.r emoved = removed;\n if (current.index < splice.index) {\n sp lice.index = current.index;\n }\n }\n } else if (splice.ind ex < 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.removed.length\n current.index += offset;\n insertionOffset += offset;\n }\n }\n\n if (!inserted)\n sp lices.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 = changeRecords[i];\n switch(record.type) {\n c ase 'splice':\n mergeSplice(splices, record.index, record.removed.slice (), record.addedCount);\n break;\n case 'add':\n case 'up date':\n case 'delete':\n if (!isIndex(record.name))\n continue;\n var index = toNumber(record.name);\n if (index < 0)\n continue;\n mergeSplice(splices, index, [record.oldVal ue], 1);\n break;\n default:\n console.error('Unexpecte d record type: ' + JSON.stringify(record));\n break;\n }\n }\n\ n return splices;\n }\n\n function projectArraySplices(array, changeRecords ) {\n var splices = [];\n\n createInitialSplices(array, changeRecords).for Each(function(splice) {\n if (splice.addedCount == 1 && splice.removed.leng th == 1) {\n if (splice.removed[0] !== array[splice.index])\n sp lices.push(splice);\n\n return\n };\n\n splices = splices.conca t(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.Obs erver.runEOM_ = runEOM;\n global.Observer.observerSentinel_ = observerSentinel; // for testing.\n global.Observer.hasObjectObserve = hasObserve;\n global.Arr ayObserver = ArrayObserver;\n global.ArrayObserver.calculateSplices = function( current, previous) {\n return arraySplice.calculateSplices(current, previous) ;\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserver = Object Observer;\n global.PathObserver = PathObserver;\n global.CompoundObserver = Co mpoundObserver;\n global.Path = Path;\n global.ObserverTransform = ObserverTra nsform;\n})(typeof global !== 'undefined' && global && typeof module !== 'undefi ned' && module ? global : this || window);\n",
88 "// 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 function detectEval() { \n // Don't test for eval if we're running in a Chrome App environment.\n // We check for APIs set that only exist in a Chrome App context.\n if (typeo f chrome !== 'undefined' && chrome.app && chrome.app.runtime) {\n return fa lse;\n }\n\n // Firefox OS Apps do not allow eval. This feature detection is very hacky\n // but even if some other platform adds support for this func tion this code\n // will continue to work.\n if (navigator.getDeviceStorag e) {\n return false;\n }\n\n try {\n var f = new Function('retur n true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasEval = detectEval();\n\n function assert(b) {\n if (!b)\n throw new Error('Assertion failed');\n };\n\n var defineProperty = Object.de fineProperty;\n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var ge tOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n function mixin(to , from) {\n var names = getOwnPropertyNames(from);\n for (var i = 0; i < n ames.length; i++) {\n var name = names[i];\n defineProperty(to, name, getOwnPropertyDescriptor(from, name));\n }\n return to;\n };\n\n functio n mixinStatics(to, from) {\n var names = getOwnPropertyNames(from);\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n switch ( name) {\n case 'arguments':\n case 'caller':\n case 'length ':\n case 'name':\n case 'prototype':\n case 'toString':\n continue;\n }\n defineProperty(to, name, getOwnPropertyDescri ptor(from, name));\n }\n return to;\n };\n\n function oneOf(object, prop ertyNames) {\n for (var i = 0; i < propertyNames.length; i++) {\n if (pr opertyNames[i] in object)\n return propertyNames[i];\n }\n }\n\n var nonEnumerableDataDescriptor = {\n value: undefined,\n configurable: true, \n enumerable: false,\n writable: true\n };\n\n function defineNonEnumer ableDataProperty(object, name, value) {\n nonEnumerableDataDescriptor.value = value;\n defineProperty(object, name, nonEnumerableDataDescriptor);\n }\n\n // Mozilla's old DOM bindings are bretty busted:\n // https://bugzilla.mozill a.org/show_bug.cgi?id=855844\n // Make sure they are create before we start mod ifying things.\n getOwnPropertyNames(window);\n\n function getWrapperConstruct or(node) {\n var nativePrototype = node.__proto__ || Object.getPrototypeOf(no de);\n var wrapperConstructor = constructorTable.get(nativePrototype);\n i f (wrapperConstructor)\n return wrapperConstructor;\n\n var parentWrappe rConstructor = getWrapperConstructor(nativePrototype);\n\n var GeneratedWrapp er = createWrapperConstructor(parentWrapperConstructor);\n registerInternal(n ativePrototype, GeneratedWrapper, node);\n\n return GeneratedWrapper;\n }\n\ n function addForwardingProperties(nativePrototype, wrapperPrototype) {\n in stallProperty(nativePrototype, wrapperPrototype, true);\n }\n\n function regis terInstanceProperties(wrapperPrototype, instanceObject) {\n installProperty(i nstanceObject, wrapperPrototype, false);\n }\n\n var isFirefox = /Firefox/.tes t(navigator.userAgent);\n\n // This is used as a fallback when getting the desc riptor fails in\n // installProperty.\n var dummyDescriptor = {\n get: func tion() {},\n set: function(v) {},\n configurable: true,\n enumerable: t rue\n };\n\n function isEventHandlerName(name) {\n return /^on[a-z]+$/.test (name);\n }\n\n function isIdentifierName(name) {\n return /^\\w[a-zA-Z_0-9 ]*$/.test(name);\n }\n\n // The name of the implementation property is intenti onally hard to\n // remember. Unfortunately, browsers are slower doing obj[expr ] than\n // obj.foo so we resort to repeat this ugly name. This ugly name is ne ver\n // used outside of this file though.\n\n function getGetter(name) {\n return hasEval && isIdentifierName(name) ?\n new Function('return this._ _impl4cf1e782hg__.' + name) :\n function() { return this.__impl4cf1e782hg __[name]; };\n }\n\n function getSetter(name) {\n return hasEval && isIdent ifierName(name) ?\n new Function('v', 'this.__impl4cf1e782hg__.' + name + ' = v') :\n function(v) { this.__impl4cf1e782hg__[name] = v; };\n }\n\n function getMethod(name) {\n return hasEval && isIdentifierName(name) ?\n new Function('return this.__impl4cf1e782hg__.' + name +\n '.apply(this.__impl4cf1e782hg__, arguments)') :\n function() {\n return this.__impl4cf1e782hg__[name].apply(\n this.__impl4cf1e 782hg__, arguments);\n };\n }\n\n function getDescriptor(source, 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 exception. \n // https://bugs.webkit.org/show_bug.cgi?id=49739\n return dummyDesc riptor;\n }\n }\n\n // Safari 8 exposes WebIDL attributes as an invalid acc essor property. Its\n // descriptor has {get: undefined, set: undefined}. We th erefore ignore the\n // shape of the descriptor and make all properties read-wr ite.\n // https://bugs.webkit.org/show_bug.cgi?id=49739\n var isBrokenSafari = function() {\n var descr = Object.getOwnPropertyDescriptor(Node.prototype, ' nodeType');\n return !!descr && 'set' in descr;\n }();\n\n function install Property(source, target, allowMethod, opt_blacklist) {\n var names = getOwnPr opertyNames(source);\n for (var i = 0; i < names.length; i++) {\n var na me = names[i];\n if (name === 'polymerBlackList_')\n continue;\n\n if (name in target)\n continue;\n\n if (source.polymerBlackList_ && source.polymerBlackList_[name])\n continue;\n\n if (isFirefox) { \n // Tickle Firefox's old bindings.\n source.__lookupGetter__(nam e);\n }\n var descriptor = getDescriptor(source, name);\n var get ter, setter;\n if (allowMethod && typeof descriptor.value === 'function') { \n target[name] = getMethod(name);\n continue;\n }\n\n v ar isEvent = isEventHandlerName(name);\n if (isEvent)\n getter = sco pe.getEventHandlerGetter(name);\n else\n getter = getGetter(name);\n \n if (descriptor.writable || descriptor.set || isBrokenSafari) {\n if (isEvent)\n setter = scope.getEventHandlerSetter(name);\n els e\n setter = getSetter(name);\n }\n\n defineProperty(target, name, {\n get: getter,\n set: setter,\n configurable: descr iptor.configurable,\n enumerable: descriptor.enumerable\n });\n } \n }\n\n /**\n * @param {Function} nativeConstructor\n * @param {Function} wrapperConstructor\n * @param {Object=} opt_instance If present, this is used to extract\n * properties from an instance object.\n */\n function reg ister(nativeConstructor, wrapperConstructor, opt_instance) {\n var nativeProt otype = nativeConstructor.prototype;\n registerInternal(nativePrototype, wrap perConstructor, opt_instance);\n mixinStatics(wrapperConstructor, nativeConst ructor);\n }\n\n function registerInternal(nativePrototype, wrapperConstructor , opt_instance) {\n var wrapperPrototype = wrapperConstructor.prototype;\n assert(constructorTable.get(nativePrototype) === undefined);\n\n constructor Table.set(nativePrototype, wrapperConstructor);\n nativePrototypeTable.set(wr apperPrototype, nativePrototype);\n\n addForwardingProperties(nativePrototype , wrapperPrototype);\n if (opt_instance)\n registerInstanceProperties(wr apperPrototype, opt_instance);\n\n defineNonEnumerableDataProperty(\n wrapperPrototype, 'constructor', wrapperConstructor);\n // Set it again. Some VMs optimizes objects that are used as prototypes.\n wrapperConstructor.prot otype = wrapperPrototype;\n }\n\n function isWrapperFor(wrapperConstructor, na tiveConstructor) {\n return constructorTable.get(nativeConstructor.prototype) ===\n wrapperConstructor;\n }\n\n /**\n * Creates a generic wrapper constructor based on |object| and its\n * constructor.\n * @param {Node} obj ect\n * @return {Function} The generated constructor.\n */\n function regis terObject(object) {\n var nativePrototype = Object.getPrototypeOf(object);\n\ n var superWrapperConstructor = getWrapperConstructor(nativePrototype);\n var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor);\n r egisterInternal(nativePrototype, GeneratedWrapper, object);\n\n return Genera tedWrapper;\n }\n\n function createWrapperConstructor(superWrapperConstructor) {\n function GeneratedWrapper(node) {\n superWrapperConstructor.call(th is, node);\n }\n var p = Object.create(superWrapperConstructor.prototype); \n p.constructor = GeneratedWrapper;\n GeneratedWrapper.prototype = p;\n\n return GeneratedWrapper;\n }\n\n function isWrapper(object) {\n return object && object.__impl4cf1e782hg__;\n }\n\n function isNative(object) {\n return !isWrapper(object);\n }\n\n /**\n * Wraps a node in a WrapperNode. If there already exists a wrapper for the\n * |node| that wrapper is returned in stead.\n * @param {Node} node\n * @return {WrapperNode}\n */\n function w rap(impl) {\n if (impl === null)\n return null;\n\n assert(isNative(i mpl));\n return impl.__wrapper8e3dd93a60__ ||\n (impl.__wrapper8e3dd93 a60__ = new (getWrapperConstructor(impl))(impl));\n }\n\n /**\n * Unwraps a wrapper and returns the node it is wrapping.\n * @param {WrapperNode} wrapper\ n * @return {Node}\n */\n function unwrap(wrapper) {\n if (wrapper === n ull)\n return null;\n assert(isWrapper(wrapper));\n return wrapper.__ impl4cf1e782hg__;\n }\n\n function unsafeUnwrap(wrapper) {\n return wrapper .__impl4cf1e782hg__;\n }\n\n function setWrapper(impl, wrapper) {\n wrapper .__impl4cf1e782hg__ = impl;\n impl.__wrapper8e3dd93a60__ = wrapper;\n }\n\n /**\n * Unwraps object if it is a wrapper.\n * @param {Object} object\n * @return {Object} The native implementation object.\n */\n function unwrapIfN eeded(object) {\n return object && isWrapper(object) ? unwrap(object) : objec t;\n }\n\n /**\n * Wraps object if it is not a wrapper.\n * @param {Object } object\n * @return {Object} The wrapper for object.\n */\n function wrapI fNeeded(object) {\n return object && !isWrapper(object) ? wrap(object) : obje ct;\n }\n\n /**\n * Overrides the current wrapper (if any) for node.\n * @ param {Node} node\n * @param {WrapperNode=} wrapper If left out the wrapper wi ll be created as\n * needed next time someone wraps the node.\n */\n fu nction rewrap(node, wrapper) {\n if (wrapper === null)\n return;\n as sert(isNative(node));\n assert(wrapper === undefined || isWrapper(wrapper));\ n node.__wrapper8e3dd93a60__ = wrapper;\n }\n\n var getterDescriptor = {\n get: undefined,\n configurable: true,\n enumerable: true\n };\n\n fun ction defineGetter(constructor, name, getter) {\n getterDescriptor.get = gett er;\n defineProperty(constructor.prototype, name, getterDescriptor);\n }\n\n function defineWrapGetter(constructor, name) {\n defineGetter(constructor, name, function() {\n return wrap(this.__impl4cf1e782hg__[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 sinc e the\n * wrapper implementation already takes care of that.\n * @param {Arr ay.<Function>} constructors\n * @parem {Array.<string>} names\n */\n functi on forwardMethodsToWrapper(constructors, names) {\n constructors.forEach(func tion(constructor) {\n names.forEach(function(name) {\n constructor.p rototype[name] = function() {\n var w = wrapIfNeeded(this);\n return w[name].apply(w, arguments);\n };\n });\n });\n }\n\n sc ope.assert = assert;\n scope.constructorTable = constructorTable;\n scope.defi neGetter = defineGetter;\n scope.defineWrapGetter = defineWrapGetter;\n scope. forwardMethodsToWrapper = forwardMethodsToWrapper;\n scope.isWrapper = isWrappe r;\n scope.isWrapperFor = isWrapperFor;\n scope.mixin = mixin;\n scope.native PrototypeTable = nativePrototypeTable;\n scope.oneOf = oneOf;\n scope.register Object = registerObject;\n scope.registerWrapper = register;\n scope.rewrap = rewrap;\n scope.setWrapper = setWrapper;\n scope.unsafeUnwrap = unsafeUnwrap;\ 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", 88 "// 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 function detectEval() { \n // Don't test for eval if we're running in a Chrome App environment.\n // We check for APIs set that only exist in a Chrome App context.\n if (typeo f chrome !== 'undefined' && chrome.app && chrome.app.runtime) {\n return fa lse;\n }\n\n // Firefox OS Apps do not allow eval. This feature detection is very hacky\n // but even if some other platform adds support for this func tion this code\n // will continue to work.\n if (navigator.getDeviceStorag e) {\n return false;\n }\n\n try {\n var f = new Function('retur n true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasEval = detectEval();\n\n function assert(b) {\n if (!b)\n throw new Error('Assertion failed');\n };\n\n var defineProperty = Object.de fineProperty;\n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var ge tOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n function mixin(to , from) {\n var names = getOwnPropertyNames(from);\n for (var i = 0; i < n ames.length; i++) {\n var name = names[i];\n defineProperty(to, name, getOwnPropertyDescriptor(from, name));\n }\n return to;\n };\n\n functio n mixinStatics(to, from) {\n var names = getOwnPropertyNames(from);\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n switch ( name) {\n case 'arguments':\n case 'caller':\n case 'length ':\n case 'name':\n case 'prototype':\n case 'toString':\n continue;\n }\n defineProperty(to, name, getOwnPropertyDescri ptor(from, name));\n }\n return to;\n };\n\n function oneOf(object, prop ertyNames) {\n for (var i = 0; i < propertyNames.length; i++) {\n if (pr opertyNames[i] in object)\n return propertyNames[i];\n }\n }\n\n var nonEnumerableDataDescriptor = {\n value: undefined,\n configurable: true, \n enumerable: false,\n writable: true\n };\n\n function defineNonEnumer ableDataProperty(object, name, value) {\n nonEnumerableDataDescriptor.value = value;\n defineProperty(object, name, nonEnumerableDataDescriptor);\n }\n\n // Mozilla's old DOM bindings are bretty busted:\n // https://bugzilla.mozill a.org/show_bug.cgi?id=855844\n // Make sure they are create before we start mod ifying things.\n getOwnPropertyNames(window);\n\n function getWrapperConstruct or(node) {\n var nativePrototype = node.__proto__ || Object.getPrototypeOf(no de);\n var wrapperConstructor = constructorTable.get(nativePrototype);\n i f (wrapperConstructor)\n return wrapperConstructor;\n\n var parentWrappe rConstructor = getWrapperConstructor(nativePrototype);\n\n var GeneratedWrapp er = createWrapperConstructor(parentWrapperConstructor);\n registerInternal(n ativePrototype, GeneratedWrapper, node);\n\n return GeneratedWrapper;\n }\n\ n function addForwardingProperties(nativePrototype, wrapperPrototype) {\n in stallProperty(nativePrototype, wrapperPrototype, true);\n }\n\n function regis terInstanceProperties(wrapperPrototype, instanceObject) {\n installProperty(i nstanceObject, wrapperPrototype, false);\n }\n\n var isFirefox = /Firefox/.tes t(navigator.userAgent);\n\n // This is used as a fallback when getting the desc riptor fails in\n // installProperty.\n var dummyDescriptor = {\n get: func tion() {},\n set: function(v) {},\n configurable: true,\n enumerable: t rue\n };\n\n function isEventHandlerName(name) {\n return /^on[a-z]+$/.test (name);\n }\n\n function isIdentifierName(name) {\n return /^\\w[a-zA-Z_0-9 ]*$/.test(name);\n }\n\n // The name of the implementation property is intenti onally hard to\n // remember. Unfortunately, browsers are slower doing obj[expr ] than\n // obj.foo so we resort to repeat this ugly name. This ugly name is ne ver\n // used outside of this file though.\n\n function getGetter(name) {\n return hasEval && isIdentifierName(name) ?\n new Function('return this._ _impl4cf1e782hg__.' + name) :\n function() { return this.__impl4cf1e782hg __[name]; };\n }\n\n function getSetter(name) {\n return hasEval && isIdent ifierName(name) ?\n new Function('v', 'this.__impl4cf1e782hg__.' + name + ' = v') :\n function(v) { this.__impl4cf1e782hg__[name] = v; };\n }\n\n function getMethod(name) {\n return hasEval && isIdentifierName(name) ?\n new Function('return this.__impl4cf1e782hg__.' + name +\n '.apply(this.__impl4cf1e782hg__, arguments)') :\n function() {\n return this.__impl4cf1e782hg__[name].apply(\n this.__impl4cf1e 782hg__, arguments);\n };\n }\n\n function getDescriptor(source, 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 exception. \n // https://bugs.webkit.org/show_bug.cgi?id=49739\n return dummyDesc riptor;\n }\n }\n\n // Safari 8 exposes WebIDL attributes as an invalid acc essor property. Its\n // descriptor has {get: undefined, set: undefined}. We th erefore ignore the\n // shape of the descriptor and make all properties read-wr ite.\n // https://bugs.webkit.org/show_bug.cgi?id=49739\n var isBrokenSafari = function() {\n var descr = Object.getOwnPropertyDescriptor(Node.prototype, ' nodeType');\n return !!descr && 'set' in descr;\n }();\n\n function install Property(source, target, allowMethod, opt_blacklist) {\n var names = getOwnPr opertyNames(source);\n for (var i = 0; i < names.length; i++) {\n var na me = names[i];\n if (name === 'polymerBlackList_')\n continue;\n\n if (name in target)\n continue;\n\n if (source.polymerBlackList_ && source.polymerBlackList_[name])\n continue;\n\n if (isFirefox) { \n // Tickle Firefox's old bindings.\n source.__lookupGetter__(nam e);\n }\n var descriptor = getDescriptor(source, name);\n var get ter, setter;\n if (allowMethod && typeof descriptor.value === 'function') { \n target[name] = getMethod(name);\n continue;\n }\n\n v ar isEvent = isEventHandlerName(name);\n if (isEvent)\n getter = sco pe.getEventHandlerGetter(name);\n else\n getter = getGetter(name);\n \n if (descriptor.writable || descriptor.set || isBrokenSafari) {\n if (isEvent)\n setter = scope.getEventHandlerSetter(name);\n els e\n setter = getSetter(name);\n }\n\n defineProperty(target, name, {\n get: getter,\n set: setter,\n configurable: descr iptor.configurable,\n enumerable: descriptor.enumerable\n });\n } \n }\n\n /**\n * @param {Function} nativeConstructor\n * @param {Function} wrapperConstructor\n * @param {Object=} opt_instance If present, this is used to extract\n * properties from an instance object.\n */\n function reg ister(nativeConstructor, wrapperConstructor, opt_instance) {\n var nativeProt otype = nativeConstructor.prototype;\n registerInternal(nativePrototype, wrap perConstructor, opt_instance);\n mixinStatics(wrapperConstructor, nativeConst ructor);\n }\n\n function registerInternal(nativePrototype, wrapperConstructor , opt_instance) {\n var wrapperPrototype = wrapperConstructor.prototype;\n assert(constructorTable.get(nativePrototype) === undefined);\n\n constructor Table.set(nativePrototype, wrapperConstructor);\n nativePrototypeTable.set(wr apperPrototype, nativePrototype);\n\n addForwardingProperties(nativePrototype , wrapperPrototype);\n if (opt_instance)\n registerInstanceProperties(wr apperPrototype, opt_instance);\n\n defineNonEnumerableDataProperty(\n wrapperPrototype, 'constructor', wrapperConstructor);\n // Set it again. Some VMs optimizes objects that are used as prototypes.\n wrapperConstructor.prot otype = wrapperPrototype;\n }\n\n function isWrapperFor(wrapperConstructor, na tiveConstructor) {\n return constructorTable.get(nativeConstructor.prototype) ===\n wrapperConstructor;\n }\n\n /**\n * Creates a generic wrapper constructor based on |object| and its\n * constructor.\n * @param {Node} obj ect\n * @return {Function} The generated constructor.\n */\n function regis terObject(object) {\n var nativePrototype = Object.getPrototypeOf(object);\n\ n var superWrapperConstructor = getWrapperConstructor(nativePrototype);\n var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor);\n r egisterInternal(nativePrototype, GeneratedWrapper, object);\n\n return Genera tedWrapper;\n }\n\n function createWrapperConstructor(superWrapperConstructor) {\n function GeneratedWrapper(node) {\n superWrapperConstructor.call(th is, node);\n }\n var p = Object.create(superWrapperConstructor.prototype); \n p.constructor = GeneratedWrapper;\n GeneratedWrapper.prototype = p;\n\n return GeneratedWrapper;\n }\n\n function isWrapper(object) {\n return object && object.__impl4cf1e782hg__;\n }\n\n function isNative(object) {\n return !isWrapper(object);\n }\n\n /**\n * Wraps a node in a WrapperNode. If there already exists a wrapper for the\n * |node| that wrapper is returned in stead.\n * @param {Node} node\n * @return {WrapperNode}\n */\n function w rap(impl) {\n if (impl === null)\n return null;\n\n assert(isNative(i mpl));\n return impl.__wrapper8e3dd93a60__ ||\n (impl.__wrapper8e3dd93 a60__ = new (getWrapperConstructor(impl))(impl));\n }\n\n /**\n * Unwraps a wrapper and returns the node it is wrapping.\n * @param {WrapperNode} wrapper\ n * @return {Node}\n */\n function unwrap(wrapper) {\n if (wrapper === n ull)\n return null;\n assert(isWrapper(wrapper));\n return wrapper.__ impl4cf1e782hg__;\n }\n\n function unsafeUnwrap(wrapper) {\n return wrapper .__impl4cf1e782hg__;\n }\n\n function setWrapper(impl, wrapper) {\n wrapper .__impl4cf1e782hg__ = impl;\n impl.__wrapper8e3dd93a60__ = wrapper;\n }\n\n /**\n * Unwraps object if it is a wrapper.\n * @param {Object} object\n * @return {Object} The native implementation object.\n */\n function unwrapIfN eeded(object) {\n return object && isWrapper(object) ? unwrap(object) : objec t;\n }\n\n /**\n * Wraps object if it is not a wrapper.\n * @param {Object } object\n * @return {Object} The wrapper for object.\n */\n function wrapI fNeeded(object) {\n return object && !isWrapper(object) ? wrap(object) : obje ct;\n }\n\n /**\n * Overrides the current wrapper (if any) for node.\n * @ param {Node} node\n * @param {WrapperNode=} wrapper If left out the wrapper wi ll be created as\n * needed next time someone wraps the node.\n */\n fu nction rewrap(node, wrapper) {\n if (wrapper === null)\n return;\n as sert(isNative(node));\n assert(wrapper === undefined || isWrapper(wrapper));\ n node.__wrapper8e3dd93a60__ = wrapper;\n }\n\n var getterDescriptor = {\n get: undefined,\n configurable: true,\n enumerable: true\n };\n\n fun ction defineGetter(constructor, name, getter) {\n getterDescriptor.get = gett er;\n defineProperty(constructor.prototype, name, getterDescriptor);\n }\n\n function defineWrapGetter(constructor, name) {\n defineGetter(constructor, name, function() {\n return wrap(this.__impl4cf1e782hg__[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 sinc e the\n * wrapper implementation already takes care of that.\n * @param {Arr ay.<Function>} constructors\n * @parem {Array.<string>} names\n */\n functi on forwardMethodsToWrapper(constructors, names) {\n constructors.forEach(func tion(constructor) {\n names.forEach(function(name) {\n constructor.p rototype[name] = function() {\n var w = wrapIfNeeded(this);\n return w[name].apply(w, arguments);\n };\n });\n });\n }\n\n sc ope.assert = assert;\n scope.constructorTable = constructorTable;\n scope.defi neGetter = defineGetter;\n scope.defineWrapGetter = defineWrapGetter;\n scope. forwardMethodsToWrapper = forwardMethodsToWrapper;\n scope.isWrapper = isWrappe r;\n scope.isWrapperFor = isWrapperFor;\n scope.mixin = mixin;\n scope.native PrototypeTable = nativePrototypeTable;\n scope.oneOf = oneOf;\n scope.register Object = registerObject;\n scope.registerWrapper = register;\n scope.rewrap = rewrap;\n scope.setWrapper = setWrapper;\n scope.unsafeUnwrap = unsafeUnwrap;\ 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",
89 "/*\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", 89 "/*\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",
90 "/*\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 (observer.scheduled_)\n return;\n\n observe r.scheduled_ = true;\n globalMutationObservers.push(observer);\n\n if (isS cheduled)\n return;\n setEndOfMicrotask(notifyObservers);\n isSchedul ed = true;\n }\n\n // http://dom.spec.whatwg.org/#mutation-observers\n functi on notifyObservers() {\n isScheduled = false;\n\n while (globalMutationObs ervers.length) {\n var notifyList = globalMutationObservers;\n globalM utationObservers = [];\n\n // Deliver changes in birth order of the Mutatio nObservers.\n notifyList.sort(function(x, y) { return x.uid_ - y.uid_; });\ n\n for (var i = 0; i < notifyList.length; i++) {\n var mo = notifyL ist[i];\n mo.scheduled_ = false;\n var queue = mo.takeRecords();\n removeTransientObserversFor(mo);\n if (queue.length) {\n mo.callback_(queue, mo);\n }\n }\n }\n }\n\n\n /**\n * @para m {string} type\n * @param {Node} target\n * @constructor\n */\n function MutationRecord(type, target) {\n this.type = type;\n this.target = target ;\n this.addedNodes = new wrappers.NodeList();\n this.removedNodes = new w rappers.NodeList();\n this.previousSibling = null;\n this.nextSibling = nu ll;\n this.attributeName = null;\n this.attributeNamespace = null;\n th is.oldValue = null;\n }\n\n /**\n * Registers transient observers to ancesto r and its ancesors for the node\n * which was removed.\n * @param {!Node} an cestor\n * @param {!Node} node\n */\n function registerTransientObservers(a ncestor, node) {\n for (; ancestor; ancestor = ancestor.parentNode) {\n var registrations = registrationsTable.get(ancestor);\n if (!registrations) \n continue;\n for (var i = 0; i < registrations.length; i++) {\n var registration = registrations[i];\n if (registration.options.subt ree)\n registration.addTransientObserver(node);\n }\n }\n }\n\ n function removeTransientObserversFor(observer) {\n for (var i = 0; i < obs erver.nodes_.length; i++) {\n var node = observer.nodes_[i];\n var reg istrations = registrationsTable.get(node);\n if (!registrations)\n r eturn;\n for (var j = 0; j < registrations.length; j++) {\n var regi stration = registrations[j];\n if (registration.observer === observer)\n registration.removeTransientObservers();\n }\n }\n }\n\n // h ttp://dom.spec.whatwg.org/#queue-a-mutation-record\n function enqueueMutation(t arget, type, data) {\n // 1.\n var interestedObservers = Object.create(nul l);\n var associatedStrings = Object.create(null);\n\n // 2.\n for (var node = target; node; node = node.parentNode) {\n // 3.\n var registra tions = registrationsTable.get(node);\n if (!registrations)\n contin ue;\n for (var j = 0; j < registrations.length; j++) {\n var registr ation = registrations[j];\n var options = registration.options;\n // 1.\n if (node !== target && !options.subtree)\n continue;\n\n // 2.\n if (type === 'attributes' && !options.attributes)\n continue;\n\n // 3. If type is \"attributes\", options's attributeFil ter is present, and\n // either options's attributeFilter does not contai n name or namespace\n // is non-null, continue.\n if (type === 'at tributes' && options.attributeFilter &&\n (data.namespace !== null || \n options.attributeFilter.indexOf(data.name) === -1)) {\n continue;\n }\n\n // 4.\n if (type === 'characterData' && ! options.characterData)\n continue;\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 either type is \"attributes\" and options 's attributeOldValue is\n // true, or type is \"characterData\" and optio ns's characterDataOldValue\n // is true, set the paired string of registe red observer's observer in\n // interested observers to oldValue.\n if (type === 'attributes' && options.attributeOldValue ||\n type == = 'characterData' && options.characterDataOldValue) {\n associatedStrin gs[observer.uid_] = data.oldValue;\n }\n }\n }\n\n // 4.\n for (var uid in interestedObservers) {\n var observer = interestedObservers [uid];\n var record = new MutationRecord(type, target);\n\n // 2.\n if ('name' in data && 'namespace' in data) {\n record.attributeName = data.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 = da ta.removedNodes;\n\n // 5.\n if (data.previousSibling)\n record .previousSibling = data.previousSibling;\n\n // 6.\n if (data.nextSibl ing)\n record.nextSibling = data.nextSibling;\n\n // 7.\n if (a ssociatedStrings[uid] !== undefined)\n record.oldValue = associatedString s[uid];\n\n // 8.\n scheduleCallback(observer);\n observer.record s_.push(record);\n }\n }\n\n var slice = Array.prototype.slice;\n\n /**\n * @param {!Object} options\n * @constructor\n */\n function MutationObser verOptions(options) {\n this.childList = !!options.childList;\n this.subtr ee = !!options.subtree;\n\n // 1. If either options' attributeOldValue or att ributeFilter is present\n // and options' attributes is omitted, set options' attributes to true.\n if (!('attributes' in options) &&\n ('attribute OldValue' in options || 'attributeFilter' in options)) {\n this.attributes = true;\n } else {\n this.attributes = !!options.attributes;\n }\n\n // 2. If options' characterDataOldValue is present and options'\n // chara cterData is omitted, set options' characterData to true.\n if ('characterData OldValue' in options && !('characterData' in options))\n this.characterData = true;\n else\n this.characterData = !!options.characterData;\n\n / / 3. & 4.\n if (!this.attributes &&\n (options.attributeOldValue || 'a ttributeFilter' in options) ||\n // 5.\n !this.characterData && op tions.characterDataOldValue) {\n throw new TypeError();\n }\n\n this. characterData = !!options.characterData;\n this.attributeOldValue = !!options .attributeOldValue;\n this.characterDataOldValue = !!options.characterDataOld Value;\n if ('attributeFilter' in options) {\n if (options.attributeFilt er == null ||\n typeof options.attributeFilter !== 'object') {\n throw new TypeError();\n }\n this.attributeFilter = slice.call(option s.attributeFilter);\n } else {\n this.attributeFilter = null;\n }\n }\n\n var uidCounter = 0;\n\n /**\n * The class that maps to the DOM Mutatio nObserver interface.\n * @param {Function} callback.\n * @constructor\n */ \n function MutationObserver(callback) {\n this.callback_ = callback;\n t his.nodes_ = [];\n this.records_ = [];\n this.uid_ = ++uidCounter;\n th is.scheduled_ = false;\n }\n\n MutationObserver.prototype = {\n constructor : MutationObserver,\n\n // http://dom.spec.whatwg.org/#dom-mutationobserver-o bserve\n observe: function(target, options) {\n target = wrapIfNeeded(ta rget);\n\n var newOptions = new MutationObserverOptions(options);\n\n // 6.\n var registration;\n var registrations = registrationsTable.get (target);\n if (!registrations)\n registrationsTable.set(target, reg istrations = []);\n\n for (var i = 0; i < registrations.length; i++) {\n if (registrations[i].observer === this) {\n registration = registr ations[i];\n // 6.1.\n registration.removeTransientObservers() ;\n // 6.2.\n registration.options = newOptions;\n }\n }\n\n // 7.\n if (!registration) {\n registration = new Re gistration(this, target, newOptions);\n registrations.push(registration); \n this.nodes_.push(target);\n }\n },\n\n // http://dom.spec.w hatwg.org/#dom-mutationobserver-disconnect\n disconnect: function() {\n this.nodes_.forEach(function(node) {\n var registrations = registrationsT able.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registration = registrations[i];\n if (registration.observer = == this) {\n registrations.splice(i, 1);\n // Each node ca n only have one registered observer associated with\n // this observe r.\n break;\n }\n }\n }, this);\n this.reco rds_ = [];\n },\n\n takeRecords: function() {\n var copyOfRecords = t his.records_;\n this.records_ = [];\n return copyOfRecords;\n }\n };\n\n /**\n * Class used to represent a registered observer.\n * @param {M utationObserver} observer\n * @param {Node} target\n * @param {MutationObser verOptions} options\n * @constructor\n */\n function Registration(observer, target, options) {\n this.observer = observer;\n this.target = target;\n this.options = options;\n this.transientObservedNodes = [];\n }\n\n Regi stration.prototype = {\n /**\n * Adds a transient observer on node. The t ransient observer gets removed\n * next time we deliver the change records.\ n * @param {Node} node\n */\n addTransientObserver: function(node) {\ n // Don't add transient observers on the target itself. We already have al l\n // the required listeners set up on the target.\n if (node === thi s.target)\n return;\n\n // Make sure we remove transient observers a t the end of microtask, even\n // if we didn't get any change records.\n scheduleCallback(this.observer);\n\n this.transientObservedNodes.push(no de);\n var registrations = registrationsTable.get(node);\n if (!regist rations)\n registrationsTable.set(node, registrations = []);\n\n // We know that registrations does not contain this because we already\n // ch ecked if node === this.target.\n registrations.push(this);\n },\n\n r emoveTransientObservers: function() {\n var transientObservedNodes = this.t ransientObservedNodes;\n this.transientObservedNodes = [];\n\n for (va r i = 0; i < transientObservedNodes.length; i++) {\n var node = transient ObservedNodes[i];\n var registrations = registrationsTable.get(node);\n for (var j = 0; j < registrations.length; j++) {\n if (registrati ons[j] === this) {\n registrations.splice(j, 1);\n // Each node can only have one registered observer associated with\n // this observer.\n break;\n }\n }\n }\n }\n };\n\n scope.enqueueMutation = enqueueMutation;\n scope.registerTransientObservers = registerTransientObservers;\n scope.wrappers.MutationObserver = MutationObserv er;\n scope.wrappers.MutationRecord = MutationRecord;\n\n})(window.ShadowDOMPol yfill);\n", 90 "/*\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() {\n if (isScheduled)\n return;\n setEndOfMicrotask(notifyO bservers);\n isScheduled = true;\n }\n\n // http://dom.spec.whatwg.org/#mut ation-observers\n function notifyObservers() {\n isScheduled = false;\n\n while (globalMutationObservers.length) {\n var notifyList = globalMutation Observers;\n globalMutationObservers = [];\n\n // Deliver changes in b irth order of the MutationObservers.\n notifyList.sort(function(x, y) { ret urn x.uid_ - y.uid_; });\n\n for (var i = 0; i < notifyList.length; i++) {\ n var mo = notifyList[i];\n var queue = mo.takeRecords();\n removeTransientObserversFor(mo);\n if (queue.length) {\n mo.cal lback_(queue, mo);\n }\n }\n }\n }\n\n\n /**\n * @param {stri ng} type\n * @param {Node} target\n * @constructor\n */\n function Mutati onRecord(type, target) {\n this.type = type;\n this.target = target;\n this.addedNodes = new wrappers.NodeList();\n this.removedNodes = new wrappers .NodeList();\n this.previousSibling = null;\n this.nextSibling = null;\n this.attributeName = null;\n this.attributeNamespace = null;\n this.oldV alue = null;\n }\n\n /**\n * Registers transient observers to ancestor and i ts ancesors for the node\n * which was removed.\n * @param {!Node} ancestor\ n * @param {!Node} node\n */\n function registerTransientObservers(ancestor , node) {\n for (; ancestor; ancestor = ancestor.parentNode) {\n var reg istrations = registrationsTable.get(ancestor);\n if (!registrations)\n continue;\n for (var i = 0; i < registrations.length; i++) {\n va r registration = registrations[i];\n if (registration.options.subtree)\n registration.addTransientObserver(node);\n }\n }\n }\n\n func tion removeTransientObserversFor(observer) {\n for (var i = 0; i < observer.n odes_.length; i++) {\n var node = observer.nodes_[i];\n var registrati ons = registrationsTable.get(node);\n if (!registrations)\n return;\ n for (var j = 0; j < registrations.length; j++) {\n var registratio n = registrations[j];\n if (registration.observer === observer)\n registration.removeTransientObservers();\n }\n }\n }\n\n // http://d om.spec.whatwg.org/#queue-a-mutation-record\n function enqueueMutation(target, type, data) {\n // 1.\n var interestedObservers = Object.create(null);\n var associatedStrings = Object.create(null);\n\n // 2.\n for (var node = target; node; node = node.parentNode) {\n // 3.\n var registrations = registrationsTable.get(node);\n if (!registrations)\n continue;\n for (var j = 0; j < registrations.length; j++) {\n var registration = registrations[j];\n var options = registration.options;\n // 1.\n if (node !== target && !options.subtree)\n continue;\n\n // 2.\n if (type === 'attributes' && !options.attributes)\n con tinue;\n\n // 3. If type is \"attributes\", options's attributeFilter is present, and\n // either options's attributeFilter does not contain name or namespace\n // is non-null, continue.\n if (type === 'attribute s' && options.attributeFilter &&\n (data.namespace !== null ||\n options.attributeFilter.indexOf(data.name) === -1)) {\n continu e;\n }\n\n // 4.\n if (type === 'characterData' && !options .characterData)\n continue;\n\n // 5.\n if (type === 'chi ldList' && !options.childList)\n continue;\n\n // 6.\n va r observer = registration.observer;\n interestedObservers[observer.uid_] = observer;\n\n // 7. If either type is \"attributes\" and options's attr ibuteOldValue is\n // true, or type is \"characterData\" and options's ch aracterDataOldValue\n // is true, set the paired string of registered obs erver's observer in\n // interested observers to oldValue.\n if (t ype === 'attributes' && options.attributeOldValue ||\n type === 'char acterData' && options.characterDataOldValue) {\n associatedStrings[obse rver.uid_] = data.oldValue;\n }\n }\n }\n\n var anyObserversEn queued = false;\n\n // 4.\n for (var uid in interestedObservers) {\n var observer = interestedObservers[uid];\n var record = new MutationRecord( type, target);\n\n // 2.\n if ('name' in data && 'namespace' in data) {\n record.attributeName = data.name;\n record.attributeNamespace = data.namespace;\n }\n\n // 3.\n if (data.addedNodes)\n r ecord.addedNodes = data.addedNodes;\n\n // 4.\n if (data.removedNodes) \n record.removedNodes = data.removedNodes;\n\n // 5.\n if (dat a.previousSibling)\n record.previousSibling = data.previousSibling;\n\n // 6.\n if (data.nextSibling)\n record.nextSibling = data.nextSi bling;\n\n // 7.\n if (associatedStrings[uid] !== undefined)\n record.oldValue = associatedStrings[uid];\n\n // 8.\n if (!observer.re cords_.length) {\n globalMutationObservers.push(observer);\n anyOb serversEnqueued = true;\n }\n observer.records_.push(record);\n }\n \n if (anyObserversEnqueued)\n scheduleCallback();\n }\n\n var slice = Array.prototype.slice;\n\n /**\n * @param {!Object} options\n * @construct or\n */\n function MutationObserverOptions(options) {\n this.childList = ! !options.childList;\n this.subtree = !!options.subtree;\n\n // 1. If eithe r 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' characterDataOldValue is present and options'\n // characterData is omitted, set options' characterDa ta 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 (!this.attributes &&\n (options.attributeOldValue || 'attributeFilter' in options) ||\n // 5. \n !this.characterData && options.characterDataOldValue) {\n throw n ew TypeError();\n }\n\n this.characterData = !!options.characterData;\n this.attributeOldValue = !!options.attributeOldValue;\n this.characterDataOl dValue = !!options.characterDataOldValue;\n if ('attributeFilter' in options) {\n if (options.attributeFilter == null ||\n typeof options.attri buteFilter !== '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 MutationObserver(callback) {\n this.callback_ = callback;\n this.nodes_ = [];\n this.records_ = [];\n this.uid_ = ++uidCounter;\n }\n\n MutationObserver.prototype = {\n constr uctor: MutationObserver,\n\n // http://dom.spec.whatwg.org/#dom-mutationobser ver-observe\n observe: function(target, options) {\n target = wrapIfNeed ed(target);\n\n var newOptions = new MutationObserverOptions(options);\n\n // 6.\n var registration;\n var registrations = registrationsTabl e.get(target);\n if (!registrations)\n registrationsTable.set(target , registrations = []);\n\n for (var i = 0; i < registrations.length; i++) { \n if (registrations[i].observer === this) {\n registration = re gistrations[i];\n // 6.1.\n registration.removeTransientObserv ers();\n // 6.2.\n registration.options = newOptions;\n }\n }\n\n // 7.\n if (!registration) {\n registration = n ew Registration(this, target, newOptions);\n registrations.push(registrat ion);\n this.nodes_.push(target);\n }\n },\n\n // http://dom.s pec.whatwg.org/#dom-mutationobserver-disconnect\n disconnect: function() {\n this.nodes_.forEach(function(node) {\n var registrations = registrat ionsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registration = registrations[i];\n if (registration.obser ver === this) {\n registrations.splice(i, 1);\n // Each no de can only have one registered observer associated with\n // this ob server.\n break;\n }\n }\n }, this);\n this .records_ = [];\n },\n\n takeRecords: function() {\n var copyOfRecord s = this.records_;\n this.records_ = [];\n return copyOfRecords;\n }\n };\n\n /**\n * Class used to represent a registered observer.\n * @par am {MutationObserver} observer\n * @param {Node} target\n * @param {Mutation ObserverOptions} options\n * @constructor\n */\n function Registration(obse rver, target, options) {\n this.observer = observer;\n this.target = targe t;\n this.options = options;\n this.transientObservedNodes = [];\n }\n\n Registration.prototype = {\n /**\n * Adds a transient observer on node. The transient observer gets removed\n * next time we deliver the change reco rds.\n * @param {Node} node\n */\n addTransientObserver: function(nod e) {\n // Don't add transient observers on the target itself. We already ha ve all\n // the required listeners set up on the target.\n if (node == = this.target)\n return;\n\n this.transientObservedNodes.push(node); \n var registrations = registrationsTable.get(node);\n if (!registrati ons)\n registrationsTable.set(node, registrations = []);\n\n // We k now that registrations does not contain this because we already\n // checke d if node === this.target.\n registrations.push(this);\n },\n\n remov eTransientObservers: function() {\n var transientObservedNodes = this.trans ientObservedNodes;\n this.transientObservedNodes = [];\n\n for (var i = 0; i < transientObservedNodes.length; i++) {\n var node = transientObse rvedNodes[i];\n var registrations = registrationsTable.get(node);\n for (var j = 0; j < registrations.length; j++) {\n if (registrations[ j] === this) {\n registrations.splice(j, 1);\n // Each nod e can only have one registered observer associated with\n // this obs erver.\n break;\n }\n }\n }\n }\n };\n\n sc ope.enqueueMutation = enqueueMutation;\n scope.registerTransientObservers = reg isterTransientObservers;\n scope.wrappers.MutationObserver = MutationObserver;\ n scope.wrappers.MutationRecord = MutationRecord;\n\n})(window.ShadowDOMPolyfil l);\n",
91 "/**\n * 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 t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n /**\n * A tr ee scope represents the root of a tree. All nodes in a tree point to\n * the s ame TreeScope object. The tree scope of a node get set the first time\n * it i s accessed or when a node is added or remove to a tree.\n *\n * The root is a Node that has no parent.\n *\n * The parent is another TreeScope. For Shad owRoots, it is the TreeScope of\n * the host of the ShadowRoot.\n *\n * @p aram {!Node} root\n * @param {TreeScope} parent\n * @constructor\n */\n f unction TreeScope(root, parent) {\n /** @type {!Node} */\n this.root = roo t;\n\n /** @type {TreeScope} */\n this.parent = parent;\n }\n\n TreeScop e.prototype = {\n get renderer() {\n if (this.root instanceof scope.wrap pers.ShadowRoot) {\n return scope.getRendererForHost(this.root.host);\n }\n return null;\n },\n\n contains: function(treeScope) {\n for (; treeScope; treeScope = treeScope.parent) {\n if (treeScope === thi s)\n return true;\n }\n return false;\n }\n };\n\n funct ion setTreeScope(node, treeScope) {\n if (node.treeScope_ !== treeScope) {\n node.treeScope_ = treeScope;\n for (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) {\n sr.treeScope_.parent = treeScope;\n }\n for (var child = node.firstChild; child; child = child.nextSibling) {\n setTreeScope(child, treeScope);\n }\n }\n }\n\n function getTreeScope (node) {\n if (node instanceof scope.wrappers.Window) {\n debugger;\n }\n\n if (node.treeScope_)\n return node.treeScope_;\n var parent = node.parentNode;\n var treeScope;\n if (parent)\n treeScope = getTree Scope(parent);\n else\n treeScope = new TreeScope(node, null);\n retu rn node.treeScope_ = treeScope;\n }\n\n scope.TreeScope = TreeScope;\n scope. getTreeScope = getTreeScope;\n scope.setTreeScope = setTreeScope;\n\n})(window. ShadowDOMPolyfill);\n", 91 "/**\n * 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 t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n /**\n * A tr ee scope represents the root of a tree. All nodes in a tree point to\n * the s ame TreeScope object. The tree scope of a node get set the first time\n * it i s accessed or when a node is added or remove to a tree.\n *\n * The root is a Node that has no parent.\n *\n * The parent is another TreeScope. For Shad owRoots, it is the TreeScope of\n * the host of the ShadowRoot.\n *\n * @p aram {!Node} root\n * @param {TreeScope} parent\n * @constructor\n */\n f unction TreeScope(root, parent) {\n /** @type {!Node} */\n this.root = roo t;\n\n /** @type {TreeScope} */\n this.parent = parent;\n }\n\n TreeScop e.prototype = {\n get renderer() {\n if (this.root instanceof scope.wrap pers.ShadowRoot) {\n return scope.getRendererForHost(this.root.host);\n }\n return null;\n },\n\n contains: function(treeScope) {\n for (; treeScope; treeScope = treeScope.parent) {\n if (treeScope === thi s)\n return true;\n }\n return false;\n }\n };\n\n funct ion setTreeScope(node, treeScope) {\n if (node.treeScope_ !== treeScope) {\n node.treeScope_ = treeScope;\n for (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) {\n sr.treeScope_.parent = treeScope;\n }\n for (var child = node.firstChild; child; child = child.nextSibling) {\n setTreeScope(child, treeScope);\n }\n }\n }\n\n function getTreeScope (node) {\n if (node instanceof scope.wrappers.Window) {\n debugger;\n }\n\n if (node.treeScope_)\n return node.treeScope_;\n var parent = node.parentNode;\n var treeScope;\n if (parent)\n treeScope = getTree Scope(parent);\n else\n treeScope = new TreeScope(node, null);\n retu rn node.treeScope_ = treeScope;\n }\n\n scope.TreeScope = TreeScope;\n scope. getTreeScope = getTreeScope;\n scope.setTreeScope = setTreeScope;\n\n})(window. ShadowDOMPolyfill);\n",
92 "// 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 getTreeScope = scope.getTreeScope;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n va r setWrapper = scope.setWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n va r unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers = scope.wrapp ers;\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 WeakMap();\n var currentTargetTable = new WeakMap();\n var relatedTargetTable = new WeakMap();\n var eventPhaseTable = new WeakMap();\n var stopPropagationTable = new WeakMap();\n var stopImmedi atePropagationTable = new WeakMap();\n var eventHandlersTable = new WeakMap();\ n var eventPathTable = new WeakMap();\n\n function isShadowRoot(node) {\n r eturn node instanceof wrappers.ShadowRoot;\n }\n\n function rootOfNode(node) { \n return getTreeScope(node).root;\n }\n\n // http://w3c.github.io/webcompo nents/spec/shadow/#event-paths\n function getEventPath(node, event) {\n var path = [];\n var current = node;\n path.push(current);\n while (current ) {\n // 4.1.\n var destinationInsertionPoints = getDestinationInserti onPoints(current);\n if (destinationInsertionPoints && destinationInsertion Points.length > 0) {\n // 4.1.1\n for (var i = 0; i < destinationI nsertionPoints.length; i++) {\n var insertionPoint = destinationInserti onPoints[i];\n // 4.1.1.1\n if (isShadowInsertionPoint(inserti onPoint)) {\n var shadowRoot = rootOfNode(insertionPoint);\n // 4.1.1.1.2\n var olderShadowRoot = shadowRoot.olderShadowRoot;\n if (olderShadowRoot)\n path.push(olderShadowRoot);\n }\n\n // 4.1.1.2\n path.push(insertionPoint);\n }\n\n // 4.1.2\n current = destinationInsertionPoints[\n destinationInsertionPoints.length - 1];\n\n // 4.2\n } else {\n if (isShadowRoot(current)) {\n if (inSameTree(node, current) && even tMustBeStopped(event)) {\n // Stop this algorithm\n break; \n }\n current = current.host;\n path.push(current);\ n\n // 4.2.2\n } else {\n current = current.parentNode;\n if (current)\n path.push(current);\n }\n }\n }\n\n return path;\n }\n\n // http://w3c.github.io/webcomponents/spec/shad ow/#dfn-events-always-stopped\n function eventMustBeStopped(event) {\n if (! event)\n return false;\n\n switch (event.type) {\n case 'abort':\n case 'error':\n case 'select':\n case 'change':\n case 'load ':\n case 'reset':\n case 'resize':\n case 'scroll':\n case 'selectstart':\n return true;\n }\n return false;\n }\n\n // http ://w3c.github.io/webcomponents/spec/shadow/#dfn-shadow-insertion-point\n functi on isShadowInsertionPoint(node) {\n return node instanceof HTMLShadowElement; \n // and make sure that there are no shadow precing this?\n // and that t here is no content ancestor?\n }\n\n function getDestinationInsertionPoints(no de) {\n return scope.getDestinationInsertionPoints(node);\n }\n\n // http:/ /w3c.github.io/webcomponents/spec/shadow/#event-retargeting\n function eventRet argetting(path, currentTarget) {\n if (path.length === 0)\n return curre ntTarget;\n\n // The currentTarget might be the window object. Use its docume nt for the\n // purpose of finding the retargetted node.\n if (currentTarg et instanceof wrappers.Window)\n currentTarget = currentTarget.document;\n\ n var currentTargetTree = getTreeScope(currentTarget);\n var originalTarge t = path[0];\n var originalTargetTree = getTreeScope(originalTarget);\n va r relativeTargetTree =\n lowestCommonInclusiveAncestor(currentTargetTree, originalTargetTree);\n\n for (var i = 0; i < path.length; i++) {\n var node = path[i];\n if (getTreeScope(node) === relativeTargetTree)\n r eturn node;\n }\n\n return path[path.length - 1];\n }\n\n function getTr eeScopeAncestors(treeScope) {\n var ancestors = [];\n for (;treeScope; tre eScope = treeScope.parent) {\n ancestors.push(treeScope);\n }\n retur n ancestors;\n }\n\n function lowestCommonInclusiveAncestor(tsA, tsB) {\n v ar ancestorsA = getTreeScopeAncestors(tsA);\n var ancestorsB = getTreeScopeAn cestors(tsB);\n\n var result = null;\n while (ancestorsA.length > 0 && anc estorsB.length > 0) {\n var a = ancestorsA.pop();\n var b = ancestorsB .pop();\n if (a === b)\n result = a;\n else\n break;\n }\n return result;\n }\n\n function getTreeScopeRoot(ts) {\n if (!ts.p arent)\n return ts;\n return getTreeScopeRoot(ts.parent);\n }\n\n func tion relatedTargetResolution(event, currentTarget, relatedTarget) {\n // In c ase the current target is a window use its document for the purpose\n // of r etargetting the related target.\n if (currentTarget instanceof wrappers.Windo w)\n currentTarget = currentTarget.document;\n\n var currentTargetTree = getTreeScope(currentTarget);\n var relatedTargetTree = getTreeScope(relatedT arget);\n\n var relatedTargetEventPath = getEventPath(relatedTarget, event);\ n\n var lowestCommonAncestorTree;\n\n // 4\n var lowestCommonAncestorTr ee =\n lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree );\n\n // 5\n if (!lowestCommonAncestorTree)\n lowestCommonAncestorTr ee = relatedTargetTree.root;\n\n // 6\n for (var commonAncestorTree = lowe stCommonAncestorTree;\n commonAncestorTree;\n commonAncestorTree = commonAncestorTree.parent) {\n // 6.1\n var adjustedRelatedTarget;\ n for (var i = 0; i < relatedTargetEventPath.length; i++) {\n var no de = relatedTargetEventPath[i];\n if (getTreeScope(node) === commonAncest orTree)\n return node;\n }\n }\n\n return null;\n }\n\n fu nction inSameTree(a, b) {\n return getTreeScope(a) === getTreeScope(b);\n }\ n\n var NONE = 0;\n var CAPTURING_PHASE = 1;\n var AT_TARGET = 2;\n var BUBB LING_PHASE = 3;\n\n // pendingError is used to rethrow the first error we got d uring an event\n // dispatch. The browser actually reports all errors but to do that we would\n // need to rethrow the error asynchronously.\n var pendingErr or;\n\n function dispatchOriginalEvent(originalEvent) {\n // Make sure this event is only dispatched once.\n if (handledEventsTable.get(originalEvent))\n return;\n handledEventsTable.set(originalEvent, true);\n dispatchEve nt(wrap(originalEvent), wrap(originalEvent.target));\n if (pendingError) {\n var err = pendingError;\n pendingError = null;\n throw err;\n }\n }\n\n\n function isLoadLikeEvent(event) {\n switch (event.type) {\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html #events-and-the-window-object\n case 'load':\n // http://www.whatwg.or g/specs/web-apps/current-work/multipage/browsers.html#unloading-documents\n case 'beforeunload':\n case 'unload':\n return true;\n }\n re turn false;\n }\n\n function dispatchEvent(event, originalWrapperTarget) {\n if (currentlyDispatchingEvents.get(event))\n throw new Error('InvalidStat eError');\n\n currentlyDispatchingEvents.set(event, true);\n\n // Render t o ensure that the event path is correct.\n scope.renderAllPending();\n var eventPath;\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipag e/webappapis.html#events-and-the-window-object\n // All events dispatched on Nodes with a default view, except load events,\n // should propagate to the W indow.\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the -end.html#the-end\n var overrideTarget;\n var win;\n\n // Should really be not cancelable too but since Firefox has a bug there\n // we skip that ch eck.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=999456\n if (isLoad LikeEvent(event) && !event.bubbles) {\n var doc = originalWrapperTarget;\n if (doc instanceof wrappers.Document && (win = doc.defaultView)) {\n overrideTarget = doc;\n eventPath = [];\n }\n }\n\n if (!even tPath) {\n if (originalWrapperTarget instanceof wrappers.Window) {\n win = originalWrapperTarget;\n eventPath = [];\n } else {\n eventPath = getEventPath(originalWrapperTarget, event);\n\n if (!isLoadLi keEvent(event)) {\n var doc = eventPath[eventPath.length - 1];\n if (doc instanceof wrappers.Document)\n win = doc.defaultView;\n }\n }\n }\n\n eventPathTable.set(event, eventPath);\n\n if ( dispatchCapturing(event, eventPath, win, overrideTarget)) {\n if (dispatchA tTarget(event, eventPath, win, overrideTarget)) {\n dispatchBubbling(even t, eventPath, win, overrideTarget);\n }\n }\n\n eventPhaseTable.set(e vent, NONE);\n currentTargetTable.delete(event, null);\n currentlyDispatch ingEvents.delete(event);\n\n return event.defaultPrevented;\n }\n\n functio n dispatchCapturing(event, eventPath, win, overrideTarget) {\n var phase = CA PTURING_PHASE;\n\n if (win) {\n if (!invoke(win, event, phase, eventPath , overrideTarget))\n return false;\n }\n\n for (var i = eventPath.l ength - 1; i > 0; i--) {\n if (!invoke(eventPath[i], event, phase, eventPat h, overrideTarget))\n return false;\n }\n\n return true;\n }\n\n function dispatchAtTarget(event, eventPath, win, overrideTarget) {\n var phas e = AT_TARGET;\n var currentTarget = eventPath[0] || win;\n return invoke( currentTarget, event, phase, eventPath, overrideTarget);\n }\n\n function disp atchBubbling(event, eventPath, win, overrideTarget) {\n var phase = BUBBLING_ PHASE;\n for (var i = 1; i < eventPath.length; i++) {\n if (!invoke(even tPath[i], event, phase, eventPath, overrideTarget))\n return;\n }\n\n if (win && eventPath.length > 0) {\n invoke(win, event, phase, eventPath , overrideTarget);\n }\n }\n\n function invoke(currentTarget, event, phase, eventPath, overrideTarget) {\n var listeners = listenersTable.get(currentTar get);\n if (!listeners)\n return true;\n\n var target = overrideTarge t || eventRetargetting(eventPath, currentTarget);\n\n if (target === currentT arget) {\n if (phase === CAPTURING_PHASE)\n return true;\n\n if (phase === BUBBLING_PHASE)\n phase = AT_TARGET;\n\n } else if (phase === BUBBLING_PHASE && !event.bubbles) {\n return true;\n }\n\n if (' relatedTarget' in event) {\n var originalEvent = unwrap(event);\n var unwrappedRelatedTarget = originalEvent.relatedTarget;\n\n // X-Tag sets rel atedTarget on a CustomEvent. If they do that there is no\n // way to have r elatedTarget return the adjusted target but worse is that\n // the original Event might not have a relatedTarget so we hit an assert\n // when we try t o wrap it.\n if (unwrappedRelatedTarget) {\n // In IE we can get obj ects that are not EventTargets at this point.\n // Safari does not have a n EventTarget interface so revert to checking\n // for addEventListener a s an approximation.\n if (unwrappedRelatedTarget instanceof Object &&\n unwrappedRelatedTarget.addEventListener) {\n var relatedTarge t = wrap(unwrappedRelatedTarget);\n\n var adjusted =\n rel atedTargetResolution(event, currentTarget, relatedTarget);\n if (adjust ed === target)\n return true;\n } else {\n adjusted = null;\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 currentTarget Table.set(event, currentTarget);\n\n // Keep track of the invoke depth so tha t we only clean up the removed\n // listeners if we are in the outermost invo ke.\n listeners.depth++;\n\n for (var i = 0, len = listeners.length; i < l en; i++) {\n var listener = listeners[i];\n if (listener.removed) {\n anyRemoved = true;\n continue;\n }\n\n if (listener.type !== type ||\n !listener.capture && phase === CAPTURING_PHASE ||\n listener.capture && phase === BUBBLING_PHASE) {\n continue;\n } \n\n try {\n if (typeof listener.handler === 'function')\n listener.handler.call(currentTarget, event);\n else\n listener.h andler.handleEvent(event);\n\n if (stopImmediatePropagationTable.get(even t))\n return false;\n\n } catch (ex) {\n if (!pendingError) \n pendingError = ex;\n }\n }\n\n listeners.depth--;\n\n if (anyRemoved && listeners.depth === 0) {\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 th is.capture = Boolean(capture);\n }\n Listener.prototype = {\n equals: funct ion(that) {\n return this.handler === that.handler && this.type === that.ty pe &&\n this.capture === that.capture;\n },\n get removed() {\n return this.handler === null;\n },\n remove: function() {\n this. handler = null;\n }\n };\n\n var OriginalEvent = window.Event;\n OriginalE vent.prototype.polymerBlackList_ = {\n returnValue: true,\n // TODO(arv): keyLocation is part of KeyboardEvent but Firefox does not\n // support constr uctable KeyboardEvent so we keep it here for now.\n keyLocation: true\n };\n \n /**\n * Creates a new Event wrapper or wraps an existin native Event objec t.\n * @param {string|Event} type\n * @param {Object=} options\n * @constr uctor\n */\n function Event(type, options) {\n if (type instanceof Origina lEvent) {\n var impl = type;\n // In browsers that do not correctly su pport BeforeUnloadEvent we get to\n // the generic Event wrapper but we sti ll want to ensure we create a\n // BeforeUnloadEvent. Since BeforeUnloadEve nt calls super, we need to\n // prevent reentrancty.\n if (!OriginalBe foreUnloadEvent && impl.type === 'beforeunload' &&\n !(this instanceof BeforeUnloadEvent)) {\n return new BeforeUnloadEvent(impl);\n }\n setWrapper(impl, this);\n } else {\n return wrap(constructEvent(Origi nalEvent, 'Event', type, options));\n }\n }\n Event.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 eve ntPath = eventPathTable.get(this);\n if (!eventPath)\n return [];\n // TODO(arv): Event path should contain window.\n return eventPath.sli ce();\n },\n stopPropagation: function() {\n stopPropagationTable.set (this, true);\n },\n stopImmediatePropagation: function() {\n stopPro pagationTable.set(this, true);\n stopImmediatePropagationTable.set(this, tr ue);\n }\n };\n registerWrapper(OriginalEvent, Event, document.createEvent( 'Event'));\n\n function unwrapOptions(options) {\n if (!options || !options. relatedTarget)\n return options;\n return Object.create(options, {\n relatedTarget: {value: unwrap(options.relatedTarget)}\n });\n }\n\n funct ion registerGenericEvent(name, SuperEvent, prototype) {\n var OriginalEvent = window[name];\n var GenericEvent = function(type, options) {\n if (type instanceof OriginalEvent)\n setWrapper(type, this);\n else\n return wrap(constructEvent(OriginalEvent, name, type, options));\n };\n G enericEvent.prototype = Object.create(SuperEvent.prototype);\n if (prototype) \n mixin(GenericEvent.prototype, prototype);\n if (OriginalEvent) {\n // - Old versions of Safari fails on new FocusEvent (and others?).\n // - IE does not support event constructors.\n // - createEvent('FocusEvent') throws in Firefox.\n // => Try the best practice solution first and fallbac k to the old way\n // if needed.\n try {\n registerWrapper(Orig inalEvent, GenericEvent, new OriginalEvent('temp'));\n } catch (ex) {\n registerWrapper(OriginalEvent, GenericEvent,\n docume nt.createEvent(name));\n }\n }\n return GenericEvent;\n }\n\n var U IEvent = registerGenericEvent('UIEvent', Event);\n var CustomEvent = registerGe nericEvent('CustomEvent', Event);\n\n var relatedTargetProto = {\n get relat edTarget() {\n var relatedTarget = relatedTargetTable.get(this);\n // relatedTarget can be null.\n if (relatedTarget !== undefined)\n retu rn relatedTarget;\n return wrap(unwrap(this).relatedTarget);\n }\n };\n \n function getInitFunction(name, relatedTargetIndex) {\n return function() {\n arguments[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);\ n var impl = unwrap(this);\n impl[name].apply(impl, arguments);\n } ;\n }\n\n var mouseEventProto = mixin({\n initMouseEvent: getInitFunction(' initMouseEvent', 14)\n }, relatedTargetProto);\n\n var focusEventProto = mixin ({\n initFocusEvent: getInitFunction('initFocusEvent', 5)\n }, relatedTarget Proto);\n\n var MouseEvent = registerGenericEvent('MouseEvent', UIEvent, mouseE ventProto);\n var FocusEvent = registerGenericEvent('FocusEvent', UIEvent, focu sEventProto);\n\n // In case the browser does not support event constructors we polyfill that\n // by calling `createEvent('Foo')` and `initFooEvent` where th e arguments to\n // `initFooEvent` are derived from the registered default even t init dict.\n var defaultInitDicts = Object.create(null);\n\n var supportsEve ntConstructors = (function() {\n try {\n new window.FocusEvent('focus'); \n } catch (ex) {\n return false;\n }\n return true;\n })();\n\n /**\n * Constructs a new native event.\n */\n function constructEvent(Orig inalEvent, name, type, options) {\n if (supportsEventConstructors)\n ret urn new OriginalEvent(type, unwrapOptions(options));\n\n // Create the argume nts from the default dictionary.\n var event = unwrap(document.createEvent(na me));\n var defaultDict = defaultInitDicts[name];\n var args = [type];\n Object.keys(defaultDict).forEach(function(key) {\n var v = options != nul l && key in options ?\n options[key] : defaultDict[key];\n if (key === 'relatedTarget')\n v = unwrap(v);\n args.push(v);\n });\n event['init' + name].apply(event, args);\n return event;\n }\n\n if (!supp ortsEventConstructors) {\n var configureEventConstructor = function(name, ini tDict, superName) {\n if (superName) {\n var superDict = defaultInit Dicts[superName];\n initDict = mixin(mixin({}, superDict), initDict);\n }\n\n defaultInitDicts[name] = initDict;\n };\n\n // The order of the default event init dictionary keys is important, the\n // arguments to i nitFooEvent is derived from that.\n configureEventConstructor('Event', {bubbl es: false, cancelable: false});\n configureEventConstructor('CustomEvent', {d etail: null}, 'Event');\n configureEventConstructor('UIEvent', {view: null, d etail: 0}, 'Event');\n configureEventConstructor('MouseEvent', {\n scree nX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n button: 0,\n relatedTarget: null\n }, 'UIEvent');\n configureEvent Constructor('FocusEvent', {relatedTarget: null}, 'UIEvent');\n }\n\n // Safari 7 does not yet have BeforeUnloadEvent.\n // https://bugs.webkit.org/show_bug.c gi?id=120849\n var OriginalBeforeUnloadEvent = window.BeforeUnloadEvent;\n\n f unction BeforeUnloadEvent(impl) {\n Event.call(this, impl);\n }\n BeforeUnl oadEvent.prototype = Object.create(Event.prototype);\n mixin(BeforeUnloadEvent. prototype, {\n get returnValue() {\n return unsafeUnwrap(this).returnVal ue;\n },\n set returnValue(v) {\n unsafeUnwrap(this).returnValue = v; \n }\n });\n\n if (OriginalBeforeUnloadEvent)\n registerWrapper(Original BeforeUnloadEvent, BeforeUnloadEvent);\n\n function isValidListener(fun) {\n if (typeof fun === 'function')\n return true;\n return fun && fun.handl eEvent;\n }\n\n function isMutationEvent(type) {\n switch (type) {\n c ase 'DOMAttrModified':\n case 'DOMAttributeNameChanged':\n case 'DOMCh aracterDataModified':\n case 'DOMElementNameChanged':\n case 'DOMNodeI nserted':\n case 'DOMNodeInsertedIntoDocument':\n case 'DOMNodeRemoved ':\n case 'DOMNodeRemovedFromDocument':\n case 'DOMSubtreeModified':\n return true;\n }\n return false;\n }\n\n var OriginalEventTarget = window.EventTarget;\n\n /**\n * This represents a wrapper for an EventTarg et.\n * @param {!EventTarget} impl The original event target.\n * @construct or\n */\n function EventTarget(impl) {\n setWrapper(impl, this);\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 ' addEventListener',\n 'removeEventListener',\n 'dispatchEvent'\n ];\n\n [ Node, 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(wra pper) {\n if (wrapper instanceof wrappers.ShadowRoot)\n wrapper = wrappe r.host;\n return unwrap(wrapper);\n }\n\n EventTarget.prototype = {\n ad dEventListener: function(type, fun, capture) {\n if (!isValidListener(fun) || isMutationEvent(type))\n return;\n\n var listener = new Listener( type, fun, capture);\n var listeners = listenersTable.get(this);\n if (!listeners) {\n listeners = [];\n listeners.depth = 0;\n l istenersTable.set(this, listeners);\n } else {\n // Might have a dup licate.\n for (var i = 0; i < listeners.length; i++) {\n if (lis tener.equals(listeners[i]))\n return;\n }\n }\n\n li steners.push(listener);\n\n var target = getTargetToListenAt(this);\n target.addEventListener_(type, dispatchOriginalEvent, true);\n },\n remove EventListener: function(type, fun, capture) {\n capture = Boolean(capture); \n var listeners = listenersTable.get(this);\n if (!listeners)\n return;\n var count = 0, found = false;\n for (var i = 0; i < listen ers.length; i++) {\n if (listeners[i].type === type && listeners[i].captu re === capture) {\n count++;\n if (listeners[i].handler === fu n) {\n found = true;\n listeners[i].remove();\n } \n }\n }\n\n if (found && count === 1) {\n var target = getTargetToListenAt(this);\n target.removeEventListener_(type, dispatchOr iginalEvent, 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 then there are no events that will trigger and\n // listeners in the non composed tree that are part of the event path are\n // not notified.\n //\n // If we find out that there are no listen ers in the composed tree we add\n // a temporary listener to the target whi ch makes us get called back even\n // in that case.\n\n var nativeEven t = unwrap(event);\n var eventType = nativeEvent.type;\n\n // Allow di spatching the same event again. This is safe because if user\n // code call s this during an existing dispatch of the same event the\n // native dispat chEvent throws (that is required by the spec).\n handledEventsTable.set(nat iveEvent, false);\n\n // Force rendering since we prefer native dispatch an d that works on the\n // composed tree.\n scope.renderAllPending();\n\ n var tempListener;\n if (!hasListenerInAncestors(this, eventType)) {\ n tempListener = function() {};\n this.addEventListener(eventType, tempListener, true);\n }\n\n try {\n return unwrap(this).dispa tchEvent_(nativeEvent);\n } finally {\n if (tempListener)\n this.removeEventListener(eventType, 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].removed && listeners[i].type === type)\n re turn true;\n }\n }\n return false;\n }\n\n function hasListenerInAn cestors(target, type) {\n for (var node = unwrap(target); node; node = node.p arentNode) {\n if (hasListener(wrap(node), type))\n return true;\n }\n return false;\n }\n\n if (OriginalEventTarget)\n registerWrapper(O riginalEventTarget, EventTarget);\n\n function wrapEventTargetMethods(construct ors) {\n forwardMethodsToWrapper(constructors, methodNames);\n }\n\n var or iginalElementFromPoint = document.elementFromPoint;\n\n function elementFromPoi nt(self, document, x, y) {\n scope.renderAllPending();\n\n var element =\n wrap(originalElementFromPoint.call(unsafeUnwrap(document), x, y));\n if (!element)\n return null;\n var path = getEventPath(element, null);\n \n // scope the path to this TreeScope\n var idx = path.lastIndexOf(self); \n if (idx == -1)\n return null;\n else\n path = path.slice(0, i dx);\n\n // TODO(dfreedm): pass idx to eventRetargetting to avoid array copy\ n return eventRetargetting(path, self);\n }\n\n /**\n * Returns a functio n that is to be used as a getter for `onfoo` properties.\n * @param {string} n ame\n * @return {Function}\n */\n function getEventHandlerGetter(name) {\n return function() {\n var inlineEventHandlers = eventHandlersTable.get(t his);\n return inlineEventHandlers && 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 {Function}\n */\n function getEventHandlerSetter( name) {\n var eventType = name.slice(2);\n return function(value) {\n var inlineEventHandlers = eventHandlersTable.get(this);\n if (!inlineEvent Handlers) {\n inlineEventHandlers = Object.create(null);\n eventHa ndlersTable.set(this, inlineEventHandlers);\n }\n\n var old = inlineEv entHandlers[name];\n if (old)\n this.removeEventListener(eventType, old.wrapped, false);\n\n if (typeof value === 'function') {\n var wr apped = function(e) {\n var rv = value.call(this, e);\n if (rv === false)\n e.preventDefault();\n else if (name === 'onbef oreunload' && typeof rv === 'string')\n e.returnValue = rv;\n // mouseover uses true for preventDefault but preventDefault for\n // mouseover is ignored by browsers these day.\n };\n\n this.addEven tListener(eventType, wrapped, false);\n inlineEventHandlers[name] = {\n value: value,\n wrapped: wrapped\n };\n }\n };\n }\n\n scope.elementFromPoint = elementFromPoint;\n scope.getEventHandlerGett er = getEventHandlerGetter;\n scope.getEventHandlerSetter = getEventHandlerSett er;\n scope.wrapEventTargetMethods = wrapEventTargetMethods;\n scope.wrappers. BeforeUnloadEvent = BeforeUnloadEvent;\n scope.wrappers.CustomEvent = CustomEve nt;\n scope.wrappers.Event = Event;\n scope.wrappers.EventTarget = EventTarget ;\n scope.wrappers.FocusEvent = FocusEvent;\n scope.wrappers.MouseEvent = Mous eEvent;\n scope.wrappers.UIEvent = UIEvent;\n\n})(window.ShadowDOMPolyfill);\n" , 92 "// 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 getTreeScope = scope.getTreeScope;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n va r setWrapper = scope.setWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n va r unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers = scope.wrapp ers;\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 WeakMap();\n var currentTargetTable = new WeakMap();\n var relatedTargetTable = new WeakMap();\n var eventPhaseTable = new WeakMap();\n var stopPropagationTable = new WeakMap();\n var stopImmedi atePropagationTable = new WeakMap();\n var eventHandlersTable = new WeakMap();\ n var eventPathTable = new WeakMap();\n\n function isShadowRoot(node) {\n r eturn node instanceof wrappers.ShadowRoot;\n }\n\n function rootOfNode(node) { \n return getTreeScope(node).root;\n }\n\n // http://w3c.github.io/webcompo nents/spec/shadow/#event-paths\n function getEventPath(node, event) {\n var path = [];\n var current = node;\n path.push(current);\n while (current ) {\n // 4.1.\n var destinationInsertionPoints = getDestinationInserti onPoints(current);\n if (destinationInsertionPoints && destinationInsertion Points.length > 0) {\n // 4.1.1\n for (var i = 0; i < destinationI nsertionPoints.length; i++) {\n var insertionPoint = destinationInserti onPoints[i];\n // 4.1.1.1\n if (isShadowInsertionPoint(inserti onPoint)) {\n var shadowRoot = rootOfNode(insertionPoint);\n // 4.1.1.1.2\n var olderShadowRoot = shadowRoot.olderShadowRoot;\n if (olderShadowRoot)\n path.push(olderShadowRoot);\n }\n\n // 4.1.1.2\n path.push(insertionPoint);\n }\n\n // 4.1.2\n current = destinationInsertionPoints[\n destinationInsertionPoints.length - 1];\n\n // 4.2\n } else {\n if (isShadowRoot(current)) {\n if (inSameTree(node, current) && even tMustBeStopped(event)) {\n // Stop this algorithm\n break; \n }\n current = current.host;\n path.push(current);\ n\n // 4.2.2\n } else {\n current = current.parentNode;\n if (current)\n path.push(current);\n }\n }\n }\n\n return path;\n }\n\n // http://w3c.github.io/webcomponents/spec/shad ow/#dfn-events-always-stopped\n function eventMustBeStopped(event) {\n if (! event)\n return false;\n\n switch (event.type) {\n case 'abort':\n case 'error':\n case 'select':\n case 'change':\n case 'load ':\n case 'reset':\n case 'resize':\n case 'scroll':\n case 'selectstart':\n return true;\n }\n return false;\n }\n\n // http ://w3c.github.io/webcomponents/spec/shadow/#dfn-shadow-insertion-point\n functi on isShadowInsertionPoint(node) {\n return node instanceof HTMLShadowElement; \n // and make sure that there are no shadow precing this?\n // and that t here is no content ancestor?\n }\n\n function getDestinationInsertionPoints(no de) {\n return scope.getDestinationInsertionPoints(node);\n }\n\n // http:/ /w3c.github.io/webcomponents/spec/shadow/#event-retargeting\n function eventRet argetting(path, currentTarget) {\n if (path.length === 0)\n return curre ntTarget;\n\n // The currentTarget might be the window object. Use its docume nt for the\n // purpose of finding the retargetted node.\n if (currentTarg et instanceof wrappers.Window)\n currentTarget = currentTarget.document;\n\ n var currentTargetTree = getTreeScope(currentTarget);\n var originalTarge t = path[0];\n var originalTargetTree = getTreeScope(originalTarget);\n va r relativeTargetTree =\n lowestCommonInclusiveAncestor(currentTargetTree, originalTargetTree);\n\n for (var i = 0; i < path.length; i++) {\n var node = path[i];\n if (getTreeScope(node) === relativeTargetTree)\n r eturn node;\n }\n\n return path[path.length - 1];\n }\n\n function getTr eeScopeAncestors(treeScope) {\n var ancestors = [];\n for (;treeScope; tre eScope = treeScope.parent) {\n ancestors.push(treeScope);\n }\n retur n ancestors;\n }\n\n function lowestCommonInclusiveAncestor(tsA, tsB) {\n v ar ancestorsA = getTreeScopeAncestors(tsA);\n var ancestorsB = getTreeScopeAn cestors(tsB);\n\n var result = null;\n while (ancestorsA.length > 0 && anc estorsB.length > 0) {\n var a = ancestorsA.pop();\n var b = ancestorsB .pop();\n if (a === b)\n result = a;\n else\n break;\n }\n return result;\n }\n\n function getTreeScopeRoot(ts) {\n if (!ts.p arent)\n return ts;\n return getTreeScopeRoot(ts.parent);\n }\n\n func tion relatedTargetResolution(event, currentTarget, relatedTarget) {\n // In c ase the current target is a window use its document for the purpose\n // of r etargetting the related target.\n if (currentTarget instanceof wrappers.Windo w)\n currentTarget = currentTarget.document;\n\n var currentTargetTree = getTreeScope(currentTarget);\n var relatedTargetTree = getTreeScope(relatedT arget);\n\n var relatedTargetEventPath = getEventPath(relatedTarget, event);\ n\n var lowestCommonAncestorTree;\n\n // 4\n var lowestCommonAncestorTr ee =\n lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree );\n\n // 5\n if (!lowestCommonAncestorTree)\n lowestCommonAncestorTr ee = relatedTargetTree.root;\n\n // 6\n for (var commonAncestorTree = lowe stCommonAncestorTree;\n commonAncestorTree;\n commonAncestorTree = commonAncestorTree.parent) {\n // 6.1\n var adjustedRelatedTarget;\ n for (var i = 0; i < relatedTargetEventPath.length; i++) {\n var no de = relatedTargetEventPath[i];\n if (getTreeScope(node) === commonAncest orTree)\n return node;\n }\n }\n\n return null;\n }\n\n fu nction inSameTree(a, b) {\n return getTreeScope(a) === getTreeScope(b);\n }\ n\n var NONE = 0;\n var CAPTURING_PHASE = 1;\n var AT_TARGET = 2;\n var BUBB LING_PHASE = 3;\n\n // pendingError is used to rethrow the first error we got d uring an event\n // dispatch. The browser actually reports all errors but to do that we would\n // need to rethrow the error asynchronously.\n var pendingErr or;\n\n function dispatchOriginalEvent(originalEvent) {\n // Make sure this event is only dispatched once.\n if (handledEventsTable.get(originalEvent))\n return;\n handledEventsTable.set(originalEvent, true);\n dispatchEve nt(wrap(originalEvent), wrap(originalEvent.target));\n if (pendingError) {\n var err = pendingError;\n pendingError = null;\n throw err;\n }\n }\n\n\n function isLoadLikeEvent(event) {\n switch (event.type) {\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html #events-and-the-window-object\n case 'load':\n // http://www.whatwg.or g/specs/web-apps/current-work/multipage/browsers.html#unloading-documents\n case 'beforeunload':\n case 'unload':\n return true;\n }\n re turn false;\n }\n\n function dispatchEvent(event, originalWrapperTarget) {\n if (currentlyDispatchingEvents.get(event))\n throw new Error('InvalidStat eError');\n\n currentlyDispatchingEvents.set(event, true);\n\n // Render t o ensure that the event path is correct.\n scope.renderAllPending();\n var eventPath;\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipag e/webappapis.html#events-and-the-window-object\n // All events dispatched on Nodes with a default view, except load events,\n // should propagate to the W indow.\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the -end.html#the-end\n var overrideTarget;\n var win;\n\n // Should really be not cancelable too but since Firefox has a bug there\n // we skip that ch eck.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=999456\n if (isLoad LikeEvent(event) && !event.bubbles) {\n var doc = originalWrapperTarget;\n if (doc instanceof wrappers.Document && (win = doc.defaultView)) {\n overrideTarget = doc;\n eventPath = [];\n }\n }\n\n if (!even tPath) {\n if (originalWrapperTarget instanceof wrappers.Window) {\n win = originalWrapperTarget;\n eventPath = [];\n } else {\n eventPath = getEventPath(originalWrapperTarget, event);\n\n if (!isLoadLi keEvent(event)) {\n var doc = eventPath[eventPath.length - 1];\n if (doc instanceof wrappers.Document)\n win = doc.defaultView;\n }\n }\n }\n\n eventPathTable.set(event, eventPath);\n\n if ( dispatchCapturing(event, eventPath, win, overrideTarget)) {\n if (dispatchA tTarget(event, eventPath, win, overrideTarget)) {\n dispatchBubbling(even t, eventPath, win, overrideTarget);\n }\n }\n\n eventPhaseTable.set(e vent, NONE);\n currentTargetTable.delete(event, null);\n currentlyDispatch ingEvents.delete(event);\n\n return event.defaultPrevented;\n }\n\n functio n dispatchCapturing(event, eventPath, win, overrideTarget) {\n var phase = CA PTURING_PHASE;\n\n if (win) {\n if (!invoke(win, event, phase, eventPath , overrideTarget))\n return false;\n }\n\n for (var i = eventPath.l ength - 1; i > 0; i--) {\n if (!invoke(eventPath[i], event, phase, eventPat h, overrideTarget))\n return false;\n }\n\n return true;\n }\n\n function dispatchAtTarget(event, eventPath, win, overrideTarget) {\n var phas e = AT_TARGET;\n var currentTarget = eventPath[0] || win;\n return invoke( currentTarget, event, phase, eventPath, overrideTarget);\n }\n\n function disp atchBubbling(event, eventPath, win, overrideTarget) {\n var phase = BUBBLING_ PHASE;\n for (var i = 1; i < eventPath.length; i++) {\n if (!invoke(even tPath[i], event, phase, eventPath, overrideTarget))\n return;\n }\n\n if (win && eventPath.length > 0) {\n invoke(win, event, phase, eventPath , overrideTarget);\n }\n }\n\n function invoke(currentTarget, event, phase, eventPath, overrideTarget) {\n var listeners = listenersTable.get(currentTar get);\n if (!listeners)\n return true;\n\n var target = overrideTarge t || eventRetargetting(eventPath, currentTarget);\n\n if (target === currentT arget) {\n if (phase === CAPTURING_PHASE)\n return true;\n\n if (phase === BUBBLING_PHASE)\n phase = AT_TARGET;\n\n } else if (phase === BUBBLING_PHASE && !event.bubbles) {\n return true;\n }\n\n if (' relatedTarget' in event) {\n var originalEvent = unwrap(event);\n var unwrappedRelatedTarget = originalEvent.relatedTarget;\n\n // X-Tag sets rel atedTarget on a CustomEvent. If they do that there is no\n // way to have r elatedTarget return the adjusted target but worse is that\n // the original Event might not have a relatedTarget so we hit an assert\n // when we try t o wrap it.\n if (unwrappedRelatedTarget) {\n // In IE we can get obj ects that are not EventTargets at this point.\n // Safari does not have a n EventTarget interface so revert to checking\n // for addEventListener a s an approximation.\n if (unwrappedRelatedTarget instanceof Object &&\n unwrappedRelatedTarget.addEventListener) {\n var relatedTarge t = wrap(unwrappedRelatedTarget);\n\n var adjusted =\n rel atedTargetResolution(event, currentTarget, relatedTarget);\n if (adjust ed === target)\n return true;\n } else {\n adjusted = null;\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 currentTarget Table.set(event, currentTarget);\n\n // Keep track of the invoke depth so tha t we only clean up the removed\n // listeners if we are in the outermost invo ke.\n listeners.depth++;\n\n for (var i = 0, len = listeners.length; i < l en; i++) {\n var listener = listeners[i];\n if (listener.removed) {\n anyRemoved = true;\n continue;\n }\n\n if (listener.type !== type ||\n !listener.capture && phase === CAPTURING_PHASE ||\n listener.capture && phase === BUBBLING_PHASE) {\n continue;\n } \n\n try {\n if (typeof listener.handler === 'function')\n listener.handler.call(currentTarget, event);\n else\n listener.h andler.handleEvent(event);\n\n if (stopImmediatePropagationTable.get(even t))\n return false;\n\n } catch (ex) {\n if (!pendingError) \n pendingError = ex;\n }\n }\n\n listeners.depth--;\n\n if (anyRemoved && listeners.depth === 0) {\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 th is.capture = Boolean(capture);\n }\n Listener.prototype = {\n equals: funct ion(that) {\n return this.handler === that.handler && this.type === that.ty pe &&\n this.capture === that.capture;\n },\n get removed() {\n return this.handler === null;\n },\n remove: function() {\n this. handler = null;\n }\n };\n\n var OriginalEvent = window.Event;\n OriginalE vent.prototype.polymerBlackList_ = {\n returnValue: true,\n // TODO(arv): keyLocation is part of KeyboardEvent but Firefox does not\n // support constr uctable KeyboardEvent so we keep it here for now.\n keyLocation: true\n };\n \n /**\n * Creates a new Event wrapper or wraps an existin native Event objec t.\n * @param {string|Event} type\n * @param {Object=} options\n * @constr uctor\n */\n function Event(type, options) {\n if (type instanceof Origina lEvent) {\n var impl = type;\n // In browsers that do not correctly su pport BeforeUnloadEvent we get to\n // the generic Event wrapper but we sti ll want to ensure we create a\n // BeforeUnloadEvent. Since BeforeUnloadEve nt calls super, we need to\n // prevent reentrancty.\n if (!OriginalBe foreUnloadEvent && impl.type === 'beforeunload' &&\n !(this instanceof BeforeUnloadEvent)) {\n return new BeforeUnloadEvent(impl);\n }\n setWrapper(impl, this);\n } else {\n return wrap(constructEvent(Origi nalEvent, 'Event', type, options));\n }\n }\n Event.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 eve ntPath = eventPathTable.get(this);\n if (!eventPath)\n return [];\n // TODO(arv): Event path should contain window.\n return eventPath.sli ce();\n },\n stopPropagation: function() {\n stopPropagationTable.set (this, true);\n },\n stopImmediatePropagation: function() {\n stopPro pagationTable.set(this, true);\n stopImmediatePropagationTable.set(this, tr ue);\n }\n };\n registerWrapper(OriginalEvent, Event, document.createEvent( 'Event'));\n\n function unwrapOptions(options) {\n if (!options || !options. relatedTarget)\n return options;\n return Object.create(options, {\n relatedTarget: {value: unwrap(options.relatedTarget)}\n });\n }\n\n funct ion registerGenericEvent(name, SuperEvent, prototype) {\n var OriginalEvent = window[name];\n var GenericEvent = function(type, options) {\n if (type instanceof OriginalEvent)\n setWrapper(type, this);\n else\n return wrap(constructEvent(OriginalEvent, name, type, options));\n };\n G enericEvent.prototype = Object.create(SuperEvent.prototype);\n if (prototype) \n mixin(GenericEvent.prototype, prototype);\n if (OriginalEvent) {\n // - Old versions of Safari fails on new FocusEvent (and others?).\n // - IE does not support event constructors.\n // - createEvent('FocusEvent') throws in Firefox.\n // => Try the best practice solution first and fallbac k to the old way\n // if needed.\n try {\n registerWrapper(Orig inalEvent, GenericEvent, new OriginalEvent('temp'));\n } catch (ex) {\n registerWrapper(OriginalEvent, GenericEvent,\n docume nt.createEvent(name));\n }\n }\n return GenericEvent;\n }\n\n var U IEvent = registerGenericEvent('UIEvent', Event);\n var CustomEvent = registerGe nericEvent('CustomEvent', Event);\n\n var relatedTargetProto = {\n get relat edTarget() {\n var relatedTarget = relatedTargetTable.get(this);\n // relatedTarget can be null.\n if (relatedTarget !== undefined)\n retu rn relatedTarget;\n return wrap(unwrap(this).relatedTarget);\n }\n };\n \n function getInitFunction(name, relatedTargetIndex) {\n return function() {\n arguments[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);\ n var impl = unwrap(this);\n impl[name].apply(impl, arguments);\n } ;\n }\n\n var mouseEventProto = mixin({\n initMouseEvent: getInitFunction(' initMouseEvent', 14)\n }, relatedTargetProto);\n\n var focusEventProto = mixin ({\n initFocusEvent: getInitFunction('initFocusEvent', 5)\n }, relatedTarget Proto);\n\n var MouseEvent = registerGenericEvent('MouseEvent', UIEvent, mouseE ventProto);\n var FocusEvent = registerGenericEvent('FocusEvent', UIEvent, focu sEventProto);\n\n // In case the browser does not support event constructors we polyfill that\n // by calling `createEvent('Foo')` and `initFooEvent` where th e arguments to\n // `initFooEvent` are derived from the registered default even t init dict.\n var defaultInitDicts = Object.create(null);\n\n var supportsEve ntConstructors = (function() {\n try {\n new window.FocusEvent('focus'); \n } catch (ex) {\n return false;\n }\n return true;\n })();\n\n /**\n * Constructs a new native event.\n */\n function constructEvent(Orig inalEvent, name, type, options) {\n if (supportsEventConstructors)\n ret urn new OriginalEvent(type, unwrapOptions(options));\n\n // Create the argume nts from the default dictionary.\n var event = unwrap(document.createEvent(na me));\n var defaultDict = defaultInitDicts[name];\n var args = [type];\n Object.keys(defaultDict).forEach(function(key) {\n var v = options != nul l && key in options ?\n options[key] : defaultDict[key];\n if (key === 'relatedTarget')\n v = unwrap(v);\n args.push(v);\n });\n event['init' + name].apply(event, args);\n return event;\n }\n\n if (!supp ortsEventConstructors) {\n var configureEventConstructor = function(name, ini tDict, superName) {\n if (superName) {\n var superDict = defaultInit Dicts[superName];\n initDict = mixin(mixin({}, superDict), initDict);\n }\n\n defaultInitDicts[name] = initDict;\n };\n\n // The order of the default event init dictionary keys is important, the\n // arguments to i nitFooEvent is derived from that.\n configureEventConstructor('Event', {bubbl es: false, cancelable: false});\n configureEventConstructor('CustomEvent', {d etail: null}, 'Event');\n configureEventConstructor('UIEvent', {view: null, d etail: 0}, 'Event');\n configureEventConstructor('MouseEvent', {\n scree nX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n button: 0,\n relatedTarget: null\n }, 'UIEvent');\n configureEvent Constructor('FocusEvent', {relatedTarget: null}, 'UIEvent');\n }\n\n // Safari 7 does not yet have BeforeUnloadEvent.\n // https://bugs.webkit.org/show_bug.c gi?id=120849\n var OriginalBeforeUnloadEvent = window.BeforeUnloadEvent;\n\n f unction BeforeUnloadEvent(impl) {\n Event.call(this, impl);\n }\n BeforeUnl oadEvent.prototype = Object.create(Event.prototype);\n mixin(BeforeUnloadEvent. prototype, {\n get returnValue() {\n return unsafeUnwrap(this).returnVal ue;\n },\n set returnValue(v) {\n unsafeUnwrap(this).returnValue = v; \n }\n });\n\n if (OriginalBeforeUnloadEvent)\n registerWrapper(Original BeforeUnloadEvent, BeforeUnloadEvent);\n\n function isValidListener(fun) {\n if (typeof fun === 'function')\n return true;\n return fun && fun.handl eEvent;\n }\n\n function isMutationEvent(type) {\n switch (type) {\n c ase 'DOMAttrModified':\n case 'DOMAttributeNameChanged':\n case 'DOMCh aracterDataModified':\n case 'DOMElementNameChanged':\n case 'DOMNodeI nserted':\n case 'DOMNodeInsertedIntoDocument':\n case 'DOMNodeRemoved ':\n case 'DOMNodeRemovedFromDocument':\n case 'DOMSubtreeModified':\n return true;\n }\n return false;\n }\n\n var OriginalEventTarget = window.EventTarget;\n\n /**\n * This represents a wrapper for an EventTarg et.\n * @param {!EventTarget} impl The original event target.\n * @construct or\n */\n function EventTarget(impl) {\n setWrapper(impl, this);\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 ' addEventListener',\n 'removeEventListener',\n 'dispatchEvent'\n ];\n\n [ Node, 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(wra pper) {\n if (wrapper instanceof wrappers.ShadowRoot)\n wrapper = wrappe r.host;\n return unwrap(wrapper);\n }\n\n EventTarget.prototype = {\n ad dEventListener: function(type, fun, capture) {\n if (!isValidListener(fun) || isMutationEvent(type))\n return;\n\n var listener = new Listener( type, fun, capture);\n var listeners = listenersTable.get(this);\n if (!listeners) {\n listeners = [];\n listeners.depth = 0;\n l istenersTable.set(this, listeners);\n } else {\n // Might have a dup licate.\n for (var i = 0; i < listeners.length; i++) {\n if (lis tener.equals(listeners[i]))\n return;\n }\n }\n\n li steners.push(listener);\n\n var target = getTargetToListenAt(this);\n target.addEventListener_(type, dispatchOriginalEvent, true);\n },\n remove EventListener: function(type, fun, capture) {\n capture = Boolean(capture); \n var listeners = listenersTable.get(this);\n if (!listeners)\n return;\n var count = 0, found = false;\n for (var i = 0; i < listen ers.length; i++) {\n if (listeners[i].type === type && listeners[i].captu re === capture) {\n count++;\n if (listeners[i].handler === fu n) {\n found = true;\n listeners[i].remove();\n } \n }\n }\n\n if (found && count === 1) {\n var target = getTargetToListenAt(this);\n target.removeEventListener_(type, dispatchOr iginalEvent, 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 then there are no events that will trigger and\n // listeners in the non composed tree that are part of the event path are\n // not notified.\n //\n // If we find out that there are no listen ers in the composed tree we add\n // a temporary listener to the target whi ch makes us get called back even\n // in that case.\n\n var nativeEven t = unwrap(event);\n var eventType = nativeEvent.type;\n\n // Allow di spatching the same event again. This is safe because if user\n // code call s this during an existing dispatch of the same event the\n // native dispat chEvent throws (that is required by the spec).\n handledEventsTable.set(nat iveEvent, false);\n\n // Force rendering since we prefer native dispatch an d that works on the\n // composed tree.\n scope.renderAllPending();\n\ n var tempListener;\n if (!hasListenerInAncestors(this, eventType)) {\ n tempListener = function() {};\n this.addEventListener(eventType, tempListener, true);\n }\n\n try {\n return unwrap(this).dispa tchEvent_(nativeEvent);\n } finally {\n if (tempListener)\n this.removeEventListener(eventType, 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].removed && listeners[i].type === type)\n re turn true;\n }\n }\n return false;\n }\n\n function hasListenerInAn cestors(target, type) {\n for (var node = unwrap(target); node; node = node.p arentNode) {\n if (hasListener(wrap(node), type))\n return true;\n }\n return false;\n }\n\n if (OriginalEventTarget)\n registerWrapper(O riginalEventTarget, EventTarget);\n\n function wrapEventTargetMethods(construct ors) {\n forwardMethodsToWrapper(constructors, methodNames);\n }\n\n var or iginalElementFromPoint = document.elementFromPoint;\n\n function elementFromPoi nt(self, document, x, y) {\n scope.renderAllPending();\n\n var element =\n wrap(originalElementFromPoint.call(unsafeUnwrap(document), x, y));\n if (!element)\n return null;\n var path = getEventPath(element, null);\n \n // scope the path to this TreeScope\n var idx = path.lastIndexOf(self); \n if (idx == -1)\n return null;\n else\n path = path.slice(0, i dx);\n\n // TODO(dfreedm): pass idx to eventRetargetting to avoid array copy\ n return eventRetargetting(path, self);\n }\n\n /**\n * Returns a functio n that is to be used as a getter for `onfoo` properties.\n * @param {string} n ame\n * @return {Function}\n */\n function getEventHandlerGetter(name) {\n return function() {\n var inlineEventHandlers = eventHandlersTable.get(t his);\n return inlineEventHandlers && 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 {Function}\n */\n function getEventHandlerSetter( name) {\n var eventType = name.slice(2);\n return function(value) {\n var inlineEventHandlers = eventHandlersTable.get(this);\n if (!inlineEvent Handlers) {\n inlineEventHandlers = Object.create(null);\n eventHa ndlersTable.set(this, inlineEventHandlers);\n }\n\n var old = inlineEv entHandlers[name];\n if (old)\n this.removeEventListener(eventType, old.wrapped, false);\n\n if (typeof value === 'function') {\n var wr apped = function(e) {\n var rv = value.call(this, e);\n if (rv === false)\n e.preventDefault();\n else if (name === 'onbef oreunload' && typeof rv === 'string')\n e.returnValue = rv;\n // mouseover uses true for preventDefault but preventDefault for\n // mouseover is ignored by browsers these day.\n };\n\n this.addEven tListener(eventType, wrapped, false);\n inlineEventHandlers[name] = {\n value: value,\n wrapped: wrapped\n };\n }\n };\n }\n\n scope.elementFromPoint = elementFromPoint;\n scope.getEventHandlerGett er = getEventHandlerGetter;\n scope.getEventHandlerSetter = getEventHandlerSett er;\n scope.wrapEventTargetMethods = wrapEventTargetMethods;\n scope.wrappers. BeforeUnloadEvent = BeforeUnloadEvent;\n scope.wrappers.CustomEvent = CustomEve nt;\n scope.wrappers.Event = Event;\n scope.wrappers.EventTarget = EventTarget ;\n scope.wrappers.FocusEvent = FocusEvent;\n scope.wrappers.MouseEvent = Mous eEvent;\n scope.wrappers.UIEvent = UIEvent;\n\n})(window.ShadowDOMPolyfill);\n" ,
93 "/*\n * 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 th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var UIEvent = s cope.wrappers.UIEvent;\n var mixin = scope.mixin;\n var registerWrapper = scop e.registerWrapper;\n var setWrapper = scope.setWrapper;\n var unsafeUnwrap = s cope.unsafeUnwrap;\n var wrap = scope.wrap;\n\n // TouchEvent is WebKit/Blink only.\n var OriginalTouchEvent = window.TouchEvent;\n if (!OriginalTouchEvent) \n return;\n\n var nativeEvent;\n try {\n nativeEvent = document.createE vent('TouchEvent');\n } catch (ex) {\n // In Chrome creating a TouchEvent fa ils if the feature is not turned on\n // which it isn't on desktop Chrome.\n return;\n }\n\n var nonEnumDescriptor = {enumerable: false};\n\n function nonEnum(obj, prop) {\n Object.defineProperty(obj, prop, nonEnumDescriptor);\n }\n\n function Touch(impl) {\n setWrapper(impl, this);\n }\n\n Touch.pro totype = {\n get target() {\n return wrap(unsafeUnwrap(this).target);\n }\n };\n\n var descr = {\n configurable: true,\n enumerable: true,\n get: null\n };\n\n [\n 'clientX',\n 'clientY',\n 'screenX',\n ' screenY',\n 'pageX',\n 'pageY',\n 'identifier',\n 'webkitRadiusX',\n 'webkitRadiusY',\n 'webkitRotationAngle',\n 'webkitForce'\n ].forEach (function(name) {\n descr.get = function() {\n return unsafeUnwrap(this) [name];\n };\n Object.defineProperty(Touch.prototype, name, descr);\n }); \n\n function TouchList() {\n this.length = 0;\n nonEnum(this, 'length'); \n }\n\n TouchList.prototype = {\n item: function(index) {\n return th is[index];\n }\n };\n\n function wrapTouchList(nativeTouchList) {\n var list = new TouchList();\n for (var i = 0; i < nativeTouchList.length; i++) {\ n list[i] = new Touch(nativeTouchList[i]);\n }\n list.length = i;\n return list;\n }\n\n function TouchEvent(impl) {\n UIEvent.call(this, imp l);\n }\n\n TouchEvent.prototype = Object.create(UIEvent.prototype);\n\n mixi n(TouchEvent.prototype, {\n get touches() {\n return wrapTouchList(unsaf eUnwrap(this).touches);\n },\n\n get targetTouches() {\n return wrapT ouchList(unsafeUnwrap(this).targetTouches);\n },\n\n get changedTouches() {\n return wrapTouchList(unsafeUnwrap(this).changedTouches);\n },\n\n initTouchEvent: function() {\n // The only way to use this is to reuse the TouchList from an existing\n // TouchEvent. Since this is WebKit/Blink pro prietary API we will not\n // implement this until someone screams.\n throw new Error('Not implemented');\n }\n });\n\n registerWrapper(OriginalT ouchEvent, TouchEvent, nativeEvent);\n\n scope.wrappers.Touch = Touch;\n scope .wrappers.TouchEvent = TouchEvent;\n scope.wrappers.TouchList = TouchList;\n\n} )(window.ShadowDOMPolyfill);\n\n", 93 "/*\n * 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 th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var UIEvent = s cope.wrappers.UIEvent;\n var mixin = scope.mixin;\n var registerWrapper = scop e.registerWrapper;\n var setWrapper = scope.setWrapper;\n var unsafeUnwrap = s cope.unsafeUnwrap;\n var wrap = scope.wrap;\n\n // TouchEvent is WebKit/Blink only.\n var OriginalTouchEvent = window.TouchEvent;\n if (!OriginalTouchEvent) \n return;\n\n var nativeEvent;\n try {\n nativeEvent = document.createE vent('TouchEvent');\n } catch (ex) {\n // In Chrome creating a TouchEvent fa ils if the feature is not turned on\n // which it isn't on desktop Chrome.\n return;\n }\n\n var nonEnumDescriptor = {enumerable: false};\n\n function nonEnum(obj, prop) {\n Object.defineProperty(obj, prop, nonEnumDescriptor);\n }\n\n function Touch(impl) {\n setWrapper(impl, this);\n }\n\n Touch.pro totype = {\n get target() {\n return wrap(unsafeUnwrap(this).target);\n }\n };\n\n var descr = {\n configurable: true,\n enumerable: true,\n get: null\n };\n\n [\n 'clientX',\n 'clientY',\n 'screenX',\n ' screenY',\n 'pageX',\n 'pageY',\n 'identifier',\n 'webkitRadiusX',\n 'webkitRadiusY',\n 'webkitRotationAngle',\n 'webkitForce'\n ].forEach (function(name) {\n descr.get = function() {\n return unsafeUnwrap(this) [name];\n };\n Object.defineProperty(Touch.prototype, name, descr);\n }); \n\n function TouchList() {\n this.length = 0;\n nonEnum(this, 'length'); \n }\n\n TouchList.prototype = {\n item: function(index) {\n return th is[index];\n }\n };\n\n function wrapTouchList(nativeTouchList) {\n var list = new TouchList();\n for (var i = 0; i < nativeTouchList.length; i++) {\ n list[i] = new Touch(nativeTouchList[i]);\n }\n list.length = i;\n return list;\n }\n\n function TouchEvent(impl) {\n UIEvent.call(this, imp l);\n }\n\n TouchEvent.prototype = Object.create(UIEvent.prototype);\n\n mixi n(TouchEvent.prototype, {\n get touches() {\n return wrapTouchList(unsaf eUnwrap(this).touches);\n },\n\n get targetTouches() {\n return wrapT ouchList(unsafeUnwrap(this).targetTouches);\n },\n\n get changedTouches() {\n return wrapTouchList(unsafeUnwrap(this).changedTouches);\n },\n\n initTouchEvent: function() {\n // The only way to use this is to reuse the TouchList from an existing\n // TouchEvent. Since this is WebKit/Blink pro prietary API we will not\n // implement this until someone screams.\n throw new Error('Not implemented');\n }\n });\n\n registerWrapper(OriginalT ouchEvent, TouchEvent, nativeEvent);\n\n scope.wrappers.Touch = Touch;\n scope .wrappers.TouchEvent = TouchEvent;\n scope.wrappers.TouchList = TouchList;\n\n} )(window.ShadowDOMPolyfill);\n\n",
94 "// 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 unsafeUnwrap = scope .unsafeUnwrap;\n var wrap = scope.wrap;\n\n var nonEnumDescriptor = {enumerabl e: false};\n\n function nonEnum(obj, prop) {\n Object.defineProperty(obj, pr op, nonEnumDescriptor);\n }\n\n function NodeList() {\n this.length = 0;\n nonEnum(this, 'length');\n }\n NodeList.prototype = {\n item: function(i ndex) {\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 wr apperList.length = length;\n return wrapperList;\n }\n\n function addWrapNo deListMethod(wrapperConstructor, name) {\n wrapperConstructor.prototype[name] = function() {\n return wrapNodeList(\n unsafeUnwrap(this)[name]. apply(unsafeUnwrap(this), arguments));\n };\n }\n\n scope.wrappers.NodeList = NodeList;\n scope.addWrapNodeListMethod = addWrapNodeListMethod;\n scope.wr apNodeList = wrapNodeList;\n\n})(window.ShadowDOMPolyfill);\n", 94 "// 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 unsafeUnwrap = scope .unsafeUnwrap;\n var wrap = scope.wrap;\n\n var nonEnumDescriptor = {enumerabl e: false};\n\n function nonEnum(obj, prop) {\n Object.defineProperty(obj, pr op, nonEnumDescriptor);\n }\n\n function NodeList() {\n this.length = 0;\n nonEnum(this, 'length');\n }\n NodeList.prototype = {\n item: function(i ndex) {\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 wr apperList.length = length;\n return wrapperList;\n }\n\n function addWrapNo deListMethod(wrapperConstructor, name) {\n wrapperConstructor.prototype[name] = function() {\n return wrapNodeList(\n unsafeUnwrap(this)[name]. apply(unsafeUnwrap(this), arguments));\n };\n }\n\n scope.wrappers.NodeList = NodeList;\n scope.addWrapNodeListMethod = addWrapNodeListMethod;\n scope.wr apNodeList = wrapNodeList;\n\n})(window.ShadowDOMPolyfill);\n",
95 "/*\n * 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 th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n // TODO(arv): I mplement.\n\n scope.wrapHTMLCollection = scope.wrapNodeList;\n scope.wrappers. HTMLCollection = scope.wrappers.NodeList;\n\n})(window.ShadowDOMPolyfill);\n", 95 "/*\n * 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 th e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n // TODO(arv): I mplement.\n\n scope.wrapHTMLCollection = scope.wrapNodeList;\n scope.wrappers. HTMLCollection = scope.wrappers.NodeList;\n\n})(window.ShadowDOMPolyfill);\n",
96 "/**\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 t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var EventTarge t = scope.wrappers.EventTarget;\n var NodeList = scope.wrappers.NodeList;\n va r TreeScope = scope.TreeScope;\n var assert = scope.assert;\n var defineWrapGe tter = scope.defineWrapGetter;\n var enqueueMutation = scope.enqueueMutation;\n var getTreeScope = scope.getTreeScope;\n var isWrapper = scope.isWrapper;\n var mixin = scope.mixin;\n var registerTransientObservers = scope.registerTrans ientObservers;\n var registerWrapper = scope.registerWrapper;\n var setTreeSco pe = scope.setTreeScope;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n var wrap = sco pe.wrap;\n var wrapIfNeeded = scope.wrapIfNeeded;\n var wrappers = scope.wrapp ers;\n\n function assertIsNodeWrapper(node) {\n assert(node instanceof Node) ;\n }\n\n function createOneElementNodeList(node) {\n var nodes = new NodeL ist();\n nodes[0] = node;\n nodes.length = 1;\n return nodes;\n }\n\n var surpressMutations = false;\n\n /**\n * Called before node is inserted in to 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 pare nt node that the node is being removed from.\n * @param {!NodeList} nodes The collected nodes.\n */\n function enqueueRemovalForInsertedNodes(node, parent, nodes) {\n enqueueMutation(parent, 'childList', {\n removedNodes: nodes ,\n previousSibling: node.previousSibling,\n nextSibling: node.nextSib ling\n });\n }\n\n function enqueueRemovalForInsertedDocumentFragment(df, n odes) {\n enqueueMutation(df, 'childList', {\n removedNodes: nodes\n });\n }\n\n /**\n * Collects nodes from a DocumentFragment or a Node for rem oval followed\n * by an insertion.\n *\n * This updates the internal point ers for node, previousNode and nextNode.\n */\n function collectNodes(node, p arentNode, previousNode, nextNode) {\n if (node instanceof DocumentFragment) {\n var nodes = collectNodesForDocumentFragment(node);\n\n // The extr a loop is to work around bugs with DocumentFragments in IE.\n surpressMutat ions = true;\n for (var i = nodes.length - 1; i >= 0; i--) {\n node. removeChild(nodes[i]);\n nodes[i].parentNode_ = parentNode;\n }\n surpressMutations = false;\n\n for (var i = 0; i < nodes.length; i++) {\ n nodes[i].previousSibling_ = nodes[i - 1] || previousNode;\n node s[i].nextSibling_ = nodes[i + 1] || nextNode;\n }\n\n if (previousNode )\n previousNode.nextSibling_ = nodes[0];\n if (nextNode)\n n extNode.previousSibling_ = nodes[nodes.length - 1];\n\n return nodes;\n }\n\n var nodes = createOneElementNodeList(node);\n var oldParent = node.p arentNode;\n if (oldParent) {\n // This will enqueue the mutation record for the removal as needed.\n oldParent.removeChild(node);\n }\n\n no de.parentNode_ = parentNode;\n node.previousSibling_ = previousNode;\n nod e.nextSibling_ = nextNode;\n if (previousNode)\n previousNode.nextSiblin g_ = node;\n if (nextNode)\n nextNode.previousSibling_ = node;\n\n re turn nodes;\n }\n\n function collectNodesNative(node) {\n if (node instance of DocumentFragment)\n return collectNodesForDocumentFragment(node);\n\n var nodes = createOneElementNodeList(node);\n var oldParent = node.parentNod e;\n if (oldParent)\n enqueueRemovalForInsertedNodes(node, oldParent, no des);\n return nodes;\n }\n\n function collectNodesForDocumentFragment(node ) {\n var nodes = new NodeList();\n var i = 0;\n for (var child = node. firstChild; child; child = child.nextSibling) {\n nodes[i++] = child;\n }\n nodes.length = i;\n enqueueRemovalForInsertedDocumentFragment(node, no des);\n return nodes;\n }\n\n function snapshotNodeList(nodeList) {\n // NodeLists are not live at the moment so just return the same object.\n retur n nodeList;\n }\n\n // http://dom.spec.whatwg.org/#node-is-inserted\n functio n nodeWasAdded(node, treeScope) {\n setTreeScope(node, treeScope);\n node. nodeIsInserted_();\n }\n\n function nodesWereAdded(nodes, parent) {\n var t reeScope = getTreeScope(parent);\n for (var i = 0; i < nodes.length; i++) {\n nodeWasAdded(nodes[i], treeScope);\n }\n }\n\n // http://dom.spec.wha twg.org/#node-is-removed\n function nodeWasRemoved(node) {\n setTreeScope(no de, new TreeScope(node, null));\n }\n\n function nodesWereRemoved(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n nodeWasRemoved(nodes[i]);\n }\n }\n\n function ensureSameOwnerDocument(parent, child) {\n var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?\n parent : parent.ownerDocume nt;\n if (ownerDoc !== child.ownerDocument)\n ownerDoc.adoptNode(child); \n }\n\n function adoptNodesIfNeeded(owner, nodes) {\n if (!nodes.length)\n return;\n\n var ownerDoc = owner.ownerDocument;\n\n // All nodes hav e the same ownerDocument when we get here.\n if (ownerDoc === nodes[0].ownerD ocument)\n return;\n\n for (var i = 0; i < nodes.length; i++) {\n s cope.adoptNodeNoRemove(nodes[i], ownerDoc);\n }\n }\n\n function unwrapNode sForInsertion(owner, nodes) {\n adoptNodesIfNeeded(owner, nodes);\n var le ngth = nodes.length;\n\n if (length === 1)\n return unwrap(nodes[0]);\n\ n var df = unwrap(owner.ownerDocument.createDocumentFragment());\n for (va r i = 0; i < length; i++) {\n df.appendChild(unwrap(nodes[i]));\n }\n return df;\n }\n\n function clearChildNodes(wrapper) {\n if (wrapper.first Child_ !== undefined) {\n var child = wrapper.firstChild_;\n while (ch ild) {\n var tmp = child;\n child = child.nextSibling_;\n t mp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefined;\n }\n }\n wrapper.firstChild_ = wrapper.lastChild_ = undefined;\n }\n\n funct ion removeAllChildNodes(wrapper) {\n if (wrapper.invalidateShadowRenderer()) {\n var childWrapper = wrapper.firstChild;\n while (childWrapper) {\n assert(childWrapper.parentNode === wrapper);\n var nextSibling = c hildWrapper.nextSibling;\n var childNode = unwrap(childWrapper);\n var parentNode = childNode.parentNode;\n if (parentNode)\n orig inalRemoveChild.call(parentNode, childNode);\n childWrapper.previousSibli ng_ = childWrapper.nextSibling_ =\n childWrapper.parentNode_ = null;\ n childWrapper = nextSibling;\n }\n wrapper.firstChild_ = wrapp er.lastChild_ = null;\n } else {\n var node = unwrap(wrapper);\n va r child = node.firstChild;\n var nextSibling;\n while (child) {\n nextSibling = child.nextSibling;\n originalRemoveChild.call(node, chil d);\n child = nextSibling;\n }\n }\n }\n\n function invalidateP arent(node) {\n var p = node.parentNode;\n return p && p.invalidateShadowR enderer();\n }\n\n function cleanupNodes(nodes) {\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n n.parentNode.removeChild(n);\n }\n }\n\n var originalImportNode = document.importNode;\n var originalClon eNode = window.Node.prototype.cloneNode;\n\n function cloneNode(node, deep, opt _doc) {\n var clone;\n if (opt_doc)\n clone = wrap(originalImportNode .call(opt_doc, unsafeUnwrap(node), false));\n else\n clone = wrap(origin alCloneNode.call(unsafeUnwrap(node), false));\n\n if (deep) {\n for (var child = node.firstChild; child; child = child.nextSibling) {\n clone.app endChild(cloneNode(child, true, opt_doc));\n }\n\n if (node instanceof wrappers.HTMLTemplateElement) {\n var cloneContent = clone.content;\n for (var child = node.content.firstChild;\n child;\n child = child.nextSibling) {\n cloneContent.appendChild(cloneNode(chil d, true, opt_doc));\n }\n }\n }\n // TODO(arv): Some HTML elem ents also clone other data like value.\n return clone;\n }\n\n function con tains(self, child) {\n if (!child || getTreeScope(self) !== getTreeScope(chil d))\n return false;\n\n for (var node = child; node; node = node.parentN ode) {\n if (node === self)\n return true;\n }\n return false; \n }\n\n var OriginalNode = window.Node;\n\n /**\n * This represents a wrap per of a native DOM node.\n * @param {!Node} original The original DOM node, a ka, the visual DOM node.\n * @constructor\n * @extends {EventTarget}\n */\ n function Node(original) {\n assert(original instanceof OriginalNode);\n\n EventTarget.call(this, original);\n\n // These properties are used to over ride the visual references with the\n // logical ones. If the value is undefi ned it means that the logical is the\n // same as the visual.\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.parentNode_ = und efined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.firstChild_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.lastChild_ = undefined;\n\n /**\n * @type {N ode|undefined}\n * @private\n */\n this.nextSibling_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.previ ousSibling_ = undefined;\n\n this.treeScope_ = undefined;\n }\n\n var Origi nalDocumentFragment = window.DocumentFragment;\n var originalAppendChild = Orig inalNode.prototype.appendChild;\n var originalCompareDocumentPosition =\n OriginalNode.prototype.compareDocumentPosition;\n var originalInsertBefore = Or iginalNode.prototype.insertBefore;\n var originalRemoveChild = OriginalNode.pro totype.removeChild;\n var originalReplaceChild = OriginalNode.prototype.replace Child;\n\n var isIe = /Trident/.test(navigator.userAgent);\n\n var removeChild OriginalHelper = isIe ?\n function(parent, child) {\n try {\n originalRemoveChild.call(parent, child);\n } catch (ex) {\n i f (!(parent instanceof OriginalDocumentFragment))\n throw ex;\n }\n } :\n function(parent, child) {\n originalRemoveChild.cal l(parent, child);\n };\n\n Node.prototype = Object.create(EventTarget.prot otype);\n mixin(Node.prototype, {\n appendChild: function(childWrapper) {\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 (isWrapper(refWrapper) ) {\n refNode = unwrap(refWrapper);\n } else {\n refNod e = refWrapper;\n refWrapper = wrap(refNode);\n }\n } else {\n refWrapper = null;\n refNode = null;\n }\n\n refWrap per && assert(refWrapper.parentNode === this);\n\n var nodes;\n var pr eviousNode =\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 = collectNodes(chil dWrapper, this, previousNode, refWrapper);\n\n if (useNative) {\n en sureSameOwnerDocument(this, childWrapper);\n clearChildNodes(this);\n originalInsertBefore.call(unsafeUnwrap(this), unwrap(childWrapper), refNode) ;\n } else {\n if (!previousNode)\n this.firstChild_ = node s[0];\n if (!refWrapper) {\n this.lastChild_ = nodes[nodes.lengt h - 1];\n if (this.firstChild_ === undefined)\n this.firstCh ild_ = this.firstChild;\n }\n\n var parentNode = refNode ? refNode .parentNode : unsafeUnwrap(this);\n\n // insertBefore refWrapper no matte r what the parent is?\n if (parentNode) {\n originalInsertBefore .call(parentNode,\n unwrapNodesForInsertion(this, nodes), refNode); \n } else {\n adoptNodesIfNeeded(this, nodes);\n }\n }\n\n enqueueMutation(this, 'childList', {\n addedNodes: nodes,\n nextSibling: refWrapper,\n previousSibling: previousNode\n }); \n\n nodesWereAdded(nodes, this);\n\n return childWrapper;\n },\n\n removeChild: function(childWrapper) {\n assertIsNodeWrapper(childWrappe r);\n if (childWrapper.parentNode !== this) {\n // IE has invalid DO M trees at times.\n var found = false;\n var childNodes = this.chi ldNodes;\n for (var ieChild = this.firstChild; ieChild;\n ieC hild = ieChild.nextSibling) {\n if (ieChild === childWrapper) {\n found = true;\n break;\n }\n }\n if (!fo und) {\n // TODO(arv): DOMException\n throw new Error('NotFoun dError');\n }\n }\n\n var childNode = unwrap(childWrapper);\n var childWrapperNextSibling = childWrapper.nextSibling;\n var childWrap perPreviousSibling = childWrapper.previousSibling;\n\n if (this.invalidateS hadowRenderer()) {\n // We need to remove the real node from the DOM befo re updating the\n // pointers. This is so that that mutation event is dis patched before\n // the pointers have changed.\n var thisFirstChil d = this.firstChild;\n var thisLastChild = this.lastChild;\n\n var parentNode = childNode.parentNode;\n if (parentNode)\n removeCh ildOriginalHelper(parentNode, childNode);\n\n if (thisFirstChild === chil dWrapper)\n this.firstChild_ = childWrapperNextSibling;\n if (th isLastChild === childWrapper)\n this.lastChild_ = childWrapperPreviousS ibling;\n if (childWrapperPreviousSibling)\n childWrapperPreviou sSibling.nextSibling_ = childWrapperNextSibling;\n if (childWrapperNextSi bling) {\n childWrapperNextSibling.previousSibling_ =\n ch ildWrapperPreviousSibling;\n }\n\n childWrapper.previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentNode_ = undefined;\ n } else {\n clearChildNodes(this);\n removeChildOriginalHelp er(unsafeUnwrap(this), childNode);\n }\n\n if (!surpressMutations) {\n enqueueMutation(this, 'childList', {\n removedNodes: createOneE lementNodeList(childWrapper),\n nextSibling: childWrapperNextSibling,\n previousSibling: childWrapperPreviousSibling\n });\n }\n\n registerTransientObservers(this, childWrapper);\n\n return childWrapp er;\n },\n\n replaceChild: function(newChildWrapper, oldChildWrapper) {\n assertIsNodeWrapper(newChildWrapper);\n\n var oldChildNode;\n if (isWrapper(oldChildWrapper)) {\n oldChildNode = unwrap(oldChildWrapper);\ n } else {\n oldChildNode = oldChildWrapper;\n oldChildWrappe r = wrap(oldChildNode);\n }\n\n if (oldChildWrapper.parentNode !== thi s) {\n // TODO(arv): DOMException\n throw new Error('NotFoundError ');\n }\n\n var nextNode = oldChildWrapper.nextSibling;\n var pre viousNode = oldChildWrapper.previousSibling;\n var nodes;\n\n var useN ative = !this.invalidateShadowRenderer() &&\n !invalidatePa rent(newChildWrapper);\n\n if (useNative) {\n nodes = collectNodesNa tive(newChildWrapper);\n } else {\n if (nextNode === newChildWrapper )\n nextNode = newChildWrapper.nextSibling;\n nodes = collectNod es(newChildWrapper, this, previousNode, nextNode);\n }\n\n if (!useNat ive) {\n if (this.firstChild === oldChildWrapper)\n this.firstCh ild_ = nodes[0];\n if (this.lastChild === oldChildWrapper)\n thi s.lastChild_ = nodes[nodes.length - 1];\n\n oldChildWrapper.previousSibli ng_ = oldChildWrapper.nextSibling_ =\n oldChildWrapper.parentNode_ = undefined;\n\n // replaceChild no matter what the parent is?\n if (oldChildNode.parentNode) {\n originalReplaceChild.call(\n oldChildNode.parentNode,\n unwrapNodesForInsertion(this, nodes),\n oldChildNode);\n }\n } else {\n ensureSameOwner Document(this, newChildWrapper);\n clearChildNodes(this);\n origin alReplaceChild.call(unsafeUnwrap(this), unwrap(newChildWrapper),\n oldChildNode);\n }\n\n enqueueMutation(this, 'chil dList', {\n addedNodes: nodes,\n removedNodes: createOneElementNod eList(oldChildWrapper),\n nextSibling: nextNode,\n previousSibling : previousNode\n });\n\n nodeWasRemoved(oldChildWrapper);\n nodes WereAdded(nodes, this);\n\n return oldChildWrapper;\n },\n\n /**\n * Called after a node was inserted. Subclasses override this to invalidate\n * the renderer as needed.\n * @private\n */\n nodeIsInserted_: fun ction() {\n for (var child = this.firstChild; child; child = child.nextSibl ing) {\n child.nodeIsInserted_();\n }\n },\n\n hasChildNodes: function() {\n return this.firstChild !== null;\n },\n\n /** @type {N ode} */\n get parentNode() {\n // If the parentNode has not been overrid den, use the original parentNode.\n return this.parentNode_ !== undefined ? \n this.parentNode_ : wrap(unsafeUnwrap(this).parentNode);\n },\n\n /** @type {Node} */\n get firstChild() {\n return this.firstChild_ != = undefined ?\n this.firstChild_ : wrap(unsafeUnwrap(this).firstChild); \n },\n\n /** @type {Node} */\n get lastChild() {\n return this.la stChild_ !== undefined ?\n this.lastChild_ : wrap(unsafeUnwrap(this).la stChild);\n },\n\n /** @type {Node} */\n get nextSibling() {\n ret urn this.nextSibling_ !== undefined ?\n this.nextSibling_ : wrap(unsafe Unwrap(this).nextSibling);\n },\n\n /** @type {Node} */\n get previousS ibling() {\n return this.previousSibling_ !== undefined ?\n this.p reviousSibling_ : wrap(unsafeUnwrap(this).previousSibling);\n },\n\n get p arentElement() {\n var p = this.parentNode;\n while (p && p.nodeType ! == Node.ELEMENT_NODE) {\n p = p.parentNode;\n }\n return p;\n },\n\n get textContent() {\n // TODO(arv): This should fallback to uns afeUnwrap(this).textContent if there\n // are no shadow trees below or abov e 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.textContent;\n }\n }\n return s;\ n },\n set textContent(textContent) {\n var removedNodes = snapshotNo deList(this.childNodes);\n\n if (this.invalidateShadowRenderer()) {\n removeAllChildNodes(this);\n if (textContent !== '') {\n var t extNode = unsafeUnwrap(this).ownerDocument.createTextNode(textContent);\n this.appendChild(textNode);\n }\n } else {\n clearChildNod es(this);\n unsafeUnwrap(this).textContent = textContent;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes);\n\n enqueueMutation( this, 'childList', {\n addedNodes: addedNodes,\n removedNodes: rem ovedNodes\n });\n\n nodesWereRemoved(removedNodes);\n nodesWereAd ded(addedNodes, this);\n },\n\n get childNodes() {\n var wrapperList = new NodeList();\n var i = 0;\n for (var child = this.firstChild; chi ld; 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 return contains(this, wrapIfNeeded(child));\n },\n\n compareDocumentPosition: function(otherNode) {\n // This only wraps, it therefore only operates on the composed DOM and not\n // the logical DOM.\ n return originalCompareDocumentPosition.call(unsafeUnwrap(this),\n unwrapIfNeeded(otherNode));\n },\n\ n normalize: function() {\n var nodes = snapshotNodeList(this.childNodes );\n var remNodes = [];\n var s = '';\n var modNode;\n\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n if (n.n odeType === 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 } else {\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 && r emNodes.length) {\n modNode.data += s;\n cleanupNodes(remNodes);\n }\n }\n });\n\n defineWrapGetter(Node, 'ownerDocument');\n\n // We u se a DocumentFragment as a base and then delete the properties of\n // Document Fragment.prototype from the wrapper Node. Since delete makes\n // objects slow in some JS engines we recreate the prototype object.\n registerWrapper(Original Node, Node, document.createDocumentFragment());\n delete Node.prototype.querySe lector;\n delete Node.prototype.querySelectorAll;\n Node.prototype = mixin(Obj ect.create(EventTarget.prototype), Node.prototype);\n\n scope.cloneNode = clone Node;\n scope.nodeWasAdded = nodeWasAdded;\n scope.nodeWasRemoved = nodeWasRem oved;\n scope.nodesWereAdded = nodesWereAdded;\n scope.nodesWereRemoved = node sWereRemoved;\n scope.originalInsertBefore = originalInsertBefore;\n scope.ori ginalRemoveChild = originalRemoveChild;\n scope.snapshotNodeList = snapshotNode List;\n scope.wrappers.Node = Node;\n\n})(window.ShadowDOMPolyfill);\n", 96 "/**\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 t he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var EventTarge t = scope.wrappers.EventTarget;\n var NodeList = scope.wrappers.NodeList;\n va r TreeScope = scope.TreeScope;\n var assert = scope.assert;\n var defineWrapGe tter = scope.defineWrapGetter;\n var enqueueMutation = scope.enqueueMutation;\n var getTreeScope = scope.getTreeScope;\n var isWrapper = scope.isWrapper;\n var mixin = scope.mixin;\n var registerTransientObservers = scope.registerTrans ientObservers;\n var registerWrapper = scope.registerWrapper;\n var setTreeSco pe = scope.setTreeScope;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n var wrap = sco pe.wrap;\n var wrapIfNeeded = scope.wrapIfNeeded;\n var wrappers = scope.wrapp ers;\n\n function assertIsNodeWrapper(node) {\n assert(node instanceof Node) ;\n }\n\n function createOneElementNodeList(node) {\n var nodes = new NodeL ist();\n nodes[0] = node;\n nodes.length = 1;\n return nodes;\n }\n\n var surpressMutations = false;\n\n /**\n * Called before node is inserted in to 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 pare nt node that the node is being removed from.\n * @param {!NodeList} nodes The collected nodes.\n */\n function enqueueRemovalForInsertedNodes(node, parent, nodes) {\n enqueueMutation(parent, 'childList', {\n removedNodes: nodes ,\n previousSibling: node.previousSibling,\n nextSibling: node.nextSib ling\n });\n }\n\n function enqueueRemovalForInsertedDocumentFragment(df, n odes) {\n enqueueMutation(df, 'childList', {\n removedNodes: nodes\n });\n }\n\n /**\n * Collects nodes from a DocumentFragment or a Node for rem oval followed\n * by an insertion.\n *\n * This updates the internal point ers for node, previousNode and nextNode.\n */\n function collectNodes(node, p arentNode, previousNode, nextNode) {\n if (node instanceof DocumentFragment) {\n var nodes = collectNodesForDocumentFragment(node);\n\n // The extr a loop is to work around bugs with DocumentFragments in IE.\n surpressMutat ions = true;\n for (var i = nodes.length - 1; i >= 0; i--) {\n node. removeChild(nodes[i]);\n nodes[i].parentNode_ = parentNode;\n }\n surpressMutations = false;\n\n for (var i = 0; i < nodes.length; i++) {\ n nodes[i].previousSibling_ = nodes[i - 1] || previousNode;\n node s[i].nextSibling_ = nodes[i + 1] || nextNode;\n }\n\n if (previousNode )\n previousNode.nextSibling_ = nodes[0];\n if (nextNode)\n n extNode.previousSibling_ = nodes[nodes.length - 1];\n\n return nodes;\n }\n\n var nodes = createOneElementNodeList(node);\n var oldParent = node.p arentNode;\n if (oldParent) {\n // This will enqueue the mutation record for the removal as needed.\n oldParent.removeChild(node);\n }\n\n no de.parentNode_ = parentNode;\n node.previousSibling_ = previousNode;\n nod e.nextSibling_ = nextNode;\n if (previousNode)\n previousNode.nextSiblin g_ = node;\n if (nextNode)\n nextNode.previousSibling_ = node;\n\n re turn nodes;\n }\n\n function collectNodesNative(node) {\n if (node instance of DocumentFragment)\n return collectNodesForDocumentFragment(node);\n\n var nodes = createOneElementNodeList(node);\n var oldParent = node.parentNod e;\n if (oldParent)\n enqueueRemovalForInsertedNodes(node, oldParent, no des);\n return nodes;\n }\n\n function collectNodesForDocumentFragment(node ) {\n var nodes = new NodeList();\n var i = 0;\n for (var child = node. firstChild; child; child = child.nextSibling) {\n nodes[i++] = child;\n }\n nodes.length = i;\n enqueueRemovalForInsertedDocumentFragment(node, no des);\n return nodes;\n }\n\n function snapshotNodeList(nodeList) {\n // NodeLists are not live at the moment so just return the same object.\n retur n nodeList;\n }\n\n // http://dom.spec.whatwg.org/#node-is-inserted\n functio n nodeWasAdded(node, treeScope) {\n setTreeScope(node, treeScope);\n node. nodeIsInserted_();\n }\n\n function nodesWereAdded(nodes, parent) {\n var t reeScope = getTreeScope(parent);\n for (var i = 0; i < nodes.length; i++) {\n nodeWasAdded(nodes[i], treeScope);\n }\n }\n\n // http://dom.spec.wha twg.org/#node-is-removed\n function nodeWasRemoved(node) {\n setTreeScope(no de, new TreeScope(node, null));\n }\n\n function nodesWereRemoved(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n nodeWasRemoved(nodes[i]);\n }\n }\n\n function ensureSameOwnerDocument(parent, child) {\n var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?\n parent : parent.ownerDocume nt;\n if (ownerDoc !== child.ownerDocument)\n ownerDoc.adoptNode(child); \n }\n\n function adoptNodesIfNeeded(owner, nodes) {\n if (!nodes.length)\n return;\n\n var ownerDoc = owner.ownerDocument;\n\n // All nodes hav e the same ownerDocument when we get here.\n if (ownerDoc === nodes[0].ownerD ocument)\n return;\n\n for (var i = 0; i < nodes.length; i++) {\n s cope.adoptNodeNoRemove(nodes[i], ownerDoc);\n }\n }\n\n function unwrapNode sForInsertion(owner, nodes) {\n adoptNodesIfNeeded(owner, nodes);\n var le ngth = nodes.length;\n\n if (length === 1)\n return unwrap(nodes[0]);\n\ n var df = unwrap(owner.ownerDocument.createDocumentFragment());\n for (va r i = 0; i < length; i++) {\n df.appendChild(unwrap(nodes[i]));\n }\n return df;\n }\n\n function clearChildNodes(wrapper) {\n if (wrapper.first Child_ !== undefined) {\n var child = wrapper.firstChild_;\n while (ch ild) {\n var tmp = child;\n child = child.nextSibling_;\n t mp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefined;\n }\n }\n wrapper.firstChild_ = wrapper.lastChild_ = undefined;\n }\n\n funct ion removeAllChildNodes(wrapper) {\n if (wrapper.invalidateShadowRenderer()) {\n var childWrapper = wrapper.firstChild;\n while (childWrapper) {\n assert(childWrapper.parentNode === wrapper);\n var nextSibling = c hildWrapper.nextSibling;\n var childNode = unwrap(childWrapper);\n var parentNode = childNode.parentNode;\n if (parentNode)\n orig inalRemoveChild.call(parentNode, childNode);\n childWrapper.previousSibli ng_ = childWrapper.nextSibling_ =\n childWrapper.parentNode_ = null;\ n childWrapper = nextSibling;\n }\n wrapper.firstChild_ = wrapp er.lastChild_ = null;\n } else {\n var node = unwrap(wrapper);\n va r child = node.firstChild;\n var nextSibling;\n while (child) {\n nextSibling = child.nextSibling;\n originalRemoveChild.call(node, chil d);\n child = nextSibling;\n }\n }\n }\n\n function invalidateP arent(node) {\n var p = node.parentNode;\n return p && p.invalidateShadowR enderer();\n }\n\n function cleanupNodes(nodes) {\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n n.parentNode.removeChild(n);\n }\n }\n\n var originalImportNode = document.importNode;\n var originalClon eNode = window.Node.prototype.cloneNode;\n\n function cloneNode(node, deep, opt _doc) {\n var clone;\n if (opt_doc)\n clone = wrap(originalImportNode .call(opt_doc, unsafeUnwrap(node), false));\n else\n clone = wrap(origin alCloneNode.call(unsafeUnwrap(node), false));\n\n if (deep) {\n for (var child = node.firstChild; child; child = child.nextSibling) {\n clone.app endChild(cloneNode(child, true, opt_doc));\n }\n\n if (node instanceof wrappers.HTMLTemplateElement) {\n var cloneContent = clone.content;\n for (var child = node.content.firstChild;\n child;\n child = child.nextSibling) {\n cloneContent.appendChild(cloneNode(chil d, true, opt_doc));\n }\n }\n }\n // TODO(arv): Some HTML elem ents also clone other data like value.\n return clone;\n }\n\n function con tains(self, child) {\n if (!child || getTreeScope(self) !== getTreeScope(chil d))\n return false;\n\n for (var node = child; node; node = node.parentN ode) {\n if (node === self)\n return true;\n }\n return false; \n }\n\n var OriginalNode = window.Node;\n\n /**\n * This represents a wrap per of a native DOM node.\n * @param {!Node} original The original DOM node, a ka, the visual DOM node.\n * @constructor\n * @extends {EventTarget}\n */\ n function Node(original) {\n assert(original instanceof OriginalNode);\n\n EventTarget.call(this, original);\n\n // These properties are used to over ride the visual references with the\n // logical ones. If the value is undefi ned it means that the logical is the\n // same as the visual.\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.parentNode_ = und efined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.firstChild_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.lastChild_ = undefined;\n\n /**\n * @type {N ode|undefined}\n * @private\n */\n this.nextSibling_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this.previ ousSibling_ = undefined;\n\n this.treeScope_ = undefined;\n }\n\n var Origi nalDocumentFragment = window.DocumentFragment;\n var originalAppendChild = Orig inalNode.prototype.appendChild;\n var originalCompareDocumentPosition =\n OriginalNode.prototype.compareDocumentPosition;\n var originalInsertBefore = Or iginalNode.prototype.insertBefore;\n var originalRemoveChild = OriginalNode.pro totype.removeChild;\n var originalReplaceChild = OriginalNode.prototype.replace Child;\n\n var isIe = /Trident/.test(navigator.userAgent);\n\n var removeChild OriginalHelper = isIe ?\n function(parent, child) {\n try {\n originalRemoveChild.call(parent, child);\n } catch (ex) {\n i f (!(parent instanceof OriginalDocumentFragment))\n throw ex;\n }\n } :\n function(parent, child) {\n originalRemoveChild.cal l(parent, child);\n };\n\n Node.prototype = Object.create(EventTarget.prot otype);\n mixin(Node.prototype, {\n appendChild: function(childWrapper) {\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 (isWrapper(refWrapper) ) {\n refNode = unwrap(refWrapper);\n } else {\n refNod e = refWrapper;\n refWrapper = wrap(refNode);\n }\n } else {\n refWrapper = null;\n refNode = null;\n }\n\n refWrap per && assert(refWrapper.parentNode === this);\n\n var nodes;\n var pr eviousNode =\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 = collectNodes(chil dWrapper, this, previousNode, refWrapper);\n\n if (useNative) {\n en sureSameOwnerDocument(this, childWrapper);\n clearChildNodes(this);\n originalInsertBefore.call(unsafeUnwrap(this), unwrap(childWrapper), refNode) ;\n } else {\n if (!previousNode)\n this.firstChild_ = node s[0];\n if (!refWrapper) {\n this.lastChild_ = nodes[nodes.lengt h - 1];\n if (this.firstChild_ === undefined)\n this.firstCh ild_ = this.firstChild;\n }\n\n var parentNode = refNode ? refNode .parentNode : unsafeUnwrap(this);\n\n // insertBefore refWrapper no matte r what the parent is?\n if (parentNode) {\n originalInsertBefore .call(parentNode,\n unwrapNodesForInsertion(this, nodes), refNode); \n } else {\n adoptNodesIfNeeded(this, nodes);\n }\n }\n\n enqueueMutation(this, 'childList', {\n addedNodes: nodes,\n nextSibling: refWrapper,\n previousSibling: previousNode\n }); \n\n nodesWereAdded(nodes, this);\n\n return childWrapper;\n },\n\n removeChild: function(childWrapper) {\n assertIsNodeWrapper(childWrappe r);\n if (childWrapper.parentNode !== this) {\n // IE has invalid DO M trees at times.\n var found = false;\n var childNodes = this.chi ldNodes;\n for (var ieChild = this.firstChild; ieChild;\n ieC hild = ieChild.nextSibling) {\n if (ieChild === childWrapper) {\n found = true;\n break;\n }\n }\n if (!fo und) {\n // TODO(arv): DOMException\n throw new Error('NotFoun dError');\n }\n }\n\n var childNode = unwrap(childWrapper);\n var childWrapperNextSibling = childWrapper.nextSibling;\n var childWrap perPreviousSibling = childWrapper.previousSibling;\n\n if (this.invalidateS hadowRenderer()) {\n // We need to remove the real node from the DOM befo re updating the\n // pointers. This is so that that mutation event is dis patched before\n // the pointers have changed.\n var thisFirstChil d = this.firstChild;\n var thisLastChild = this.lastChild;\n\n var parentNode = childNode.parentNode;\n if (parentNode)\n removeCh ildOriginalHelper(parentNode, childNode);\n\n if (thisFirstChild === chil dWrapper)\n this.firstChild_ = childWrapperNextSibling;\n if (th isLastChild === childWrapper)\n this.lastChild_ = childWrapperPreviousS ibling;\n if (childWrapperPreviousSibling)\n childWrapperPreviou sSibling.nextSibling_ = childWrapperNextSibling;\n if (childWrapperNextSi bling) {\n childWrapperNextSibling.previousSibling_ =\n ch ildWrapperPreviousSibling;\n }\n\n childWrapper.previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentNode_ = undefined;\ n } else {\n clearChildNodes(this);\n removeChildOriginalHelp er(unsafeUnwrap(this), childNode);\n }\n\n if (!surpressMutations) {\n enqueueMutation(this, 'childList', {\n removedNodes: createOneE lementNodeList(childWrapper),\n nextSibling: childWrapperNextSibling,\n previousSibling: childWrapperPreviousSibling\n });\n }\n\n registerTransientObservers(this, childWrapper);\n\n return childWrapp er;\n },\n\n replaceChild: function(newChildWrapper, oldChildWrapper) {\n assertIsNodeWrapper(newChildWrapper);\n\n var oldChildNode;\n if (isWrapper(oldChildWrapper)) {\n oldChildNode = unwrap(oldChildWrapper);\ n } else {\n oldChildNode = oldChildWrapper;\n oldChildWrappe r = wrap(oldChildNode);\n }\n\n if (oldChildWrapper.parentNode !== thi s) {\n // TODO(arv): DOMException\n throw new Error('NotFoundError ');\n }\n\n var nextNode = oldChildWrapper.nextSibling;\n var pre viousNode = oldChildWrapper.previousSibling;\n var nodes;\n\n var useN ative = !this.invalidateShadowRenderer() &&\n !invalidatePa rent(newChildWrapper);\n\n if (useNative) {\n nodes = collectNodesNa tive(newChildWrapper);\n } else {\n if (nextNode === newChildWrapper )\n nextNode = newChildWrapper.nextSibling;\n nodes = collectNod es(newChildWrapper, this, previousNode, nextNode);\n }\n\n if (!useNat ive) {\n if (this.firstChild === oldChildWrapper)\n this.firstCh ild_ = nodes[0];\n if (this.lastChild === oldChildWrapper)\n thi s.lastChild_ = nodes[nodes.length - 1];\n\n oldChildWrapper.previousSibli ng_ = oldChildWrapper.nextSibling_ =\n oldChildWrapper.parentNode_ = undefined;\n\n // replaceChild no matter what the parent is?\n if (oldChildNode.parentNode) {\n originalReplaceChild.call(\n oldChildNode.parentNode,\n unwrapNodesForInsertion(this, nodes),\n oldChildNode);\n }\n } else {\n ensureSameOwner Document(this, newChildWrapper);\n clearChildNodes(this);\n origin alReplaceChild.call(unsafeUnwrap(this), unwrap(newChildWrapper),\n oldChildNode);\n }\n\n enqueueMutation(this, 'chil dList', {\n addedNodes: nodes,\n removedNodes: createOneElementNod eList(oldChildWrapper),\n nextSibling: nextNode,\n previousSibling : previousNode\n });\n\n nodeWasRemoved(oldChildWrapper);\n nodes WereAdded(nodes, this);\n\n return oldChildWrapper;\n },\n\n /**\n * Called after a node was inserted. Subclasses override this to invalidate\n * the renderer as needed.\n * @private\n */\n nodeIsInserted_: fun ction() {\n for (var child = this.firstChild; child; child = child.nextSibl ing) {\n child.nodeIsInserted_();\n }\n },\n\n hasChildNodes: function() {\n return this.firstChild !== null;\n },\n\n /** @type {N ode} */\n get parentNode() {\n // If the parentNode has not been overrid den, use the original parentNode.\n return this.parentNode_ !== undefined ? \n this.parentNode_ : wrap(unsafeUnwrap(this).parentNode);\n },\n\n /** @type {Node} */\n get firstChild() {\n return this.firstChild_ != = undefined ?\n this.firstChild_ : wrap(unsafeUnwrap(this).firstChild); \n },\n\n /** @type {Node} */\n get lastChild() {\n return this.la stChild_ !== undefined ?\n this.lastChild_ : wrap(unsafeUnwrap(this).la stChild);\n },\n\n /** @type {Node} */\n get nextSibling() {\n ret urn this.nextSibling_ !== undefined ?\n this.nextSibling_ : wrap(unsafe Unwrap(this).nextSibling);\n },\n\n /** @type {Node} */\n get previousS ibling() {\n return this.previousSibling_ !== undefined ?\n this.p reviousSibling_ : wrap(unsafeUnwrap(this).previousSibling);\n },\n\n get p arentElement() {\n var p = this.parentNode;\n while (p && p.nodeType ! == Node.ELEMENT_NODE) {\n p = p.parentNode;\n }\n return p;\n },\n\n get textContent() {\n // TODO(arv): This should fallback to uns afeUnwrap(this).textContent if there\n // are no shadow trees below or abov e 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.textContent;\n }\n }\n return s;\ n },\n set textContent(textContent) {\n var removedNodes = snapshotNo deList(this.childNodes);\n\n if (this.invalidateShadowRenderer()) {\n removeAllChildNodes(this);\n if (textContent !== '') {\n var t extNode = unsafeUnwrap(this).ownerDocument.createTextNode(textContent);\n this.appendChild(textNode);\n }\n } else {\n clearChildNod es(this);\n unsafeUnwrap(this).textContent = textContent;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes);\n\n enqueueMutation( this, 'childList', {\n addedNodes: addedNodes,\n removedNodes: rem ovedNodes\n });\n\n nodesWereRemoved(removedNodes);\n nodesWereAd ded(addedNodes, this);\n },\n\n get childNodes() {\n var wrapperList = new NodeList();\n var i = 0;\n for (var child = this.firstChild; chi ld; 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 return contains(this, wrapIfNeeded(child));\n },\n\n compareDocumentPosition: function(otherNode) {\n // This only wraps, it therefore only operates on the composed DOM and not\n // the logical DOM.\ n return originalCompareDocumentPosition.call(unsafeUnwrap(this),\n unwrapIfNeeded(otherNode));\n },\n\ n normalize: function() {\n var nodes = snapshotNodeList(this.childNodes );\n var remNodes = [];\n var s = '';\n var modNode;\n\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n if (n.n odeType === 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 } else {\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 && r emNodes.length) {\n modNode.data += s;\n cleanupNodes(remNodes);\n }\n }\n });\n\n defineWrapGetter(Node, 'ownerDocument');\n\n // We u se a DocumentFragment as a base and then delete the properties of\n // Document Fragment.prototype from the wrapper Node. Since delete makes\n // objects slow in some JS engines we recreate the prototype object.\n registerWrapper(Original Node, Node, document.createDocumentFragment());\n delete Node.prototype.querySe lector;\n delete Node.prototype.querySelectorAll;\n Node.prototype = mixin(Obj ect.create(EventTarget.prototype), Node.prototype);\n\n scope.cloneNode = clone Node;\n scope.nodeWasAdded = nodeWasAdded;\n scope.nodeWasRemoved = nodeWasRem oved;\n scope.nodesWereAdded = nodesWereAdded;\n scope.nodesWereRemoved = node sWereRemoved;\n scope.originalInsertBefore = originalInsertBefore;\n scope.ori ginalRemoveChild = originalRemoveChild;\n scope.snapshotNodeList = snapshotNode List;\n scope.wrappers.Node = Node;\n\n})(window.ShadowDOMPolyfill);\n",
97 "// 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 HTMLCollection = scop e.wrappers.HTMLCollection;\n var NodeList = scope.wrappers.NodeList;\n var get TreeScope = scope.getTreeScope;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrap = scope.wrap;\n\n var originalDocumentQuerySelector = document.querySelec tor;\n var originalElementQuerySelector = document.documentElement.querySelecto r;\n\n var originalDocumentQuerySelectorAll = document.querySelectorAll;\n var originalElementQuerySelectorAll = document.documentElement.querySelectorAll;\n\ n var originalDocumentGetElementsByTagName = document.getElementsByTagName;\n var originalElementGetElementsByTagName = document.documentElement.getElementsBy TagName;\n\n var originalDocumentGetElementsByTagNameNS = document.getElementsB yTagNameNS;\n var originalElementGetElementsByTagNameNS = document.documentElem ent.getElementsByTagNameNS;\n\n var OriginalElement = window.Element;\n var Or iginalDocument = window.HTMLDocument || window.Document;\n\n function filterNod eList(list, index, result, deep) {\n var wrappedItem = null;\n var root = null;\n for (var i = 0, length = list.length; i < length; i++) {\n wrapp edItem = wrap(list[i]);\n if (!deep && (root = getTreeScope(wrappedItem).ro ot)) {\n if (root instanceof scope.wrappers.ShadowRoot) {\n cont inue;\n }\n }\n result[index++] = wrappedItem;\n }\n\n re turn index;\n }\n\n function shimSelector(selector) {\n return String(selec tor).replace(/\\/deep\\//g, ' ');\n }\n\n function findOne(node, selector) {\n var m, el = node.firstElementChild;\n while (el) {\n if (el.matches( selector))\n return el;\n m = findOne(el, selector);\n if (m)\n return m;\n el = el.nextElementSibling;\n }\n return null;\n }\n\n function matchesSelector(el, selector) {\n return el.matches(selector );\n }\n\n var XHTML_NS = 'http://www.w3.org/1999/xhtml';\n\n function matche sTagName(el, localName, localNameLowerCase) {\n var ln = el.localName;\n r eturn ln === localName ||\n ln === localNameLowerCase && el.namespaceURI === XHTML_NS;\n }\n\n function matchesEveryThing() {\n return true;\n }\n\ n function matchesLocalNameOnly(el, ns, localName) {\n return el.localName = == localName;\n }\n\n function matchesNameSpace(el, ns) {\n return el.names paceURI === ns;\n }\n\n function matchesLocalNameNS(el, ns, localName) {\n return el.namespaceURI === ns && el.localName === localName;\n }\n\n function findElements(node, index, result, p, arg0, arg1) {\n var el = node.firstEleme ntChild;\n while (el) {\n if (p(el, arg0, arg1))\n result[index++ ] = el;\n index = findElements(el, index, result, p, arg0, arg1);\n el = el.nextElementSibling;\n }\n return index;\n }\n\n // find and findAl l will only match Simple Selectors,\n // Structural Pseudo Classes are not guar enteed to be correct\n // http://www.w3.org/TR/css3-selectors/#simple-selectors \n\n function querySelectorAllFiltered(p, index, result, selector, deep) {\n var target = unsafeUnwrap(this);\n var list;\n var root = getTreeScope(th is).root;\n if (root instanceof scope.wrappers.ShadowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected s o we do a manual tree traversal\n return findElements(this, index, result, p, selector, null);\n } else if (target instanceof OriginalElement) {\n list = originalElementQuerySelectorAll.call(target, selector);\n } else if (t arget instanceof OriginalDocument) {\n list = originalDocumentQuerySelector All.call(target, selector);\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so we do a manual tree trave rsal\n return findElements(this, index, result, p, selector, null);\n }\ n\n return filterNodeList(list, index, result, deep);\n }\n\n var Selectors Interface = {\n querySelector: function(selector) {\n var shimmed = shim Selector(selector);\n var deep = shimmed !== selector;\n selector = sh immed;\n\n var target = unsafeUnwrap(this);\n var wrappedItem;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrappers.Sh adowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findOne(this, selector);\n } else if (target instanceof OriginalElement) {\ n wrappedItem = wrap(originalElementQuerySelector.call(target, selector)) ;\n } else if (target instanceof OriginalDocument) {\n wrappedItem = wrap(originalDocumentQuerySelector.call(target, selector));\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so we do a manual tree traversal\n return findOne(this, select or);\n }\n\n if (!wrappedItem) {\n // When the original query r eturns nothing\n // we return nothing (to be consistent with the other wr apped calls)\n return wrappedItem;\n } else if (!deep && (root = get TreeScope(wrappedItem).root)) {\n if (root instanceof scope.wrappers.Shad owRoot) {\n // When the original query returns an element in the Shadow DOM\n // we must do a manual tree traversal\n return findOne(t his, selector);\n }\n }\n\n return wrappedItem;\n },\n qu erySelectorAll: function(selector) {\n var shimmed = shimSelector(selector) ;\n var deep = shimmed !== selector;\n selector = shimmed;\n\n va r result = new NodeList();\n\n result.length = querySelectorAllFiltered.cal l(this,\n matchesSelector,\n 0,\n result,\n selector,\n deep);\n\n return result;\n }\n };\n\n function g etElementsByTagNameFiltered(p, index, result, localName,\n lowercase) {\n var target = unsafeUnwrap(this);\n var li st;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrap pers.ShadowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findElements(this, index, result, p, localName, lowercase);\n } else if (tar get instanceof OriginalElement) {\n list = originalElementGetElementsByTagN ame.call(target, localName,\n lowercase);\n } else if (target instanceof OriginalDocument) {\n list = originalDocumentGetElementsByTagName.call(target, localName,\n lowercase);\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so w e do a manual tree traversal\n return findElements(this, index, result, p, localName, lowercase);\n }\n\n return filterNodeList(list, index, result, false);\n }\n\n function getElementsByTagNameNSFiltered(p, index, result, ns, localName) {\n var target = unsafeUnwrap(this);\n var list;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrappers.ShadowRoot) { \n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findElements(this , index, result, p, ns, localName);\n } else if (target instanceof OriginalEl ement) {\n list = originalElementGetElementsByTagNameNS.call(target, ns, lo calName);\n } else if (target instanceof OriginalDocument) {\n list = or iginalDocumentGetElementsByTagNameNS.call(target, ns, localName);\n } else {\ n // When we get a ShadowRoot the logical tree is going to be disconnected\ n // so we do a manual tree traversal\n return findElements(this, inde x, result, p, ns, localName);\n }\n\n return filterNodeList(list, index, r esult, false);\n }\n\n var GetElementsByInterface = {\n getElementsByTagNam e: function(localName) {\n var result = new HTMLCollection();\n var ma tch = localName === '*' ? matchesEveryThing : matchesTagName;\n\n result.le ngth = getElementsByTagNameFiltered.call(this,\n match,\n 0,\n result,\n localName,\n localName.toLowerCase());\n\n return result;\n },\n\n getElementsByClassName: function(className) {\n // TODO(arv): Check className?\n return this.querySelectorAll('.' + className);\n },\n\n getElementsByTagNameNS: function(ns, localName) {\n var result = new HTMLCollection();\n var match = null;\n\n if (n s === '*') {\n match = localName === '*' ? matchesEveryThing : matchesLoc alNameOnly;\n } else {\n match = localName === '*' ? matchesNameSpac e : matchesLocalNameNS;\n }\n\n result.length = getElementsByTagNameNS Filtered.call(this,\n match,\n 0,\n result,\n ns || null,\n localName);\n\n return result;\n }\n };\n\n s cope.GetElementsByInterface = GetElementsByInterface;\n scope.SelectorsInterfac e = SelectorsInterface;\n\n})(window.ShadowDOMPolyfill);\n", 97 "// 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 HTMLCollection = scop e.wrappers.HTMLCollection;\n var NodeList = scope.wrappers.NodeList;\n var get TreeScope = scope.getTreeScope;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrap = scope.wrap;\n\n var originalDocumentQuerySelector = document.querySelec tor;\n var originalElementQuerySelector = document.documentElement.querySelecto r;\n\n var originalDocumentQuerySelectorAll = document.querySelectorAll;\n var originalElementQuerySelectorAll = document.documentElement.querySelectorAll;\n\ n var originalDocumentGetElementsByTagName = document.getElementsByTagName;\n var originalElementGetElementsByTagName = document.documentElement.getElementsBy TagName;\n\n var originalDocumentGetElementsByTagNameNS = document.getElementsB yTagNameNS;\n var originalElementGetElementsByTagNameNS = document.documentElem ent.getElementsByTagNameNS;\n\n var OriginalElement = window.Element;\n var Or iginalDocument = window.HTMLDocument || window.Document;\n\n function filterNod eList(list, index, result, deep) {\n var wrappedItem = null;\n var root = null;\n for (var i = 0, length = list.length; i < length; i++) {\n wrapp edItem = wrap(list[i]);\n if (!deep && (root = getTreeScope(wrappedItem).ro ot)) {\n if (root instanceof scope.wrappers.ShadowRoot) {\n cont inue;\n }\n }\n result[index++] = wrappedItem;\n }\n\n re turn index;\n }\n\n function shimSelector(selector) {\n return String(selec tor).replace(/\\/deep\\//g, ' ');\n }\n\n function findOne(node, selector) {\n var m, el = node.firstElementChild;\n while (el) {\n if (el.matches( selector))\n return el;\n m = findOne(el, selector);\n if (m)\n return m;\n el = el.nextElementSibling;\n }\n return null;\n }\n\n function matchesSelector(el, selector) {\n return el.matches(selector );\n }\n\n var XHTML_NS = 'http://www.w3.org/1999/xhtml';\n\n function matche sTagName(el, localName, localNameLowerCase) {\n var ln = el.localName;\n r eturn ln === localName ||\n ln === localNameLowerCase && el.namespaceURI === XHTML_NS;\n }\n\n function matchesEveryThing() {\n return true;\n }\n\ n function matchesLocalNameOnly(el, ns, localName) {\n return el.localName = == localName;\n }\n\n function matchesNameSpace(el, ns) {\n return el.names paceURI === ns;\n }\n\n function matchesLocalNameNS(el, ns, localName) {\n return el.namespaceURI === ns && el.localName === localName;\n }\n\n function findElements(node, index, result, p, arg0, arg1) {\n var el = node.firstEleme ntChild;\n while (el) {\n if (p(el, arg0, arg1))\n result[index++ ] = el;\n index = findElements(el, index, result, p, arg0, arg1);\n el = el.nextElementSibling;\n }\n return index;\n }\n\n // find and findAl l will only match Simple Selectors,\n // Structural Pseudo Classes are not guar enteed to be correct\n // http://www.w3.org/TR/css3-selectors/#simple-selectors \n\n function querySelectorAllFiltered(p, index, result, selector, deep) {\n var target = unsafeUnwrap(this);\n var list;\n var root = getTreeScope(th is).root;\n if (root instanceof scope.wrappers.ShadowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected s o we do a manual tree traversal\n return findElements(this, index, result, p, selector, null);\n } else if (target instanceof OriginalElement) {\n list = originalElementQuerySelectorAll.call(target, selector);\n } else if (t arget instanceof OriginalDocument) {\n list = originalDocumentQuerySelector All.call(target, selector);\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so we do a manual tree trave rsal\n return findElements(this, index, result, p, selector, null);\n }\ n\n return filterNodeList(list, index, result, deep);\n }\n\n var Selectors Interface = {\n querySelector: function(selector) {\n var shimmed = shim Selector(selector);\n var deep = shimmed !== selector;\n selector = sh immed;\n\n var target = unsafeUnwrap(this);\n var wrappedItem;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrappers.Sh adowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findOne(this, selector);\n } else if (target instanceof OriginalElement) {\ n wrappedItem = wrap(originalElementQuerySelector.call(target, selector)) ;\n } else if (target instanceof OriginalDocument) {\n wrappedItem = wrap(originalDocumentQuerySelector.call(target, selector));\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so we do a manual tree traversal\n return findOne(this, select or);\n }\n\n if (!wrappedItem) {\n // When the original query r eturns nothing\n // we return nothing (to be consistent with the other wr apped calls)\n return wrappedItem;\n } else if (!deep && (root = get TreeScope(wrappedItem).root)) {\n if (root instanceof scope.wrappers.Shad owRoot) {\n // When the original query returns an element in the Shadow DOM\n // we must do a manual tree traversal\n return findOne(t his, selector);\n }\n }\n\n return wrappedItem;\n },\n qu erySelectorAll: function(selector) {\n var shimmed = shimSelector(selector) ;\n var deep = shimmed !== selector;\n selector = shimmed;\n\n va r result = new NodeList();\n\n result.length = querySelectorAllFiltered.cal l(this,\n matchesSelector,\n 0,\n result,\n selector,\n deep);\n\n return result;\n }\n };\n\n function g etElementsByTagNameFiltered(p, index, result, localName,\n lowercase) {\n var target = unsafeUnwrap(this);\n var li st;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrap pers.ShadowRoot) {\n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findElements(this, index, result, p, localName, lowercase);\n } else if (tar get instanceof OriginalElement) {\n list = originalElementGetElementsByTagN ame.call(target, localName,\n lowercase);\n } else if (target instanceof OriginalDocument) {\n list = originalDocumentGetElementsByTagName.call(target, localName,\n lowercase);\n } else {\n // When we get a ShadowRoot the logical tree is going to be disconnected\n // so w e do a manual tree traversal\n return findElements(this, index, result, p, localName, lowercase);\n }\n\n return filterNodeList(list, index, result, false);\n }\n\n function getElementsByTagNameNSFiltered(p, index, result, ns, localName) {\n var target = unsafeUnwrap(this);\n var list;\n var root = getTreeScope(this).root;\n if (root instanceof scope.wrappers.ShadowRoot) { \n // We are in the shadow tree and the logical tree is\n // going to be disconnected so we do a manual tree traversal\n return findElements(this , index, result, p, ns, localName);\n } else if (target instanceof OriginalEl ement) {\n list = originalElementGetElementsByTagNameNS.call(target, ns, lo calName);\n } else if (target instanceof OriginalDocument) {\n list = or iginalDocumentGetElementsByTagNameNS.call(target, ns, localName);\n } else {\ n // When we get a ShadowRoot the logical tree is going to be disconnected\ n // so we do a manual tree traversal\n return findElements(this, inde x, result, p, ns, localName);\n }\n\n return filterNodeList(list, index, r esult, false);\n }\n\n var GetElementsByInterface = {\n getElementsByTagNam e: function(localName) {\n var result = new HTMLCollection();\n var ma tch = localName === '*' ? matchesEveryThing : matchesTagName;\n\n result.le ngth = getElementsByTagNameFiltered.call(this,\n match,\n 0,\n result,\n localName,\n localName.toLowerCase());\n\n return result;\n },\n\n getElementsByClassName: function(className) {\n // TODO(arv): Check className?\n return this.querySelectorAll('.' + className);\n },\n\n getElementsByTagNameNS: function(ns, localName) {\n var result = new HTMLCollection();\n var match = null;\n\n if (n s === '*') {\n match = localName === '*' ? matchesEveryThing : matchesLoc alNameOnly;\n } else {\n match = localName === '*' ? matchesNameSpac e : matchesLocalNameNS;\n }\n\n result.length = getElementsByTagNameNS Filtered.call(this,\n match,\n 0,\n result,\n ns || null,\n localName);\n\n return result;\n }\n };\n\n s cope.GetElementsByInterface = GetElementsByInterface;\n scope.SelectorsInterfac e = SelectorsInterface;\n\n})(window.ShadowDOMPolyfill);\n",
98 "// 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 NodeList = scope.wra ppers.NodeList;\n\n function forwardElement(node) {\n while (node && node.no deType !== Node.ELEMENT_NODE) {\n node = node.nextSibling;\n }\n retu rn node;\n }\n\n function backwardsElement(node) {\n while (node && node.no deType !== Node.ELEMENT_NODE) {\n node = node.previousSibling;\n }\n return node;\n }\n\n var ParentNodeInterface = {\n get firstElementChild() {\n return forwardElement(this.firstChild);\n },\n\n get lastElementC hild() {\n return backwardsElement(this.lastChild);\n },\n\n get chil dElementCount() {\n var count = 0;\n for (var child = this.firstElemen tChild;\n child;\n child = child.nextElementSibling) {\n count++;\n }\n return count;\n },\n\n get children() {\n var wrapperList = new NodeList();\n var i = 0;\n for (var child = th is.firstElementChild;\n child;\n child = child.nextElementSi bling) {\n wrapperList[i++] = child;\n }\n wrapperList.length = i;\n return wrapperList;\n },\n\n remove: function() {\n var p = this.parentNode;\n if (p)\n p.removeChild(this);\n }\n };\n\n var ChildNodeInterface = {\n get nextElementSibling() {\n return forwar dElement(this.nextSibling);\n },\n\n get previousElementSibling() {\n return backwardsElement(this.previousSibling);\n }\n };\n\n scope.ChildNod eInterface = ChildNodeInterface;\n scope.ParentNodeInterface = ParentNodeInterf ace;\n\n})(window.ShadowDOMPolyfill);\n", 98 "// 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 NodeList = scope.wra ppers.NodeList;\n\n function forwardElement(node) {\n while (node && node.no deType !== Node.ELEMENT_NODE) {\n node = node.nextSibling;\n }\n retu rn node;\n }\n\n function backwardsElement(node) {\n while (node && node.no deType !== Node.ELEMENT_NODE) {\n node = node.previousSibling;\n }\n return node;\n }\n\n var ParentNodeInterface = {\n get firstElementChild() {\n return forwardElement(this.firstChild);\n },\n\n get lastElementC hild() {\n return backwardsElement(this.lastChild);\n },\n\n get chil dElementCount() {\n var count = 0;\n for (var child = this.firstElemen tChild;\n child;\n child = child.nextElementSibling) {\n count++;\n }\n return count;\n },\n\n get children() {\n var wrapperList = new NodeList();\n var i = 0;\n for (var child = th is.firstElementChild;\n child;\n child = child.nextElementSi bling) {\n wrapperList[i++] = child;\n }\n wrapperList.length = i;\n return wrapperList;\n },\n\n remove: function() {\n var p = this.parentNode;\n if (p)\n p.removeChild(this);\n }\n };\n\n var ChildNodeInterface = {\n get nextElementSibling() {\n return forwar dElement(this.nextSibling);\n },\n\n get previousElementSibling() {\n return backwardsElement(this.previousSibling);\n }\n };\n\n scope.ChildNod eInterface = ChildNodeInterface;\n scope.ParentNodeInterface = ParentNodeInterf ace;\n\n})(window.ShadowDOMPolyfill);\n",
99 "// 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 ChildNodeInterface = scope.ChildNodeInterface;\n var Node = scope.wrappers.Node;\n var enqueueMuta tion = scope.enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n\n var Ori ginalCharacterData = window.CharacterData;\n\n function CharacterData(node) {\n Node.call(this, node);\n }\n CharacterData.prototype = Object.create(Node. prototype);\n mixin(CharacterData.prototype, {\n get textContent() {\n return this.data;\n },\n set textContent(value) {\n this.data = value ;\n },\n get data() {\n return unsafeUnwrap(this).data;\n },\n set data(value) {\n var oldValue = unsafeUnwrap(this).data;\n enqueueM utation(this, 'characterData', {\n oldValue: oldValue\n });\n u nsafeUnwrap(this).data = value;\n }\n });\n\n mixin(CharacterData.prototype , ChildNodeInterface);\n\n registerWrapper(OriginalCharacterData, CharacterData ,\n document.createTextNode(''));\n\n scope.wrappers.Character Data = CharacterData;\n})(window.ShadowDOMPolyfill);\n", 99 "// 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 ChildNodeInterface = scope.ChildNodeInterface;\n var Node = scope.wrappers.Node;\n var enqueueMuta tion = scope.enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n\n var Ori ginalCharacterData = window.CharacterData;\n\n function CharacterData(node) {\n Node.call(this, node);\n }\n CharacterData.prototype = Object.create(Node. prototype);\n mixin(CharacterData.prototype, {\n get textContent() {\n return this.data;\n },\n set textContent(value) {\n this.data = value ;\n },\n get data() {\n return unsafeUnwrap(this).data;\n },\n set data(value) {\n var oldValue = unsafeUnwrap(this).data;\n enqueueM utation(this, 'characterData', {\n oldValue: oldValue\n });\n u nsafeUnwrap(this).data = value;\n }\n });\n\n mixin(CharacterData.prototype , ChildNodeInterface);\n\n registerWrapper(OriginalCharacterData, CharacterData ,\n document.createTextNode(''));\n\n scope.wrappers.Character Data = CharacterData;\n})(window.ShadowDOMPolyfill);\n",
100 "// 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 CharacterData = scop e.wrappers.CharacterData;\n var enqueueMutation = scope.enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n\n funct ion toUInt32(x) {\n return x >>> 0;\n }\n\n var OriginalText = window.Text; \n\n function Text(node) {\n CharacterData.call(this, node);\n }\n Text.pr ototype = Object.create(CharacterData.prototype);\n mixin(Text.prototype, {\n splitText: function(offset) {\n offset = toUInt32(offset);\n var s = this.data;\n if (offset > s.length)\n throw new Error('IndexSizeErr or');\n var head = s.slice(0, offset);\n var tail = s.slice(offset);\n this.data = head;\n var newTextNode = this.ownerDocument.createTextNo de(tail);\n if (this.parentNode)\n this.parentNode.insertBefore(newT extNode, this.nextSibling);\n return newTextNode;\n }\n });\n\n regist erWrapper(OriginalText, Text, document.createTextNode(''));\n\n scope.wrappers. Text = Text;\n})(window.ShadowDOMPolyfill);\n", 100 "// 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 CharacterData = scop e.wrappers.CharacterData;\n var enqueueMutation = scope.enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n\n funct ion toUInt32(x) {\n return x >>> 0;\n }\n\n var OriginalText = window.Text; \n\n function Text(node) {\n CharacterData.call(this, node);\n }\n Text.pr ototype = Object.create(CharacterData.prototype);\n mixin(Text.prototype, {\n splitText: function(offset) {\n offset = toUInt32(offset);\n var s = this.data;\n if (offset > s.length)\n throw new Error('IndexSizeErr or');\n var head = s.slice(0, offset);\n var tail = s.slice(offset);\n this.data = head;\n var newTextNode = this.ownerDocument.createTextNo de(tail);\n if (this.parentNode)\n this.parentNode.insertBefore(newT extNode, this.nextSibling);\n return newTextNode;\n }\n });\n\n regist erWrapper(OriginalText, Text, document.createTextNode(''));\n\n scope.wrappers. Text = Text;\n})(window.ShadowDOMPolyfill);\n",
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n// Old versions of iOS do not have bind.\n\nif (!Function.prototype.bind) {\n Func tion.prototype.bind = function(scope) {\n var self = this;\n var args = Ar ray.prototype.slice.call(arguments, 1);\n return function() {\n var args 2 = args.slice();\n args2.push.apply(args2, arguments);\n return self. apply(scope, args2);\n };\n };\n}\n\n})(window.Platform);\n", 141 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n// Old versions of iOS do not have bind.\n\nif (!Function.prototype.bind) {\n Func tion.prototype.bind = function(scope) {\n var self = this;\n var args = Ar ray.prototype.slice.call(arguments, 1);\n return function() {\n var args 2 = args.slice();\n args2.push.apply(args2, arguments);\n return self. apply(scope, args2);\n };\n };\n}\n\n})(window.Platform);\n",
142 "/*\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", 142 "/*\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",
143 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow.HTMLImports = window .HTMLImports || {flags:{}};", 143 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow.HTMLImports = window .HTMLImports || {flags:{}};",
144 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\r\n * This code may only be used under the BSD style license found at http:// polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n(functi on(scope) {\r\n\r\nvar hasNative = ('import' in document.createElement('link')); \r\nvar useNative = hasNative;\r\n\r\nisIE = /Trident/.test(navigator.userAgent) ;\r\n\r\n// TODO(sorvell): SD polyfill intrusion\r\nvar hasShadowDOMPolyfill = B oolean(window.ShadowDOMPolyfill);\r\nvar wrap = function(node) {\r\n return has ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node) : node;\r\n};\r\nvar ma inDoc = wrap(document);\r\n \r\n// NOTE: We cannot polyfill document.currentS cript because it's not possible\r\n// both to override and maintain the ability to capture the native value;\r\n// therefore we choose to expose _currentScript both when native imports\r\n// and the polyfill are in use.\r\nvar currentScript Descriptor = {\r\n get: function() {\r\n var script = HTMLImports.currentScr ipt || document.currentScript ||\r\n // NOTE: only works when called in s ynchronously executing code.\r\n // readyState should check if `loading` but IE10 is \r\n // interactive when scripts run so we cheat.\r\n (document.readyState !== 'complete' ? \r\n document.scripts[document.scri pts.length - 1] : null);\r\n return wrap(script);\r\n },\r\n configurable: true\r\n};\r\n\r\nObject.defineProperty(document, '_currentScript', currentScrip tDescriptor);\r\nObject.defineProperty(mainDoc, '_currentScript', currentScriptD escriptor);\r\n\r\n// call a callback when all HTMLImports in the document at ca ll (or at least\r\n// document ready) time have loaded.\r\n// 1. ensure the doc ument is in a ready state (has dom), then \r\n// 2. watch for loading of imports and call callback when done\r\nfunction whenImportsReady(callback, doc) {\r\n doc = doc || mainDoc;\r\n // if document is loading, wait and try again\r\n wh enDocumentReady(function() {\r\n watchImportsLoad(callback, doc);\r\n }, doc );\r\n}\r\n\r\n// call the callback when the document is in a ready state (has d om)\r\nvar requiredReadyState = isIE ? 'complete' : 'interactive';\r\nvar READY_ EVENT = 'readystatechange';\r\nfunction isDocumentReady(doc) {\r\n return (doc. readyState === 'complete' ||\r\n doc.readyState === requiredReadyState);\r\ n}\r\n\r\n// call <callback> when we ensure the document is in a ready state\r\n function whenDocumentReady(callback, doc) {\r\n if (!isDocumentReady(doc)) {\r\ n var checkReady = function() {\r\n if (doc.readyState === 'complete' || \r\n doc.readyState === requiredReadyState) {\r\n doc.removeEve ntListener(READY_EVENT, checkReady);\r\n whenDocumentReady(callback, doc) ;\r\n }\r\n };\r\n doc.addEventListener(READY_EVENT, checkReady);\r\n } else if (callback) {\r\n callback();\r\n }\r\n}\r\n\r\nfunction markTarg etLoaded(event) {\r\n event.target.__loaded = true;\r\n}\r\n\r\n// call <callba ck> when we ensure all imports have loaded\r\nfunction watchImportsLoad(callback , doc) {\r\n var imports = doc.querySelectorAll('link[rel=import]');\r\n var l oaded = 0, l = imports.length;\r\n function checkDone(d) { \r\n if (loaded = = l) {\r\n callback && callback();\r\n }\r\n }\r\n function loadedImpo rt(e) {\r\n markTargetLoaded(e);\r\n loaded++;\r\n checkDone();\r\n }\ r\n if (l) {\r\n for (var i=0, imp; (i<l) && (imp=imports[i]); i++) {\r\n if (isImportLoaded(imp)) {\r\n loadedImport.call(imp, {target: imp});\ r\n } else {\r\n imp.addEventListener('load', loadedImport);\r\n imp.addEventListener('error', loadedImport);\r\n }\r\n }\r\n } else {\r\n checkDone();\r\n }\r\n}\r\n\r\n// NOTE: test for native imports loadi ng is based on explicitly watching\r\n// all imports (see below).\r\n// We canno t rely on this entirely without watching the entire document\r\n// for import li nks. For perf reasons, currently only head is watched.\r\n// Instead, we fallbac k to checking if the import property is available \r\n// and the document is not itself loading. \r\nfunction isImportLoaded(link) {\r\n return useNative ? lin k.__loaded || \r\n (link.import && link.import.readyState !== 'loading') :\ r\n link.__importParsed;\r\n}\r\n\r\n// TODO(sorvell): Workaround for \r\n/ / https://www.w3.org/Bugs/Public/show_bug.cgi?id=25007, should be removed when\r \n// this bug is addressed.\r\n// (1) Install a mutation observer to see when HT MLImports have loaded\r\n// (2) if this script is run during document load it wi ll watch any existing\r\n// imports for loading.\r\n//\r\n// NOTE: The workaroun d has restricted functionality: (1) it's only compatible\r\n// with imports that are added to document.head since the mutation observer \r\n// watches only head for perf reasons, (2) it requires this script\r\n// to run before any imports h ave completed loading.\r\nif (useNative) {\r\n new MutationObserver(function(mx ns) {\r\n for (var i=0, l=mxns.length, m; (i < l) && (m=mxns[i]); i++) {\r\n if (m.addedNodes) {\r\n handleImports(m.addedNodes);\r\n }\r\n }\r\n }).observe(document.head, {childList: true});\r\n\r\n function handle Imports(nodes) {\r\n for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\r\n if (isImport(n)) {\r\n handleImport(n); \r\n }\r\n }\r\n }\r\n\r\n function isImport(element) {\r\n return element.localNam e === 'link' && element.rel === 'import';\r\n }\r\n\r\n function handleImport( element) {\r\n var loaded = element.import;\r\n if (loaded) {\r\n mar kTargetLoaded({target: element});\r\n } else {\r\n element.addEventListe ner('load', markTargetLoaded);\r\n element.addEventListener('error', markTa rgetLoaded);\r\n }\r\n }\r\n\r\n // make sure to catch any imports that are in the process of loading\r\n // when this script is run.\r\n (function() {\r \n if (document.readyState === 'loading') {\r\n var imports = document.q uerySelectorAll('link[rel=import]');\r\n for (var i=0, l=imports.length, im p; (i<l) && (imp=imports[i]); i++) {\r\n handleImport(imp);\r\n }\r\ n }\r\n })();\r\n\r\n}\r\n\r\n// Fire the 'HTMLImportsLoaded' event when imp orts in document at load time \r\n// have loaded. This event is required to simu late the script blocking \r\n// behavior of native imports. A main document scri pt that needs to be sure\r\n// imports have loaded should wait for this event.\r \nwhenImportsReady(function() {\r\n HTMLImports.ready = true;\r\n HTMLImports. readyTime = new Date().getTime();\r\n mainDoc.dispatchEvent(\r\n new CustomE vent('HTMLImportsLoaded', {bubbles: true})\r\n );\r\n});\r\n\r\n// exports\r\ns cope.useNative = useNative;\r\nscope.isImportLoaded = isImportLoaded;\r\nscope.w henReady = whenImportsReady;\r\nscope.isIE = isIE;\r\n\r\n// deprecated\r\nscope .whenImportsReady = whenImportsReady;\r\n\r\n})(window.HTMLImports);", 144 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\r\n * This code may only be used under the BSD style license found at http:// polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n(functi on(scope) {\r\n\r\nvar hasNative = ('import' in document.createElement('link')); \r\nvar useNative = hasNative;\r\n\r\nisIE = /Trident/.test(navigator.userAgent) ;\r\n\r\n// TODO(sorvell): SD polyfill intrusion\r\nvar hasShadowDOMPolyfill = B oolean(window.ShadowDOMPolyfill);\r\nvar wrap = function(node) {\r\n return has ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node) : node;\r\n};\r\nvar ma inDoc = wrap(document);\r\n \r\n// NOTE: We cannot polyfill document.currentS cript because it's not possible\r\n// both to override and maintain the ability to capture the native value;\r\n// therefore we choose to expose _currentScript both when native imports\r\n// and the polyfill are in use.\r\nvar currentScript Descriptor = {\r\n get: function() {\r\n var script = HTMLImports.currentScr ipt || document.currentScript ||\r\n // NOTE: only works when called in s ynchronously executing code.\r\n // readyState should check if `loading` but IE10 is \r\n // interactive when scripts run so we cheat.\r\n (document.readyState !== 'complete' ? \r\n document.scripts[document.scri pts.length - 1] : null);\r\n return wrap(script);\r\n },\r\n configurable: true\r\n};\r\n\r\nObject.defineProperty(document, '_currentScript', currentScrip tDescriptor);\r\nObject.defineProperty(mainDoc, '_currentScript', currentScriptD escriptor);\r\n\r\n// call a callback when all HTMLImports in the document at ca ll (or at least\r\n// document ready) time have loaded.\r\n// 1. ensure the doc ument is in a ready state (has dom), then \r\n// 2. watch for loading of imports and call callback when done\r\nfunction whenImportsReady(callback, doc) {\r\n doc = doc || mainDoc;\r\n // if document is loading, wait and try again\r\n wh enDocumentReady(function() {\r\n watchImportsLoad(callback, doc);\r\n }, doc );\r\n}\r\n\r\n// call the callback when the document is in a ready state (has d om)\r\nvar requiredReadyState = isIE ? 'complete' : 'interactive';\r\nvar READY_ EVENT = 'readystatechange';\r\nfunction isDocumentReady(doc) {\r\n return (doc. readyState === 'complete' ||\r\n doc.readyState === requiredReadyState);\r\ n}\r\n\r\n// call <callback> when we ensure the document is in a ready state\r\n function whenDocumentReady(callback, doc) {\r\n if (!isDocumentReady(doc)) {\r\ n var checkReady = function() {\r\n if (doc.readyState === 'complete' || \r\n doc.readyState === requiredReadyState) {\r\n doc.removeEve ntListener(READY_EVENT, checkReady);\r\n whenDocumentReady(callback, doc) ;\r\n }\r\n };\r\n doc.addEventListener(READY_EVENT, checkReady);\r\n } else if (callback) {\r\n callback();\r\n }\r\n}\r\n\r\nfunction markTarg etLoaded(event) {\r\n event.target.__loaded = true;\r\n}\r\n\r\n// call <callba ck> when we ensure all imports have loaded\r\nfunction watchImportsLoad(callback , doc) {\r\n var imports = doc.querySelectorAll('link[rel=import]');\r\n var l oaded = 0, l = imports.length;\r\n function checkDone(d) { \r\n if (loaded = = l) {\r\n callback && callback();\r\n }\r\n }\r\n function loadedImpo rt(e) {\r\n markTargetLoaded(e);\r\n loaded++;\r\n checkDone();\r\n }\ r\n if (l) {\r\n for (var i=0, imp; (i<l) && (imp=imports[i]); i++) {\r\n if (isImportLoaded(imp)) {\r\n loadedImport.call(imp, {target: imp});\ r\n } else {\r\n imp.addEventListener('load', loadedImport);\r\n imp.addEventListener('error', loadedImport);\r\n }\r\n }\r\n } else {\r\n checkDone();\r\n }\r\n}\r\n\r\n// NOTE: test for native imports loadi ng is based on explicitly watching\r\n// all imports (see below).\r\n// We canno t rely on this entirely without watching the entire document\r\n// for import li nks. For perf reasons, currently only head is watched.\r\n// Instead, we fallbac k to checking if the import property is available \r\n// and the document is not itself loading. \r\nfunction isImportLoaded(link) {\r\n return useNative ? lin k.__loaded || \r\n (link.import && link.import.readyState !== 'loading') :\ r\n link.__importParsed;\r\n}\r\n\r\n// TODO(sorvell): Workaround for \r\n/ / https://www.w3.org/Bugs/Public/show_bug.cgi?id=25007, should be removed when\r \n// this bug is addressed.\r\n// (1) Install a mutation observer to see when HT MLImports have loaded\r\n// (2) if this script is run during document load it wi ll watch any existing\r\n// imports for loading.\r\n//\r\n// NOTE: The workaroun d has restricted functionality: (1) it's only compatible\r\n// with imports that are added to document.head since the mutation observer \r\n// watches only head for perf reasons, (2) it requires this script\r\n// to run before any imports h ave completed loading.\r\nif (useNative) {\r\n new MutationObserver(function(mx ns) {\r\n for (var i=0, l=mxns.length, m; (i < l) && (m=mxns[i]); i++) {\r\n if (m.addedNodes) {\r\n handleImports(m.addedNodes);\r\n }\r\n }\r\n }).observe(document.head, {childList: true});\r\n\r\n function handle Imports(nodes) {\r\n for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\r\n if (isImport(n)) {\r\n handleImport(n); \r\n }\r\n }\r\n }\r\n\r\n function isImport(element) {\r\n return element.localNam e === 'link' && element.rel === 'import';\r\n }\r\n\r\n function handleImport( element) {\r\n var loaded = element.import;\r\n if (loaded) {\r\n mar kTargetLoaded({target: element});\r\n } else {\r\n element.addEventListe ner('load', markTargetLoaded);\r\n element.addEventListener('error', markTa rgetLoaded);\r\n }\r\n }\r\n\r\n // make sure to catch any imports that are in the process of loading\r\n // when this script is run.\r\n (function() {\r \n if (document.readyState === 'loading') {\r\n var imports = document.q uerySelectorAll('link[rel=import]');\r\n for (var i=0, l=imports.length, im p; (i<l) && (imp=imports[i]); i++) {\r\n handleImport(imp);\r\n }\r\ n }\r\n })();\r\n\r\n}\r\n\r\n// Fire the 'HTMLImportsLoaded' event when imp orts in document at load time \r\n// have loaded. This event is required to simu late the script blocking \r\n// behavior of native imports. A main document scri pt that needs to be sure\r\n// imports have loaded should wait for this event.\r \nwhenImportsReady(function() {\r\n HTMLImports.ready = true;\r\n HTMLImports. readyTime = new Date().getTime();\r\n mainDoc.dispatchEvent(\r\n new CustomE vent('HTMLImportsLoaded', {bubbles: true})\r\n );\r\n});\r\n\r\n// exports\r\ns cope.useNative = useNative;\r\nscope.isImportLoaded = isImportLoaded;\r\nscope.w henReady = whenImportsReady;\r\nscope.isIE = isIE;\r\n\r\n// deprecated\r\nscope .whenImportsReady = whenImportsReady;\r\n\r\n})(window.HTMLImports);",
145 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\n // imports\n var path = scope.path;\n var xhr = scope.xhr;\n var flags = scope.f lags;\n\n // TODO(sorvell): this loader supports a dynamic list of urls\n // a nd an oncomplete callback that is called when the loader is done.\n // The poly fill currently does *not* need this dynamism or the onComplete\n // concept. Be cause of this, the loader could be simplified quite a bit.\n var Loader = funct ion(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 // comm ence 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 addNode: function(node) {\n // number of transac tions 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 // en sure we have a standard url that can be used\n // reliably for deduping.\n // TODO(sjmiles): ad-hoc\n elt.__nodeUrl = url;\n // deduplicatio n\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(elt);\n // don't need fetch\n return t rue;\n }\n var resource;\n if (this.cache[url]) {\n this.o nload(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 inUrl\n this.pending[url] = [elt];\n // nee d fetch (not a dupe)\n return false;\n },\n fetch: function(url, elt) {\n flags.load && console.log('fetch', url, elt);\n if (url.match(/^d ata:/)) {\n // Handle Data URI Scheme\n var pieces = url.split(',' );\n var header = pieces[0];\n var body = pieces[1];\n if(h eader.indexOf(';base64') > -1) {\n body = atob(body);\n } else { \n body = decodeURIComponent(body);\n }\n setTimeout(func tion() {\n this.receive(url, elt, null, body);\n }.bind(this), 0);\n } else {\n var receiveXhr = function(err, resource, redirecte dUrl) {\n this.receive(url, elt, err, resource, redirectedUrl);\n }.bind(this);\n xhr.load(url, receiveXhr);\n // TODO(sorvell): b locked on)\n // https://code.google.com/p/chromium/issues/detail?id=25722 1\n // xhr'ing for a document makes scripts in imports runnable; otherwis e\n // they are not; however, it requires 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.loa d(url, receiveXhr);\n }\n */\n }\n },\n receive: functi on(url, elt, err, resource, redirectedUrl) {\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 url was redirected, use the redirected locatio n so paths are\n // calculated relative to that.\n this.onload(url , p, resource, err, redirectedUrl);\n this.tail();\n }\n this.p ending[url] = null;\n },\n tail: function() {\n --this.inflight;\n this.checkDone();\n },\n checkDone: function() {\n if (!this.infli ght) {\n this.oncomplete();\n }\n }\n };\n\n xhr = xhr || {\n async: true,\n ok: function(request) {\n return (request.status >= 200 && request.status < 300)\n || (request.status === 304)\n || ( request.status === 0);\n },\n load: function(url, next, nextContext) {\n var request = new XMLHttpRequest();\n if (scope.flags.debug || scope.fl ags.bust) {\n url += '?' + Math.random();\n }\n request.open('G ET', url, xhr.async);\n request.addEventListener('readystatechange', functi on(e) {\n if (request.readyState === 4) {\n // Servers redirecti ng an import can add a Location header to help us\n // polyfill correct ly.\n var locationHeader = request.getResponseHeader(\"Location\");\n var redirectedUrl = null;\n if (locationHeader) {\n var redirectedUrl = (locationHeader.substr( 0, 1 ) === \"/\")\n ? l ocation.origin + locationHeader // Location is a relative path\n : locationHeader; // Full path\n }\n next.ca ll(nextContext, !xhr.ok(request) && request,\n request.response || request.responseText, redirectedUrl);\n }\n });\n request.send( );\n return request;\n },\n loadDocument: function(url, next, nextCon text) {\n this.load(url, next, nextContext).responseType = 'document';\n }\n };\n\n // exports\n scope.xhr = xhr;\n scope.Loader = Loader;\n\n})(win dow.HTMLImports);\n", 145 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\n // imports\n var path = scope.path;\n var xhr = scope.xhr;\n var flags = scope.f lags;\n\n // TODO(sorvell): this loader supports a dynamic list of urls\n // a nd an oncomplete callback that is called when the loader is done.\n // The poly fill currently does *not* need this dynamism or the onComplete\n // concept. Be cause of this, the loader could be simplified quite a bit.\n var Loader = funct ion(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 // comm ence 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 addNode: function(node) {\n // number of transac tions 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 // en sure we have a standard url that can be used\n // reliably for deduping.\n // TODO(sjmiles): ad-hoc\n elt.__nodeUrl = url;\n // deduplicatio n\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(elt);\n // don't need fetch\n return t rue;\n }\n var resource;\n if (this.cache[url]) {\n this.o nload(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 inUrl\n this.pending[url] = [elt];\n // nee d fetch (not a dupe)\n return false;\n },\n fetch: function(url, elt) {\n flags.load && console.log('fetch', url, elt);\n if (url.match(/^d ata:/)) {\n // Handle Data URI Scheme\n var pieces = url.split(',' );\n var header = pieces[0];\n var body = pieces[1];\n if(h eader.indexOf(';base64') > -1) {\n body = atob(body);\n } else { \n body = decodeURIComponent(body);\n }\n setTimeout(func tion() {\n this.receive(url, elt, null, body);\n }.bind(this), 0);\n } else {\n var receiveXhr = function(err, resource, redirecte dUrl) {\n this.receive(url, elt, err, resource, redirectedUrl);\n }.bind(this);\n xhr.load(url, receiveXhr);\n // TODO(sorvell): b locked on)\n // https://code.google.com/p/chromium/issues/detail?id=25722 1\n // xhr'ing for a document makes scripts in imports runnable; otherwis e\n // they are not; however, it requires 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.loa d(url, receiveXhr);\n }\n */\n }\n },\n receive: functi on(url, elt, err, resource, redirectedUrl) {\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 url was redirected, use the redirected locatio n so paths are\n // calculated relative to that.\n this.onload(url , p, resource, err, redirectedUrl);\n this.tail();\n }\n this.p ending[url] = null;\n },\n tail: function() {\n --this.inflight;\n this.checkDone();\n },\n checkDone: function() {\n if (!this.infli ght) {\n this.oncomplete();\n }\n }\n };\n\n xhr = xhr || {\n async: true,\n ok: function(request) {\n return (request.status >= 200 && request.status < 300)\n || (request.status === 304)\n || ( request.status === 0);\n },\n load: function(url, next, nextContext) {\n var request = new XMLHttpRequest();\n if (scope.flags.debug || scope.fl ags.bust) {\n url += '?' + Math.random();\n }\n request.open('G ET', url, xhr.async);\n request.addEventListener('readystatechange', functi on(e) {\n if (request.readyState === 4) {\n // Servers redirecti ng an import can add a Location header to help us\n // polyfill correct ly.\n var locationHeader = request.getResponseHeader(\"Location\");\n var redirectedUrl = null;\n if (locationHeader) {\n var redirectedUrl = (locationHeader.substr( 0, 1 ) === \"/\")\n ? l ocation.origin + locationHeader // Location is a relative path\n : locationHeader; // Full path\n }\n next.ca ll(nextContext, !xhr.ok(request) && request,\n request.response || request.responseText, redirectedUrl);\n }\n });\n request.send( );\n return request;\n },\n loadDocument: function(url, next, nextCon text) {\n this.load(url, next, nextContext).responseType = 'document';\n }\n };\n\n // exports\n scope.xhr = xhr;\n scope.Loader = Loader;\n\n})(win dow.HTMLImports);\n",
146 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\nvar I MPORT_LINK_TYPE = 'import';\nvar flags = scope.flags;\nvar isIE = scope.isIE;\n/ / TODO(sorvell): SD polyfill intrusion\nvar mainDoc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// importP arser\n// highlander object to manage parsing of imports\n// parses import relat ed elements\n// and ensures proper parse order\n// parse order is enforced by cr awling the tree and monitoring which elements\n// have been parsed; async parsin g is also supported.\n\n// highlander object for parsing a document tree\nvar im portParser = {\n // parse selectors for main document elements\n documentSelec tors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n // parse selectors for import doc ument elements\n importsSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']', \n 'link[rel=stylesheet]',\n 'style',\n 'script:not([type])',\n 'scr ipt[type=\"text/javascript\"]'\n ].join(','),\n map: {\n link: 'parseLink', \n script: 'parseScript',\n style: 'parseStyle'\n },\n // try to parse t he next import in the tree\n parseNext: function() {\n var next = this.nextT oParse();\n if (next) {\n this.parse(next);\n }\n },\n parse: funct ion(elt) {\n if (this.isParsed(elt)) {\n flags.parse && console.log('[%s ] is already parsed', elt.localName);\n return;\n }\n var fn = this[t his.map[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; pars ing is async so each\n // parsing implementation must inform the system that pa rsing is complete\n // via markParsingComplete.\n // To prompt the system to p arse the next element, parseNext should then be\n // called.\n // Note, parseN ext used to be included at the end of markParsingComplete, but\n // we must not do this so that, for example, we can (1) mark parsing complete \n // then (2) fire an import load event, and then (3) parse the next resource.\n markParsing: function(elt) {\n flags.parse && console.log('parsing', elt);\n this.pars ingElement = elt;\n },\n markParsingComplete: function(elt) {\n elt.__impor tParsed = true;\n if (elt.__importElement) {\n elt.__importElement.__imp ortParsed = true;\n }\n this.parsingElement = null;\n flags.parse && co nsole.log('completed', elt);\n },\n invalidateParse: function(doc) {\n if ( doc && doc.__importLink) {\n doc.__importParsed = doc.__importLink.__import Parsed = false;\n this.parseSoon();\n }\n },\n parseSoon: function() { \n if (this._parseSoon) {\n cancelAnimationFrame(this._parseDelay);\n }\n var parser = this;\n this._parseSoon = requestAnimationFrame(function () {\n parser.parseNext();\n });\n },\n parseImport: function(elt) {\n // TODO(sorvell): consider if there's a better way to do this;\n // expos e an imports parsing hook; this is needed, for example, by the\n // CustomEle ments polyfill.\n if (HTMLImports.__importsParsingHook) {\n HTMLImports. __importsParsingHook(elt);\n }\n if (elt.import) {\n elt.import.__imp ortParsed = true;\n }\n this.markParsingComplete(elt);\n // fire load e vent\n if (elt.__resource && !elt.__error) {\n elt.dispatchEvent(new Cus tomEvent('load', {bubbles: false})); \n } else {\n elt.dispatchEvent( new CustomEvent('error', {bubbles: false}));\n }\n // TODO(sorvell): worka round for Safari addEventListener not working\n // for elements not in the ma in document.\n if (elt.__pending) {\n var fn;\n while (elt.__pendin g.length) {\n fn = elt.__pending.shift();\n if (fn) {\n f n({target: elt});\n }\n }\n }\n this.parseNext();\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 this.addElementToDocument(elt);\n },\n r ootImportForElement: function(elt) {\n var n = elt;\n while (n.ownerDocume nt.__importLink) {\n n = n.ownerDocument.__importLink;\n }\n return n ;\n },\n addElementToDocument: function(elt) {\n var port = this.rootImport ForElement(elt.__importElement || elt);\n var l = port.__insertedElements = p ort.__insertedElements || 0;\n var refNode = port.nextElementSibling;\n fo r (var i=0; i < l; i++) {\n refNode = refNode && refNode.nextElementSibling ;\n }\n port.parentNode.insertBefore(elt, refNode);\n },\n // tracks whe n a loadable element has loaded\n trackElement: function(elt, callback) {\n var self = this;\n var done = function(e) {\n if (callback) {\n c allback(e);\n }\n self.markParsingComplete(elt);\n self.parseNext ();\n };\n elt.addEventListener('load', done);\n elt.addEventListener(' error', done);\n\n // NOTE: IE does not fire \"load\" event for styles that h ave already loaded\n // This is in violation of the spec, so we try our harde st to work around it\n if (isIE && elt.localName === 'style') {\n var fa keLoad = false;\n // If there's not @import in the textContent, assume it h as loaded\n if (elt.textContent.indexOf('@import') == -1) {\n fakeLo ad = true;\n // if we have a sheet, we have been parsed\n } else if (e lt.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, f ake the load\n fakeLoad = fakeLoad && Boolean(r.styleSheet);\n }\n }\n }\n // dispatch a fake load event and continue parsi ng\n if (fakeLoad) {\n elt.dispatchEvent(new CustomEvent('load', {bu bbles: false}));\n }\n }\n },\n // NOTE: execute scripts by injecting them and watching for the load/error\n // event. Inline scripts are handled via dataURL's because browsers tend to\n // provide correct parsing errors in this case. If this has any compatibility\n // issues, we can switch to injecting th e inline script with textContent.\n // Scripts with dataURL's do not appear to generate load events and therefore\n // we assume they execute synchronously.\n parseScript: function(scriptElt) {\n var script = document.createElement('s cript');\n script.__importElement = scriptElt;\n script.src = scriptElt.sr c ? scriptElt.src : \n generateScriptDataUrl(scriptElt);\n scope.curre ntScript = scriptElt;\n this.trackElement(script, function(e) {\n script .parentNode.removeChild(script);\n scope.currentScript = null; \n });\n this.addElementToDocument(script);\n },\n // determine the next element in the tree which should be parsed\n nextToParse: function() {\n this._mayPars e = [];\n return !this.parsingElement && this.nextToParseInDoc(mainDoc);\n } ,\n nextToParseInDoc: function(doc, link) {\n // use `marParse` list to avoi d looping into the same document again\n // since it could cause an iloop.\n if (doc && this._mayParse.indexOf(doc) < 0) {\n this._mayParse.push(doc) ;\n var nodes = doc.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 retu rn nodeIsImport(n) ? this.nextToParseInDoc(n.import, n) : n;\n } else { \n return;\n }\n }\n }\n }\n // all nodes have been parsed, ready to parse import, if any\n return link;\n },\n // re turn the set of parse selectors relevant for this node.\n parseSelectorsForNode : function(node) {\n var doc = node.ownerDocument || node;\n return doc == = mainDoc ? this.documentSelectors : this.importsSelectors;\n },\n isParsed: f unction(node) {\n return node.__importParsed;\n },\n hasResource: function( node) {\n if (nodeIsImport(node) && (node.import === undefined)) {\n ret urn false;\n }\n return true;\n }\n};\n\nfunction nodeIsImport(elt) {\n return (elt.localName === 'link') && (elt.rel === IMPORT_LINK_TYPE);\n}\n\nfunct ion generateScriptDataUrl(script) {\n var scriptContent = generateScriptContent (script);\n return 'data:text/javascript;charset=utf-8,' + encodeURIComponent(s criptContent);\n}\n\nfunction generateScriptContent(script) {\n return script.t extContent + generateSourceMapHint(script);\n}\n\n// calculate source map hint\n function generateSourceMapHint(script) {\n var moniker = script.__nodeUrl;\n i f (!moniker) {\n moniker = script.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 n eed to allow \n // this sort of thing\n var matches = script.textContent.m atch(/Polymer\\(['\"]([^'\"]*)/);\n tag = matches && matches[1] || tag;\n // tag the moniker\n moniker += '/' + tag + '.js';\n }\n return '\\n//# sou rceURL=' + moniker + '\\n';\n}\n\n// style/stylesheet handling\n\n// clone style with proper path resolution for main document\n// NOTE: styles are the only ele ments that require direct path fixup.\nfunction cloneStyle(style) {\n var clone = style.ownerDocument.createElement('style');\n clone.textContent = style.text Content;\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 fixup 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.resolve UrlsInCssText(style.textContent, resolver);\n return style; \n },\n resolv eUrlsInCssText: function(cssText, urlObj) {\n var r = this.replaceUrls(cssTex t, urlObj, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGE XP);\n return r;\n },\n replaceUrls: function(text, urlObj, regexp) {\n return text.replace(regexp, function(m, pre, url, post) {\n var urlPath = u rl.replace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlObj. href;\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n }\n}\n \n// exports\nscope.parser = importParser;\nscope.path = path;\n\n})(HTMLImports );\n", 146 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\nvar I MPORT_LINK_TYPE = 'import';\nvar flags = scope.flags;\nvar isIE = scope.isIE;\n/ / TODO(sorvell): SD polyfill intrusion\nvar mainDoc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// importP arser\n// highlander object to manage parsing of imports\n// parses import relat ed elements\n// and ensures proper parse order\n// parse order is enforced by cr awling the tree and monitoring which elements\n// have been parsed; async parsin g is also supported.\n\n// highlander object for parsing a document tree\nvar im portParser = {\n // parse selectors for main document elements\n documentSelec tors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n // parse selectors for import doc ument elements\n importsSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']', \n 'link[rel=stylesheet]',\n 'style',\n 'script:not([type])',\n 'scr ipt[type=\"text/javascript\"]'\n ].join(','),\n map: {\n link: 'parseLink', \n script: 'parseScript',\n style: 'parseStyle'\n },\n // try to parse t he next import in the tree\n parseNext: function() {\n var next = this.nextT oParse();\n if (next) {\n this.parse(next);\n }\n },\n parse: funct ion(elt) {\n if (this.isParsed(elt)) {\n flags.parse && console.log('[%s ] is already parsed', elt.localName);\n return;\n }\n var fn = this[t his.map[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; pars ing is async so each\n // parsing implementation must inform the system that pa rsing is complete\n // via markParsingComplete.\n // To prompt the system to p arse the next element, parseNext should then be\n // called.\n // Note, parseN ext used to be included at the end of markParsingComplete, but\n // we must not do this so that, for example, we can (1) mark parsing complete \n // then (2) fire an import load event, and then (3) parse the next resource.\n markParsing: function(elt) {\n flags.parse && console.log('parsing', elt);\n this.pars ingElement = elt;\n },\n markParsingComplete: function(elt) {\n elt.__impor tParsed = true;\n if (elt.__importElement) {\n elt.__importElement.__imp ortParsed = true;\n }\n this.parsingElement = null;\n flags.parse && co nsole.log('completed', elt);\n },\n invalidateParse: function(doc) {\n if ( doc && doc.__importLink) {\n doc.__importParsed = doc.__importLink.__import Parsed = false;\n this.parseSoon();\n }\n },\n parseSoon: function() { \n if (this._parseSoon) {\n cancelAnimationFrame(this._parseDelay);\n }\n var parser = this;\n this._parseSoon = requestAnimationFrame(function () {\n parser.parseNext();\n });\n },\n parseImport: function(elt) {\n // TODO(sorvell): consider if there's a better way to do this;\n // expos e an imports parsing hook; this is needed, for example, by the\n // CustomEle ments polyfill.\n if (HTMLImports.__importsParsingHook) {\n HTMLImports. __importsParsingHook(elt);\n }\n if (elt.import) {\n elt.import.__imp ortParsed = true;\n }\n this.markParsingComplete(elt);\n // fire load e vent\n if (elt.__resource && !elt.__error) {\n elt.dispatchEvent(new Cus tomEvent('load', {bubbles: false})); \n } else {\n elt.dispatchEvent( new CustomEvent('error', {bubbles: false}));\n }\n // TODO(sorvell): worka round for Safari addEventListener not working\n // for elements not in the ma in document.\n if (elt.__pending) {\n var fn;\n while (elt.__pendin g.length) {\n fn = elt.__pending.shift();\n if (fn) {\n f n({target: elt});\n }\n }\n }\n this.parseNext();\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 this.addElementToDocument(elt);\n },\n r ootImportForElement: function(elt) {\n var n = elt;\n while (n.ownerDocume nt.__importLink) {\n n = n.ownerDocument.__importLink;\n }\n return n ;\n },\n addElementToDocument: function(elt) {\n var port = this.rootImport ForElement(elt.__importElement || elt);\n var l = port.__insertedElements = p ort.__insertedElements || 0;\n var refNode = port.nextElementSibling;\n fo r (var i=0; i < l; i++) {\n refNode = refNode && refNode.nextElementSibling ;\n }\n port.parentNode.insertBefore(elt, refNode);\n },\n // tracks whe n a loadable element has loaded\n trackElement: function(elt, callback) {\n var self = this;\n var done = function(e) {\n if (callback) {\n c allback(e);\n }\n self.markParsingComplete(elt);\n self.parseNext ();\n };\n elt.addEventListener('load', done);\n elt.addEventListener(' error', done);\n\n // NOTE: IE does not fire \"load\" event for styles that h ave already loaded\n // This is in violation of the spec, so we try our harde st to work around it\n if (isIE && elt.localName === 'style') {\n var fa keLoad = false;\n // If there's not @import in the textContent, assume it h as loaded\n if (elt.textContent.indexOf('@import') == -1) {\n fakeLo ad = true;\n // if we have a sheet, we have been parsed\n } else if (e lt.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, f ake the load\n fakeLoad = fakeLoad && Boolean(r.styleSheet);\n }\n }\n }\n // dispatch a fake load event and continue parsi ng\n if (fakeLoad) {\n elt.dispatchEvent(new CustomEvent('load', {bu bbles: false}));\n }\n }\n },\n // NOTE: execute scripts by injecting them and watching for the load/error\n // event. Inline scripts are handled via dataURL's because browsers tend to\n // provide correct parsing errors in this case. If this has any compatibility\n // issues, we can switch to injecting th e inline script with textContent.\n // Scripts with dataURL's do not appear to generate load events and therefore\n // we assume they execute synchronously.\n parseScript: function(scriptElt) {\n var script = document.createElement('s cript');\n script.__importElement = scriptElt;\n script.src = scriptElt.sr c ? scriptElt.src : \n generateScriptDataUrl(scriptElt);\n scope.curre ntScript = scriptElt;\n this.trackElement(script, function(e) {\n script .parentNode.removeChild(script);\n scope.currentScript = null; \n });\n this.addElementToDocument(script);\n },\n // determine the next element in the tree which should be parsed\n nextToParse: function() {\n this._mayPars e = [];\n return !this.parsingElement && this.nextToParseInDoc(mainDoc);\n } ,\n nextToParseInDoc: function(doc, link) {\n // use `marParse` list to avoi d looping into the same document again\n // since it could cause an iloop.\n if (doc && this._mayParse.indexOf(doc) < 0) {\n this._mayParse.push(doc) ;\n var nodes = doc.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 retu rn nodeIsImport(n) ? this.nextToParseInDoc(n.import, n) : n;\n } else { \n return;\n }\n }\n }\n }\n // all nodes have been parsed, ready to parse import, if any\n return link;\n },\n // re turn the set of parse selectors relevant for this node.\n parseSelectorsForNode : function(node) {\n var doc = node.ownerDocument || node;\n return doc == = mainDoc ? this.documentSelectors : this.importsSelectors;\n },\n isParsed: f unction(node) {\n return node.__importParsed;\n },\n hasResource: function( node) {\n if (nodeIsImport(node) && (node.import === undefined)) {\n ret urn false;\n }\n return true;\n }\n};\n\nfunction nodeIsImport(elt) {\n return (elt.localName === 'link') && (elt.rel === IMPORT_LINK_TYPE);\n}\n\nfunct ion generateScriptDataUrl(script) {\n var scriptContent = generateScriptContent (script);\n return 'data:text/javascript;charset=utf-8,' + encodeURIComponent(s criptContent);\n}\n\nfunction generateScriptContent(script) {\n return script.t extContent + generateSourceMapHint(script);\n}\n\n// calculate source map hint\n function generateSourceMapHint(script) {\n var moniker = script.__nodeUrl;\n i f (!moniker) {\n moniker = script.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 n eed to allow \n // this sort of thing\n var matches = script.textContent.m atch(/Polymer\\(['\"]([^'\"]*)/);\n tag = matches && matches[1] || tag;\n // tag the moniker\n moniker += '/' + tag + '.js';\n }\n return '\\n//# sou rceURL=' + moniker + '\\n';\n}\n\n// style/stylesheet handling\n\n// clone style with proper path resolution for main document\n// NOTE: styles are the only ele ments that require direct path fixup.\nfunction cloneStyle(style) {\n var clone = style.ownerDocument.createElement('style');\n clone.textContent = style.text Content;\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 fixup 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.resolve UrlsInCssText(style.textContent, resolver);\n return style; \n },\n resolv eUrlsInCssText: function(cssText, urlObj) {\n var r = this.replaceUrls(cssTex t, urlObj, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGE XP);\n return r;\n },\n replaceUrls: function(text, urlObj, regexp) {\n return text.replace(regexp, function(m, pre, url, post) {\n var urlPath = u rl.replace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlObj. href;\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n }\n}\n \n// exports\nscope.parser = importParser;\nscope.path = path;\n\n})(HTMLImports );\n",
147 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n (function(scope) {\n\nvar useNative = scope.useNative;\nvar flags = scope.flags;\nvar IMPORT_LINK_TYPE = ' import';\n\n// TODO(sorvell): SD polyfill intrusion\nvar mainDoc = window.Shadow DOMPolyfill ? \n ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\nif ( !useNative) {\n\n // imports\n var xhr = scope.xhr;\n var Loader = scope.Load er;\n var parser = scope.parser;\n\n // importer\n // highlander object to ma nage loading of imports\n\n // for any document, importer:\n // - loads any li nked import documents (with deduping)\n\n var 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 importsPre loadSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n ].join(','),\n loadNode: function(node) {\n importLoader.addNode(node);\n },\n / / load all loadable elements within the parent element\n loadSubtree: functio n(parent) {\n var nodes = this.marshalNodes(parent);\n // add these no des to loader's queue\n importLoader.addNodes(nodes);\n },\n marshalN odes: function(parent) {\n // all preloadable nodes in inDocument\n re turn parent.querySelectorAll(this.loadSelectorsForNode(parent));\n },\n // find the proper set of load selectors for a given node\n loadSelectorsForNod e: function(node) {\n var doc = node.ownerDocument || node;\n return d oc === mainDoc ? this.documentPreloadSelectors :\n this.importsPreloadS electors;\n },\n loaded: function(url, elt, resource, err, redirectedUrl) {\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/detail?id=249381.\n elt .__resource = resource;\n elt.__error = err;\n if (isDocumentLink(elt) ) {\n var doc = this.documents[url];\n // if we've never seen a do cument at this url\n if (doc === undefined) {\n // generate an H TMLDocument from data\n doc = err ? null : makeDocument(resource, redir ectedUrl || url);\n if (doc) {\n doc.__importLink = elt;\n // note, we cannot use MO to detect parsed nodes because\n // SD polyfill does not report these as mutations.\n this.bootDocumen t(doc);\n }\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 // ensure UTF-8 charset\n var meta = doc.createElement('meta');\n meta.setAttribute('charset', 'utf- 8');\n\n doc.head.appendChild(meta);\n doc.head.appendChild(base);\n // install HTML last as it may trigger CustomElement upgrades\n // TODO(sjmiles ): problem wrt to template boostrapping below,\n // template bootstrapping mu st (?) come before element upgrade\n // but we cannot bootstrap templates unt il they are in a document\n // which is too late\n if (!(resource instance of Document)) {\n // install html\n doc.body.innerHTML = resource;\n }\n // TODO(sorvell): ideally this code is not aware of Template polyfill,\ n // but for now the polyfill needs help to bootstrap these templates\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemp lateElement.bootstrap(doc);\n }\n return doc;\n }\n\n // Polyfill docume nt.baseURI for browsers without it.\n if (!document.baseURI) {\n var baseURI Descriptor = {\n get: function() {\n var base = document.querySelect or('base');\n return base ? base.href : window.location.href;\n },\n configurable: true\n };\n\n Object.defineProperty(document, 'baseURI ', baseURIDescriptor);\n Object.defineProperty(mainDoc, 'baseURI', baseURIDes criptor);\n }\n\n // IE shim for CustomEvent\n if (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = function(inType, dictionary) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(inType,\n dictionary.bubbles === false ? false : true,\n dictionary.cancela ble === false ? false : true,\n dictionary.detail);\n return e;\n };\n }\n\n} else {\n // do nothing if using native imports\n var importer = {};\n}\n\n// exports\nscope.importer = importer;\nscope.IMPORT_LINK_TYPE = IM PORT_LINK_TYPE;\nscope.importLoader = importLoader;\n\n\n})(window.HTMLImports); \n", 147 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n (function(scope) {\n\nvar useNative = scope.useNative;\nvar flags = scope.flags;\nvar IMPORT_LINK_TYPE = ' import';\n\n// TODO(sorvell): SD polyfill intrusion\nvar mainDoc = window.Shadow DOMPolyfill ? \n ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\nif ( !useNative) {\n\n // imports\n var xhr = scope.xhr;\n var Loader = scope.Load er;\n var parser = scope.parser;\n\n // importer\n // highlander object to ma nage loading of imports\n\n // for any document, importer:\n // - loads any li nked import documents (with deduping)\n\n var 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 importsPre loadSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n ].join(','),\n loadNode: function(node) {\n importLoader.addNode(node);\n },\n / / load all loadable elements within the parent element\n loadSubtree: functio n(parent) {\n var nodes = this.marshalNodes(parent);\n // add these no des to loader's queue\n importLoader.addNodes(nodes);\n },\n marshalN odes: function(parent) {\n // all preloadable nodes in inDocument\n re turn parent.querySelectorAll(this.loadSelectorsForNode(parent));\n },\n // find the proper set of load selectors for a given node\n loadSelectorsForNod e: function(node) {\n var doc = node.ownerDocument || node;\n return d oc === mainDoc ? this.documentPreloadSelectors :\n this.importsPreloadS electors;\n },\n loaded: function(url, elt, resource, err, redirectedUrl) {\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/detail?id=249381.\n elt .__resource = resource;\n elt.__error = err;\n if (isDocumentLink(elt) ) {\n var doc = this.documents[url];\n // if we've never seen a do cument at this url\n if (doc === undefined) {\n // generate an H TMLDocument from data\n doc = err ? null : makeDocument(resource, redir ectedUrl || url);\n if (doc) {\n doc.__importLink = elt;\n // note, we cannot use MO to detect parsed nodes because\n // SD polyfill does not report these as mutations.\n this.bootDocumen t(doc);\n }\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 // ensure UTF-8 charset\n var meta = doc.createElement('meta');\n meta.setAttribute('charset', 'utf- 8');\n\n doc.head.appendChild(meta);\n doc.head.appendChild(base);\n // install HTML last as it may trigger CustomElement upgrades\n // TODO(sjmiles ): problem wrt to template boostrapping below,\n // template bootstrapping mu st (?) come before element upgrade\n // but we cannot bootstrap templates unt il they are in a document\n // which is too late\n if (!(resource instance of Document)) {\n // install html\n doc.body.innerHTML = resource;\n }\n // TODO(sorvell): ideally this code is not aware of Template polyfill,\ n // but for now the polyfill needs help to bootstrap these templates\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemp lateElement.bootstrap(doc);\n }\n return doc;\n }\n\n // Polyfill docume nt.baseURI for browsers without it.\n if (!document.baseURI) {\n var baseURI Descriptor = {\n get: function() {\n var base = document.querySelect or('base');\n return base ? base.href : window.location.href;\n },\n configurable: true\n };\n\n Object.defineProperty(document, 'baseURI ', baseURIDescriptor);\n Object.defineProperty(mainDoc, 'baseURI', baseURIDes criptor);\n }\n\n // IE shim for CustomEvent\n if (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = function(inType, dictionary) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(inType,\n dictionary.bubbles === false ? false : true,\n dictionary.cancela ble === false ? false : true,\n dictionary.detail);\n return e;\n };\n }\n\n} else {\n // do nothing if using native imports\n var importer = {};\n}\n\n// exports\nscope.importer = importer;\nscope.IMPORT_LINK_TYPE = IM PORT_LINK_TYPE;\nscope.importLoader = importLoader;\n\n\n})(window.HTMLImports); \n",
148 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope){\n\nvar IM PORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\nvar importSelector = 'link[rel=' + IMP ORT_LINK_TYPE + ']';\nvar importer = scope.importer;\nvar parser = scope.parser; \n\n// we track mutations for addedNodes, looking for imports\nfunction handler( mutations) {\n for (var i=0, l=mutations.length, m; (i<l) && (m=mutations[i]); i++) {\n if (m.type === 'childList' && m.addedNodes.length) {\n addedNod es(m.addedNodes);\n }\n }\n}\n\n// find loadable elements and add them to th e importer\nfunction addedNodes(nodes) {\n var owner;\n for (var i=0, l=nodes. length, n; (i<l) && (n=nodes[i]); i++) {\n owner = owner || n.ownerDocument;\ n if (shouldLoadNode(n)) {\n importer.loadNode(n);\n }\n if (n.chi ldren && n.children.length) {\n addedNodes(n.children);\n }\n }\n // T ODO(sorvell): This is not the right approach here. We shouldn't need to\n // in validate parsing when an element is added. Disabling this code \n // until a be tter approach is found.\n /*\n if (owner) {\n parser.invalidateParse(owner) ;\n }\n */\n}\n\nfunction shouldLoadNode(node) {\n return (node.nodeType === 1) && matches.call(node,\n importer.loadSelectorsForNode(node));\n}\n\n// x -plat matches\nvar matches = HTMLElement.prototype.matches || \n HTMLElement. prototype.matchesSelector || \n HTMLElement.prototype.webkitMatchesSelector | |\n HTMLElement.prototype.mozMatchesSelector ||\n HTMLElement.prototype.ms MatchesSelector;\n\nvar observer = new MutationObserver(handler);\n\n// observe the given root for loadable elements\nfunction observe(root) {\n observer.obser ve(root, {childList: true, subtree: true});\n}\n\n// exports\n// TODO(sorvell): factor so can put on scope\nscope.observe = observe;\nimporter.observe = observe ;\n\n})(HTMLImports);\n", 148 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope){\n\nvar IM PORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\nvar importSelector = 'link[rel=' + IMP ORT_LINK_TYPE + ']';\nvar importer = scope.importer;\nvar parser = scope.parser; \n\n// we track mutations for addedNodes, looking for imports\nfunction handler( mutations) {\n for (var i=0, l=mutations.length, m; (i<l) && (m=mutations[i]); i++) {\n if (m.type === 'childList' && m.addedNodes.length) {\n addedNod es(m.addedNodes);\n }\n }\n}\n\n// find loadable elements and add them to th e importer\nfunction addedNodes(nodes) {\n var owner;\n for (var i=0, l=nodes. length, n; (i<l) && (n=nodes[i]); i++) {\n owner = owner || n.ownerDocument;\ n if (shouldLoadNode(n)) {\n importer.loadNode(n);\n }\n if (n.chi ldren && n.children.length) {\n addedNodes(n.children);\n }\n }\n // T ODO(sorvell): This is not the right approach here. We shouldn't need to\n // in validate parsing when an element is added. Disabling this code \n // until a be tter approach is found.\n /*\n if (owner) {\n parser.invalidateParse(owner) ;\n }\n */\n}\n\nfunction shouldLoadNode(node) {\n return (node.nodeType === 1) && matches.call(node,\n importer.loadSelectorsForNode(node));\n}\n\n// x -plat matches\nvar matches = HTMLElement.prototype.matches || \n HTMLElement. prototype.matchesSelector || \n HTMLElement.prototype.webkitMatchesSelector | |\n HTMLElement.prototype.mozMatchesSelector ||\n HTMLElement.prototype.ms MatchesSelector;\n\nvar observer = new MutationObserver(handler);\n\n// observe the given root for loadable elements\nfunction observe(root) {\n observer.obser ve(root, {childList: true, subtree: true});\n}\n\n// exports\n// TODO(sorvell): factor so can put on scope\nscope.observe = observe;\nimporter.observe = observe ;\n\n})(HTMLImports);\n",
149 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(){\n\n// bootstra p\n\n// TODO(sorvell): SD polyfill intrusion\nvar doc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// no ne ed to bootstrap the polyfill when native imports is available.\nif (!HTMLImports .useNative) {\n function bootstrap() {\n HTMLImports.importer.bootDocument(d oc);\n }\n \n // TODO(sorvell): SD polyfill does *not* generate mutations f or nodes added\n // by the parser. For this reason, we must wait until the dom exists to \n // bootstrap.\n if (document.readyState === 'complete' ||\n (document.readyState === 'interactive' && !window.attachEvent)) {\n bootstrap ();\n } else {\n document.addEventListener('DOMContentLoaded', bootstrap);\n }\n}\n\n})();\n", 149 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(){\n\n// bootstra p\n\n// TODO(sorvell): SD polyfill intrusion\nvar doc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// no ne ed to bootstrap the polyfill when native imports is available.\nif (!HTMLImports .useNative) {\n function bootstrap() {\n HTMLImports.importer.bootDocument(d oc);\n }\n \n // TODO(sorvell): SD polyfill does *not* generate mutations f or nodes added\n // by the parser. For this reason, we must wait until the dom exists to \n // bootstrap.\n if (document.readyState === 'complete' ||\n (document.readyState === 'interactive' && !window.attachEvent)) {\n bootstrap ();\n } else {\n document.addEventListener('DOMContentLoaded', bootstrap);\n }\n}\n\n})();\n",
150 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow.CustomElements = win dow.CustomElements || {flags:{}};", 150 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow.CustomElements = win dow.CustomElements || {flags:{}};",
151 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\r\n * This code may only be used under the BSD style license found at http:// polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n(functi on(scope){\r\n\r\nvar logFlags = window.logFlags || {};\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 e lement\r\n// if 'find' returns true for 'element', do not search element's subtr ee\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 !== Nod e.ELEMENT_NODE) {\r\n e = e.nextSibling;\r\n }\r\n }\r\n while (e) {\r \n if (find(e, data) !== true) {\r\n findAll(e, find, data);\r\n }\r\ n e = e.nextElementSibling;\r\n }\r\n return null;\r\n}\r\n\r\n// walk all shadowRoots on a given node.\r\nfunction forRoots(node, cb) {\r\n var root = no de.shadowRoot;\r\n while(root) {\r\n forSubtree(root, cb);\r\n root = roo t.olderShadowRoot;\r\n }\r\n}\r\n\r\n// walk the subtree rooted at node, includ ing descent into shadow-roots,\r\n// applying 'cb' to each element\r\nfunction f orSubtree(node, cb) {\r\n //logFlags.dom && node.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.childNo des.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 o n added node's subtree only\r\nfunction addedSubtree(node) {\r\n forSubtree(nod e, 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 and it's subtree\r\nfunction added Node(node) {\r\n return added(node) || addedSubtree(node);\r\n}\r\n\r\n// upgra de custom elements at node, if applicable\r\nfunction upgrade(node) {\r\n if (! node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {\r\n var type = no de.getAttribute('is') || node.localName;\r\n var definition = scope.registry[ type];\r\n if (definition) {\r\n logFlags.dom && console.group('upgrade: ', node.localName);\r\n scope.upgrade(node);\r\n logFlags.dom && conso le.groupEnd();\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nfunction insert edNode(node) {\r\n inserted(node);\r\n if (inDocument(node)) {\r\n forSubtr ee(node, function(e) {\r\n inserted(e);\r\n });\r\n }\r\n}\r\n\r\n// TO DO(sorvell): on platforms without MutationObserver, mutations may not be\r\n// r eliable and therefore attached/detached are not reliable.\r\n// To make these ca llbacks less likely to fail, we defer all inserts and removes\r\n// to give a ch ance for elements to be inserted into dom.\r\n// This ensures attachedCallback f ires for elements that are created and\r\n// immediately added to dom.\r\nvar ha sPolyfillMutations = (!window.MutationObserver ||\r\n (window.MutationObserve r === window.JsMutationObserver));\r\nscope.hasPolyfillMutations = hasPolyfillMu tations;\r\n\r\nvar isPendingMutations = false;\r\nvar pendingMutations = [];\r\ nfunction deferMutation(fn) {\r\n pendingMutations.push(fn);\r\n if (!isPendin gMutations) {\r\n isPendingMutations = true;\r\n var async = (window.Platf orm && window.Platform.endOfMicrotask) ||\r\n setTimeout;\r\n async(ta keMutations);\r\n }\r\n}\r\n\r\nfunction takeMutations() {\r\n isPendingMutati ons = 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 defer Mutation(function() {\r\n _inserted(element);\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n// TODO(sjmiles): if there are descent s into trees that can never have inDocument(*) true, fix this\r\nfunction _inser ted(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' h ere\r\n // But there are other cases where we are testing for inserted without\ r\n // specific knowledge of mutations, and must test 'inDocument' to determine \r\n // whether to call inserted\r\n // If we can factor these cases into sepa rate code paths we can have\r\n // better diagnostics.\r\n // TODO(sjmiles): w hen logging, do work on all custom elements so we can\r\n // track behavior eve n when callbacks not defined\r\n //console.log('inserted: ', element.localName) ;\r\n if (element.attachedCallback || element.detachedCallback || (element.__up graded__ && logFlags.dom)) {\r\n logFlags.dom && console.group('inserted:', e lement.localName);\r\n if (inDocument(element)) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n // if we are in a 'removed' state, bl untly 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.localName,\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.g roupEnd();\r\n }\r\n}\r\n\r\nfunction removedNode(node) {\r\n removed(node);\r \n forSubtree(node, function(e) {\r\n removed(e);\r\n });\r\n}\r\n\r\nfunct ion removed(element) {\r\n if (hasPolyfillMutations) {\r\n deferMutation(fun ction() {\r\n _removed(element);\r\n });\r\n } else {\r\n _removed(e lement);\r\n }\r\n}\r\n\r\nfunction _removed(element) {\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.attachedCallback || element.detached Callback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.dom && con sole.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 'removed' state\r\n if (elemen t.__inserted > 0) {\r\n element.__inserted = 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('removed:', element.localName,\r\n 'insert/remove count:', element.__inserted)\r\n } else if (elemen t.detachedCallback) {\r\n element.detachedCallback();\r\n }\r\n } \r\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\n// SD polyfill in trustion due mainly to the fact that 'document'\r\n// is not entirely wrapped\r\ nfunction wrapIfNeeded(node) {\r\n return window.ShadowDOMPolyfill ? ShadowDOMP olyfill.wrapIfNeeded(node)\r\n : node;\r\n}\r\n\r\nfunction inDocument(elem ent) {\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.parentNo de || p.host;\r\n }\r\n}\r\n\r\nfunction watchShadow(node) {\r\n if (node.shad owRoot && !node.shadowRoot.__watched) {\r\n logFlags.dom && console.log('watc hing shadow-root for: ', node.localName);\r\n // watch all unwatched roots... \r\n var root = node.shadowRoot;\r\n while (root) {\r\n watchRoot(roo t);\r\n root = root.olderShadowRoot;\r\n }\r\n }\r\n}\r\n\r\nfunction w atchRoot(root) {\r\n observe(root);\r\n}\r\n\r\nfunction handler(mutations) {\r \n //\r\n if (logFlags.dom) {\r\n var mx = mutations[0];\r\n if (mx && m x.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.sp lit('/?').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.addedNodes, function(n) {\r \n //logFlags.dom && console.log(n.localName);\r\n if (!n.localNam e) {\r\n return;\r\n }\r\n // nodes added may need lifecy cle management\r\n addedNode(n);\r\n });\r\n // removed nodes m ay need lifecycle management\r\n forEach(mx.removedNodes, 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\nfunction takeRecords(node) {\r\n // If the op tional node is not supplied, assume we mean the whole document.\r\n if (node == = undefined) node = document;\r\n\r\n // Find the root of the tree, which will be an Document or ShadowRoot.\r\n while (node.parentNode) {\r\n node = node. parentNode;\r\n }\r\n\r\n var observer = node.__observer;\r\n if (observer) { \r\n handler(observer.takeRecords());\r\n takeMutations();\r\n }\r\n}\r\n \r\nvar forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\r\ n\r\nfunction observe(inRoot) {\r\n if (inRoot.__observer) return;\r\n\r\n // For each ShadowRoot, we create a new MutationObserver, so the root can be\r\n / / garbage collected once all references to the `inRoot` node are gone.\r\n var observer = new MutationObserver(handler);\r\n observer.observe(inRoot, {childLi st: true, subtree: true});\r\n inRoot.__observer = observer;\r\n}\r\n\r\nfuncti on observeDocument(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocumen t(doc) {\r\n logFlags.dom && console.group('upgradeDocument: ', (doc.baseURI).s plit('/').pop());\r\n addedNode(doc);\r\n logFlags.dom && console.groupEnd();\ r\n}\r\n\r\n/*\r\nThis method is intended to be called when the document tree (i ncluding imports)\r\nhas pending custom elements to upgrade. It can be called mu ltiple times and \r\nshould do nothing if no elements are in need of upgrade.\r\ n\r\nNote that the import tree can consume itself and therefore special care\r\n must be taken to avoid recursion.\r\n*/\r\nvar upgradedDocuments;\r\nfunction up gradeDocumentTree(doc) {\r\n upgradedDocuments = [];\r\n _upgradeDocumentTree( doc);\r\n upgradedDocuments = null;\r\n}\r\n\r\n\r\nfunction _upgradeDocumentTr ee(doc) {\r\n doc = wrapIfNeeded(doc);\r\n if (upgradedDocuments.indexOf(doc) >= 0) {\r\n return;\r\n }\r\n upgradedDocuments.push(doc);\r\n //console.l og('upgradeDocumentTree: ', (doc.baseURI).split('/').pop());\r\n // upgrade con tained imported documents\r\n var imports = doc.querySelectorAll('link[rel=' + IMPORT_LINK_TYPE + ']');\r\n for (var i=0, l=imports.length, n; (i<l) && (n=imp orts[i]); i++) {\r\n if (n.import && n.import.__parsed) {\r\n _upgradeDo cumentTree(n.import);\r\n }\r\n }\r\n upgradeDocument(doc);\r\n}\r\n\r\n// exports\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\r\nscope.watchShadow = wat chShadow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeAl l = addedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\nscope.insertedNode = i nsertedNode;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDoc ument = upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(windo w.CustomElements);\r\n", 151 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\r\n * This code may only be used under the BSD style license found at http:// polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n(functi on(scope){\r\n\r\nvar logFlags = window.logFlags || {};\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 e lement\r\n// if 'find' returns true for 'element', do not search element's subtr ee\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 !== Nod e.ELEMENT_NODE) {\r\n e = e.nextSibling;\r\n }\r\n }\r\n while (e) {\r \n if (find(e, data) !== true) {\r\n findAll(e, find, data);\r\n }\r\ n e = e.nextElementSibling;\r\n }\r\n return null;\r\n}\r\n\r\n// walk all shadowRoots on a given node.\r\nfunction forRoots(node, cb) {\r\n var root = no de.shadowRoot;\r\n while(root) {\r\n forSubtree(root, cb);\r\n root = roo t.olderShadowRoot;\r\n }\r\n}\r\n\r\n// walk the subtree rooted at node, includ ing descent into shadow-roots,\r\n// applying 'cb' to each element\r\nfunction f orSubtree(node, cb) {\r\n //logFlags.dom && node.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.childNo des.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 o n added node's subtree only\r\nfunction addedSubtree(node) {\r\n forSubtree(nod e, 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 and it's subtree\r\nfunction added Node(node) {\r\n return added(node) || addedSubtree(node);\r\n}\r\n\r\n// upgra de custom elements at node, if applicable\r\nfunction upgrade(node) {\r\n if (! node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {\r\n var type = no de.getAttribute('is') || node.localName;\r\n var definition = scope.registry[ type];\r\n if (definition) {\r\n logFlags.dom && console.group('upgrade: ', node.localName);\r\n scope.upgrade(node);\r\n logFlags.dom && conso le.groupEnd();\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nfunction insert edNode(node) {\r\n inserted(node);\r\n if (inDocument(node)) {\r\n forSubtr ee(node, function(e) {\r\n inserted(e);\r\n });\r\n }\r\n}\r\n\r\n// TO DO(sorvell): on platforms without MutationObserver, mutations may not be\r\n// r eliable and therefore attached/detached are not reliable.\r\n// To make these ca llbacks less likely to fail, we defer all inserts and removes\r\n// to give a ch ance for elements to be inserted into dom.\r\n// This ensures attachedCallback f ires for elements that are created and\r\n// immediately added to dom.\r\nvar ha sPolyfillMutations = (!window.MutationObserver ||\r\n (window.MutationObserve r === window.JsMutationObserver));\r\nscope.hasPolyfillMutations = hasPolyfillMu tations;\r\n\r\nvar isPendingMutations = false;\r\nvar pendingMutations = [];\r\ nfunction deferMutation(fn) {\r\n pendingMutations.push(fn);\r\n if (!isPendin gMutations) {\r\n isPendingMutations = true;\r\n var async = (window.Platf orm && window.Platform.endOfMicrotask) ||\r\n setTimeout;\r\n async(ta keMutations);\r\n }\r\n}\r\n\r\nfunction takeMutations() {\r\n isPendingMutati ons = 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 defer Mutation(function() {\r\n _inserted(element);\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n// TODO(sjmiles): if there are descent s into trees that can never have inDocument(*) true, fix this\r\nfunction _inser ted(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' h ere\r\n // But there are other cases where we are testing for inserted without\ r\n // specific knowledge of mutations, and must test 'inDocument' to determine \r\n // whether to call inserted\r\n // If we can factor these cases into sepa rate code paths we can have\r\n // better diagnostics.\r\n // TODO(sjmiles): w hen logging, do work on all custom elements so we can\r\n // track behavior eve n when callbacks not defined\r\n //console.log('inserted: ', element.localName) ;\r\n if (element.attachedCallback || element.detachedCallback || (element.__up graded__ && logFlags.dom)) {\r\n logFlags.dom && console.group('inserted:', e lement.localName);\r\n if (inDocument(element)) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n // if we are in a 'removed' state, bl untly 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.localName,\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.g roupEnd();\r\n }\r\n}\r\n\r\nfunction removedNode(node) {\r\n removed(node);\r \n forSubtree(node, function(e) {\r\n removed(e);\r\n });\r\n}\r\n\r\nfunct ion removed(element) {\r\n if (hasPolyfillMutations) {\r\n deferMutation(fun ction() {\r\n _removed(element);\r\n });\r\n } else {\r\n _removed(e lement);\r\n }\r\n}\r\n\r\nfunction _removed(element) {\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.attachedCallback || element.detached Callback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.dom && con sole.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 'removed' state\r\n if (elemen t.__inserted > 0) {\r\n element.__inserted = 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('removed:', element.localName,\r\n 'insert/remove count:', element.__inserted)\r\n } else if (elemen t.detachedCallback) {\r\n element.detachedCallback();\r\n }\r\n } \r\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\n// SD polyfill in trustion due mainly to the fact that 'document'\r\n// is not entirely wrapped\r\ nfunction wrapIfNeeded(node) {\r\n return window.ShadowDOMPolyfill ? ShadowDOMP olyfill.wrapIfNeeded(node)\r\n : node;\r\n}\r\n\r\nfunction inDocument(elem ent) {\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.parentNo de || p.host;\r\n }\r\n}\r\n\r\nfunction watchShadow(node) {\r\n if (node.shad owRoot && !node.shadowRoot.__watched) {\r\n logFlags.dom && console.log('watc hing shadow-root for: ', node.localName);\r\n // watch all unwatched roots... \r\n var root = node.shadowRoot;\r\n while (root) {\r\n watchRoot(roo t);\r\n root = root.olderShadowRoot;\r\n }\r\n }\r\n}\r\n\r\nfunction w atchRoot(root) {\r\n if (!root.__watched) {\r\n observe(root);\r\n root._ _watched = true;\r\n }\r\n}\r\n\r\nfunction handler(mutations) {\r\n //\r\n i f (logFlags.dom) {\r\n var mx = mutations[0];\r\n if (mx && mx.type === 'c hildList' && 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('/?').shi ft().split('/').pop();\r\n }\r\n }\r\n console.group('mutations (%d ) [%s]', mutations.length, u || '');\r\n }\r\n //\r\n mutations.forEach(funct ion(mx) {\r\n //logFlags.dom && console.group('mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx.addedNodes, function(n) {\r\n //l ogFlags.dom && console.log(n.localName);\r\n if (!n.localName) {\r\n return;\r\n }\r\n // nodes added may need lifecycle managemen t\r\n addedNode(n);\r\n });\r\n // removed nodes may need lifec ycle management\r\n forEach(mx.removedNodes, function(n) {\r\n //log Flags.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.grou pEnd();\r\n};\r\n\r\nvar observer = new MutationObserver(handler);\r\n\r\nfuncti on takeRecords() {\r\n // TODO(sjmiles): ask Raf why we have to call handler ou rselves\r\n handler(observer.takeRecords());\r\n takeMutations();\r\n}\r\n\r\n var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\r\n\r\ nfunction observe(inRoot) {\r\n observer.observe(inRoot, {childList: true, subt ree: true});\r\n}\r\n\r\nfunction observeDocument(doc) {\r\n observe(doc);\r\n} \r\n\r\nfunction upgradeDocument(doc) {\r\n logFlags.dom && console.group('upgr adeDocument: ', (doc.baseURI).split('/').pop());\r\n addedNode(doc);\r\n logFl ags.dom && console.groupEnd();\r\n}\r\n\r\n/*\r\nThis method is intended to be c alled when the document tree (including imports)\r\nhas pending custom elements to upgrade. It can be called multiple times and \r\nshould do nothing if no elem ents are in need of upgrade.\r\n\r\nNote that the import tree can consume itself and therefore special care\r\nmust be taken to avoid recursion.\r\n*/\r\nvar up gradedDocuments;\r\nfunction upgradeDocumentTree(doc) {\r\n upgradedDocuments = [];\r\n _upgradeDocumentTree(doc);\r\n upgradedDocuments = null;\r\n}\r\n\r\n \r\nfunction _upgradeDocumentTree(doc) {\r\n doc = wrapIfNeeded(doc);\r\n if ( upgradedDocuments.indexOf(doc) >= 0) {\r\n return;\r\n }\r\n upgradedDocume nts.push(doc);\r\n //console.log('upgradeDocumentTree: ', (doc.baseURI).split(' /').pop());\r\n // upgrade contained imported documents\r\n var imports = doc. querySelectorAll('link[rel=' + IMPORT_LINK_TYPE + ']');\r\n for (var i=0, l=imp orts.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 upgrad eDocument(doc);\r\n}\r\n\r\n// exports\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_T YPE;\r\nscope.watchShadow = watchShadow;\r\nscope.upgradeDocumentTree = upgradeD ocumentTree;\r\nscope.upgradeAll = addedNode;\r\nscope.upgradeSubtree = addedSub tree;\r\nscope.insertedNode = insertedNode;\r\n\r\nscope.observeDocument = obser veDocument;\r\nscope.upgradeDocument = upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(window.CustomElements);\r\n",
152 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Implements `docum ent.registerElement`\n * @module CustomElements\n*/\n\n/**\n * Polyfilled extens ions to the `document` object.\n * @class Document\n*/\n\n(function(scope) {\n\n // imports\n\nif (!scope) {\n scope = window.CustomElements = {flags:{}};\n}\nv ar flags = scope.flags;\n\n// native document.registerElement?\n\nvar hasNative = Boolean(document.registerElement);\n// For consistent timing, use native custo m elements only when not polyfilling\n// other key related web components featur es.\nvar useNative = !flags.register && hasNative && !window.ShadowDOMPolyfill & & (!window.HTMLImports || HTMLImports.useNative);\n\nif (useNative) {\n\n // st ub\n var nop = function() {};\n\n // exports\n scope.registry = {};\n scope. upgradeElement = nop;\n\n scope.watchShadow = nop;\n scope.upgrade = nop;\n s cope.upgradeAll = nop;\n scope.upgradeSubtree = nop;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop;\n scope.upgradeDocumentTree = nop;\n sco pe.takeRecords = nop;\n scope.reservedTagList = [];\n\n} else {\n\n /**\n * Registers a custom tag name with the document.\n *\n * When a registered ele ment is created, a `readyCallback` method is called\n * in the scope of the el ement. The `readyCallback` method can be specified on\n * either `options.prot otype` or `options.lifecycle` with the latter taking\n * precedence.\n *\n * @method register\n * @param {String} name The tag name to register. Must in clude a dash ('-'),\n * for example 'x-component'.\n * @param {Object} op tions\n * @param {String} [options.extends]\n * (_off spec_) Tag nam e of an element to extend (or blank for a new\n * element). This paramete r is not part of the specification, but instead\n * is a hint for the pol yfill because the extendee is difficult to infer.\n * Remember that the i nput prototype must chain to the extended element's\n * prototype (or HTM LElement.prototype) regardless of the value of\n * `extends`.\n * @p aram {Object} options.prototype The prototype to use for the new\n * elem ent. The prototype must inherit from HTMLElement.\n * @param {Object} [opti ons.lifecycle]\n * Callbacks that fire at important phases in the life of the custom\n * element.\n *\n * @example\n * FancyButton = do cument.registerElement(\"fancy-button\", {\n * extends: 'button',\n * prototype: Object.create(HTMLButtonElement.prototype, {\n * r eadyCallback: {\n * value: function() {\n * console. log(\"a fancy-button was created\",\n * }\n * }\n * })\n * });\n * @return {Function} Constructor for the newly regist ered type.\n */\n function register(name, options) {\n //console.warn('doc ument.registerElement(\"' + name + '\", ', options, ')');\n // construct a de fintion out of options\n // TODO(sjmiles): probably should clone options inst ead 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 arg ument `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 ar gument (\\'name\\') must contain a dash (\\'-\\'). Argument provided was \\'' + String(name) + '\\'.');\n }\n // prevent registering reserved names\n i f (isReservedTag(name)) {\n throw new Error('Failed to execute \\'registerE lement\\' on \\'Document\\': Registration failed for type \\'' + String(name) + '\\'. The type name is invalid.');\n }\n // elements may only be registere d once\n if (getRegisteredDefinition(name)) {\n throw new Error('Duplica teDefinitionError: a type with name \\'' + String(name) + '\\' is already regist ered');\n }\n // must have a prototype, default to an extension of HTMLEle ment\n // TODO(sjmiles): probably should throw if no prototype, check spec\n if (!definition.prototype) {\n // TODO(sjmiles): replace with more appro priate error (EricB can probably\n // offer guidance)\n throw new Erro r('Options missing required prototype property');\n }\n // record name\n definition.__name = name.toLowerCase();\n // ensure a lifecycle object so w e don't have to null test it\n definition.lifecycle = definition.lifecycle || {};\n // build a list of ancestral custom elements (for native base detectio n)\n // TODO(sjmiles): we used to need to store this, but current code only\n // uses it in 'resolveTagName': it should probably be inlined\n definitio n.ancestry = ancestry(definition.extends);\n // extensions of native speciali zations of HTMLElement require localName\n // to remain native, and use secon dary 'is' specifier for extension type\n resolveTagName(definition);\n // some platforms require modifications to the user-supplied prototype\n // chai n\n resolvePrototypeChain(definition);\n // overrides to implement attribu teChanged callback\n overrideAttributeApi(definition.prototype);\n // 7.1. 5: Register the DEFINITION with DOCUMENT\n registerDefinition(definition.__na me, definition);\n // 7.1.7. Run custom element constructor generation algori thm with PROTOTYPE\n // 7.1.8. Return the output of the previous step.\n d efinition.ctor = generateConstructor(definition);\n definition.ctor.prototype = definition.prototype;\n // force our .constructor to be our actual constru ctor\n definition.prototype.constructor = definition.ctor;\n // if initial parsing is complete\n if (scope.ready) {\n // upgrade any pre-existing nodes of this type\n scope.upgradeDocumentTree(document);\n }\n retur n definition.ctor;\n }\n\n function isReservedTag(name) {\n for (var i = 0; i < reservedTagList.length; i++) {\n if (name === reservedTagList[i]) {\n return true;\n }\n }\n }\n\n var reservedTagList = [\n 'anno tation-xml', 'color-profile', 'font-face', 'font-face-src',\n 'font-face-uri' , 'font-face-format', 'font-face-name', 'missing-glyph'\n ];\n\n function ance stry(extnds) {\n var extendee = getRegisteredDefinition(extnds);\n if (ext endee) {\n return ancestry(extendee.extends).concat([extendee]);\n }\n return [];\n }\n\n function resolveTagName(definition) {\n // if we are e xplicitly extending something, that thing is our\n // baseTag, unless it repr esents a custom component\n var baseTag = definition.extends;\n // if our ancestry includes custom components, we only have a\n // baseTag if one of th em does\n for (var i=0, a; (a=definition.ancestry[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our tag is our baseTag, if it exists, and otherw ise just our name\n definition.tag = baseTag || definition.__name;\n if (b aseTag) {\n // if there is a base tag, use secondary 'is' specifier\n definition.is = definition.__name;\n }\n }\n\n function resolvePrototypeCha in(definition) {\n // if we don't support __proto__ we need to locate the nat ive level\n // prototype for precise mixing in\n if (!Object.__proto__) {\ n // default prototype\n var nativePrototype = HTMLElement.prototype;\ n // work out prototype when using type-extension\n if (definition.is) {\n var inst = document.createElement(definition.tag);\n var expe ctedPrototype = Object.getPrototypeOf(inst);\n // only set nativePrototyp e if it will actually appear in the definition's chain\n if (expectedProt otype === definition.prototype) {\n nativePrototype = expectedPrototype ;\n }\n }\n // ensure __proto__ reference is installed at each point on the prototype\n // chain.\n // NOTE: On platforms without __p roto__, a mixin strategy is used instead\n // of prototype swizzling. In th is case, this generated __proto__ provides\n // limited support for prototy pe traversal.\n var proto = definition.prototype, ancestor;\n while (p roto && (proto !== nativePrototype)) {\n ancestor = Object.getPrototypeOf (proto);\n proto.__proto__ = ancestor;\n proto = ancestor;\n }\n // cache this in case of mixin\n definition.native = nativePrototy pe;\n }\n }\n\n // SECTION 4\n\n function instantiate(definition) {\n / / 4.a.1. Create a new object that implements PROTOTYPE\n // 4.a.2. Let ELEMEN T 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 function upgrade(element, definition) {\n // some defi nitions specify an 'is' attribute\n if (definition.is) {\n element.setAt tribute('is', definition.is);\n }\n // make 'element' implement definition .prototype\n implement(element, definition);\n // flag as upgraded\n el ement.__upgraded__ = true;\n // lifecycle management\n created(element);\n // attachedCallback fires in tree order, call before recursing\n scope.in sertedNode(element);\n // there should never be a shadow root on element at t his point\n scope.upgradeSubtree(element);\n // OUTPUT\n return element ;\n }\n\n function implement(element, definition) {\n // prototype swizzlin g is best\n if (Object.__proto__) {\n element.__proto__ = definition.pro totype;\n } else {\n // where 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 element.__proto__ = definition.prototype;\n }\n } \n\n function customMixin(inTarget, inSrc, inNative) {\n // TODO(sjmiles): ' used' allows us to only copy the 'youngest' version of\n // any property. Thi s set should be precalculated. We also need to\n // consider this for support ing 'super'.\n var used = {};\n // start with inSrc\n var p = inSrc;\n // The default is HTMLElement.prototype, so we add a test to avoid mixing in\ n // native prototypes\n while (p !== inNative && p !== HTMLElement.protot ype) {\n var keys = Object.getOwnPropertyNames(p);\n for (var i=0, k; k=keys[i]; i++) {\n if (!used[k]) {\n Object.defineProperty(inTa rget, 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.cr eatedCallback) {\n element.createdCallback();\n }\n }\n\n // attribute watching\n\n function overrideAttributeApi(prototype) {\n // overrides to i mplement callbacks\n // TODO(sjmiles): should support access via .attributes NamedNodeMap\n // TODO(sjmiles): preserves user defined overrides, if any\n if (prototype.setAttribute._polyfilled) {\n return;\n }\n var setAt tribute = prototype.setAttribute;\n prototype.setAttribute = function(name, v alue) {\n changeAttribute.call(this, name, value, setAttribute);\n }\n var removeAttribute = prototype.removeAttribute;\n prototype.removeAttribut e = function(name) {\n changeAttribute.call(this, name, null, removeAttribu te);\n }\n prototype.setAttribute._polyfilled = true;\n }\n\n // https:/ /dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/\n // index.html#dfn-att ribute-changed-callback\n function changeAttribute(name, value, operation) {\n name = name.toLowerCase();\n var oldValue = this.getAttribute(name);\n operation.apply(this, arguments);\n var newValue = this.getAttribute(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 registry = {};\n\n f unction getRegisteredDefinition(name) {\n if (name) {\n return registry[ name.toLowerCase()];\n }\n }\n\n function registerDefinition(name, definiti on) {\n registry[name] = definition;\n }\n\n function generateConstructor(d efinition) {\n return function() {\n return instantiate(definition);\n };\n }\n\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n function createElementNS(namespace, tag, typeExtension) {\n // NOTE: we do not support non-HTML elements,\n // just call createElementNS for non HTML Elements\n if (namespace === HTML_NAMESPACE) {\n return createElement(tag, typeExtens ion);\n } else {\n return domCreateElementNS(namespace, tag);\n }\n }\n\n function createElement(tag, typeExtension) {\n // TODO(sjmiles): ignor e 'tag' when using 'typeExtension', we could\n // error check it, or perhaps there should only ever be one argument\n var definition = getRegisteredDefini tion(typeExtension || tag);\n if (definition) {\n if (tag == definition. tag && typeExtension == definition.is) {\n return new definition.ctor();\ n }\n // Handle empty string for type extension.\n if (!typeExten sion && !definition.is) {\n return new definition.ctor();\n }\n } \n\n if (typeExtension) {\n var element = createElement(tag);\n ele ment.setAttribute('is', typeExtension);\n return element;\n }\n var e lement = domCreateElement(tag);\n // Custom tags should be HTMLElements even if not upgraded.\n if (tag.indexOf('-') >= 0) {\n implement(element, HTM LElement);\n }\n return element;\n }\n\n function upgradeElement(element ) {\n if (!element.__upgraded__ && (element.nodeType === Node.ELEMENT_NODE)) {\n var is = element.getAttribute('is');\n var definition = getRegiste redDefinition(is || element.localName);\n if (definition) {\n if (is && definition.tag == element.localName) {\n return upgrade(element, de finition);\n } else if (!is && !definition.extends) {\n return u pgrade(element, definition);\n }\n }\n }\n }\n\n function clone Node(deep) {\n // call original clone\n var n = domCloneNode.call(this, de ep);\n // upgrade the element and subtree\n scope.upgradeAll(n);\n // r eturn the clone\n return n;\n }\n // capture native createElement before we override it\n\n var domCreateElement = document.createElement.bind(document);\ n var domCreateElementNS = document.createElementNS.bind(document);\n\n // cap ture native cloneNode before we override it\n\n var domCloneNode = Node.prototy pe.cloneNode;\n\n // exports\n\n document.registerElement = register;\n docum ent.createElement = createElement; // override\n document.createElementNS = cre ateElementNS; // override\n Node.prototype.cloneNode = cloneNode; // override\n \n scope.registry = registry;\n\n /**\n * Upgrade an element to a custom ele ment. Upgrading an element\n * causes the custom prototype to be applied, an ` is` attribute\n * to be attached (as needed), and invocation of the `readyCall back`.\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 upg raded element.\n */\n scope.upgrade = upgradeElement;\n}\n\n// Create a custo m 'instanceof'. This is necessary when CustomElements\n// are implemented via a mixin strategy, as for example on IE10.\nvar isInstance;\nif (!Object.__proto__ && !useNative) {\n isInstance = function(obj, ctor) {\n var p = obj;\n wh ile (p) {\n // NOTE: this is not technically correct since we're not checki ng if\n // an object is an instance of a constructor; however, this should\ n // be good enough for the mixin strategy.\n if (p === ctor.prototype ) {\n return true;\n }\n p = p.__proto__;\n }\n return fa lse;\n }\n} else {\n isInstance = function(obj, base) {\n return obj instan ceof base;\n }\n}\n\n// exports\nscope.instanceof = isInstance;\nscope.reserved TagList = reservedTagList;\n\n// bc\ndocument.register = document.registerElemen t;\n\nscope.hasNative = hasNative;\nscope.useNative = useNative;\n\n})(window.Cu stomElements);\n", 152 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Implements `docum ent.registerElement`\n * @module CustomElements\n*/\n\n/**\n * Polyfilled extens ions to the `document` object.\n * @class Document\n*/\n\n(function(scope) {\n\n // imports\n\nif (!scope) {\n scope = window.CustomElements = {flags:{}};\n}\nv ar flags = scope.flags;\n\n// native document.registerElement?\n\nvar hasNative = Boolean(document.registerElement);\n// For consistent timing, use native custo m elements only when not polyfilling\n// other key related web components featur es.\nvar useNative = !flags.register && hasNative && !window.ShadowDOMPolyfill & & (!window.HTMLImports || HTMLImports.useNative);\n\nif (useNative) {\n\n // st ub\n var nop = function() {};\n\n // exports\n scope.registry = {};\n scope. upgradeElement = nop;\n\n scope.watchShadow = nop;\n scope.upgrade = nop;\n s cope.upgradeAll = nop;\n scope.upgradeSubtree = nop;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop;\n scope.upgradeDocumentTree = nop;\n sco pe.takeRecords = nop;\n scope.reservedTagList = [];\n\n} else {\n\n /**\n * Registers a custom tag name with the document.\n *\n * When a registered ele ment is created, a `readyCallback` method is called\n * in the scope of the el ement. The `readyCallback` method can be specified on\n * either `options.prot otype` or `options.lifecycle` with the latter taking\n * precedence.\n *\n * @method register\n * @param {String} name The tag name to register. Must in clude a dash ('-'),\n * for example 'x-component'.\n * @param {Object} op tions\n * @param {String} [options.extends]\n * (_off spec_) Tag nam e of an element to extend (or blank for a new\n * element). This paramete r is not part of the specification, but instead\n * is a hint for the pol yfill because the extendee is difficult to infer.\n * Remember that the i nput prototype must chain to the extended element's\n * prototype (or HTM LElement.prototype) regardless of the value of\n * `extends`.\n * @p aram {Object} options.prototype The prototype to use for the new\n * elem ent. The prototype must inherit from HTMLElement.\n * @param {Object} [opti ons.lifecycle]\n * Callbacks that fire at important phases in the life of the custom\n * element.\n *\n * @example\n * FancyButton = do cument.registerElement(\"fancy-button\", {\n * extends: 'button',\n * prototype: Object.create(HTMLButtonElement.prototype, {\n * r eadyCallback: {\n * value: function() {\n * console. log(\"a fancy-button was created\",\n * }\n * }\n * })\n * });\n * @return {Function} Constructor for the newly regist ered type.\n */\n function register(name, options) {\n //console.warn('doc ument.registerElement(\"' + name + '\", ', options, ')');\n // construct a de fintion out of options\n // TODO(sjmiles): probably should clone options inst ead 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 arg ument `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 ar gument (\\'name\\') must contain a dash (\\'-\\'). Argument provided was \\'' + String(name) + '\\'.');\n }\n // prevent registering reserved names\n i f (isReservedTag(name)) {\n throw new Error('Failed to execute \\'registerE lement\\' on \\'Document\\': Registration failed for type \\'' + String(name) + '\\'. The type name is invalid.');\n }\n // elements may only be registere d once\n if (getRegisteredDefinition(name)) {\n throw new Error('Duplica teDefinitionError: a type with name \\'' + String(name) + '\\' is already regist ered');\n }\n // must have a prototype, default to an extension of HTMLEle ment\n // TODO(sjmiles): probably should throw if no prototype, check spec\n if (!definition.prototype) {\n // TODO(sjmiles): replace with more appro priate error (EricB can probably\n // offer guidance)\n throw new Erro r('Options missing required prototype property');\n }\n // record name\n definition.__name = name.toLowerCase();\n // ensure a lifecycle object so w e don't have to null test it\n definition.lifecycle = definition.lifecycle || {};\n // build a list of ancestral custom elements (for native base detectio n)\n // TODO(sjmiles): we used to need to store this, but current code only\n // uses it in 'resolveTagName': it should probably be inlined\n definitio n.ancestry = ancestry(definition.extends);\n // extensions of native speciali zations of HTMLElement require localName\n // to remain native, and use secon dary 'is' specifier for extension type\n resolveTagName(definition);\n // some platforms require modifications to the user-supplied prototype\n // chai n\n resolvePrototypeChain(definition);\n // overrides to implement attribu teChanged callback\n overrideAttributeApi(definition.prototype);\n // 7.1. 5: Register the DEFINITION with DOCUMENT\n registerDefinition(definition.__na me, definition);\n // 7.1.7. Run custom element constructor generation algori thm with PROTOTYPE\n // 7.1.8. Return the output of the previous step.\n d efinition.ctor = generateConstructor(definition);\n definition.ctor.prototype = definition.prototype;\n // force our .constructor to be our actual constru ctor\n definition.prototype.constructor = definition.ctor;\n // if initial parsing is complete\n if (scope.ready) {\n // upgrade any pre-existing nodes of this type\n scope.upgradeDocumentTree(document);\n }\n retur n definition.ctor;\n }\n\n function isReservedTag(name) {\n for (var i = 0; i < reservedTagList.length; i++) {\n if (name === reservedTagList[i]) {\n return true;\n }\n }\n }\n\n var reservedTagList = [\n 'anno tation-xml', 'color-profile', 'font-face', 'font-face-src',\n 'font-face-uri' , 'font-face-format', 'font-face-name', 'missing-glyph'\n ];\n\n function ance stry(extnds) {\n var extendee = getRegisteredDefinition(extnds);\n if (ext endee) {\n return ancestry(extendee.extends).concat([extendee]);\n }\n return [];\n }\n\n function resolveTagName(definition) {\n // if we are e xplicitly extending something, that thing is our\n // baseTag, unless it repr esents a custom component\n var baseTag = definition.extends;\n // if our ancestry includes custom components, we only have a\n // baseTag if one of th em does\n for (var i=0, a; (a=definition.ancestry[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our tag is our baseTag, if it exists, and otherw ise just our name\n definition.tag = baseTag || definition.__name;\n if (b aseTag) {\n // if there is a base tag, use secondary 'is' specifier\n definition.is = definition.__name;\n }\n }\n\n function resolvePrototypeCha in(definition) {\n // if we don't support __proto__ we need to locate the nat ive level\n // prototype for precise mixing in\n if (!Object.__proto__) {\ n // default prototype\n var nativePrototype = HTMLElement.prototype;\ n // work out prototype when using type-extension\n if (definition.is) {\n var inst = document.createElement(definition.tag);\n var expe ctedPrototype = Object.getPrototypeOf(inst);\n // only set nativePrototyp e if it will actually appear in the definition's chain\n if (expectedProt otype === definition.prototype) {\n nativePrototype = expectedPrototype ;\n }\n }\n // ensure __proto__ reference is installed at each point on the prototype\n // chain.\n // NOTE: On platforms without __p roto__, a mixin strategy is used instead\n // of prototype swizzling. In th is case, this generated __proto__ provides\n // limited support for prototy pe traversal.\n var proto = definition.prototype, ancestor;\n while (p roto && (proto !== nativePrototype)) {\n ancestor = Object.getPrototypeOf (proto);\n proto.__proto__ = ancestor;\n proto = ancestor;\n }\n // cache this in case of mixin\n definition.native = nativePrototy pe;\n }\n }\n\n // SECTION 4\n\n function instantiate(definition) {\n / / 4.a.1. Create a new object that implements PROTOTYPE\n // 4.a.2. Let ELEMEN T 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 function upgrade(element, definition) {\n // some defi nitions specify an 'is' attribute\n if (definition.is) {\n element.setAt tribute('is', definition.is);\n }\n // make 'element' implement definition .prototype\n implement(element, definition);\n // flag as upgraded\n el ement.__upgraded__ = true;\n // lifecycle management\n created(element);\n // attachedCallback fires in tree order, call before recursing\n scope.in sertedNode(element);\n // there should never be a shadow root on element at t his point\n scope.upgradeSubtree(element);\n // OUTPUT\n return element ;\n }\n\n function implement(element, definition) {\n // prototype swizzlin g is best\n if (Object.__proto__) {\n element.__proto__ = definition.pro totype;\n } else {\n // where 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 element.__proto__ = definition.prototype;\n }\n } \n\n function customMixin(inTarget, inSrc, inNative) {\n // TODO(sjmiles): ' used' allows us to only copy the 'youngest' version of\n // any property. Thi s set should be precalculated. We also need to\n // consider this for support ing 'super'.\n var used = {};\n // start with inSrc\n var p = inSrc;\n // The default is HTMLElement.prototype, so we add a test to avoid mixing in\ n // native prototypes\n while (p !== inNative && p !== HTMLElement.protot ype) {\n var keys = Object.getOwnPropertyNames(p);\n for (var i=0, k; k=keys[i]; i++) {\n if (!used[k]) {\n Object.defineProperty(inTa rget, 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.cr eatedCallback) {\n element.createdCallback();\n }\n }\n\n // attribute watching\n\n function overrideAttributeApi(prototype) {\n // overrides to i mplement callbacks\n // TODO(sjmiles): should support access via .attributes NamedNodeMap\n // TODO(sjmiles): preserves user defined overrides, if any\n if (prototype.setAttribute._polyfilled) {\n return;\n }\n var setAt tribute = prototype.setAttribute;\n prototype.setAttribute = function(name, v alue) {\n changeAttribute.call(this, name, value, setAttribute);\n }\n var removeAttribute = prototype.removeAttribute;\n prototype.removeAttribut e = function(name) {\n changeAttribute.call(this, name, null, removeAttribu te);\n }\n prototype.setAttribute._polyfilled = true;\n }\n\n // https:/ /dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/\n // index.html#dfn-att ribute-changed-callback\n function changeAttribute(name, value, operation) {\n name = name.toLowerCase();\n var oldValue = this.getAttribute(name);\n operation.apply(this, arguments);\n var newValue = this.getAttribute(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 registry = {};\n\n f unction getRegisteredDefinition(name) {\n if (name) {\n return registry[ name.toLowerCase()];\n }\n }\n\n function registerDefinition(name, definiti on) {\n registry[name] = definition;\n }\n\n function generateConstructor(d efinition) {\n return function() {\n return instantiate(definition);\n };\n }\n\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n function createElementNS(namespace, tag, typeExtension) {\n // NOTE: we do not support non-HTML elements,\n // just call createElementNS for non HTML Elements\n if (namespace === HTML_NAMESPACE) {\n return createElement(tag, typeExtens ion);\n } else {\n return domCreateElementNS(namespace, tag);\n }\n }\n\n function createElement(tag, typeExtension) {\n // TODO(sjmiles): ignor e 'tag' when using 'typeExtension', we could\n // error check it, or perhaps there should only ever be one argument\n var definition = getRegisteredDefini tion(typeExtension || tag);\n if (definition) {\n if (tag == definition. tag && typeExtension == definition.is) {\n return new definition.ctor();\ n }\n // Handle empty string for type extension.\n if (!typeExten sion && !definition.is) {\n return new definition.ctor();\n }\n } \n\n if (typeExtension) {\n var element = createElement(tag);\n ele ment.setAttribute('is', typeExtension);\n return element;\n }\n var e lement = domCreateElement(tag);\n // Custom tags should be HTMLElements even if not upgraded.\n if (tag.indexOf('-') >= 0) {\n implement(element, HTM LElement);\n }\n return element;\n }\n\n function upgradeElement(element ) {\n if (!element.__upgraded__ && (element.nodeType === Node.ELEMENT_NODE)) {\n var is = element.getAttribute('is');\n var definition = getRegiste redDefinition(is || element.localName);\n if (definition) {\n if (is && definition.tag == element.localName) {\n return upgrade(element, de finition);\n } else if (!is && !definition.extends) {\n return u pgrade(element, definition);\n }\n }\n }\n }\n\n function clone Node(deep) {\n // call original clone\n var n = domCloneNode.call(this, de ep);\n // upgrade the element and subtree\n scope.upgradeAll(n);\n // r eturn the clone\n return n;\n }\n // capture native createElement before we override it\n\n var domCreateElement = document.createElement.bind(document);\ n var domCreateElementNS = document.createElementNS.bind(document);\n\n // cap ture native cloneNode before we override it\n\n var domCloneNode = Node.prototy pe.cloneNode;\n\n // exports\n\n document.registerElement = register;\n docum ent.createElement = createElement; // override\n document.createElementNS = cre ateElementNS; // override\n Node.prototype.cloneNode = cloneNode; // override\n \n scope.registry = registry;\n\n /**\n * Upgrade an element to a custom ele ment. Upgrading an element\n * causes the custom prototype to be applied, an ` is` attribute\n * to be attached (as needed), and invocation of the `readyCall back`.\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 upg raded element.\n */\n scope.upgrade = upgradeElement;\n}\n\n// Create a custo m 'instanceof'. This is necessary when CustomElements\n// are implemented via a mixin strategy, as for example on IE10.\nvar isInstance;\nif (!Object.__proto__ && !useNative) {\n isInstance = function(obj, ctor) {\n var p = obj;\n wh ile (p) {\n // NOTE: this is not technically correct since we're not checki ng if\n // an object is an instance of a constructor; however, this should\ n // be good enough for the mixin strategy.\n if (p === ctor.prototype ) {\n return true;\n }\n p = p.__proto__;\n }\n return fa lse;\n }\n} else {\n isInstance = function(obj, base) {\n return obj instan ceof base;\n }\n}\n\n// exports\nscope.instanceof = isInstance;\nscope.reserved TagList = reservedTagList;\n\n// bc\ndocument.register = document.registerElemen t;\n\nscope.hasNative = hasNative;\nscope.useNative = useNative;\n\n})(window.Cu stomElements);\n",
153 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\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\nvar 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 onc e\n inDocument.__parsed = true;\n // all parsable elements in inDocume nt (depth-first pre-order traversal)\n var elts = inDocument.querySelectorA ll(parser.selectors);\n // for each parsable node type, call the mapped par sing method\n forEach(elts, function(e) {\n parser[parser.map[e.loca lName]](e);\n });\n // upgrade all upgradeable static elements, anythi ng dynamically\n // created should be caught by observer\n CustomEleme nts.upgradeDocument(inDocument);\n // observe document for dom changes\n CustomElements.observeDocument(inDocument);\n }\n },\n parseLink: functi on(linkElt) {\n // imports\n if (isDocumentLink(linkElt)) {\n this.pa rseImport(linkElt);\n }\n },\n parseImport: function(linkElt) {\n if (li nkElt.import) {\n parser.parse(linkElt.import);\n }\n }\n};\n\nfunction isDocumentLink(inElt) {\n return (inElt.localName === 'link'\n && inElt.g etAttribute('rel') === IMPORT_LINK_TYPE);\n}\n\nvar forEach = Array.prototype.fo rEach.call.bind(Array.prototype.forEach);\n\n// exports\n\nscope.parser = parser ;\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\n\n})(window.CustomElements);", 153 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\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\nvar 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 onc e\n inDocument.__parsed = true;\n // all parsable elements in inDocume nt (depth-first pre-order traversal)\n var elts = inDocument.querySelectorA ll(parser.selectors);\n // for each parsable node type, call the mapped par sing method\n forEach(elts, function(e) {\n parser[parser.map[e.loca lName]](e);\n });\n // upgrade all upgradeable static elements, anythi ng dynamically\n // created should be caught by observer\n CustomEleme nts.upgradeDocument(inDocument);\n // observe document for dom changes\n CustomElements.observeDocument(inDocument);\n }\n },\n parseLink: functi on(linkElt) {\n // imports\n if (isDocumentLink(linkElt)) {\n this.pa rseImport(linkElt);\n }\n },\n parseImport: function(linkElt) {\n if (li nkElt.import) {\n parser.parse(linkElt.import);\n }\n }\n};\n\nfunction isDocumentLink(inElt) {\n return (inElt.localName === 'link'\n && inElt.g etAttribute('rel') === IMPORT_LINK_TYPE);\n}\n\nvar forEach = Array.prototype.fo rEach.call.bind(Array.prototype.forEach);\n\n// exports\n\nscope.parser = parser ;\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\n\n})(window.CustomElements);",
154 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope){\n\n// boo tstrap parsing\nfunction bootstrap() {\n // parse document\n CustomElements.pa rser.parse(document);\n // one more pass before register is 'live'\n CustomEle ments.upgradeDocument(document);\n // install upgrade hook if HTMLImports are a vailable\n if (window.HTMLImports) {\n HTMLImports.__importsParsingHook = fu nction(elt) {\n CustomElements.parser.parse(elt.import);\n }\n }\n // set internal 'ready' flag, now document.registerElement will trigger \n // sync hronous upgrades\n CustomElements.ready = true;\n // async to ensure *native* custom elements upgrade prior to this\n // DOMContentLoaded can fire before ele ments upgrade (e.g. when there's\n // an external script)\n setTimeout(functio n() {\n // capture blunt profiling data\n CustomElements.readyTime = Date. now();\n if (window.HTMLImports) {\n CustomElements.elapsed = CustomElem ents.readyTime - HTMLImports.readyTime;\n }\n // notify the system that we are bootstrapped\n document.dispatchEvent(\n new CustomEvent('WebCompon entsReady', {bubbles: true})\n );\n });\n}\n\n// CustomEvent shim for IE\nif (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = function(i nType, params) {\n params = params || {};\n var e = document.createEvent(' CustomEvent');\n e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(p arams.cancelable), params.detail);\n return e;\n };\n window.CustomEvent.pr ototype = window.Event.prototype;\n}\n\n// When loading at readyState complete t ime (or via flag), boot custom elements\n// immediately.\n// If relevant, HTMLIm ports must already be loaded.\nif (document.readyState === 'complete' || scope.f lags.eager) {\n bootstrap();\n// When loading at readyState interactive time, b ootstrap only if HTMLImports\n// are not pending. Also avoid IE as the semantics of this state are unreliable.\n} else if (document.readyState === 'interactive' && !window.attachEvent &&\n (!window.HTMLImports || window.HTMLImports.ready )) {\n bootstrap();\n// When loading at other readyStates, wait for the appropr iate DOM event to \n// bootstrap.\n} else {\n var loadEvent = window.HTMLImport s && !HTMLImports.ready ?\n 'HTMLImportsLoaded' : 'DOMContentLoaded';\n wi ndow.addEventListener(loadEvent, bootstrap);\n}\n\n})(window.CustomElements);\n" , 154 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope){\n\n// boo tstrap parsing\nfunction bootstrap() {\n // parse document\n CustomElements.pa rser.parse(document);\n // one more pass before register is 'live'\n CustomEle ments.upgradeDocument(document);\n // install upgrade hook if HTMLImports are a vailable\n if (window.HTMLImports) {\n HTMLImports.__importsParsingHook = fu nction(elt) {\n CustomElements.parser.parse(elt.import);\n }\n }\n // set internal 'ready' flag, now document.registerElement will trigger \n // sync hronous upgrades\n CustomElements.ready = true;\n // async to ensure *native* custom elements upgrade prior to this\n // DOMContentLoaded can fire before ele ments upgrade (e.g. when there's\n // an external script)\n setTimeout(functio n() {\n // capture blunt profiling data\n CustomElements.readyTime = Date. now();\n if (window.HTMLImports) {\n CustomElements.elapsed = CustomElem ents.readyTime - HTMLImports.readyTime;\n }\n // notify the system that we are bootstrapped\n document.dispatchEvent(\n new CustomEvent('WebCompon entsReady', {bubbles: true})\n );\n });\n}\n\n// CustomEvent shim for IE\nif (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = function(i nType, params) {\n params = params || {};\n var e = document.createEvent(' CustomEvent');\n e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(p arams.cancelable), params.detail);\n return e;\n };\n window.CustomEvent.pr ototype = window.Event.prototype;\n}\n\n// When loading at readyState complete t ime (or via flag), boot custom elements\n// immediately.\n// If relevant, HTMLIm ports must already be loaded.\nif (document.readyState === 'complete' || scope.f lags.eager) {\n bootstrap();\n// When loading at readyState interactive time, b ootstrap only if HTMLImports\n// are not pending. Also avoid IE as the semantics of this state are unreliable.\n} else if (document.readyState === 'interactive' && !window.attachEvent &&\n (!window.HTMLImports || window.HTMLImports.ready )) {\n bootstrap();\n// When loading at other readyStates, wait for the appropr iate DOM event to \n// bootstrap.\n} else {\n var loadEvent = window.HTMLImport s && !HTMLImports.ready ?\n 'HTMLImportsLoaded' : 'DOMContentLoaded';\n wi ndow.addEventListener(loadEvent, bootstrap);\n}\n\n})(window.CustomElements);\n" ,
155 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function() {\n\nif (wind ow.ShadowDOMPolyfill) {\n\n // ensure wrapped inputs for these functions\n var fns = ['upgradeAll', 'upgradeSubtree', 'observeDocument',\n 'upgradeDocume nt'];\n\n // cache originals\n var original = {};\n fns.forEach(function(fn) {\n original[fn] = CustomElements[fn];\n });\n\n // override\n fns.forEach (function(fn) {\n CustomElements[fn] = function(inNode) {\n return origi nal[fn](wrap(inNode));\n };\n });\n\n}\n\n})();\n", 155 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function() {\n\nif (wind ow.ShadowDOMPolyfill) {\n\n // ensure wrapped inputs for these functions\n var fns = ['upgradeAll', 'upgradeSubtree', 'observeDocument',\n 'upgradeDocume nt'];\n\n // cache originals\n var original = {};\n fns.forEach(function(fn) {\n original[fn] = CustomElements[fn];\n });\n\n // override\n fns.forEach (function(fn) {\n CustomElements[fn] = function(inNode) {\n return origi nal[fn](wrap(inNode));\n };\n });\n\n}\n\n})();\n",
156 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n ' use strict';\n\n // polyfill performance.now\n\n if (!window.performance) {\n var start = Date.now();\n // only at millisecond precision\n window.per formance = {now: function(){ return Date.now() - start }};\n }\n\n // polyfill for requestAnimationFrame\n\n if (!window.requestAnimationFrame) {\n window .requestAnimationFrame = (function() {\n var nativeRaf = window.webkitReque stAnimationFrame ||\n window.mozRequestAnimationFrame;\n\n return na tiveRaf ?\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 .cancelAnimationFrame = (function() {\n return window.webkitCancelAnimatio nFrame ||\n window.mozCancelAnimationFrame ||\n function(id) {\n clearTimeout(id);\n };\n })();\n }\n\n // Make a stub for Po lymer() for polyfill purposes; under the HTMLImports\n // polyfill, scripts in the main document run before imports. That means\n // if (1) polymer is importe d and (2) Polymer() is called in the main document\n // in a script after the i mport, 2 occurs before 1. We correct this here\n // by specfiically patching Po lymer(); this is not necessary under native\n // HTMLImports.\n var elementDec larations = [];\n\n var polymerStub = function(name, dictionary) {\n if ((ty peof name !== 'string') && (arguments.length === 1)) {\n Array.prototype.pu sh.call(arguments, document._currentScript);\n }\n elementDeclarations.pus h(arguments);\n };\n window.Polymer = polymerStub;\n\n // deliver queued delc arations\n scope.consumeDeclarations = function(callback) {\n scope.consumeD eclarations = function() {\n throw 'Possible attempt to load Polymer twice'; \n };\n if (callback) {\n callback(elementDeclarations);\n }\n elementDeclarations = null;\n };\n\n function installPolymerWarning() {\n i f (window.Polymer === polymerStub) {\n window.Polymer = function() {\n throw new Error('You tried to use polymer without loading it first. To ' +\n 'load polymer, <link rel=\"import\" href=\"' + \n 'components/ polymer/polymer.html\">');\n };\n }\n }\n\n // Once DOMContent has loa ded, any main document scripts that depend on\n // Polymer() should have run. C alling Polymer() now is an error until\n // polymer is imported.\n if (HTMLImp orts.useNative) {\n installPolymerWarning();\n } else {\n addEventListene r('DOMContentLoaded', installPolymerWarning);\n }\n\n})(window.Platform);\n", 156 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n ' use strict';\n\n // polyfill performance.now\n\n if (!window.performance) {\n var start = Date.now();\n // only at millisecond precision\n window.per formance = {now: function(){ return Date.now() - start }};\n }\n\n // polyfill for requestAnimationFrame\n\n if (!window.requestAnimationFrame) {\n window .requestAnimationFrame = (function() {\n var nativeRaf = window.webkitReque stAnimationFrame ||\n window.mozRequestAnimationFrame;\n\n return na tiveRaf ?\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 .cancelAnimationFrame = (function() {\n return window.webkitCancelAnimatio nFrame ||\n window.mozCancelAnimationFrame ||\n function(id) {\n clearTimeout(id);\n };\n })();\n }\n\n // Make a stub for Po lymer() for polyfill purposes; under the HTMLImports\n // polyfill, scripts in the main document run before imports. That means\n // if (1) polymer is importe d and (2) Polymer() is called in the main document\n // in a script after the i mport, 2 occurs before 1. We correct this here\n // by specfiically patching Po lymer(); this is not necessary under native\n // HTMLImports.\n var elementDec larations = [];\n\n var polymerStub = function(name, dictionary) {\n if ((ty peof name !== 'string') && (arguments.length === 1)) {\n Array.prototype.pu sh.call(arguments, document._currentScript);\n }\n elementDeclarations.pus h(arguments);\n };\n window.Polymer = polymerStub;\n\n // deliver queued delc arations\n scope.consumeDeclarations = function(callback) {\n scope.consumeD eclarations = function() {\n throw 'Possible attempt to load Polymer twice'; \n };\n if (callback) {\n callback(elementDeclarations);\n }\n elementDeclarations = null;\n };\n\n function installPolymerWarning() {\n i f (window.Polymer === polymerStub) {\n window.Polymer = function() {\n throw new Error('You tried to use polymer without loading it first. To ' +\n 'load polymer, <link rel=\"import\" href=\"' + \n 'components/ polymer/polymer.html\">');\n };\n }\n }\n\n // Once DOMContent has loa ded, any main document scripts that depend on\n // Polymer() should have run. C alling Polymer() now is an error until\n // polymer is imported.\n if (HTMLImp orts.useNative) {\n installPolymerWarning();\n } else {\n addEventListene r('DOMContentLoaded', installPolymerWarning);\n }\n\n})(window.Platform);\n",
157 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n / / It's desireable to provide a default stylesheet \n // that's convenient for s tyling unresolved elements, but\n // it's cumbersome to have to include this ma nually in every page.\n // It would make sense to put inside some HTMLImport bu t \n // the HTMLImports polyfill does not allow loading of stylesheets \n // t hat block rendering. Therefore this injection is tolerated here.\n //\n // NOT E: position: relative fixes IE's failure to inherit opacity \n // when a child is not statically positioned.\n var style = document.createElement('style');\n style.textContent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;' \n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; di splay: block; overflow: hidden; position: relative;' \n + ' } \\n'\n ; \n var head = document.querySelector('head');\n head.insertBefore(style, head. firstChild);\n\n})(Platform);\n", 157 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n / / It's desireable to provide a default stylesheet \n // that's convenient for s tyling unresolved elements, but\n // it's cumbersome to have to include this ma nually in every page.\n // It would make sense to put inside some HTMLImport bu t \n // the HTMLImports polyfill does not allow loading of stylesheets \n // t hat block rendering. Therefore this injection is tolerated here.\n //\n // NOT E: position: relative fixes IE's failure to inherit opacity \n // when a child is not statically positioned.\n var style = document.createElement('style');\n style.textContent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;' \n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; di splay: block; overflow: hidden; position: relative;' \n + ' } \\n'\n ; \n var head = document.querySelector('head');\n head.insertBefore(style, head. firstChild);\n\n})(Platform);\n",
158 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n f unction withDependencies(task, depends) {\n depends = depends || [];\n if (!depends.map) {\n depends = [depends];\n }\n return task.apply(this, depends.map(marshal));\n }\n\n function module(name, dependsOrFactory, module Factory) {\n var module;\n switch (arguments.length) {\n case 0:\n return;\n case 1:\n module = null;\n break;\n case 2:\n // dependsOrFactory is `factory` in this case\n module = depe ndsOrFactory.apply(this);\n break;\n default:\n // dependsOrF actory is `depends` in this case\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 // `module` confuses commonjs detectors\n scop e.modularize = module;\n scope.using = using;\n\n})(window);\n" 158 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \n * This code may only be used under the BSD style license found at http://poly mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/ /polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n f unction withDependencies(task, depends) {\n depends = depends || [];\n if (!depends.map) {\n depends = [depends];\n }\n return task.apply(this, depends.map(marshal));\n }\n\n function module(name, dependsOrFactory, module Factory) {\n var module;\n switch (arguments.length) {\n case 0:\n return;\n case 1:\n module = null;\n break;\n case 2:\n // dependsOrFactory is `factory` in this case\n module = depe ndsOrFactory.apply(this);\n break;\n default:\n // dependsOrF actory is `depends` in this case\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 // `module` confuses commonjs detectors\n scop e.modularize = module;\n scope.using = using;\n\n})(window);\n"
159 ] 159 ]
160 } 160 }
OLDNEW
« no previous file with comments | « pkg/web_components/lib/platform.concat.js ('k') | pkg/web_components/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698