OLD | NEW |
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 Loading... |
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;AACA;A;AC7CA;AACA;A;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC3qDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;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;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;ACh
DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;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;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
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;ACv5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;A;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;A
ACA;AACA;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;AACA;A;ACluBA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;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;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;A;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;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACzC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;
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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;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;ACxCA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;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;A
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;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;A;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;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpCA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;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;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;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;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;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;A;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;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;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;ACpEA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;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;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;AA
CA;AACA;AACA;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;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;A;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3GA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
A;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3wBA,Q;ACAA;A
ACA;AACA;AACA;AACA;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;AC3BA,C;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
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;ACzlBA;AACA;AACA;AACA;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;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;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA,uB;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;A;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;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;ACjFA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjCA;AAC
A;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;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;
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;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;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;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;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;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;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", |
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.log
('Warning: platform.js is not the first script on the page. ' +\n 'See ht
tp://www.polymer-project.org/docs/start/platform.html#setup ' +\n 'for de
tails.');\n }\n\n // CustomElements polyfill flag\n if (flags.register) {\n
window.CustomElements = window.CustomElements || {flags: {}};\n window.Cust
omElements.flags.register = flags.register;\n }\n\n if (flags.imports) {\n
window.HTMLImports = window.HTMLImports || {flags: {}};\n window.HTMLImports.
flags.imports = flags.imports;\n }\n\n // export\n scope.flags = flags;\n})(P
latform);\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 r
eturn this;\n },\n get: function(key) {\n var entry;\n r
eturn (entry = key[this.name]) && entry[0] === key ?\n entry[1] : und
efined;\n },\n delete: function(key) {\n var entry = key[this.n
ame];\n if (!entry) return false;\n var hasValue = entry[0] === ke
y;\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 w
indow.WeakMap = WeakMap;\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(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", |
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 if (textContent == null) text
Content = '';\n var removedNodes = snapshotNodeList(this.childNodes);\n\n
if (this.invalidateShadowRenderer()) {\n removeAllChildNodes(this);\n
if (textContent !== '') {\n var textNode = unsafeUnwrap(this).o
wnerDocument.createTextNode(textContent);\n this.appendChild(textNode);
\n }\n } else {\n clearChildNodes(this);\n unsafeUnwra
p(this).textContent = textContent;\n }\n\n var addedNodes = snapshotNo
deList(this.childNodes);\n\n enqueueMutation(this, 'childList', {\n
addedNodes: addedNodes,\n removedNodes: removedNodes\n });\n\n
nodesWereRemoved(removedNodes);\n nodesWereAdded(addedNodes, this);\n },
\n\n get childNodes() {\n var wrapperList = new NodeList();\n var i
= 0;\n for (var child = this.firstChild; child; child = child.nextSibling)
{\n wrapperList[i++] = child;\n }\n wrapperList.length = i;\n
return wrapperList;\n },\n\n cloneNode: function(deep) {\n retur
n cloneNode(this, deep);\n },\n\n contains: function(child) {\n retur
n contains(this, wrapIfNeeded(child));\n },\n\n compareDocumentPosition: f
unction(otherNode) {\n // This only wraps, it therefore only operates on th
e composed DOM and not\n // the logical DOM.\n return originalCompareD
ocumentPosition.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.leng
th; i++) {\n n = nodes[i];\n if (n.nodeType === Node.TEXT_NODE) {\
n if (!modNode && !n.data.length)\n this.removeNode(n);\n
else if (!modNode)\n modNode = n;\n else {\n
s += n.data;\n remNodes.push(n);\n }\n } 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 n
odes are the last children\n if (modNode && remNodes.length) {\n mod
Node.data += s;\n cleanupNodes(remNodes);\n }\n }\n });\n\n def
ineWrapGetter(Node, 'ownerDocument');\n\n // We use a DocumentFragment as a bas
e and then delete the properties of\n // DocumentFragment.prototype from the wr
apper Node. Since delete makes\n // objects slow in some JS engines we recreate
the prototype object.\n registerWrapper(OriginalNode, Node, document.createDoc
umentFragment());\n delete Node.prototype.querySelector;\n delete Node.prototy
pe.querySelectorAll;\n Node.prototype = mixin(Object.create(EventTarget.prototy
pe), Node.prototype);\n\n scope.cloneNode = cloneNode;\n scope.nodeWasAdded =
nodeWasAdded;\n scope.nodeWasRemoved = nodeWasRemoved;\n scope.nodesWereAdded
= nodesWereAdded;\n scope.nodesWereRemoved = nodesWereRemoved;\n scope.origina
lInsertBefore = originalInsertBefore;\n scope.originalRemoveChild = originalRem
oveChild;\n scope.snapshotNodeList = snapshotNodeList;\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", |
101 "// 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 setWrapper = scope.s
etWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n\n function invalidateCla
ss(el) {\n scope.invalidateRendererBasedOnAttribute(el, 'class');\n }\n\n f
unction DOMTokenList(impl, ownerElement) {\n setWrapper(impl, this);\n thi
s.ownerElement_ = ownerElement;\n }\n\n DOMTokenList.prototype = {\n constr
uctor: DOMTokenList,\n get length() {\n return unsafeUnwrap(this).length
;\n },\n item: function(index) {\n return unsafeUnwrap(this).item(ind
ex);\n },\n contains: function(token) {\n return unsafeUnwrap(this).c
ontains(token);\n },\n add: function() {\n unsafeUnwrap(this).add.app
ly(unsafeUnwrap(this), arguments);\n invalidateClass(this.ownerElement_);\n
},\n remove: function() {\n unsafeUnwrap(this).remove.apply(unsafeUn
wrap(this), arguments);\n invalidateClass(this.ownerElement_);\n },\n
toggle: function(token) {\n var rv = unsafeUnwrap(this).toggle.apply(unsaf
eUnwrap(this), arguments);\n invalidateClass(this.ownerElement_);\n re
turn rv;\n },\n toString: function() {\n return unsafeUnwrap(this).to
String();\n }\n };\n\n scope.wrappers.DOMTokenList = DOMTokenList;\n})(wind
ow.ShadowDOMPolyfill);\n", | 101 "// 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 setWrapper = scope.s
etWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n\n function invalidateCla
ss(el) {\n scope.invalidateRendererBasedOnAttribute(el, 'class');\n }\n\n f
unction DOMTokenList(impl, ownerElement) {\n setWrapper(impl, this);\n thi
s.ownerElement_ = ownerElement;\n }\n\n DOMTokenList.prototype = {\n constr
uctor: DOMTokenList,\n get length() {\n return unsafeUnwrap(this).length
;\n },\n item: function(index) {\n return unsafeUnwrap(this).item(ind
ex);\n },\n contains: function(token) {\n return unsafeUnwrap(this).c
ontains(token);\n },\n add: function() {\n unsafeUnwrap(this).add.app
ly(unsafeUnwrap(this), arguments);\n invalidateClass(this.ownerElement_);\n
},\n remove: function() {\n unsafeUnwrap(this).remove.apply(unsafeUn
wrap(this), arguments);\n invalidateClass(this.ownerElement_);\n },\n
toggle: function(token) {\n var rv = unsafeUnwrap(this).toggle.apply(unsaf
eUnwrap(this), arguments);\n invalidateClass(this.ownerElement_);\n re
turn rv;\n },\n toString: function() {\n return unsafeUnwrap(this).to
String();\n }\n };\n\n scope.wrappers.DOMTokenList = DOMTokenList;\n})(wind
ow.ShadowDOMPolyfill);\n", |
102 "// 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 GetElementsByInterface = scope.GetElementsByIn
terface;\n var Node = scope.wrappers.Node;\n var DOMTokenList = scope.wrappers
.DOMTokenList;\n var ParentNodeInterface = scope.ParentNodeInterface;\n var Se
lectorsInterface = scope.SelectorsInterface;\n var addWrapNodeListMethod = scop
e.addWrapNodeListMethod;\n var enqueueMutation = scope.enqueueMutation;\n var
mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var registerWrapper = scope.
registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrappers = sco
pe.wrappers;\n\n var OriginalElement = window.Element;\n\n var matchesNames =
[\n 'matches', // needs to come first.\n 'mozMatchesSelector',\n 'msMa
tchesSelector',\n 'webkitMatchesSelector',\n ].filter(function(name) {\n
return OriginalElement.prototype[name];\n });\n\n var matchesName = matchesNam
es[0];\n\n var originalMatches = OriginalElement.prototype[matchesName];\n\n f
unction invalidateRendererBasedOnAttribute(element, name) {\n // Only invalid
ate if parent node is a shadow host.\n var p = element.parentNode;\n if (!
p || !p.shadowRoot)\n return;\n\n var renderer = scope.getRendererForHos
t(p);\n if (renderer.dependsOnAttribute(name))\n renderer.invalidate();\
n }\n\n function enqueAttributeChange(element, name, oldValue) {\n // This
is not fully spec compliant. We should use localName (which might\n // have a
different case than name) and the namespace (which requires us\n // to get t
he Attr object).\n enqueueMutation(element, 'attributes', {\n name: name
,\n namespace: null,\n oldValue: oldValue\n });\n }\n\n var class
ListTable = new WeakMap();\n\n function Element(node) {\n Node.call(this, no
de);\n }\n Element.prototype = Object.create(Node.prototype);\n mixin(Element
.prototype, {\n createShadowRoot: function() {\n var newShadowRoot = new
wrappers.ShadowRoot(this);\n unsafeUnwrap(this).polymerShadowRoot_ = newSh
adowRoot;\n\n var renderer = scope.getRendererForHost(this);\n rendere
r.invalidate();\n\n return newShadowRoot;\n },\n\n get shadowRoot() {
\n return unsafeUnwrap(this).polymerShadowRoot_ || null;\n },\n\n //
getDestinationInsertionPoints added in ShadowRenderer.js\n\n setAttribute: fu
nction(name, value) {\n var oldValue = unsafeUnwrap(this).getAttribute(name
);\n unsafeUnwrap(this).setAttribute(name, value);\n enqueAttributeCha
nge(this, name, oldValue);\n invalidateRendererBasedOnAttribute(this, name)
;\n },\n\n removeAttribute: function(name) {\n var oldValue = unsafeU
nwrap(this).getAttribute(name);\n unsafeUnwrap(this).removeAttribute(name);
\n enqueAttributeChange(this, name, oldValue);\n invalidateRendererBas
edOnAttribute(this, name);\n },\n\n matches: function(selector) {\n r
eturn originalMatches.call(unsafeUnwrap(this), selector);\n },\n\n get cla
ssList() {\n var list = classListTable.get(this);\n if (!list) {\n
classListTable.set(this,\n list = new DOMTokenList(unsafeUnwrap(t
his).classList, this));\n }\n return list;\n },\n\n get classNam
e() {\n return unsafeUnwrap(this).className;\n },\n\n set className(v
) {\n this.setAttribute('class', v);\n },\n\n get id() {\n retur
n unsafeUnwrap(this).id;\n },\n\n set id(v) {\n this.setAttribute('id
', v);\n }\n });\n\n matchesNames.forEach(function(name) {\n if (name !=
= 'matches') {\n Element.prototype[name] = function(selector) {\n re
turn this.matches(selector);\n };\n }\n });\n\n if (OriginalElement.pr
ototype.webkitCreateShadowRoot) {\n Element.prototype.webkitCreateShadowRoot
=\n Element.prototype.createShadowRoot;\n }\n\n mixin(Element.prototype
, ChildNodeInterface);\n mixin(Element.prototype, GetElementsByInterface);\n m
ixin(Element.prototype, ParentNodeInterface);\n mixin(Element.prototype, Select
orsInterface);\n\n registerWrapper(OriginalElement, Element,\n
document.createElementNS(null, 'x'));\n\n scope.invalidateRendererBasedOnAttri
bute = invalidateRendererBasedOnAttribute;\n scope.matchesNames = matchesNames;
\n scope.wrappers.Element = Element;\n})(window.ShadowDOMPolyfill);\n", | 102 "// 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 GetElementsByInterface = scope.GetElementsByIn
terface;\n var Node = scope.wrappers.Node;\n var DOMTokenList = scope.wrappers
.DOMTokenList;\n var ParentNodeInterface = scope.ParentNodeInterface;\n var Se
lectorsInterface = scope.SelectorsInterface;\n var addWrapNodeListMethod = scop
e.addWrapNodeListMethod;\n var enqueueMutation = scope.enqueueMutation;\n var
mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var registerWrapper = scope.
registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrappers = sco
pe.wrappers;\n\n var OriginalElement = window.Element;\n\n var matchesNames =
[\n 'matches', // needs to come first.\n 'mozMatchesSelector',\n 'msMa
tchesSelector',\n 'webkitMatchesSelector',\n ].filter(function(name) {\n
return OriginalElement.prototype[name];\n });\n\n var matchesName = matchesNam
es[0];\n\n var originalMatches = OriginalElement.prototype[matchesName];\n\n f
unction invalidateRendererBasedOnAttribute(element, name) {\n // Only invalid
ate if parent node is a shadow host.\n var p = element.parentNode;\n if (!
p || !p.shadowRoot)\n return;\n\n var renderer = scope.getRendererForHos
t(p);\n if (renderer.dependsOnAttribute(name))\n renderer.invalidate();\
n }\n\n function enqueAttributeChange(element, name, oldValue) {\n // This
is not fully spec compliant. We should use localName (which might\n // have a
different case than name) and the namespace (which requires us\n // to get t
he Attr object).\n enqueueMutation(element, 'attributes', {\n name: name
,\n namespace: null,\n oldValue: oldValue\n });\n }\n\n var class
ListTable = new WeakMap();\n\n function Element(node) {\n Node.call(this, no
de);\n }\n Element.prototype = Object.create(Node.prototype);\n mixin(Element
.prototype, {\n createShadowRoot: function() {\n var newShadowRoot = new
wrappers.ShadowRoot(this);\n unsafeUnwrap(this).polymerShadowRoot_ = newSh
adowRoot;\n\n var renderer = scope.getRendererForHost(this);\n rendere
r.invalidate();\n\n return newShadowRoot;\n },\n\n get shadowRoot() {
\n return unsafeUnwrap(this).polymerShadowRoot_ || null;\n },\n\n //
getDestinationInsertionPoints added in ShadowRenderer.js\n\n setAttribute: fu
nction(name, value) {\n var oldValue = unsafeUnwrap(this).getAttribute(name
);\n unsafeUnwrap(this).setAttribute(name, value);\n enqueAttributeCha
nge(this, name, oldValue);\n invalidateRendererBasedOnAttribute(this, name)
;\n },\n\n removeAttribute: function(name) {\n var oldValue = unsafeU
nwrap(this).getAttribute(name);\n unsafeUnwrap(this).removeAttribute(name);
\n enqueAttributeChange(this, name, oldValue);\n invalidateRendererBas
edOnAttribute(this, name);\n },\n\n matches: function(selector) {\n r
eturn originalMatches.call(unsafeUnwrap(this), selector);\n },\n\n get cla
ssList() {\n var list = classListTable.get(this);\n if (!list) {\n
classListTable.set(this,\n list = new DOMTokenList(unsafeUnwrap(t
his).classList, this));\n }\n return list;\n },\n\n get classNam
e() {\n return unsafeUnwrap(this).className;\n },\n\n set className(v
) {\n this.setAttribute('class', v);\n },\n\n get id() {\n retur
n unsafeUnwrap(this).id;\n },\n\n set id(v) {\n this.setAttribute('id
', v);\n }\n });\n\n matchesNames.forEach(function(name) {\n if (name !=
= 'matches') {\n Element.prototype[name] = function(selector) {\n re
turn this.matches(selector);\n };\n }\n });\n\n if (OriginalElement.pr
ototype.webkitCreateShadowRoot) {\n Element.prototype.webkitCreateShadowRoot
=\n Element.prototype.createShadowRoot;\n }\n\n mixin(Element.prototype
, ChildNodeInterface);\n mixin(Element.prototype, GetElementsByInterface);\n m
ixin(Element.prototype, ParentNodeInterface);\n mixin(Element.prototype, Select
orsInterface);\n\n registerWrapper(OriginalElement, Element,\n
document.createElementNS(null, 'x'));\n\n scope.invalidateRendererBasedOnAttri
bute = invalidateRendererBasedOnAttribute;\n scope.matchesNames = matchesNames;
\n scope.wrappers.Element = Element;\n})(window.ShadowDOMPolyfill);\n", |
103 "// 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 Element = scope.wrap
pers.Element;\n var defineGetter = scope.defineGetter;\n var enqueueMutation =
scope.enqueueMutation;\n var mixin = scope.mixin;\n var nodesWereAdded = scop
e.nodesWereAdded;\n var nodesWereRemoved = scope.nodesWereRemoved;\n var regis
terWrapper = scope.registerWrapper;\n var snapshotNodeList = scope.snapshotNode
List;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var unwrap = scope.unwrap;\n
var wrap = scope.wrap;\n var wrappers = scope.wrappers;\n\n /////////////////
////////////////////////////////////////////////////////////\n // innerHTML and
outerHTML\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/t
he-end.html#escapingString\n var escapeAttrRegExp = /[&\\u00A0\"]/g;\n var esc
apeDataRegExp = /[&\\u00A0<>]/g;\n\n function escapeReplace(c) {\n switch (c
) {\n case '&':\n return '&';\n case '<':\n return '
<';\n case '>':\n return '>';\n case '\"':\n retur
n '"'\n case '\\u00A0':\n return ' ';\n }\n }\n\n fun
ction escapeAttr(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n
}\n\n function escapeData(s) {\n return s.replace(escapeDataRegExp, escapeR
eplace);\n }\n\n function makeSet(arr) {\n var set = {};\n for (var i =
0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n
}\n\n // http://www.whatwg.org/specs/web-apps/current-work/#void-elements\n va
r voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n
'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n
'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n
]);\n\n var plaintextParents = makeSet([\n 'style',\n 'script',\n 'xm
p',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'nosc
ript'\n ]);\n\n function getOuterHTML(node, parentNode) {\n switch (node.no
deType) {\n case Node.ELEMENT_NODE:\n var tagName = node.tagName.toL
owerCase();\n var s = '<' + tagName;\n var attrs = node.attributes
;\n for (var i = 0, attr; attr = attrs[i]; i++) {\n s += ' ' + a
ttr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\
n if (voidElements[tagName])\n return s;\n\n return s + g
etInnerHTML(node) + '</' + tagName + '>';\n\n case Node.TEXT_NODE:\n
var data = node.data;\n if (parentNode && plaintextParents[parentNode.lo
calName])\n return data;\n return escapeData(data);\n\n cas
e Node.COMMENT_NODE:\n return '<!--' + node.data + '-->';\n\n defaul
t:\n console.error(node);\n throw new Error('not implemented');\n
}\n }\n\n function getInnerHTML(node) {\n if (node instanceof wrappers.H
TMLTemplateElement)\n node = node.content;\n\n var s = '';\n for (var
child = node.firstChild; child; child = child.nextSibling) {\n s += getOut
erHTML(child, node);\n }\n return s;\n }\n\n function setInnerHTML(node,
value, opt_tagName) {\n var tagName = opt_tagName || 'div';\n node.textCo
ntent = '';\n var tempElement = unwrap(node.ownerDocument.createElement(tagNa
me));\n tempElement.innerHTML = value;\n var firstChild;\n while (first
Child = tempElement.firstChild) {\n node.appendChild(wrap(firstChild));\n
}\n }\n\n // IE11 does not have MSIE in the user agent string.\n var oldIe
= /MSIE/.test(navigator.userAgent);\n\n var OriginalHTMLElement = window.HTMLEl
ement;\n var OriginalHTMLTemplateElement = window.HTMLTemplateElement;\n\n fun
ction HTMLElement(node) {\n Element.call(this, node);\n }\n HTMLElement.pro
totype = Object.create(Element.prototype);\n mixin(HTMLElement.prototype, {\n
get innerHTML() {\n return getInnerHTML(this);\n },\n set innerHTML
(value) {\n // IE9 does not handle set innerHTML correctly on plaintextPare
nts. It\n // creates element children. For example\n //\n // sc
riptElement.innerHTML = '<a>test</a>'\n //\n // Creates a single HTMLA
nchorElement child.\n if (oldIe && plaintextParents[this.localName]) {\n
this.textContent = value;\n return;\n }\n\n var removedNod
es = snapshotNodeList(this.childNodes);\n\n if (this.invalidateShadowRender
er()) {\n if (this instanceof wrappers.HTMLTemplateElement)\n se
tInnerHTML(this.content, value);\n else\n setInnerHTML(this, val
ue, this.tagName);\n\n // If we have a non native template element we need
to handle this\n // manually since setting impl.innerHTML would add the htm
l as direct\n // children and not be moved over to the content fragment.\n
} else if (!OriginalHTMLTemplateElement &&\n this instanceo
f wrappers.HTMLTemplateElement) {\n setInnerHTML(this.content, value);\n
} else {\n unsafeUnwrap(this).innerHTML = value;\n }\n\n v
ar addedNodes = snapshotNodeList(this.childNodes);\n\n enqueueMutation(this
, 'childList', {\n addedNodes: addedNodes,\n removedNodes: removed
Nodes\n });\n\n nodesWereRemoved(removedNodes);\n nodesWereAdded(
addedNodes, this);\n },\n\n get outerHTML() {\n return getOuterHTML(t
his, this.parentNode);\n },\n set outerHTML(value) {\n var p = this.p
arentNode;\n if (p) {\n p.invalidateShadowRenderer();\n var d
f = frag(p, value);\n p.replaceChild(df, this);\n }\n },\n\n i
nsertAdjacentHTML: function(position, text) {\n var contextElement, refNode
;\n switch (String(position).toLowerCase()) {\n case 'beforebegin':\
n contextElement = this.parentNode;\n refNode = this;\n
break;\n case 'afterend':\n contextElement = this.parentNode;
\n refNode = this.nextSibling;\n break;\n case 'afterbe
gin':\n contextElement = this;\n refNode = this.firstChild;\n
break;\n case 'beforeend':\n contextElement = this;\n
refNode = null;\n break;\n default:\n return;\n
}\n\n var df = frag(contextElement, text);\n contextElement.inse
rtBefore(df, refNode);\n },\n\n get hidden() {\n return this.hasAttri
bute('hidden');\n },\n set hidden(v) {\n if (v) {\n this.setAt
tribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\
n }\n }\n });\n\n function frag(contextElement, html) {\n // TODO(a
rv): This does not work with SVG and other non HTML elements.\n var p = unwra
p(contextElement.cloneNode(false));\n p.innerHTML = html;\n var df = unwra
p(document.createDocumentFragment());\n var c;\n while (c = p.firstChild)
{\n df.appendChild(c);\n }\n return wrap(df);\n }\n\n function gett
er(name) {\n return function() {\n scope.renderAllPending();\n retu
rn unsafeUnwrap(this)[name];\n };\n }\n\n function getterRequiresRendering(
name) {\n defineGetter(HTMLElement, name, getter(name));\n }\n\n [\n 'cl
ientHeight',\n 'clientLeft',\n 'clientTop',\n 'clientWidth',\n 'offs
etHeight',\n 'offsetLeft',\n 'offsetTop',\n 'offsetWidth',\n 'scroll
Height',\n 'scrollWidth',\n ].forEach(getterRequiresRendering);\n\n functio
n getterAndSetterRequiresRendering(name) {\n Object.defineProperty(HTMLElemen
t.prototype, name, {\n get: getter(name),\n set: function(v) {\n
scope.renderAllPending();\n unsafeUnwrap(this)[name] = v;\n },\n
configurable: true,\n enumerable: true\n });\n }\n\n [\n 'scrol
lLeft',\n 'scrollTop',\n ].forEach(getterAndSetterRequiresRendering);\n\n f
unction methodRequiresRendering(name) {\n Object.defineProperty(HTMLElement.p
rototype, name, {\n value: function() {\n scope.renderAllPending();\
n return unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments);\n
},\n configurable: true,\n enumerable: true\n });\n }\n\n [
\n 'getBoundingClientRect',\n 'getClientRects',\n 'scrollIntoView'\n ]
.forEach(methodRequiresRendering);\n\n // HTMLElement is abstract so we use a s
ubclass that has no members.\n registerWrapper(OriginalHTMLElement, HTMLElement
,\n document.createElement('b'));\n\n scope.wrappers.HTMLEleme
nt = HTMLElement;\n\n // TODO: Find a better way to share these two with Wrappe
rShadowRoot.\n scope.getInnerHTML = getInnerHTML;\n scope.setInnerHTML = setIn
nerHTML\n})(window.ShadowDOMPolyfill);\n", | 103 "// 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 Element = scope.wrap
pers.Element;\n var defineGetter = scope.defineGetter;\n var enqueueMutation =
scope.enqueueMutation;\n var mixin = scope.mixin;\n var nodesWereAdded = scop
e.nodesWereAdded;\n var nodesWereRemoved = scope.nodesWereRemoved;\n var regis
terWrapper = scope.registerWrapper;\n var snapshotNodeList = scope.snapshotNode
List;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var unwrap = scope.unwrap;\n
var wrap = scope.wrap;\n var wrappers = scope.wrappers;\n\n /////////////////
////////////////////////////////////////////////////////////\n // innerHTML and
outerHTML\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/t
he-end.html#escapingString\n var escapeAttrRegExp = /[&\\u00A0\"]/g;\n var esc
apeDataRegExp = /[&\\u00A0<>]/g;\n\n function escapeReplace(c) {\n switch (c
) {\n case '&':\n return '&';\n case '<':\n return '
<';\n case '>':\n return '>';\n case '\"':\n retur
n '"'\n case '\\u00A0':\n return ' ';\n }\n }\n\n fun
ction escapeAttr(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n
}\n\n function escapeData(s) {\n return s.replace(escapeDataRegExp, escapeR
eplace);\n }\n\n function makeSet(arr) {\n var set = {};\n for (var i =
0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n
}\n\n // http://www.whatwg.org/specs/web-apps/current-work/#void-elements\n va
r voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n
'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n
'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n
]);\n\n var plaintextParents = makeSet([\n 'style',\n 'script',\n 'xm
p',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'nosc
ript'\n ]);\n\n function getOuterHTML(node, parentNode) {\n switch (node.no
deType) {\n case Node.ELEMENT_NODE:\n var tagName = node.tagName.toL
owerCase();\n var s = '<' + tagName;\n var attrs = node.attributes
;\n for (var i = 0, attr; attr = attrs[i]; i++) {\n s += ' ' + a
ttr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\
n if (voidElements[tagName])\n return s;\n\n return s + g
etInnerHTML(node) + '</' + tagName + '>';\n\n case Node.TEXT_NODE:\n
var data = node.data;\n if (parentNode && plaintextParents[parentNode.lo
calName])\n return data;\n return escapeData(data);\n\n cas
e Node.COMMENT_NODE:\n return '<!--' + node.data + '-->';\n\n defaul
t:\n console.error(node);\n throw new Error('not implemented');\n
}\n }\n\n function getInnerHTML(node) {\n if (node instanceof wrappers.H
TMLTemplateElement)\n node = node.content;\n\n var s = '';\n for (var
child = node.firstChild; child; child = child.nextSibling) {\n s += getOut
erHTML(child, node);\n }\n return s;\n }\n\n function setInnerHTML(node,
value, opt_tagName) {\n var tagName = opt_tagName || 'div';\n node.textCo
ntent = '';\n var tempElement = unwrap(node.ownerDocument.createElement(tagNa
me));\n tempElement.innerHTML = value;\n var firstChild;\n while (first
Child = tempElement.firstChild) {\n node.appendChild(wrap(firstChild));\n
}\n }\n\n // IE11 does not have MSIE in the user agent string.\n var oldIe
= /MSIE/.test(navigator.userAgent);\n\n var OriginalHTMLElement = window.HTMLEl
ement;\n var OriginalHTMLTemplateElement = window.HTMLTemplateElement;\n\n fun
ction HTMLElement(node) {\n Element.call(this, node);\n }\n HTMLElement.pro
totype = Object.create(Element.prototype);\n mixin(HTMLElement.prototype, {\n
get innerHTML() {\n return getInnerHTML(this);\n },\n set innerHTML
(value) {\n // IE9 does not handle set innerHTML correctly on plaintextPare
nts. It\n // creates element children. For example\n //\n // sc
riptElement.innerHTML = '<a>test</a>'\n //\n // Creates a single HTMLA
nchorElement child.\n if (oldIe && plaintextParents[this.localName]) {\n
this.textContent = value;\n return;\n }\n\n var removedNod
es = snapshotNodeList(this.childNodes);\n\n if (this.invalidateShadowRender
er()) {\n if (this instanceof wrappers.HTMLTemplateElement)\n se
tInnerHTML(this.content, value);\n else\n setInnerHTML(this, val
ue, this.tagName);\n\n // If we have a non native template element we need
to handle this\n // manually since setting impl.innerHTML would add the htm
l as direct\n // children and not be moved over to the content fragment.\n
} else if (!OriginalHTMLTemplateElement &&\n this instanceo
f wrappers.HTMLTemplateElement) {\n setInnerHTML(this.content, value);\n
} else {\n unsafeUnwrap(this).innerHTML = value;\n }\n\n v
ar addedNodes = snapshotNodeList(this.childNodes);\n\n enqueueMutation(this
, 'childList', {\n addedNodes: addedNodes,\n removedNodes: removed
Nodes\n });\n\n nodesWereRemoved(removedNodes);\n nodesWereAdded(
addedNodes, this);\n },\n\n get outerHTML() {\n return getOuterHTML(t
his, this.parentNode);\n },\n set outerHTML(value) {\n var p = this.p
arentNode;\n if (p) {\n p.invalidateShadowRenderer();\n var d
f = frag(p, value);\n p.replaceChild(df, this);\n }\n },\n\n i
nsertAdjacentHTML: function(position, text) {\n var contextElement, refNode
;\n switch (String(position).toLowerCase()) {\n case 'beforebegin':\
n contextElement = this.parentNode;\n refNode = this;\n
break;\n case 'afterend':\n contextElement = this.parentNode;
\n refNode = this.nextSibling;\n break;\n case 'afterbe
gin':\n contextElement = this;\n refNode = this.firstChild;\n
break;\n case 'beforeend':\n contextElement = this;\n
refNode = null;\n break;\n default:\n return;\n
}\n\n var df = frag(contextElement, text);\n contextElement.inse
rtBefore(df, refNode);\n },\n\n get hidden() {\n return this.hasAttri
bute('hidden');\n },\n set hidden(v) {\n if (v) {\n this.setAt
tribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\
n }\n }\n });\n\n function frag(contextElement, html) {\n // TODO(a
rv): This does not work with SVG and other non HTML elements.\n var p = unwra
p(contextElement.cloneNode(false));\n p.innerHTML = html;\n var df = unwra
p(document.createDocumentFragment());\n var c;\n while (c = p.firstChild)
{\n df.appendChild(c);\n }\n return wrap(df);\n }\n\n function gett
er(name) {\n return function() {\n scope.renderAllPending();\n retu
rn unsafeUnwrap(this)[name];\n };\n }\n\n function getterRequiresRendering(
name) {\n defineGetter(HTMLElement, name, getter(name));\n }\n\n [\n 'cl
ientHeight',\n 'clientLeft',\n 'clientTop',\n 'clientWidth',\n 'offs
etHeight',\n 'offsetLeft',\n 'offsetTop',\n 'offsetWidth',\n 'scroll
Height',\n 'scrollWidth',\n ].forEach(getterRequiresRendering);\n\n functio
n getterAndSetterRequiresRendering(name) {\n Object.defineProperty(HTMLElemen
t.prototype, name, {\n get: getter(name),\n set: function(v) {\n
scope.renderAllPending();\n unsafeUnwrap(this)[name] = v;\n },\n
configurable: true,\n enumerable: true\n });\n }\n\n [\n 'scrol
lLeft',\n 'scrollTop',\n ].forEach(getterAndSetterRequiresRendering);\n\n f
unction methodRequiresRendering(name) {\n Object.defineProperty(HTMLElement.p
rototype, name, {\n value: function() {\n scope.renderAllPending();\
n return unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments);\n
},\n configurable: true,\n enumerable: true\n });\n }\n\n [
\n 'getBoundingClientRect',\n 'getClientRects',\n 'scrollIntoView'\n ]
.forEach(methodRequiresRendering);\n\n // HTMLElement is abstract so we use a s
ubclass that has no members.\n registerWrapper(OriginalHTMLElement, HTMLElement
,\n document.createElement('b'));\n\n scope.wrappers.HTMLEleme
nt = HTMLElement;\n\n // TODO: Find a better way to share these two with Wrappe
rShadowRoot.\n scope.getInnerHTML = getInnerHTML;\n scope.setInnerHTML = setIn
nerHTML\n})(window.ShadowDOMPolyfill);\n", |
104 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrap = scope.
wrap;\n\n var OriginalHTMLCanvasElement = window.HTMLCanvasElement;\n\n functi
on HTMLCanvasElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLCanv
asElement.prototype = Object.create(HTMLElement.prototype);\n\n mixin(HTMLCanva
sElement.prototype, {\n getContext: function() {\n var context = unsafeU
nwrap(this).getContext.apply(unsafeUnwrap(this), arguments);\n return conte
xt && wrap(context);\n }\n });\n\n registerWrapper(OriginalHTMLCanvasElemen
t, HTMLCanvasElement,\n document.createElement('canvas'));\n\n
scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;\n})(window.ShadowDOMPolyf
ill);\n", | 104 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n var unsafeUnwrap = scope.unsafeUnwrap;\n var wrap = scope.
wrap;\n\n var OriginalHTMLCanvasElement = window.HTMLCanvasElement;\n\n functi
on HTMLCanvasElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLCanv
asElement.prototype = Object.create(HTMLElement.prototype);\n\n mixin(HTMLCanva
sElement.prototype, {\n getContext: function() {\n var context = unsafeU
nwrap(this).getContext.apply(unsafeUnwrap(this), arguments);\n return conte
xt && wrap(context);\n }\n });\n\n registerWrapper(OriginalHTMLCanvasElemen
t, HTMLCanvasElement,\n document.createElement('canvas'));\n\n
scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;\n})(window.ShadowDOMPolyf
ill);\n", |
105 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n\n var OriginalHTMLContentElement = window.HTMLContentElemen
t;\n\n function HTMLContentElement(node) {\n HTMLElement.call(this, node);\n
}\n HTMLContentElement.prototype = Object.create(HTMLElement.prototype);\n m
ixin(HTMLContentElement.prototype, {\n constructor: HTMLContentElement,\n\n
get select() {\n return this.getAttribute('select');\n },\n set sel
ect(value) {\n this.setAttribute('select', value);\n },\n\n setAttrib
ute: function(n, v) {\n HTMLElement.prototype.setAttribute.call(this, n, v)
;\n if (String(n).toLowerCase() === 'select')\n this.invalidateShado
wRenderer(true);\n }\n\n // getDistributedNodes is added in ShadowRenderer
\n });\n\n if (OriginalHTMLContentElement)\n registerWrapper(OriginalHTMLCo
ntentElement, HTMLContentElement);\n\n scope.wrappers.HTMLContentElement = HTML
ContentElement;\n})(window.ShadowDOMPolyfill);\n", | 105 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n\n var OriginalHTMLContentElement = window.HTMLContentElemen
t;\n\n function HTMLContentElement(node) {\n HTMLElement.call(this, node);\n
}\n HTMLContentElement.prototype = Object.create(HTMLElement.prototype);\n m
ixin(HTMLContentElement.prototype, {\n constructor: HTMLContentElement,\n\n
get select() {\n return this.getAttribute('select');\n },\n set sel
ect(value) {\n this.setAttribute('select', value);\n },\n\n setAttrib
ute: function(n, v) {\n HTMLElement.prototype.setAttribute.call(this, n, v)
;\n if (String(n).toLowerCase() === 'select')\n this.invalidateShado
wRenderer(true);\n }\n\n // getDistributedNodes is added in ShadowRenderer
\n });\n\n if (OriginalHTMLContentElement)\n registerWrapper(OriginalHTMLCo
ntentElement, HTMLContentElement);\n\n scope.wrappers.HTMLContentElement = HTML
ContentElement;\n})(window.ShadowDOMPolyfill);\n", |
106 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement
= scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper
= scope.registerWrapper;\n var wrapHTMLCollection = scope.wrapHTMLCollection;\
n var unwrap = scope.unwrap;\n\n var OriginalHTMLFormElement = window.HTMLForm
Element;\n\n function HTMLFormElement(node) {\n HTMLElement.call(this, node)
;\n }\n HTMLFormElement.prototype = Object.create(HTMLElement.prototype);\n m
ixin(HTMLFormElement.prototype, {\n get elements() {\n // Note: technica
lly this should be an HTMLFormControlsCollection, but\n // that inherits fr
om HTMLCollection, so should be good enough. Spec:\n // http://www.whatwg.o
rg/specs/web-apps/current-work/multipage/common-dom-interfaces.html#htmlformcont
rolscollection\n return wrapHTMLCollection(unwrap(this).elements);\n }\n
});\n\n registerWrapper(OriginalHTMLFormElement, HTMLFormElement,\n
document.createElement('form'));\n\n scope.wrappers.HTMLFormElement = H
TMLFormElement;\n})(window.ShadowDOMPolyfill);\n", | 106 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement
= scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper
= scope.registerWrapper;\n var wrapHTMLCollection = scope.wrapHTMLCollection;\
n var unwrap = scope.unwrap;\n\n var OriginalHTMLFormElement = window.HTMLForm
Element;\n\n function HTMLFormElement(node) {\n HTMLElement.call(this, node)
;\n }\n HTMLFormElement.prototype = Object.create(HTMLElement.prototype);\n m
ixin(HTMLFormElement.prototype, {\n get elements() {\n // Note: technica
lly this should be an HTMLFormControlsCollection, but\n // that inherits fr
om HTMLCollection, so should be good enough. Spec:\n // http://www.whatwg.o
rg/specs/web-apps/current-work/multipage/common-dom-interfaces.html#htmlformcont
rolscollection\n return wrapHTMLCollection(unwrap(this).elements);\n }\n
});\n\n registerWrapper(OriginalHTMLFormElement, HTMLFormElement,\n
document.createElement('form'));\n\n scope.wrappers.HTMLFormElement = H
TMLFormElement;\n})(window.ShadowDOMPolyfill);\n", |
(...skipping 23 matching lines...) Expand all Loading... |
130 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope.
wrappers.EventTarget;\n var Selection = scope.wrappers.Selection;\n var mixin
= scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var renderAllP
ending = scope.renderAllPending;\n var unwrap = scope.unwrap;\n var unwrapIfNe
eded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalWindow =
window.Window;\n var originalGetComputedStyle = window.getComputedStyle;\n va
r originalGetDefaultComputedStyle = window.getDefaultComputedStyle;\n var origi
nalGetSelection = window.getSelection;\n\n function Window(impl) {\n EventTa
rget.call(this, impl);\n }\n Window.prototype = Object.create(EventTarget.prot
otype);\n\n OriginalWindow.prototype.getComputedStyle = function(el, pseudo) {\
n return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pseudo);\n
};\n\n // Mozilla proprietary extension.\n if (originalGetDefaultComputedSty
le) {\n OriginalWindow.prototype.getDefaultComputedStyle = function(el, pseud
o) {\n return wrap(this || window).getDefaultComputedStyle(\n unwr
apIfNeeded(el), pseudo);\n };\n }\n\n OriginalWindow.prototype.getSelection
= function() {\n return wrap(this || window).getSelection();\n };\n\n // W
ork around for https://bugzilla.mozilla.org/show_bug.cgi?id=943065\n delete win
dow.getComputedStyle;\n delete window.getDefaultComputedStyle;\n delete window
.getSelection;\n\n ['addEventListener', 'removeEventListener', 'dispatchEvent']
.forEach(\n function(name) {\n OriginalWindow.prototype[name] = func
tion() {\n var w = wrap(this || window);\n return w[name].appl
y(w, arguments);\n };\n\n // Work around for https://bugzilla.mozi
lla.org/show_bug.cgi?id=943065\n delete window[name];\n });\n\n mix
in(Window.prototype, {\n getComputedStyle: function(el, pseudo) {\n rend
erAllPending();\n return originalGetComputedStyle.call(unwrap(this), unwrap
IfNeeded(el),\n pseudo);\n },\n
getSelection: function() {\n renderAllPending();\n return new Selectio
n(originalGetSelection.call(unwrap(this)));\n },\n\n get document() {\n
return wrap(unwrap(this).document);\n }\n });\n\n // Mozilla proprietary
extension.\n if (originalGetDefaultComputedStyle) {\n Window.prototype.getD
efaultComputedStyle = function(el, pseudo) {\n renderAllPending();\n r
eturn originalGetDefaultComputedStyle.call(unwrap(this),\n unwrapIfNeed
ed(el),pseudo);\n };\n }\n\n registerWrapper(OriginalWindow, Window, window
);\n\n scope.wrappers.Window = Window;\n\n})(window.ShadowDOMPolyfill);\n", | 130 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope.
wrappers.EventTarget;\n var Selection = scope.wrappers.Selection;\n var mixin
= scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var renderAllP
ending = scope.renderAllPending;\n var unwrap = scope.unwrap;\n var unwrapIfNe
eded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalWindow =
window.Window;\n var originalGetComputedStyle = window.getComputedStyle;\n va
r originalGetDefaultComputedStyle = window.getDefaultComputedStyle;\n var origi
nalGetSelection = window.getSelection;\n\n function Window(impl) {\n EventTa
rget.call(this, impl);\n }\n Window.prototype = Object.create(EventTarget.prot
otype);\n\n OriginalWindow.prototype.getComputedStyle = function(el, pseudo) {\
n return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pseudo);\n
};\n\n // Mozilla proprietary extension.\n if (originalGetDefaultComputedSty
le) {\n OriginalWindow.prototype.getDefaultComputedStyle = function(el, pseud
o) {\n return wrap(this || window).getDefaultComputedStyle(\n unwr
apIfNeeded(el), pseudo);\n };\n }\n\n OriginalWindow.prototype.getSelection
= function() {\n return wrap(this || window).getSelection();\n };\n\n // W
ork around for https://bugzilla.mozilla.org/show_bug.cgi?id=943065\n delete win
dow.getComputedStyle;\n delete window.getDefaultComputedStyle;\n delete window
.getSelection;\n\n ['addEventListener', 'removeEventListener', 'dispatchEvent']
.forEach(\n function(name) {\n OriginalWindow.prototype[name] = func
tion() {\n var w = wrap(this || window);\n return w[name].appl
y(w, arguments);\n };\n\n // Work around for https://bugzilla.mozi
lla.org/show_bug.cgi?id=943065\n delete window[name];\n });\n\n mix
in(Window.prototype, {\n getComputedStyle: function(el, pseudo) {\n rend
erAllPending();\n return originalGetComputedStyle.call(unwrap(this), unwrap
IfNeeded(el),\n pseudo);\n },\n
getSelection: function() {\n renderAllPending();\n return new Selectio
n(originalGetSelection.call(unwrap(this)));\n },\n\n get document() {\n
return wrap(unwrap(this).document);\n }\n });\n\n // Mozilla proprietary
extension.\n if (originalGetDefaultComputedStyle) {\n Window.prototype.getD
efaultComputedStyle = function(el, pseudo) {\n renderAllPending();\n r
eturn originalGetDefaultComputedStyle.call(unwrap(this),\n unwrapIfNeed
ed(el),pseudo);\n };\n }\n\n registerWrapper(OriginalWindow, Window, window
);\n\n scope.wrappers.Window = Window;\n\n})(window.ShadowDOMPolyfill);\n", |
131 "/**\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 var unwrap = s
cope.unwrap;\n\n // DataTransfer (Clipboard in old Blink/WebKit) has a single m
ethod that\n // requires wrapping. Since it is only a method we do not need a r
eal wrapper,\n // we can just override the method.\n\n var OriginalDataTransfe
r = window.DataTransfer || window.Clipboard;\n var OriginalDataTransferSetDragI
mage =\n OriginalDataTransfer.prototype.setDragImage;\n\n if (OriginalData
TransferSetDragImage) {\n OriginalDataTransfer.prototype.setDragImage = funct
ion(image, x, y) {\n OriginalDataTransferSetDragImage.call(this, unwrap(ima
ge), x, y);\n };\n }\n\n})(window.ShadowDOMPolyfill);\n", | 131 "/**\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 var unwrap = s
cope.unwrap;\n\n // DataTransfer (Clipboard in old Blink/WebKit) has a single m
ethod that\n // requires wrapping. Since it is only a method we do not need a r
eal wrapper,\n // we can just override the method.\n\n var OriginalDataTransfe
r = window.DataTransfer || window.Clipboard;\n var OriginalDataTransferSetDragI
mage =\n OriginalDataTransfer.prototype.setDragImage;\n\n if (OriginalData
TransferSetDragImage) {\n OriginalDataTransfer.prototype.setDragImage = funct
ion(image, x, y) {\n OriginalDataTransferSetDragImage.call(this, unwrap(ima
ge), x, y);\n };\n }\n\n})(window.ShadowDOMPolyfill);\n", |
132 "/**\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 var registerWr
apper = scope.registerWrapper;\n var setWrapper = scope.setWrapper;\n var unwr
ap = scope.unwrap;\n\n var OriginalFormData = window.FormData;\n if (!Original
FormData) return;\n\n function FormData(formElement) {\n var impl;\n if (
formElement instanceof OriginalFormData) {\n impl = formElement;\n } els
e {\n impl = new OriginalFormData(formElement && unwrap(formElement));\n
}\n setWrapper(impl, this);\n }\n\n registerWrapper(OriginalFormData, Form
Data, new OriginalFormData());\n\n scope.wrappers.FormData = FormData;\n\n})(wi
ndow.ShadowDOMPolyfill);\n", | 132 "/**\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 var registerWr
apper = scope.registerWrapper;\n var setWrapper = scope.setWrapper;\n var unwr
ap = scope.unwrap;\n\n var OriginalFormData = window.FormData;\n if (!Original
FormData) return;\n\n function FormData(formElement) {\n var impl;\n if (
formElement instanceof OriginalFormData) {\n impl = formElement;\n } els
e {\n impl = new OriginalFormData(formElement && unwrap(formElement));\n
}\n setWrapper(impl, this);\n }\n\n registerWrapper(OriginalFormData, Form
Data, new OriginalFormData());\n\n scope.wrappers.FormData = FormData;\n\n})(wi
ndow.ShadowDOMPolyfill);\n", |
133 "/*\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 unwrapIfNee
ded = scope.unwrapIfNeeded;\n var originalSend = XMLHttpRequest.prototype.send;
\n\n // Since we only need to adjust XHR.send, we just patch it instead of wrap
ping\n // the entire object. This happens when FormData is passed.\n XMLHttpRe
quest.prototype.send = function(obj) {\n return originalSend.call(this, unwra
pIfNeeded(obj));\n };\n\n})(window.ShadowDOMPolyfill);\n", | 133 "/*\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 unwrapIfNee
ded = scope.unwrapIfNeeded;\n var originalSend = XMLHttpRequest.prototype.send;
\n\n // Since we only need to adjust XHR.send, we just patch it instead of wrap
ping\n // the entire object. This happens when FormData is passed.\n XMLHttpRe
quest.prototype.send = function(obj) {\n return originalSend.call(this, unwra
pIfNeeded(obj));\n };\n\n})(window.ShadowDOMPolyfill);\n", |
134 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var isWrapperFor = scope
.isWrapperFor;\n\n // This is a list of the elements we currently override the
global constructor\n // for.\n var elements = {\n 'a': 'HTMLAnchorElement',
\n // Do not create an applet element by default since it shows a warning in\
n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'apple
t': 'HTMLAppletElement',\n 'area': 'HTMLAreaElement',\n 'audio': 'HTMLAudi
oElement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n
'br': 'HTMLBRElement',\n 'button': 'HTMLButtonElement',\n 'canvas': 'HTMLC
anvasElement',\n 'caption': 'HTMLTableCaptionElement',\n 'col': 'HTMLTable
ColElement',\n // 'command': 'HTMLCommandElement', // Not fully implemented
in Gecko.\n 'content': 'HTMLContentElement',\n 'data': 'HTMLDataElement',\
n 'datalist': 'HTMLDataListElement',\n 'del': 'HTMLModElement',\n 'dir'
: 'HTMLDirectoryElement',\n 'div': 'HTMLDivElement',\n 'dl': 'HTMLDListEle
ment',\n 'embed': 'HTMLEmbedElement',\n 'fieldset': 'HTMLFieldSetElement',
\n 'font': 'HTMLFontElement',\n 'form': 'HTMLFormElement',\n 'frame': '
HTMLFrameElement',\n 'frameset': 'HTMLFrameSetElement',\n 'h1': 'HTMLHeadi
ngElement',\n 'head': 'HTMLHeadElement',\n 'hr': 'HTMLHRElement',\n 'ht
ml': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameElement',\n 'img': 'HTMLIma
geElement',\n 'input': 'HTMLInputElement',\n 'keygen': 'HTMLKeygenElement'
,\n 'label': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'li
': 'HTMLLIElement',\n 'link': 'HTMLLinkElement',\n 'map': 'HTMLMapElement'
,\n 'marquee': 'HTMLMarqueeElement',\n 'menu': 'HTMLMenuElement',\n 'me
nuitem': 'HTMLMenuItemElement',\n 'meta': 'HTMLMetaElement',\n 'meter': 'H
TMLMeterElement',\n 'object': 'HTMLObjectElement',\n 'ol': 'HTMLOListEleme
nt',\n 'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement',
\n 'output': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'par
am': 'HTMLParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLPro
gressElement',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement',
\n 'select': 'HTMLSelectElement',\n 'shadow': 'HTMLShadowElement',\n 's
ource': 'HTMLSourceElement',\n 'span': 'HTMLSpanElement',\n 'style': 'HTML
StyleElement',\n 'table': 'HTMLTableElement',\n 'tbody': 'HTMLTableSection
Element',\n // WebKit and Moz are wrong:\n // https://bugs.webkit.org/show
_bug.cgi?id=111469\n // https://bugzilla.mozilla.org/show_bug.cgi?id=848096\n
// 'td': 'HTMLTableCellElement',\n 'template': 'HTMLTemplateElement',\n
'textarea': 'HTMLTextAreaElement',\n 'thead': 'HTMLTableSectionElement',\n
'time': 'HTMLTimeElement',\n 'title': 'HTMLTitleElement',\n 'tr': 'HTML
TableRowElement',\n 'track': 'HTMLTrackElement',\n 'ul': 'HTMLUListElement
',\n 'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tag
Name) {\n var nativeConstructorName = elements[tagName];\n var nativeConst
ructor = window[nativeConstructorName];\n if (!nativeConstructor)\n retu
rn;\n var element = document.createElement(tagName);\n var wrapperConstruc
tor = element.constructor;\n window[nativeConstructorName] = wrapperConstruct
or;\n }\n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.ge
tOwnPropertyNames(scope.wrappers).forEach(function(name) {\n window[name] = s
cope.wrappers[name]\n });\n\n})(window.ShadowDOMPolyfill);\n", | 134 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var isWrapperFor = scope
.isWrapperFor;\n\n // This is a list of the elements we currently override the
global constructor\n // for.\n var elements = {\n 'a': 'HTMLAnchorElement',
\n // Do not create an applet element by default since it shows a warning in\
n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'apple
t': 'HTMLAppletElement',\n 'area': 'HTMLAreaElement',\n 'audio': 'HTMLAudi
oElement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n
'br': 'HTMLBRElement',\n 'button': 'HTMLButtonElement',\n 'canvas': 'HTMLC
anvasElement',\n 'caption': 'HTMLTableCaptionElement',\n 'col': 'HTMLTable
ColElement',\n // 'command': 'HTMLCommandElement', // Not fully implemented
in Gecko.\n 'content': 'HTMLContentElement',\n 'data': 'HTMLDataElement',\
n 'datalist': 'HTMLDataListElement',\n 'del': 'HTMLModElement',\n 'dir'
: 'HTMLDirectoryElement',\n 'div': 'HTMLDivElement',\n 'dl': 'HTMLDListEle
ment',\n 'embed': 'HTMLEmbedElement',\n 'fieldset': 'HTMLFieldSetElement',
\n 'font': 'HTMLFontElement',\n 'form': 'HTMLFormElement',\n 'frame': '
HTMLFrameElement',\n 'frameset': 'HTMLFrameSetElement',\n 'h1': 'HTMLHeadi
ngElement',\n 'head': 'HTMLHeadElement',\n 'hr': 'HTMLHRElement',\n 'ht
ml': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameElement',\n 'img': 'HTMLIma
geElement',\n 'input': 'HTMLInputElement',\n 'keygen': 'HTMLKeygenElement'
,\n 'label': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'li
': 'HTMLLIElement',\n 'link': 'HTMLLinkElement',\n 'map': 'HTMLMapElement'
,\n 'marquee': 'HTMLMarqueeElement',\n 'menu': 'HTMLMenuElement',\n 'me
nuitem': 'HTMLMenuItemElement',\n 'meta': 'HTMLMetaElement',\n 'meter': 'H
TMLMeterElement',\n 'object': 'HTMLObjectElement',\n 'ol': 'HTMLOListEleme
nt',\n 'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement',
\n 'output': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'par
am': 'HTMLParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLPro
gressElement',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement',
\n 'select': 'HTMLSelectElement',\n 'shadow': 'HTMLShadowElement',\n 's
ource': 'HTMLSourceElement',\n 'span': 'HTMLSpanElement',\n 'style': 'HTML
StyleElement',\n 'table': 'HTMLTableElement',\n 'tbody': 'HTMLTableSection
Element',\n // WebKit and Moz are wrong:\n // https://bugs.webkit.org/show
_bug.cgi?id=111469\n // https://bugzilla.mozilla.org/show_bug.cgi?id=848096\n
// 'td': 'HTMLTableCellElement',\n 'template': 'HTMLTemplateElement',\n
'textarea': 'HTMLTextAreaElement',\n 'thead': 'HTMLTableSectionElement',\n
'time': 'HTMLTimeElement',\n 'title': 'HTMLTitleElement',\n 'tr': 'HTML
TableRowElement',\n 'track': 'HTMLTrackElement',\n 'ul': 'HTMLUListElement
',\n 'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tag
Name) {\n var nativeConstructorName = elements[tagName];\n var nativeConst
ructor = window[nativeConstructorName];\n if (!nativeConstructor)\n retu
rn;\n var element = document.createElement(tagName);\n var wrapperConstruc
tor = element.constructor;\n window[nativeConstructorName] = wrapperConstruct
or;\n }\n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.ge
tOwnPropertyNames(scope.wrappers).forEach(function(name) {\n window[name] = s
cope.wrappers[name]\n });\n\n})(window.ShadowDOMPolyfill);\n", |
135 "/*\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 /
/ convenient global\n window.wrap = ShadowDOMPolyfill.wrapIfNeeded;\n window.u
nwrap = ShadowDOMPolyfill.unwrapIfNeeded;\n\n // users may want to customize ot
her types\n // TODO(sjmiles): 'button' is now supported by ShadowDOMPolyfill, b
ut\n // I've left this code here in case we need to temporarily patch another\n
// type\n /*\n (function() {\n var elts = {HTMLButtonElement: 'button'};\
n for (var c in elts) {\n window[c] = function() { throw 'Patched Constr
uctor'; };\n window[c].prototype = Object.getPrototypeOf(\n docume
nt.createElement(elts[c]));\n }\n })();\n */\n\n // patch in prefixed name
\n Object.defineProperty(Element.prototype, 'webkitShadowRoot',\n Object.g
etOwnPropertyDescriptor(Element.prototype, 'shadowRoot'));\n\n var originalCrea
teShadowRoot = Element.prototype.createShadowRoot;\n Element.prototype.createSh
adowRoot = function() {\n var root = originalCreateShadowRoot.call(this);\n
CustomElements.watchShadow(this);\n return root;\n };\n\n Element.prototy
pe.webkitCreateShadowRoot = Element.prototype.createShadowRoot;\n\n function qu
eryShadow(node, selector) {\n var m, el = node.firstElementChild;\n var sh
adows, sr, i;\n shadows = [];\n sr = node.shadowRoot;\n while(sr) {\n
shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for(i = shadow
s.length - 1; i >= 0; i--) {\n m = shadows[i].querySelector(selector);\n
if (m) {\n return m;\n }\n }\n while(el) {\n m = query
Shadow(el, selector);\n if (m) {\n return m;\n }\n el = el
.nextElementSibling;\n }\n return null;\n }\n\n function queryAllShadows
(node, selector, results) {\n var el = node.firstElementChild;\n var temp,
sr, shadows, i, j;\n shadows = [];\n sr = node.shadowRoot;\n while(sr)
{\n shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for (i =
shadows.length - 1; i >= 0; i--) {\n temp = shadows[i].querySelectorAll(se
lector);\n for(j = 0; j < temp.length; j++) {\n results.push(temp[j]
);\n }\n }\n while (el) {\n queryAllShadows(el, selector, result
s);\n el = el.nextElementSibling;\n }\n return results;\n }\n\n sco
pe.queryAllShadows = function(node, selector, all) {\n if (all) {\n retu
rn queryAllShadows(node, selector, []);\n } else {\n return queryShadow(
node, selector);\n }\n };\n})(window.Platform);\n", | 135 "/*\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 /
/ convenient global\n window.wrap = ShadowDOMPolyfill.wrapIfNeeded;\n window.u
nwrap = ShadowDOMPolyfill.unwrapIfNeeded;\n\n // users may want to customize ot
her types\n // TODO(sjmiles): 'button' is now supported by ShadowDOMPolyfill, b
ut\n // I've left this code here in case we need to temporarily patch another\n
// type\n /*\n (function() {\n var elts = {HTMLButtonElement: 'button'};\
n for (var c in elts) {\n window[c] = function() { throw 'Patched Constr
uctor'; };\n window[c].prototype = Object.getPrototypeOf(\n docume
nt.createElement(elts[c]));\n }\n })();\n */\n\n // patch in prefixed name
\n Object.defineProperty(Element.prototype, 'webkitShadowRoot',\n Object.g
etOwnPropertyDescriptor(Element.prototype, 'shadowRoot'));\n\n var originalCrea
teShadowRoot = Element.prototype.createShadowRoot;\n Element.prototype.createSh
adowRoot = function() {\n var root = originalCreateShadowRoot.call(this);\n
CustomElements.watchShadow(this);\n return root;\n };\n\n Element.prototy
pe.webkitCreateShadowRoot = Element.prototype.createShadowRoot;\n\n function qu
eryShadow(node, selector) {\n var m, el = node.firstElementChild;\n var sh
adows, sr, i;\n shadows = [];\n sr = node.shadowRoot;\n while(sr) {\n
shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for(i = shadow
s.length - 1; i >= 0; i--) {\n m = shadows[i].querySelector(selector);\n
if (m) {\n return m;\n }\n }\n while(el) {\n m = query
Shadow(el, selector);\n if (m) {\n return m;\n }\n el = el
.nextElementSibling;\n }\n return null;\n }\n\n function queryAllShadows
(node, selector, results) {\n var el = node.firstElementChild;\n var temp,
sr, shadows, i, j;\n shadows = [];\n sr = node.shadowRoot;\n while(sr)
{\n shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for (i =
shadows.length - 1; i >= 0; i--) {\n temp = shadows[i].querySelectorAll(se
lector);\n for(j = 0; j < temp.length; j++) {\n results.push(temp[j]
);\n }\n }\n while (el) {\n queryAllShadows(el, selector, result
s);\n el = el.nextElementSibling;\n }\n return results;\n }\n\n sco
pe.queryAllShadows = function(node, selector, all) {\n if (all) {\n retu
rn queryAllShadows(node, selector, []);\n } else {\n return queryShadow(
node, selector);\n }\n };\n})(window.Platform);\n", |
136 "/*\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 This is a limited s
him for ShadowDOM css styling.\n https://dvcs.w3.org/hg/webcomponents/raw-file/
tip/spec/shadow/index.html#styles\n \n The intention here is to support only t
he styling features which can be \n relatively simply implemented. The goal is
to allow users to avoid the \n most obvious pitfalls and do so without compromi
sing performance significantly. \n For ShadowDOM styling that's not covered her
e, a set of best practices\n can be provided that should allow users to accompl
ish more complex styling.\n\n The following is a list of specific ShadowDOM sty
ling features and a brief\n discussion of the approach used to shim.\n\n Shimm
ed features:\n\n * :host, :host-context: ShadowDOM allows styling of the shadow
Root's host\n element using the :host rule. To shim this feature, the :host sty
les are \n reformatted and prefixed with a given scope name and promoted to a \
n document level stylesheet.\n For example, given a scope name of .foo, a rule
like this:\n \n :host {\n background: red;\n }\n }\n \n be
comes:\n \n .foo {\n background: red;\n }\n \n * encapsultion: Sty
les defined within ShadowDOM, apply only to \n dom inside the ShadowDOM. Polyme
r uses one of two techniques to imlement\n this feature.\n \n By default, rul
es are prefixed with the host element tag name \n as a descendant selector. Thi
s ensures styling does not leak out of the 'top'\n of the element's ShadowDOM.
For example,\n\n div {\n font-weight: bold;\n }\n \n becomes:\n\n x-
foo div {\n font-weight: bold;\n }\n \n becomes:\n\n\n Alternatively,
if Platform.ShadowCSS.strictStyling is set to true then \n selectors are scope
d by adding an attribute selector suffix to each\n simple selector that contain
s the host element tag name. Each element \n in the element's ShadowDOM templat
e is also given the scope attribute. \n Thus, these rules match only elements t
hat have the scope attribute.\n For example, given a scope name of x-foo, a rul
e like this:\n \n div {\n font-weight: bold;\n }\n \n becomes:\n
\n div[x-foo] {\n font-weight: bold;\n }\n\n Note that elements that
are dynamically added to a scope must have the scope\n selector added to them
manually.\n\n * upper/lower bound encapsulation: Styles which are defined outsi
de a\n shadowRoot should not cross the ShadowDOM boundary and should not apply\
n inside a shadowRoot.\n\n This styling behavior is not emulated. Some possibl
e ways to do this that \n were rejected due to complexity and/or performance co
ncerns include: (1) reset\n every possible property for every possible selector
for a given scope name;\n (2) re-implement css in javascript.\n \n As an alt
ernative, users should make sure to use selectors\n specific to the scope in wh
ich they are working.\n \n * ::distributed: This behavior is not emulated. It'
s often not necessary\n to style the contents of a specific insertion point and
instead, descendants\n of the host element can be styled selectively. Users ca
n also create an \n extra node around an insertion point and style that node's
contents\n via descendent selectors. For example, with a shadowRoot like this:\
n \n <style>\n ::content(div) {\n background: red;\n }\n
</style>\n <content></content>\n \n could become:\n \n <style>\n
/ *@polyfill .content-container div * / \n ::content(div) {\n backgr
ound: red;\n }\n </style>\n <div class=\"content-container\">\n
<content></content>\n </div>\n \n Note the use of @polyfill in the comment
above a ShadowDOM specific style\n declaration. This is a directive to the styl
ing shim to use the selector \n in comments in lieu of the next selector when r
unning under polyfill.\n*/\n(function(scope) {\n\nvar ShadowCSS = {\n strictSty
ling: false,\n registry: {},\n // Shim styles for a given root associated with
a name and extendsName\n // 1. cache root styles by name\n // 2. optionally t
ag root nodes with scope name\n // 3. shim polyfill directives /* @polyfill */
and /* @polyfill-rule */\n // 4. shim :host and scoping\n shimStyling: functio
n(root, name, extendsName) {\n var scopeStyles = this.prepareRoot(root, name,
extendsName);\n var typeExtension = this.isTypeExtension(extendsName);\n
var scopeSelector = this.makeScopeSelector(name, typeExtension);\n // use cac
hing to make working with styles nodes easier and to facilitate\n // lookup o
f extendee\n var cssText = stylesToCssText(scopeStyles, true);\n cssText =
this.scopeCssText(cssText, scopeSelector);\n // cache shimmed css on root fo
r user extensibility\n if (root) {\n root.shimmedStyle = cssText;\n }
\n // add style to document\n this.addCssToDocument(cssText, name);\n },\
n /*\n * Shim a style element with the given selector. Returns cssText that ca
n\n * be included in the document via Platform.ShadowCSS.addCssToDocument(css).
\n */\n shimStyle: function(style, selector) {\n return this.shimCssText(st
yle.textContent, selector);\n },\n /*\n * Shim some cssText with the given se
lector. Returns cssText that can\n * be included in the document via Platform.S
hadowCSS.addCssToDocument(css).\n */\n shimCssText: function(cssText, selector
) {\n cssText = this.insertDirectives(cssText);\n return this.scopeCssText
(cssText, selector);\n },\n makeScopeSelector: function(name, typeExtension) {
\n if (name) {\n return typeExtension ? '[is=' + name + ']' : name;\n
}\n return '';\n },\n isTypeExtension: function(extendsName) {\n return
extendsName && extendsName.indexOf('-') < 0;\n },\n prepareRoot: function(roo
t, name, extendsName) {\n var def = this.registerRoot(root, name, extendsName
);\n this.replaceTextInStyles(def.rootStyles, this.insertDirectives);\n //
remove existing style elements\n this.removeStyles(root, def.rootStyles);\n
// apply strict attr\n if (this.strictStyling) {\n this.applyScopeToC
ontent(root, name);\n }\n return def.scopeStyles;\n },\n removeStyles: f
unction(root, styles) {\n for (var i=0, l=styles.length, s; (i<l) && (s=style
s[i]); i++) {\n s.parentNode.removeChild(s);\n }\n },\n registerRoot:
function(root, name, extendsName) {\n var def = this.registry[name] = {\n
root: root,\n name: name,\n extendsName: extendsName\n }\n var
styles = this.findStyles(root);\n def.rootStyles = styles;\n def.scopeSty
les = def.rootStyles;\n var extendee = this.registry[def.extendsName];\n i
f (extendee) {\n def.scopeStyles = extendee.scopeStyles.concat(def.scopeSty
les);\n }\n return def;\n },\n findStyles: function(root) {\n if (!ro
ot) {\n return [];\n }\n var styles = root.querySelectorAll('style');
\n return Array.prototype.filter.call(styles, function(s) {\n return !s.
hasAttribute(NO_SHIM_ATTRIBUTE);\n });\n },\n applyScopeToContent: function
(root, name) {\n if (root) {\n // add the name attribute to each node in
root.\n Array.prototype.forEach.call(root.querySelectorAll('*'),\n
function(node) {\n node.setAttribute(name, '');\n });\n
// and template contents too\n Array.prototype.forEach.call(root.querySe
lectorAll('template'),\n function(template) {\n this.applySc
opeToContent(template.content, name);\n },\n this);\n }\n
},\n insertDirectives: function(cssText) {\n cssText = this.insertPolyfillDi
rectivesInCssText(cssText);\n return this.insertPolyfillRulesInCssText(cssTex
t);\n },\n /*\n * Process styles to convert native ShadowDOM rules that will
trip\n * up the css parser; we rely on decorating the stylesheet with inert r
ules.\n * \n * For example, we convert this rule:\n * \n * polyfill-next
-selector { content: ':host menu-item'; }\n * ::content menu-item {\n * \n
* to this:\n * \n * scopeName menu-item {\n *\n **/\n insertPolyfillDir
ectivesInCssText: function(cssText) {\n // TODO(sorvell): remove either conte
nt or comment\n cssText = cssText.replace(cssCommentNextSelectorRe, function(
match, p1) {\n // remove end comment delimiter and add block start\n r
eturn p1.slice(0, -2) + '{';\n });\n return cssText.replace(cssContentNext
SelectorRe, function(match, p1) {\n return p1 + ' {';\n });\n },\n /*\
n * Process styles to add rules which will only apply under the polyfill\n *
\n * For example, we convert this rule:\n * \n * polyfill-rule {\n *
content: ':host menu-item';\n * ...\n * }\n * \n * to this:\n * \n *
scopeName menu-item {...}\n *\n **/\n insertPolyfillRulesInCssText: functio
n(cssText) {\n // TODO(sorvell): remove either content or comment\n cssTex
t = cssText.replace(cssCommentRuleRe, function(match, p1) {\n // remove end
comment delimiter\n return p1.slice(0, -1);\n });\n return cssText.r
eplace(cssContentRuleRe, function(match, p1, p2, p3) {\n var rule = match.r
eplace(p1, '').replace(p2, '');\n return p3 + rule;\n });\n },\n /* En
sure styles are scoped. Pseudo-scoping takes a rule like:\n * \n * .foo {..
. } \n * \n * and converts this to\n * \n * scopeName .foo { ... }\n
*/\n scopeCssText: function(cssText, scopeSelector) {\n var unscoped = thi
s.extractUnscopedRulesFromCssText(cssText);\n cssText = this.insertPolyfillHo
stInCssText(cssText);\n cssText = this.convertColonHost(cssText);\n cssTex
t = this.convertColonHostContext(cssText);\n cssText = this.convertShadowDOMS
electors(cssText);\n if (scopeSelector) {\n var self = this, cssText;\n
withCssRules(cssText, function(rules) {\n cssText = self.scopeRules(
rules, scopeSelector);\n });\n\n }\n cssText = cssText + '\\n' + unsc
oped;\n return cssText.trim();\n },\n /*\n * Process styles to add rules
which will only apply under the polyfill\n * and do not process via CSSOM. (CS
SOM is destructive to rules on rare \n * occasions, e.g. -webkit-calc on Safar
i.)\n * For example, we convert this rule:\n * \n * (comment start) @polyf
ill-unscoped-rule menu-item { \n * ... } (comment end)\n * \n * to this:\n
* \n * menu-item {...}\n *\n **/\n extractUnscopedRulesFromCssText: fun
ction(cssText) {\n // TODO(sorvell): remove either content or comment\n va
r r = '', m;\n while (m = cssCommentUnscopedRuleRe.exec(cssText)) {\n r
+= m[1].slice(0, -1) + '\\n\\n';\n }\n while (m = cssContentUnscopedRuleRe
.exec(cssText)) {\n r += m[0].replace(m[2], '').replace(m[1], m[3]) + '\\n\
\n';\n }\n return r;\n },\n /*\n * convert a rule like :host(.foo) > .
bar { }\n *\n * to\n *\n * scopeName.foo > .bar\n */\n convertColonHos
t: function(cssText) {\n return this.convertColonRule(cssText, cssColonHostRe
,\n this.colonHostPartReplacer);\n },\n /*\n * convert a rule like :h
ost-context(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar, .f
oo scopeName > .bar { }\n * \n * and\n *\n * :host-context(.foo:host) .b
ar { ... }\n * \n * to\n * \n * scopeName.foo .bar { ... }\n */\n conv
ertColonHostContext: function(cssText) {\n return this.convertColonRule(cssTe
xt, cssColonHostContextRe,\n this.colonHostContextPartReplacer);\n },\n
convertColonRule: function(cssText, regExp, partReplacer) {\n // p1 = :host,
p2 = contents of (), p3 rest of rule\n return cssText.replace(regExp, functi
on(m, p1, p2, p3) {\n p1 = polyfillHostNoCombinator;\n if (p2) {\n
var parts = p2.split(','), r = [];\n for (var i=0, l=parts.length, p;
(i<l) && (p=parts[i]); i++) {\n p = p.trim();\n r.push(partRe
placer(p1, p, p3));\n }\n return r.join(',');\n } else {\n
return p1 + p3;\n }\n });\n },\n colonHostContextPartReplacer: fu
nction(host, part, suffix) {\n if (part.match(polyfillHost)) {\n return
this.colonHostPartReplacer(host, part, suffix);\n } else {\n return host
+ part + suffix + ', ' + part + ' ' + host + suffix;\n }\n },\n colonHostP
artReplacer: function(host, part, suffix) {\n return host + part.replace(poly
fillHost, '') + suffix;\n },\n /*\n * Convert combinators like ::shadow and
pseudo-elements like ::content\n * by replacing with space.\n */\n convertSh
adowDOMSelectors: function(cssText) {\n for (var i=0; i < shadowDOMSelectorsR
e.length; i++) {\n cssText = cssText.replace(shadowDOMSelectorsRe[i], ' ');
\n }\n return cssText;\n },\n // change a selector like 'div' to 'name d
iv'\n scopeRules: function(cssRules, scopeSelector) {\n var cssText = '';\n
if (cssRules) {\n Array.prototype.forEach.call(cssRules, function(rule)
{\n if (rule.selectorText && (rule.style && rule.style.cssText !== undefi
ned)) {\n cssText += this.scopeSelector(rule.selectorText, scopeSelecto
r, \n this.strictStyling) + ' {\\n\\t';\n cssText += this.pr
opertiesFromRule(rule) + '\\n}\\n\\n';\n } else if (rule.type === CSSRule
.MEDIA_RULE) {\n cssText += '@media ' + rule.media.mediaText + ' {\\n';
\n cssText += this.scopeRules(rule.cssRules, scopeSelector);\n
cssText += '\\n}\\n\\n';\n } else {\n // KEYFRAMES_RULE in IE t
hrows when we query cssText\n // when it contains a -webkit- property.\
n // if this happens, we fallback to constructing the rule\n /
/ from the CSSRuleSet\n // https://connect.microsoft.com/IE/feedbackdet
ail/view/955703/accessing-csstext-of-a-keyframe-rule-that-contains-a-webkit-prop
erty-via-cssom-generates-exception\n try {\n if (rule.cssTex
t) {\n cssText += rule.cssText + '\\n\\n';\n }\n
} catch(x) {\n if (rule.type === CSSRule.KEYFRAMES_RULE && rule.css
Rules) {\n cssText += this.ieSafeCssTextFromKeyFrameRule(rule);\n
}\n }\n }\n }, this);\n }\n return cssText;
\n },\n ieSafeCssTextFromKeyFrameRule: function(rule) {\n var cssText = '@k
eyframes ' + rule.name + ' {';\n Array.prototype.forEach.call(rule.cssRules,
function(rule) {\n cssText += ' ' + rule.keyText + ' {' + rule.style.cssTex
t + '}';\n });\n cssText += ' }';\n return cssText;\n },\n scopeSelec
tor: function(selector, scopeSelector, strict) {\n var r = [], parts = select
or.split(',');\n parts.forEach(function(p) {\n p = p.trim();\n if (
this.selectorNeedsScoping(p, scopeSelector)) {\n p = (strict && !p.match(
polyfillHostNoCombinator)) ? \n this.applyStrictSelectorScope(p, scop
eSelector) :\n this.applySelectorScope(p, scopeSelector);\n }\n
r.push(p);\n }, this);\n return r.join(', ');\n },\n selectorNeedsS
coping: function(selector, scopeSelector) {\n if (Array.isArray(scopeSelector
)) {\n return true;\n }\n var re = this.makeScopeMatcher(scopeSelecto
r);\n return !selector.match(re);\n },\n makeScopeMatcher: function(scopeSe
lector) {\n scopeSelector = scopeSelector.replace(/\\[/g, '\\\\[').replace(/\
\[/g, '\\\\]');\n return new RegExp('^(' + scopeSelector + ')' + selectorReSu
ffix, 'm');\n },\n applySelectorScope: function(selector, selectorScope) {\n
return Array.isArray(selectorScope) ?\n this.applySelectorScopeList(sel
ector, selectorScope) :\n this.applySimpleSelectorScope(selector, selecto
rScope);\n },\n // apply an array of selectors\n applySelectorScopeList: func
tion(selector, scopeSelectorList) {\n var r = [];\n for (var i=0, s; (s=sc
opeSelectorList[i]); i++) {\n r.push(this.applySimpleSelectorScope(selector
, s));\n }\n return r.join(', ');\n },\n // scope via name and [is=name]
\n applySimpleSelectorScope: function(selector, scopeSelector) {\n if (selec
tor.match(polyfillHostRe)) {\n selector = selector.replace(polyfillHostNoCo
mbinator, scopeSelector);\n return selector.replace(polyfillHostRe, scopeSe
lector + ' ');\n } else {\n return scopeSelector + ' ' + selector;\n
}\n },\n // return a selector with [name] suffix on each simple selector\n //
e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]\n applyStrictSe
lectorScope: function(selector, scopeSelector) {\n scopeSelector = scopeSelec
tor.replace(/\\[is=([^\\]]*)\\]/g, '$1');\n var splits = [' ', '>', '+', '~']
,\n scoped = selector,\n attrName = '[' + scopeSelector + ']';\n sp
lits.forEach(function(sep) {\n var parts = scoped.split(sep);\n scoped
= parts.map(function(p) {\n // remove :host since it should be unnecessa
ry\n var t = p.trim().replace(polyfillHostRe, '');\n if (t && (spl
its.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {\n p = t.replace(/([
^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')\n }\n return p;\n }
).join(sep);\n });\n return scoped;\n },\n insertPolyfillHostInCssText:
function(selector) {\n return selector.replace(colonHostContextRe, polyfillHo
stContext).replace(\n colonHostRe, polyfillHost);\n },\n propertiesFrom
Rule: function(rule) {\n var cssText = rule.style.cssText;\n // TODO(sorve
ll): Safari cssom incorrectly removes quotes from the content\n // property.
(https://bugs.webkit.org/show_bug.cgi?id=118045)\n // don't replace attr rule
s\n if (rule.style.content && !rule.style.content.match(/['\"]+|attr/)) {\n
cssText = cssText.replace(/content:[^;]*;/g, 'content: \\'' + \n ru
le.style.content + '\\';');\n }\n // TODO(sorvell): we can workaround this
issue here, but we need a list\n // of troublesome properties to fix https:/
/github.com/Polymer/platform/issues/53\n //\n // inherit rules can be omit
ted from cssText\n // TODO(sorvell): remove when Blink bug is fixed:\n //
https://code.google.com/p/chromium/issues/detail?id=358273\n var style = rule
.style;\n for (var i in style) {\n if (style[i] === 'initial') {\n
cssText += i + ': initial; ';\n }\n }\n return cssText;\n },\n re
placeTextInStyles: function(styles, action) {\n if (styles && action) {\n
if (!(styles instanceof Array)) {\n styles = [styles];\n }\n
Array.prototype.forEach.call(styles, function(s) {\n s.textContent = acti
on.call(this, s.textContent);\n }, this);\n }\n },\n addCssToDocument:
function(cssText, name) {\n if (cssText.match('@import')) {\n addOwnShe
et(cssText, name);\n } else {\n addCssToDocument(cssText);\n }\n }\n
};\n\nvar selectorRe = /([^{]*)({[\\s\\S]*?})/gim,\n cssCommentRe = /\\/\\*[^
*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n // TODO(sorvell): remove either content or
comment\n cssCommentNextSelectorRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^
*]*\\*+)*\\/)([^{]*?){/gim,\n cssContentNextSelectorRe = /polyfill-next-selec
tor[^}]*content\\:[\\s]*?['\"](.*?)['\"][;\\s]*}([^{]*?){/gim, \n // TODO(so
rvell): remove either content or comment\n cssCommentRuleRe = /\\/\\*\\s@poly
fill-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssContentRuleRe = /(polyfill
-rule)[^}]*(content\\:[\\s]*['\"](.*?)['\"])[;\\s]*[^}]*}/gim,\n // TODO(sorv
ell): remove either content or comment\n cssCommentUnscopedRuleRe = /\\/\\*\\
s@polyfill-unscoped-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssContentUnsc
opedRuleRe = /(polyfill-unscoped-rule)[^}]*(content\\:[\\s]*['\"](.*?)['\"])[;\\
s]*[^}]*}/gim,\n cssPseudoRe = /::(x-[^\\s{,(]*)/gim,\n cssPartRe = /::par
t\\(([^)]*)\\)/gim,\n // note: :host pre-processed to -shadowcsshost.\n po
lyfillHost = '-shadowcsshost',\n // note: :host-context pre-processed to -sha
dowcsshostcontext.\n polyfillHostContext = '-shadowcsscontext',\n parenSuf
fix = ')(?:\\\\((' +\n '(?:\\\\([^)(]*\\\\)|[^)(]*)+?' +\n ')\\\\)
)?([^,{]*)';\n cssColonHostRe = new RegExp('(' + polyfillHost + parenSuffix,
'gim'),\n cssColonHostContextRe = new RegExp('(' + polyfillHostContext + pare
nSuffix, 'gim'),\n selectorReSuffix = '([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$',\n
colonHostRe = /\\:host/gim,\n colonHostContextRe = /\\:host-context/gim,\
n /* host name without combinator */\n polyfillHostNoCombinator = polyfill
Host + '-no-combinator',\n polyfillHostRe = new RegExp(polyfillHost, 'gim'),\
n polyfillHostContextRe = new RegExp(polyfillHostContext, 'gim'),\n shadow
DOMSelectorsRe = [\n /\\^\\^/g,\n /\\^/g,\n /\\/shadow\\//g,\n
/\\/shadow-deep\\//g,\n /::shadow/g,\n /\\/deep\\//g,\n /::con
tent/g\n ];\n\nfunction stylesToCssText(styles, preserveComments) {\n var cs
sText = '';\n Array.prototype.forEach.call(styles, function(s) {\n cssText +
= s.textContent + '\\n\\n';\n });\n // strip comments for easier processing\n
if (!preserveComments) {\n cssText = cssText.replace(cssCommentRe, '');\n }
\n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var style = docu
ment.createElement('style');\n style.textContent = cssText;\n return style;\n}
\n\nfunction cssToRules(cssText) {\n var style = cssTextToStyle(cssText);\n do
cument.head.appendChild(style);\n var rules = [];\n if (style.sheet) {\n //
TODO(sorvell): Firefox throws when accessing the rules of a stylesheet\n //
with an @import\n // https://bugzilla.mozilla.org/show_bug.cgi?id=625013\n
try {\n rules = style.sheet.cssRules;\n } catch(e) {\n //\n }\n
} else {\n console.warn('sheet not found', style);\n }\n style.parentNode
.removeChild(style);\n return rules;\n}\n\nvar frame = document.createElement('
iframe');\nframe.style.display = 'none';\n\nfunction initFrame() {\n frame.init
ialized = true;\n document.body.appendChild(frame);\n var doc = frame.contentD
ocument;\n var base = doc.createElement('base');\n base.href = document.baseUR
I;\n doc.head.appendChild(base);\n}\n\nfunction inFrame(fn) {\n if (!frame.ini
tialized) {\n initFrame();\n }\n document.body.appendChild(frame);\n fn(fr
ame.contentDocument);\n document.body.removeChild(frame);\n}\n\n// TODO(sorvell
): use an iframe if the cssText contains an @import to workaround\n// https://co
de.google.com/p/chromium/issues/detail?id=345114\nvar isChrome = navigator.userA
gent.match('Chrome');\nfunction withCssRules(cssText, callback) {\n if (!callba
ck) {\n return;\n }\n var rules;\n if (cssText.match('@import') && isChrom
e) {\n var style = cssTextToStyle(cssText);\n inFrame(function(doc) {\n
doc.head.appendChild(style.impl);\n rules = Array.prototype.slice.call(s
tyle.sheet.cssRules, 0);\n callback(rules);\n });\n } else {\n rules
= cssToRules(cssText);\n callback(rules);\n }\n}\n\nfunction rulesToCss(css
Rules) {\n for (var i=0, css=[]; i < cssRules.length; i++) {\n css.push(cssR
ules[i].cssText);\n }\n return css.join('\\n\\n');\n}\n\nfunction addCssToDocu
ment(cssText) {\n if (cssText) {\n getSheet().appendChild(document.createTex
tNode(cssText));\n }\n}\n\nfunction addOwnSheet(cssText, name) {\n var style =
cssTextToStyle(cssText);\n style.setAttribute(name, '');\n style.setAttribute
(SHIMMED_ATTRIBUTE, '');\n document.head.appendChild(style);\n}\n\nvar SHIM_ATT
RIBUTE = 'shim-shadowdom';\nvar SHIMMED_ATTRIBUTE = 'shim-shadowdom-css';\nvar N
O_SHIM_ATTRIBUTE = 'no-shim';\n\nvar sheet;\nfunction getSheet() {\n if (!sheet
) {\n sheet = document.createElement(\"style\");\n sheet.setAttribute(SHIM
MED_ATTRIBUTE, '');\n sheet[SHIMMED_ATTRIBUTE] = true;\n }\n return sheet;\
n}\n\n// add polyfill stylesheet to document\nif (window.ShadowDOMPolyfill) {\n
addCssToDocument('style { display: none !important; }\\n');\n var doc = wrap(d
ocument);\n var head = doc.querySelector('head');\n head.insertBefore(getSheet
(), head.childNodes[0]);\n\n // TODO(sorvell): monkey-patching HTMLImports is a
busive;\n // consider a better solution.\n document.addEventListener('DOMConte
ntLoaded', function() {\n var urlResolver = scope.urlResolver;\n \n if
(window.HTMLImports && !HTMLImports.useNative) {\n var SHIM_SHEET_SELECTOR
= 'link[rel=stylesheet]' +\n '[' + SHIM_ATTRIBUTE + ']';\n var SHI
M_STYLE_SELECTOR = 'style[' + SHIM_ATTRIBUTE + ']';\n HTMLImports.importer.
documentPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n HTMLImports.import
er.importsPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n\n HTMLImports.pa
rser.documentSelectors = [\n HTMLImports.parser.documentSelectors,\n
SHIM_SHEET_SELECTOR,\n SHIM_STYLE_SELECTOR\n ].join(',');\n \n
var originalParseGeneric = HTMLImports.parser.parseGeneric;\n\n HTMLImp
orts.parser.parseGeneric = function(elt) {\n if (elt[SHIMMED_ATTRIBUTE])
{\n return;\n }\n var style = elt.__importElement || elt;
\n if (!style.hasAttribute(SHIM_ATTRIBUTE)) {\n originalParseGen
eric.call(this, elt);\n return;\n }\n if (elt.__resource)
{\n style = elt.ownerDocument.createElement('style');\n style
.textContent = elt.__resource;\n }\n // relay on HTMLImports for p
ath fixup\n HTMLImports.path.resolveUrlsInStyle(style);\n style.te
xtContent = ShadowCSS.shimStyle(style);\n style.removeAttribute(SHIM_ATTR
IBUTE, '');\n style.setAttribute(SHIMMED_ATTRIBUTE, '');\n style[S
HIMMED_ATTRIBUTE] = true;\n // place in document\n if (style.paren
tNode !== head) {\n // replace links in head\n if (elt.parentN
ode === head) {\n head.replaceChild(style, elt);\n } else {\
n this.addElementToDocument(style);\n }\n }\n
style.__importParsed = true;\n this.markParsingComplete(elt);\n th
is.parseNext();\n }\n\n var hasResource = HTMLImports.parser.hasResour
ce;\n HTMLImports.parser.hasResource = function(node) {\n if (node.l
ocalName === 'link' && node.rel === 'stylesheet' &&\n node.hasAttribu
te(SHIM_ATTRIBUTE)) {\n return (node.__resource);\n } else {\n
return hasResource.call(this, node);\n }\n }\n\n }\n });
\n}\n\n// exports\nscope.ShadowCSS = ShadowCSS;\n\n})(window.Platform);\n", | 136 "/*\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 This is a limited s
him for ShadowDOM css styling.\n https://dvcs.w3.org/hg/webcomponents/raw-file/
tip/spec/shadow/index.html#styles\n \n The intention here is to support only t
he styling features which can be \n relatively simply implemented. The goal is
to allow users to avoid the \n most obvious pitfalls and do so without compromi
sing performance significantly. \n For ShadowDOM styling that's not covered her
e, a set of best practices\n can be provided that should allow users to accompl
ish more complex styling.\n\n The following is a list of specific ShadowDOM sty
ling features and a brief\n discussion of the approach used to shim.\n\n Shimm
ed features:\n\n * :host, :host-context: ShadowDOM allows styling of the shadow
Root's host\n element using the :host rule. To shim this feature, the :host sty
les are \n reformatted and prefixed with a given scope name and promoted to a \
n document level stylesheet.\n For example, given a scope name of .foo, a rule
like this:\n \n :host {\n background: red;\n }\n }\n \n be
comes:\n \n .foo {\n background: red;\n }\n \n * encapsultion: Sty
les defined within ShadowDOM, apply only to \n dom inside the ShadowDOM. Polyme
r uses one of two techniques to imlement\n this feature.\n \n By default, rul
es are prefixed with the host element tag name \n as a descendant selector. Thi
s ensures styling does not leak out of the 'top'\n of the element's ShadowDOM.
For example,\n\n div {\n font-weight: bold;\n }\n \n becomes:\n\n x-
foo div {\n font-weight: bold;\n }\n \n becomes:\n\n\n Alternatively,
if Platform.ShadowCSS.strictStyling is set to true then \n selectors are scope
d by adding an attribute selector suffix to each\n simple selector that contain
s the host element tag name. Each element \n in the element's ShadowDOM templat
e is also given the scope attribute. \n Thus, these rules match only elements t
hat have the scope attribute.\n For example, given a scope name of x-foo, a rul
e like this:\n \n div {\n font-weight: bold;\n }\n \n becomes:\n
\n div[x-foo] {\n font-weight: bold;\n }\n\n Note that elements that
are dynamically added to a scope must have the scope\n selector added to them
manually.\n\n * upper/lower bound encapsulation: Styles which are defined outsi
de a\n shadowRoot should not cross the ShadowDOM boundary and should not apply\
n inside a shadowRoot.\n\n This styling behavior is not emulated. Some possibl
e ways to do this that \n were rejected due to complexity and/or performance co
ncerns include: (1) reset\n every possible property for every possible selector
for a given scope name;\n (2) re-implement css in javascript.\n \n As an alt
ernative, users should make sure to use selectors\n specific to the scope in wh
ich they are working.\n \n * ::distributed: This behavior is not emulated. It'
s often not necessary\n to style the contents of a specific insertion point and
instead, descendants\n of the host element can be styled selectively. Users ca
n also create an \n extra node around an insertion point and style that node's
contents\n via descendent selectors. For example, with a shadowRoot like this:\
n \n <style>\n ::content(div) {\n background: red;\n }\n
</style>\n <content></content>\n \n could become:\n \n <style>\n
/ *@polyfill .content-container div * / \n ::content(div) {\n backgr
ound: red;\n }\n </style>\n <div class=\"content-container\">\n
<content></content>\n </div>\n \n Note the use of @polyfill in the comment
above a ShadowDOM specific style\n declaration. This is a directive to the styl
ing shim to use the selector \n in comments in lieu of the next selector when r
unning under polyfill.\n*/\n(function(scope) {\n\nvar ShadowCSS = {\n strictSty
ling: false,\n registry: {},\n // Shim styles for a given root associated with
a name and extendsName\n // 1. cache root styles by name\n // 2. optionally t
ag root nodes with scope name\n // 3. shim polyfill directives /* @polyfill */
and /* @polyfill-rule */\n // 4. shim :host and scoping\n shimStyling: functio
n(root, name, extendsName) {\n var scopeStyles = this.prepareRoot(root, name,
extendsName);\n var typeExtension = this.isTypeExtension(extendsName);\n
var scopeSelector = this.makeScopeSelector(name, typeExtension);\n // use cac
hing to make working with styles nodes easier and to facilitate\n // lookup o
f extendee\n var cssText = stylesToCssText(scopeStyles, true);\n cssText =
this.scopeCssText(cssText, scopeSelector);\n // cache shimmed css on root fo
r user extensibility\n if (root) {\n root.shimmedStyle = cssText;\n }
\n // add style to document\n this.addCssToDocument(cssText, name);\n },\
n /*\n * Shim a style element with the given selector. Returns cssText that ca
n\n * be included in the document via Platform.ShadowCSS.addCssToDocument(css).
\n */\n shimStyle: function(style, selector) {\n return this.shimCssText(st
yle.textContent, selector);\n },\n /*\n * Shim some cssText with the given se
lector. Returns cssText that can\n * be included in the document via Platform.S
hadowCSS.addCssToDocument(css).\n */\n shimCssText: function(cssText, selector
) {\n cssText = this.insertDirectives(cssText);\n return this.scopeCssText
(cssText, selector);\n },\n makeScopeSelector: function(name, typeExtension) {
\n if (name) {\n return typeExtension ? '[is=' + name + ']' : name;\n
}\n return '';\n },\n isTypeExtension: function(extendsName) {\n return
extendsName && extendsName.indexOf('-') < 0;\n },\n prepareRoot: function(roo
t, name, extendsName) {\n var def = this.registerRoot(root, name, extendsName
);\n this.replaceTextInStyles(def.rootStyles, this.insertDirectives);\n //
remove existing style elements\n this.removeStyles(root, def.rootStyles);\n
// apply strict attr\n if (this.strictStyling) {\n this.applyScopeToC
ontent(root, name);\n }\n return def.scopeStyles;\n },\n removeStyles: f
unction(root, styles) {\n for (var i=0, l=styles.length, s; (i<l) && (s=style
s[i]); i++) {\n s.parentNode.removeChild(s);\n }\n },\n registerRoot:
function(root, name, extendsName) {\n var def = this.registry[name] = {\n
root: root,\n name: name,\n extendsName: extendsName\n }\n var
styles = this.findStyles(root);\n def.rootStyles = styles;\n def.scopeSty
les = def.rootStyles;\n var extendee = this.registry[def.extendsName];\n i
f (extendee) {\n def.scopeStyles = extendee.scopeStyles.concat(def.scopeSty
les);\n }\n return def;\n },\n findStyles: function(root) {\n if (!ro
ot) {\n return [];\n }\n var styles = root.querySelectorAll('style');
\n return Array.prototype.filter.call(styles, function(s) {\n return !s.
hasAttribute(NO_SHIM_ATTRIBUTE);\n });\n },\n applyScopeToContent: function
(root, name) {\n if (root) {\n // add the name attribute to each node in
root.\n Array.prototype.forEach.call(root.querySelectorAll('*'),\n
function(node) {\n node.setAttribute(name, '');\n });\n
// and template contents too\n Array.prototype.forEach.call(root.querySe
lectorAll('template'),\n function(template) {\n this.applySc
opeToContent(template.content, name);\n },\n this);\n }\n
},\n insertDirectives: function(cssText) {\n cssText = this.insertPolyfillDi
rectivesInCssText(cssText);\n return this.insertPolyfillRulesInCssText(cssTex
t);\n },\n /*\n * Process styles to convert native ShadowDOM rules that will
trip\n * up the css parser; we rely on decorating the stylesheet with inert r
ules.\n * \n * For example, we convert this rule:\n * \n * polyfill-next
-selector { content: ':host menu-item'; }\n * ::content menu-item {\n * \n
* to this:\n * \n * scopeName menu-item {\n *\n **/\n insertPolyfillDir
ectivesInCssText: function(cssText) {\n // TODO(sorvell): remove either conte
nt or comment\n cssText = cssText.replace(cssCommentNextSelectorRe, function(
match, p1) {\n // remove end comment delimiter and add block start\n r
eturn p1.slice(0, -2) + '{';\n });\n return cssText.replace(cssContentNext
SelectorRe, function(match, p1) {\n return p1 + ' {';\n });\n },\n /*\
n * Process styles to add rules which will only apply under the polyfill\n *
\n * For example, we convert this rule:\n * \n * polyfill-rule {\n *
content: ':host menu-item';\n * ...\n * }\n * \n * to this:\n * \n *
scopeName menu-item {...}\n *\n **/\n insertPolyfillRulesInCssText: functio
n(cssText) {\n // TODO(sorvell): remove either content or comment\n cssTex
t = cssText.replace(cssCommentRuleRe, function(match, p1) {\n // remove end
comment delimiter\n return p1.slice(0, -1);\n });\n return cssText.r
eplace(cssContentRuleRe, function(match, p1, p2, p3) {\n var rule = match.r
eplace(p1, '').replace(p2, '');\n return p3 + rule;\n });\n },\n /* En
sure styles are scoped. Pseudo-scoping takes a rule like:\n * \n * .foo {..
. } \n * \n * and converts this to\n * \n * scopeName .foo { ... }\n
*/\n scopeCssText: function(cssText, scopeSelector) {\n var unscoped = thi
s.extractUnscopedRulesFromCssText(cssText);\n cssText = this.insertPolyfillHo
stInCssText(cssText);\n cssText = this.convertColonHost(cssText);\n cssTex
t = this.convertColonHostContext(cssText);\n cssText = this.convertShadowDOMS
electors(cssText);\n if (scopeSelector) {\n var self = this, cssText;\n
withCssRules(cssText, function(rules) {\n cssText = self.scopeRules(
rules, scopeSelector);\n });\n\n }\n cssText = cssText + '\\n' + unsc
oped;\n return cssText.trim();\n },\n /*\n * Process styles to add rules
which will only apply under the polyfill\n * and do not process via CSSOM. (CS
SOM is destructive to rules on rare \n * occasions, e.g. -webkit-calc on Safar
i.)\n * For example, we convert this rule:\n * \n * (comment start) @polyf
ill-unscoped-rule menu-item { \n * ... } (comment end)\n * \n * to this:\n
* \n * menu-item {...}\n *\n **/\n extractUnscopedRulesFromCssText: fun
ction(cssText) {\n // TODO(sorvell): remove either content or comment\n va
r r = '', m;\n while (m = cssCommentUnscopedRuleRe.exec(cssText)) {\n r
+= m[1].slice(0, -1) + '\\n\\n';\n }\n while (m = cssContentUnscopedRuleRe
.exec(cssText)) {\n r += m[0].replace(m[2], '').replace(m[1], m[3]) + '\\n\
\n';\n }\n return r;\n },\n /*\n * convert a rule like :host(.foo) > .
bar { }\n *\n * to\n *\n * scopeName.foo > .bar\n */\n convertColonHos
t: function(cssText) {\n return this.convertColonRule(cssText, cssColonHostRe
,\n this.colonHostPartReplacer);\n },\n /*\n * convert a rule like :h
ost-context(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar, .f
oo scopeName > .bar { }\n * \n * and\n *\n * :host-context(.foo:host) .b
ar { ... }\n * \n * to\n * \n * scopeName.foo .bar { ... }\n */\n conv
ertColonHostContext: function(cssText) {\n return this.convertColonRule(cssTe
xt, cssColonHostContextRe,\n this.colonHostContextPartReplacer);\n },\n
convertColonRule: function(cssText, regExp, partReplacer) {\n // p1 = :host,
p2 = contents of (), p3 rest of rule\n return cssText.replace(regExp, functi
on(m, p1, p2, p3) {\n p1 = polyfillHostNoCombinator;\n if (p2) {\n
var parts = p2.split(','), r = [];\n for (var i=0, l=parts.length, p;
(i<l) && (p=parts[i]); i++) {\n p = p.trim();\n r.push(partRe
placer(p1, p, p3));\n }\n return r.join(',');\n } else {\n
return p1 + p3;\n }\n });\n },\n colonHostContextPartReplacer: fu
nction(host, part, suffix) {\n if (part.match(polyfillHost)) {\n return
this.colonHostPartReplacer(host, part, suffix);\n } else {\n return host
+ part + suffix + ', ' + part + ' ' + host + suffix;\n }\n },\n colonHostP
artReplacer: function(host, part, suffix) {\n return host + part.replace(poly
fillHost, '') + suffix;\n },\n /*\n * Convert combinators like ::shadow and
pseudo-elements like ::content\n * by replacing with space.\n */\n convertSh
adowDOMSelectors: function(cssText) {\n for (var i=0; i < shadowDOMSelectorsR
e.length; i++) {\n cssText = cssText.replace(shadowDOMSelectorsRe[i], ' ');
\n }\n return cssText;\n },\n // change a selector like 'div' to 'name d
iv'\n scopeRules: function(cssRules, scopeSelector) {\n var cssText = '';\n
if (cssRules) {\n Array.prototype.forEach.call(cssRules, function(rule)
{\n if (rule.selectorText && (rule.style && rule.style.cssText !== undefi
ned)) {\n cssText += this.scopeSelector(rule.selectorText, scopeSelecto
r, \n this.strictStyling) + ' {\\n\\t';\n cssText += this.pr
opertiesFromRule(rule) + '\\n}\\n\\n';\n } else if (rule.type === CSSRule
.MEDIA_RULE) {\n cssText += '@media ' + rule.media.mediaText + ' {\\n';
\n cssText += this.scopeRules(rule.cssRules, scopeSelector);\n
cssText += '\\n}\\n\\n';\n } else {\n // KEYFRAMES_RULE in IE t
hrows when we query cssText\n // when it contains a -webkit- property.\
n // if this happens, we fallback to constructing the rule\n /
/ from the CSSRuleSet\n // https://connect.microsoft.com/IE/feedbackdet
ail/view/955703/accessing-csstext-of-a-keyframe-rule-that-contains-a-webkit-prop
erty-via-cssom-generates-exception\n try {\n if (rule.cssTex
t) {\n cssText += rule.cssText + '\\n\\n';\n }\n
} catch(x) {\n if (rule.type === CSSRule.KEYFRAMES_RULE && rule.css
Rules) {\n cssText += this.ieSafeCssTextFromKeyFrameRule(rule);\n
}\n }\n }\n }, this);\n }\n return cssText;
\n },\n ieSafeCssTextFromKeyFrameRule: function(rule) {\n var cssText = '@k
eyframes ' + rule.name + ' {';\n Array.prototype.forEach.call(rule.cssRules,
function(rule) {\n cssText += ' ' + rule.keyText + ' {' + rule.style.cssTex
t + '}';\n });\n cssText += ' }';\n return cssText;\n },\n scopeSelec
tor: function(selector, scopeSelector, strict) {\n var r = [], parts = select
or.split(',');\n parts.forEach(function(p) {\n p = p.trim();\n if (
this.selectorNeedsScoping(p, scopeSelector)) {\n p = (strict && !p.match(
polyfillHostNoCombinator)) ? \n this.applyStrictSelectorScope(p, scop
eSelector) :\n this.applySelectorScope(p, scopeSelector);\n }\n
r.push(p);\n }, this);\n return r.join(', ');\n },\n selectorNeedsS
coping: function(selector, scopeSelector) {\n if (Array.isArray(scopeSelector
)) {\n return true;\n }\n var re = this.makeScopeMatcher(scopeSelecto
r);\n return !selector.match(re);\n },\n makeScopeMatcher: function(scopeSe
lector) {\n scopeSelector = scopeSelector.replace(/\\[/g, '\\\\[').replace(/\
\[/g, '\\\\]');\n return new RegExp('^(' + scopeSelector + ')' + selectorReSu
ffix, 'm');\n },\n applySelectorScope: function(selector, selectorScope) {\n
return Array.isArray(selectorScope) ?\n this.applySelectorScopeList(sel
ector, selectorScope) :\n this.applySimpleSelectorScope(selector, selecto
rScope);\n },\n // apply an array of selectors\n applySelectorScopeList: func
tion(selector, scopeSelectorList) {\n var r = [];\n for (var i=0, s; (s=sc
opeSelectorList[i]); i++) {\n r.push(this.applySimpleSelectorScope(selector
, s));\n }\n return r.join(', ');\n },\n // scope via name and [is=name]
\n applySimpleSelectorScope: function(selector, scopeSelector) {\n if (selec
tor.match(polyfillHostRe)) {\n selector = selector.replace(polyfillHostNoCo
mbinator, scopeSelector);\n return selector.replace(polyfillHostRe, scopeSe
lector + ' ');\n } else {\n return scopeSelector + ' ' + selector;\n
}\n },\n // return a selector with [name] suffix on each simple selector\n //
e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]\n applyStrictSe
lectorScope: function(selector, scopeSelector) {\n scopeSelector = scopeSelec
tor.replace(/\\[is=([^\\]]*)\\]/g, '$1');\n var splits = [' ', '>', '+', '~']
,\n scoped = selector,\n attrName = '[' + scopeSelector + ']';\n sp
lits.forEach(function(sep) {\n var parts = scoped.split(sep);\n scoped
= parts.map(function(p) {\n // remove :host since it should be unnecessa
ry\n var t = p.trim().replace(polyfillHostRe, '');\n if (t && (spl
its.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {\n p = t.replace(/([
^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')\n }\n return p;\n }
).join(sep);\n });\n return scoped;\n },\n insertPolyfillHostInCssText:
function(selector) {\n return selector.replace(colonHostContextRe, polyfillHo
stContext).replace(\n colonHostRe, polyfillHost);\n },\n propertiesFrom
Rule: function(rule) {\n var cssText = rule.style.cssText;\n // TODO(sorve
ll): Safari cssom incorrectly removes quotes from the content\n // property.
(https://bugs.webkit.org/show_bug.cgi?id=118045)\n // don't replace attr rule
s\n if (rule.style.content && !rule.style.content.match(/['\"]+|attr/)) {\n
cssText = cssText.replace(/content:[^;]*;/g, 'content: \\'' + \n ru
le.style.content + '\\';');\n }\n // TODO(sorvell): we can workaround this
issue here, but we need a list\n // of troublesome properties to fix https:/
/github.com/Polymer/platform/issues/53\n //\n // inherit rules can be omit
ted from cssText\n // TODO(sorvell): remove when Blink bug is fixed:\n //
https://code.google.com/p/chromium/issues/detail?id=358273\n var style = rule
.style;\n for (var i in style) {\n if (style[i] === 'initial') {\n
cssText += i + ': initial; ';\n }\n }\n return cssText;\n },\n re
placeTextInStyles: function(styles, action) {\n if (styles && action) {\n
if (!(styles instanceof Array)) {\n styles = [styles];\n }\n
Array.prototype.forEach.call(styles, function(s) {\n s.textContent = acti
on.call(this, s.textContent);\n }, this);\n }\n },\n addCssToDocument:
function(cssText, name) {\n if (cssText.match('@import')) {\n addOwnShe
et(cssText, name);\n } else {\n addCssToDocument(cssText);\n }\n }\n
};\n\nvar selectorRe = /([^{]*)({[\\s\\S]*?})/gim,\n cssCommentRe = /\\/\\*[^
*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n // TODO(sorvell): remove either content or
comment\n cssCommentNextSelectorRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^
*]*\\*+)*\\/)([^{]*?){/gim,\n cssContentNextSelectorRe = /polyfill-next-selec
tor[^}]*content\\:[\\s]*?['\"](.*?)['\"][;\\s]*}([^{]*?){/gim, \n // TODO(so
rvell): remove either content or comment\n cssCommentRuleRe = /\\/\\*\\s@poly
fill-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssContentRuleRe = /(polyfill
-rule)[^}]*(content\\:[\\s]*['\"](.*?)['\"])[;\\s]*[^}]*}/gim,\n // TODO(sorv
ell): remove either content or comment\n cssCommentUnscopedRuleRe = /\\/\\*\\
s@polyfill-unscoped-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssContentUnsc
opedRuleRe = /(polyfill-unscoped-rule)[^}]*(content\\:[\\s]*['\"](.*?)['\"])[;\\
s]*[^}]*}/gim,\n cssPseudoRe = /::(x-[^\\s{,(]*)/gim,\n cssPartRe = /::par
t\\(([^)]*)\\)/gim,\n // note: :host pre-processed to -shadowcsshost.\n po
lyfillHost = '-shadowcsshost',\n // note: :host-context pre-processed to -sha
dowcsshostcontext.\n polyfillHostContext = '-shadowcsscontext',\n parenSuf
fix = ')(?:\\\\((' +\n '(?:\\\\([^)(]*\\\\)|[^)(]*)+?' +\n ')\\\\)
)?([^,{]*)';\n cssColonHostRe = new RegExp('(' + polyfillHost + parenSuffix,
'gim'),\n cssColonHostContextRe = new RegExp('(' + polyfillHostContext + pare
nSuffix, 'gim'),\n selectorReSuffix = '([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$',\n
colonHostRe = /\\:host/gim,\n colonHostContextRe = /\\:host-context/gim,\
n /* host name without combinator */\n polyfillHostNoCombinator = polyfill
Host + '-no-combinator',\n polyfillHostRe = new RegExp(polyfillHost, 'gim'),\
n polyfillHostContextRe = new RegExp(polyfillHostContext, 'gim'),\n shadow
DOMSelectorsRe = [\n /\\^\\^/g,\n /\\^/g,\n /\\/shadow\\//g,\n
/\\/shadow-deep\\//g,\n /::shadow/g,\n /\\/deep\\//g,\n /::con
tent/g\n ];\n\nfunction stylesToCssText(styles, preserveComments) {\n var cs
sText = '';\n Array.prototype.forEach.call(styles, function(s) {\n cssText +
= s.textContent + '\\n\\n';\n });\n // strip comments for easier processing\n
if (!preserveComments) {\n cssText = cssText.replace(cssCommentRe, '');\n }
\n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var style = docu
ment.createElement('style');\n style.textContent = cssText;\n return style;\n}
\n\nfunction cssToRules(cssText) {\n var style = cssTextToStyle(cssText);\n do
cument.head.appendChild(style);\n var rules = [];\n if (style.sheet) {\n //
TODO(sorvell): Firefox throws when accessing the rules of a stylesheet\n //
with an @import\n // https://bugzilla.mozilla.org/show_bug.cgi?id=625013\n
try {\n rules = style.sheet.cssRules;\n } catch(e) {\n //\n }\n
} else {\n console.warn('sheet not found', style);\n }\n style.parentNode
.removeChild(style);\n return rules;\n}\n\nvar frame = document.createElement('
iframe');\nframe.style.display = 'none';\n\nfunction initFrame() {\n frame.init
ialized = true;\n document.body.appendChild(frame);\n var doc = frame.contentD
ocument;\n var base = doc.createElement('base');\n base.href = document.baseUR
I;\n doc.head.appendChild(base);\n}\n\nfunction inFrame(fn) {\n if (!frame.ini
tialized) {\n initFrame();\n }\n document.body.appendChild(frame);\n fn(fr
ame.contentDocument);\n document.body.removeChild(frame);\n}\n\n// TODO(sorvell
): use an iframe if the cssText contains an @import to workaround\n// https://co
de.google.com/p/chromium/issues/detail?id=345114\nvar isChrome = navigator.userA
gent.match('Chrome');\nfunction withCssRules(cssText, callback) {\n if (!callba
ck) {\n return;\n }\n var rules;\n if (cssText.match('@import') && isChrom
e) {\n var style = cssTextToStyle(cssText);\n inFrame(function(doc) {\n
doc.head.appendChild(style.impl);\n rules = Array.prototype.slice.call(s
tyle.sheet.cssRules, 0);\n callback(rules);\n });\n } else {\n rules
= cssToRules(cssText);\n callback(rules);\n }\n}\n\nfunction rulesToCss(css
Rules) {\n for (var i=0, css=[]; i < cssRules.length; i++) {\n css.push(cssR
ules[i].cssText);\n }\n return css.join('\\n\\n');\n}\n\nfunction addCssToDocu
ment(cssText) {\n if (cssText) {\n getSheet().appendChild(document.createTex
tNode(cssText));\n }\n}\n\nfunction addOwnSheet(cssText, name) {\n var style =
cssTextToStyle(cssText);\n style.setAttribute(name, '');\n style.setAttribute
(SHIMMED_ATTRIBUTE, '');\n document.head.appendChild(style);\n}\n\nvar SHIM_ATT
RIBUTE = 'shim-shadowdom';\nvar SHIMMED_ATTRIBUTE = 'shim-shadowdom-css';\nvar N
O_SHIM_ATTRIBUTE = 'no-shim';\n\nvar sheet;\nfunction getSheet() {\n if (!sheet
) {\n sheet = document.createElement(\"style\");\n sheet.setAttribute(SHIM
MED_ATTRIBUTE, '');\n sheet[SHIMMED_ATTRIBUTE] = true;\n }\n return sheet;\
n}\n\n// add polyfill stylesheet to document\nif (window.ShadowDOMPolyfill) {\n
addCssToDocument('style { display: none !important; }\\n');\n var doc = wrap(d
ocument);\n var head = doc.querySelector('head');\n head.insertBefore(getSheet
(), head.childNodes[0]);\n\n // TODO(sorvell): monkey-patching HTMLImports is a
busive;\n // consider a better solution.\n document.addEventListener('DOMConte
ntLoaded', function() {\n var urlResolver = scope.urlResolver;\n \n if
(window.HTMLImports && !HTMLImports.useNative) {\n var SHIM_SHEET_SELECTOR
= 'link[rel=stylesheet]' +\n '[' + SHIM_ATTRIBUTE + ']';\n var SHI
M_STYLE_SELECTOR = 'style[' + SHIM_ATTRIBUTE + ']';\n HTMLImports.importer.
documentPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n HTMLImports.import
er.importsPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n\n HTMLImports.pa
rser.documentSelectors = [\n HTMLImports.parser.documentSelectors,\n
SHIM_SHEET_SELECTOR,\n SHIM_STYLE_SELECTOR\n ].join(',');\n \n
var originalParseGeneric = HTMLImports.parser.parseGeneric;\n\n HTMLImp
orts.parser.parseGeneric = function(elt) {\n if (elt[SHIMMED_ATTRIBUTE])
{\n return;\n }\n var style = elt.__importElement || elt;
\n if (!style.hasAttribute(SHIM_ATTRIBUTE)) {\n originalParseGen
eric.call(this, elt);\n return;\n }\n if (elt.__resource)
{\n style = elt.ownerDocument.createElement('style');\n style
.textContent = elt.__resource;\n }\n // relay on HTMLImports for p
ath fixup\n HTMLImports.path.resolveUrlsInStyle(style);\n style.te
xtContent = ShadowCSS.shimStyle(style);\n style.removeAttribute(SHIM_ATTR
IBUTE, '');\n style.setAttribute(SHIMMED_ATTRIBUTE, '');\n style[S
HIMMED_ATTRIBUTE] = true;\n // place in document\n if (style.paren
tNode !== head) {\n // replace links in head\n if (elt.parentN
ode === head) {\n head.replaceChild(style, elt);\n } else {\
n this.addElementToDocument(style);\n }\n }\n
style.__importParsed = true;\n this.markParsingComplete(elt);\n th
is.parseNext();\n }\n\n var hasResource = HTMLImports.parser.hasResour
ce;\n HTMLImports.parser.hasResource = function(node) {\n if (node.l
ocalName === 'link' && node.rel === 'stylesheet' &&\n node.hasAttribu
te(SHIM_ATTRIBUTE)) {\n return (node.__resource);\n } else {\n
return hasResource.call(this, node);\n }\n }\n\n }\n });
\n}\n\n// exports\nscope.ShadowCSS = ShadowCSS;\n\n})(window.Platform);\n", |
137 "} else {", | 137 "} else {", |
138 "/*\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 /
/ so we can call wrap/unwrap without testing for ShadowDOMPolyfill\n window.wra
p = window.unwrap = function(n){\n return n;\n }\n\n addEventListener('DOMC
ontentLoaded', function() {\n if (CustomElements.useNative === false) {\n
var originalCreateShadowRoot = Element.prototype.createShadowRoot;\n Elem
ent.prototype.createShadowRoot = function() {\n var root = originalCreate
ShadowRoot.call(this);\n CustomElements.watchShadow(this);\n retur
n root;\n };\n }\n });\n\n})(window.Platform);\n", | 138 "/*\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 /
/ so we can call wrap/unwrap without testing for ShadowDOMPolyfill\n window.wra
p = window.unwrap = function(n){\n return n;\n }\n\n addEventListener('DOMC
ontentLoaded', function() {\n if (CustomElements.useNative === false) {\n
var originalCreateShadowRoot = Element.prototype.createShadowRoot;\n Elem
ent.prototype.createShadowRoot = function() {\n var root = originalCreate
ShadowRoot.call(this);\n CustomElements.watchShadow(this);\n retur
n root;\n };\n }\n });\n\n})(window.Platform);\n", |
139 "}", | 139 "}", |
140 "/* Any copyright is dedicated to the Public Domain.\n * http://creativecomm
ons.org/publicdomain/zero/1.0/ */\n\n(function(scope) {\n 'use strict';\n\n //
feature detect for URL constructor\n var hasWorkingUrl = false;\n if (!scope.
forceJURL) {\n try {\n var u = new URL('b', 'http://a');\n hasWorki
ngUrl = u.href === 'http://a/b';\n } catch(e) {}\n }\n\n if (hasWorkingUrl)
\n return;\n\n var relative = Object.create(null);\n relative['ftp'] = 21;\
n relative['file'] = 0;\n relative['gopher'] = 70;\n relative['http'] = 80;\n
relative['https'] = 443;\n relative['ws'] = 80;\n relative['wss'] = 443;\n\n
var relativePathDotMapping = Object.create(null);\n relativePathDotMapping['%
2e'] = '.';\n relativePathDotMapping['.%2e'] = '..';\n relativePathDotMapping[
'%2e.'] = '..';\n relativePathDotMapping['%2e%2e'] = '..';\n\n function isRela
tiveScheme(scheme) {\n return relative[scheme] !== undefined;\n }\n\n funct
ion invalid() {\n clear.call(this);\n this._isInvalid = true;\n }\n\n fu
nction IDNAToASCII(h) {\n if ('' == h) {\n invalid.call(this)\n }\n
// XXX\n return h.toLowerCase()\n }\n\n function percentEscape(c) {\n
var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x7F
&&\n // \" # < > ? `\n [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf
(unicode) == -1\n ) {\n return c;\n }\n return encodeURIComponen
t(c);\n }\n\n function percentEscapeQuery(c) {\n // XXX This actually needs
to encode c using encoding and then\n // convert the bytes one-by-one.\n\n
var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x
7F &&\n // \" # < > ` (do not escape '?')\n [0x22, 0x23, 0x3C, 0x3E,
0x60].indexOf(unicode) == -1\n ) {\n return c;\n }\n return enc
odeURIComponent(c);\n }\n\n var EOF = undefined,\n ALPHA = /[a-zA-Z]/,\n
ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n\n function parse(input, stateOver
ride, base) {\n function err(message) {\n errors.push(message)\n }\n\
n var state = stateOverride || 'scheme start',\n cursor = 0,\n
buffer = '',\n seenAt = false,\n seenBracket = false,\n err
ors = [];\n\n loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this
._isInvalid) {\n var c = input[cursor];\n switch (state) {\n ca
se 'scheme start':\n if (c && ALPHA.test(c)) {\n buffer += c
.toLowerCase(); // ASCII-safe\n state = 'scheme';\n } else i
f (!stateOverride) {\n buffer = '';\n state = 'no scheme';
\n continue;\n } else {\n err('Invalid scheme.');
\n break loop;\n }\n break;\n\n case 'scheme
':\n if (c && ALPHANUMERIC.test(c)) {\n buffer += c.toLowerC
ase(); // ASCII-safe\n } else if (':' == c) {\n this._scheme
= buffer;\n buffer = '';\n if (stateOverride) {\n
break loop;\n }\n if (isRelativeScheme(this._scheme)
) {\n this._isRelative = true;\n }\n if ('fil
e' == this._scheme) {\n state = 'relative';\n } else if
(this._isRelative && base && base._scheme == this._scheme) {\n stat
e = 'relative or authority';\n } else if (this._isRelative) {\n
state = 'authority first slash';\n } else {\n st
ate = 'scheme data';\n }\n } else if (!stateOverride) {\n
buffer = '';\n cursor = 0;\n state = 'no scheme';
\n continue;\n } else if (EOF == c) {\n break loo
p;\n } else {\n err('Code point not allowed in scheme: ' + c
)\n break loop;\n }\n break;\n\n case 'schem
e data':\n if ('?' == c) {\n query = '?';\n state
= 'query';\n } else if ('#' == c) {\n this._fragment = '#';
\n state = 'fragment';\n } else {\n // XXX error
handling\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\
n this._schemeData += percentEscape(c);\n }\n }
\n break;\n\n case 'no scheme':\n if (!base || !(isRela
tiveScheme(base._scheme))) {\n err('Missing scheme.');\n i
nvalid.call(this);\n } else {\n state = 'relative';\n
continue;\n }\n break;\n\n case 'relative or autho
rity':\n if ('/' == c && '/' == input[cursor+1]) {\n state =
'authority ignore slashes';\n } else {\n err('Expected /, g
ot: ' + c);\n state = 'relative';\n continue\n }\
n break;\n\n case 'relative':\n this._isRelative = true
;\n if ('file' != this._scheme)\n this._scheme = base._schem
e;\n if (EOF == c) {\n this._host = base._host;\n
this._port = base._port;\n this._path = base._path.slice();\n
this._query = base._query;\n break loop;\n } else if ('
/' == c || '\\\\' == c) {\n if ('\\\\' == c)\n err('\\\\
is an invalid code point.');\n state = 'relative slash';\n
} else if ('?' == c) {\n this._host = base._host;\n this._
port = base._port;\n this._path = base._path.slice();\n th
is._query = '?';\n state = 'query';\n } else if ('#' == c) {
\n this._host = base._host;\n this._port = base._port;\n
this._path = base._path.slice();\n this._query = base._quer
y;\n this._fragment = '#';\n state = 'fragment';\n
} else {\n var nextC = input[cursor+1]\n var nextNextC =
input[cursor+2]\n if (\n 'file' != this._scheme || !ALP
HA.test(c) ||\n (nextC != ':' && nextC != '|') ||\n (E
OF != nextNextC && '/' != nextNextC && '\\\\' != nextNextC && '?' != nextNextC &
& '#' != nextNextC)) {\n this._host = base._host;\n th
is._port = base._port;\n this._path = base._path.slice();\n
this._path.pop();\n }\n state = 'relative path';\n
continue;\n }\n break;\n\n case 'relative sla
sh':\n if ('/' == c || '\\\\' == c) {\n if ('\\\\' == c) {\n
err('\\\\ is an invalid code point.');\n }\n
if ('file' == this._scheme) {\n state = 'file host';\n
} else {\n state = 'authority ignore slashes';\n }\n
} else {\n if ('file' != this._scheme) {\n this._h
ost = base._host;\n this._port = base._port;\n }\n
state = 'relative path';\n continue;\n }\n br
eak;\n\n case 'authority first slash':\n if ('/' == c) {\n
state = 'authority second slash';\n } else {\n err(\"E
xpected '/', got: \" + c);\n state = 'authority ignore slashes';\n
continue;\n }\n break;\n\n case 'authority sec
ond slash':\n state = 'authority ignore slashes';\n if ('/' !=
c) {\n err(\"Expected '/', got: \" + c);\n continue;\n
}\n break;\n\n case 'authority ignore slashes':\n
if ('/' != c && '\\\\' != c) {\n state = 'authority';\n
continue;\n } else {\n err('Expected authority, got: ' + c);
\n }\n break;\n\n case 'authority':\n if ('@'
== c) {\n if (seenAt) {\n err('@ already seen.');\n
buffer += '%40';\n }\n seenAt = true;\n
for (var i = 0; i < buffer.length; i++) {\n var cp = buffer[i];\n
if ('\\t' == cp || '\\n' == cp || '\\r' == cp) {\n
err('Invalid whitespace in authority.');\n continue;\n
}\n // XXX check URL code points\n if (':' == cp &&
null === this._password) {\n this._password = '';\n
continue;\n }\n var tempC = percentEscape(cp);\n
(null !== this._password) ? this._password += tempC : this._username
+= tempC;\n }\n buffer = '';\n } else if (EOF ==
c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n cursor -= b
uffer.length;\n buffer = '';\n state = 'host';\n
continue;\n } else {\n buffer += c;\n }\n
break;\n\n case 'file host':\n if (EOF == c || '/' == c || '\\
\\' == c || '?' == c || '#' == c) {\n if (buffer.length == 2 && ALPHA
.test(buffer[0]) && (buffer[1] == ':' || buffer[1] == '|')) {\n sta
te = 'relative path';\n } else if (buffer.length == 0) {\n
state = 'relative path start';\n } else {\n this._hos
t = IDNAToASCII.call(this, buffer);\n buffer = '';\n s
tate = 'relative path start';\n }\n continue;\n }
else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid wh
itespace in file host.');\n } else {\n buffer += c;\n
}\n break;\n\n case 'host':\n case 'hostname':\n
if (':' == c && !seenBracket) {\n // XXX host parsing\n
this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n
state = 'port';\n if ('hostname' == stateOverride) {\n
break loop;\n }\n } else if (EOF == c || '/' == c || '\
\\\' == c || '?' == c || '#' == c) {\n this._host = IDNAToASCII.call(
this, buffer);\n buffer = '';\n state = 'relative path sta
rt';\n if (stateOverride) {\n break loop;\n }
\n continue;\n } else if ('\\t' != c && '\\n' != c && '\\r'
!= c) {\n if ('[' == c) {\n seenBracket = true;\n
} else if (']' == c) {\n seenBracket = false;\n }\n
buffer += c;\n } else {\n err('Invalid code poin
t in host/hostname: ' + c);\n }\n break;\n\n case 'port
':\n if (/[0-9]/.test(c)) {\n buffer += c;\n } else
if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c || stateOverrid
e) {\n if ('' != buffer) {\n var temp = parseInt(buffer,
10);\n if (temp != relative[this._scheme]) {\n this
._port = temp + '';\n }\n buffer = '';\n }\
n if (stateOverride) {\n break loop;\n }\n
state = 'relative path start';\n continue;\n } else
if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid code po
int in port: ' + c);\n } else {\n invalid.call(this);\n
}\n break;\n\n case 'relative path start':\n if ('
\\\\' == c)\n err(\"'\\\\' not allowed in path.\");\n state
= 'relative path';\n if ('/' != c && '\\\\' != c) {\n contin
ue;\n }\n break;\n\n case 'relative path':\n i
f (EOF == c || '/' == c || '\\\\' == c || (!stateOverride && ('?' == c || '#' ==
c))) {\n if ('\\\\' == c) {\n err('\\\\ not allowed in
relative path.');\n }\n var tmp;\n if (tmp = re
lativePathDotMapping[buffer.toLowerCase()]) {\n buffer = tmp;\n
}\n if ('..' == buffer) {\n this._path.pop();\n
if ('/' != c && '\\\\' != c) {\n this._path.push('')
;\n }\n } else if ('.' == buffer && '/' != c && '\\\\' !
= c) {\n this._path.push('');\n } else if ('.' != buffer
) {\n if ('file' == this._scheme && this._path.length == 0 && buffe
r.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == '|') {\n b
uffer = buffer[0] + ':';\n }\n this._path.push(buffer)
;\n }\n buffer = '';\n if ('?' == c) {\n
this._query = '?';\n state = 'query';\n } else if
('#' == c) {\n this._fragment = '#';\n state = 'fragm
ent';\n }\n } else if ('\\t' != c && '\\n' != c && '\\r' !=
c) {\n buffer += percentEscape(c);\n }\n break;\n\n
case 'query':\n if (!stateOverride && '#' == c) {\n
this._fragment = '#';\n state = 'fragment';\n } else if (EOF
!= c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._query += p
ercentEscapeQuery(c);\n }\n break;\n\n case 'fragment':
\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n
this._fragment += c;\n }\n break;\n }\n\n cursor+
+;\n }\n }\n\n function clear() {\n this._scheme = '';\n this._scheme
Data = '';\n this._username = '';\n this._password = null;\n this._host
= '';\n this._port = '';\n this._path = [];\n this._query = '';\n t
his._fragment = '';\n this._isInvalid = false;\n this._isRelative = false;
\n }\n\n // Does not process domain names or IP addresses.\n // Does not hand
le encoding for the query parameter.\n function jURL(url, base /* , encoding */
) {\n if (base !== undefined && !(base instanceof jURL))\n base = new jU
RL(String(base));\n\n this._url = url;\n clear.call(this);\n\n var inpu
t = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]+$/g, '');\n // encoding =
encoding || 'utf-8'\n\n parse.call(this, input, null, base);\n }\n\n jURL.p
rototype = {\n get href() {\n if (this._isInvalid)\n return this.
_url;\n\n var authority = '';\n if ('' != this._username || null != th
is._password) {\n authority = this._username +\n (null != this
._password ? ':' + this._password : '') + '@';\n }\n\n return this.pro
tocol +\n (this._isRelative ? '//' + authority + this.host : '') +\n
this.pathname + this._query + this._fragment;\n },\n set href(href)
{\n clear.call(this);\n parse.call(this, href);\n },\n\n get pr
otocol() {\n return this._scheme + ':';\n },\n set protocol(protocol)
{\n if (this._isInvalid)\n return;\n parse.call(this, protocol
+ ':', 'scheme start');\n },\n\n get host() {\n return this._isInval
id ? '' : this._port ?\n this._host + ':' + this._port : this._host;\n
},\n set host(host) {\n if (this._isInvalid || !this._isRelative)\n
return;\n parse.call(this, host, 'host');\n },\n\n get hostname
() {\n return this._host;\n },\n set hostname(hostname) {\n if (
this._isInvalid || !this._isRelative)\n return;\n parse.call(this, h
ostname, 'hostname');\n },\n\n get port() {\n return this._port;\n
},\n set port(port) {\n if (this._isInvalid || !this._isRelative)\n
return;\n parse.call(this, port, 'port');\n },\n\n get pathname()
{\n return this._isInvalid ? '' : this._isRelative ?\n '/' + this
._path.join('/') : this._schemeData;\n },\n set pathname(pathname) {\n
if (this._isInvalid || !this._isRelative)\n return;\n this._path =
[];\n parse.call(this, pathname, 'relative path start');\n },\n\n ge
t search() {\n return this._isInvalid || !this._query || '?' == this._query
?\n '' : this._query;\n },\n set search(search) {\n if (thi
s._isInvalid || !this._isRelative)\n return;\n this._query = '?';\n
if ('?' == search[0])\n search = search.slice(1);\n parse.call(
this, search, 'query');\n },\n\n get hash() {\n return this._isInvali
d || !this._fragment || '#' == this._fragment ?\n '' : this._fragment;\
n },\n set hash(hash) {\n if (this._isInvalid)\n return;\n
this._fragment = '#';\n if ('#' == hash[0])\n hash = hash.slice(1)
;\n parse.call(this, hash, 'fragment');\n }\n };\n\n // Copy over the
static methods\n var OriginalURL = scope.URL;\n if (OriginalURL) {\n jURL.c
reateObjectURL = function(blob) {\n // IE extension allows a second optiona
l options argument.\n // http://msdn.microsoft.com/en-us/library/ie/hh77230
2(v=vs.85).aspx\n return OriginalURL.createObjectURL.apply(OriginalURL, arg
uments);\n };\n jURL.revokeObjectURL = function(url) {\n OriginalURL.
revokeObjectURL(url);\n };\n }\n\n scope.URL = jURL;\n\n})(this);\n", | 140 "/* Any copyright is dedicated to the Public Domain.\n * http://creativecomm
ons.org/publicdomain/zero/1.0/ */\n\n(function(scope) {\n 'use strict';\n\n //
feature detect for URL constructor\n var hasWorkingUrl = false;\n if (!scope.
forceJURL) {\n try {\n var u = new URL('b', 'http://a');\n hasWorki
ngUrl = u.href === 'http://a/b';\n } catch(e) {}\n }\n\n if (hasWorkingUrl)
\n return;\n\n var relative = Object.create(null);\n relative['ftp'] = 21;\
n relative['file'] = 0;\n relative['gopher'] = 70;\n relative['http'] = 80;\n
relative['https'] = 443;\n relative['ws'] = 80;\n relative['wss'] = 443;\n\n
var relativePathDotMapping = Object.create(null);\n relativePathDotMapping['%
2e'] = '.';\n relativePathDotMapping['.%2e'] = '..';\n relativePathDotMapping[
'%2e.'] = '..';\n relativePathDotMapping['%2e%2e'] = '..';\n\n function isRela
tiveScheme(scheme) {\n return relative[scheme] !== undefined;\n }\n\n funct
ion invalid() {\n clear.call(this);\n this._isInvalid = true;\n }\n\n fu
nction IDNAToASCII(h) {\n if ('' == h) {\n invalid.call(this)\n }\n
// XXX\n return h.toLowerCase()\n }\n\n function percentEscape(c) {\n
var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x7F
&&\n // \" # < > ? `\n [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf
(unicode) == -1\n ) {\n return c;\n }\n return encodeURIComponen
t(c);\n }\n\n function percentEscapeQuery(c) {\n // XXX This actually needs
to encode c using encoding and then\n // convert the bytes one-by-one.\n\n
var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x
7F &&\n // \" # < > ` (do not escape '?')\n [0x22, 0x23, 0x3C, 0x3E,
0x60].indexOf(unicode) == -1\n ) {\n return c;\n }\n return enc
odeURIComponent(c);\n }\n\n var EOF = undefined,\n ALPHA = /[a-zA-Z]/,\n
ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n\n function parse(input, stateOver
ride, base) {\n function err(message) {\n errors.push(message)\n }\n\
n var state = stateOverride || 'scheme start',\n cursor = 0,\n
buffer = '',\n seenAt = false,\n seenBracket = false,\n err
ors = [];\n\n loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this
._isInvalid) {\n var c = input[cursor];\n switch (state) {\n ca
se 'scheme start':\n if (c && ALPHA.test(c)) {\n buffer += c
.toLowerCase(); // ASCII-safe\n state = 'scheme';\n } else i
f (!stateOverride) {\n buffer = '';\n state = 'no scheme';
\n continue;\n } else {\n err('Invalid scheme.');
\n break loop;\n }\n break;\n\n case 'scheme
':\n if (c && ALPHANUMERIC.test(c)) {\n buffer += c.toLowerC
ase(); // ASCII-safe\n } else if (':' == c) {\n this._scheme
= buffer;\n buffer = '';\n if (stateOverride) {\n
break loop;\n }\n if (isRelativeScheme(this._scheme)
) {\n this._isRelative = true;\n }\n if ('fil
e' == this._scheme) {\n state = 'relative';\n } else if
(this._isRelative && base && base._scheme == this._scheme) {\n stat
e = 'relative or authority';\n } else if (this._isRelative) {\n
state = 'authority first slash';\n } else {\n st
ate = 'scheme data';\n }\n } else if (!stateOverride) {\n
buffer = '';\n cursor = 0;\n state = 'no scheme';
\n continue;\n } else if (EOF == c) {\n break loo
p;\n } else {\n err('Code point not allowed in scheme: ' + c
)\n break loop;\n }\n break;\n\n case 'schem
e data':\n if ('?' == c) {\n query = '?';\n state
= 'query';\n } else if ('#' == c) {\n this._fragment = '#';
\n state = 'fragment';\n } else {\n // XXX error
handling\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\
n this._schemeData += percentEscape(c);\n }\n }
\n break;\n\n case 'no scheme':\n if (!base || !(isRela
tiveScheme(base._scheme))) {\n err('Missing scheme.');\n i
nvalid.call(this);\n } else {\n state = 'relative';\n
continue;\n }\n break;\n\n case 'relative or autho
rity':\n if ('/' == c && '/' == input[cursor+1]) {\n state =
'authority ignore slashes';\n } else {\n err('Expected /, g
ot: ' + c);\n state = 'relative';\n continue\n }\
n break;\n\n case 'relative':\n this._isRelative = true
;\n if ('file' != this._scheme)\n this._scheme = base._schem
e;\n if (EOF == c) {\n this._host = base._host;\n
this._port = base._port;\n this._path = base._path.slice();\n
this._query = base._query;\n break loop;\n } else if ('
/' == c || '\\\\' == c) {\n if ('\\\\' == c)\n err('\\\\
is an invalid code point.');\n state = 'relative slash';\n
} else if ('?' == c) {\n this._host = base._host;\n this._
port = base._port;\n this._path = base._path.slice();\n th
is._query = '?';\n state = 'query';\n } else if ('#' == c) {
\n this._host = base._host;\n this._port = base._port;\n
this._path = base._path.slice();\n this._query = base._quer
y;\n this._fragment = '#';\n state = 'fragment';\n
} else {\n var nextC = input[cursor+1]\n var nextNextC =
input[cursor+2]\n if (\n 'file' != this._scheme || !ALP
HA.test(c) ||\n (nextC != ':' && nextC != '|') ||\n (E
OF != nextNextC && '/' != nextNextC && '\\\\' != nextNextC && '?' != nextNextC &
& '#' != nextNextC)) {\n this._host = base._host;\n th
is._port = base._port;\n this._path = base._path.slice();\n
this._path.pop();\n }\n state = 'relative path';\n
continue;\n }\n break;\n\n case 'relative sla
sh':\n if ('/' == c || '\\\\' == c) {\n if ('\\\\' == c) {\n
err('\\\\ is an invalid code point.');\n }\n
if ('file' == this._scheme) {\n state = 'file host';\n
} else {\n state = 'authority ignore slashes';\n }\n
} else {\n if ('file' != this._scheme) {\n this._h
ost = base._host;\n this._port = base._port;\n }\n
state = 'relative path';\n continue;\n }\n br
eak;\n\n case 'authority first slash':\n if ('/' == c) {\n
state = 'authority second slash';\n } else {\n err(\"E
xpected '/', got: \" + c);\n state = 'authority ignore slashes';\n
continue;\n }\n break;\n\n case 'authority sec
ond slash':\n state = 'authority ignore slashes';\n if ('/' !=
c) {\n err(\"Expected '/', got: \" + c);\n continue;\n
}\n break;\n\n case 'authority ignore slashes':\n
if ('/' != c && '\\\\' != c) {\n state = 'authority';\n
continue;\n } else {\n err('Expected authority, got: ' + c);
\n }\n break;\n\n case 'authority':\n if ('@'
== c) {\n if (seenAt) {\n err('@ already seen.');\n
buffer += '%40';\n }\n seenAt = true;\n
for (var i = 0; i < buffer.length; i++) {\n var cp = buffer[i];\n
if ('\\t' == cp || '\\n' == cp || '\\r' == cp) {\n
err('Invalid whitespace in authority.');\n continue;\n
}\n // XXX check URL code points\n if (':' == cp &&
null === this._password) {\n this._password = '';\n
continue;\n }\n var tempC = percentEscape(cp);\n
(null !== this._password) ? this._password += tempC : this._username
+= tempC;\n }\n buffer = '';\n } else if (EOF ==
c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n cursor -= b
uffer.length;\n buffer = '';\n state = 'host';\n
continue;\n } else {\n buffer += c;\n }\n
break;\n\n case 'file host':\n if (EOF == c || '/' == c || '\\
\\' == c || '?' == c || '#' == c) {\n if (buffer.length == 2 && ALPHA
.test(buffer[0]) && (buffer[1] == ':' || buffer[1] == '|')) {\n sta
te = 'relative path';\n } else if (buffer.length == 0) {\n
state = 'relative path start';\n } else {\n this._hos
t = IDNAToASCII.call(this, buffer);\n buffer = '';\n s
tate = 'relative path start';\n }\n continue;\n }
else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid wh
itespace in file host.');\n } else {\n buffer += c;\n
}\n break;\n\n case 'host':\n case 'hostname':\n
if (':' == c && !seenBracket) {\n // XXX host parsing\n
this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n
state = 'port';\n if ('hostname' == stateOverride) {\n
break loop;\n }\n } else if (EOF == c || '/' == c || '\
\\\' == c || '?' == c || '#' == c) {\n this._host = IDNAToASCII.call(
this, buffer);\n buffer = '';\n state = 'relative path sta
rt';\n if (stateOverride) {\n break loop;\n }
\n continue;\n } else if ('\\t' != c && '\\n' != c && '\\r'
!= c) {\n if ('[' == c) {\n seenBracket = true;\n
} else if (']' == c) {\n seenBracket = false;\n }\n
buffer += c;\n } else {\n err('Invalid code poin
t in host/hostname: ' + c);\n }\n break;\n\n case 'port
':\n if (/[0-9]/.test(c)) {\n buffer += c;\n } else
if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c || stateOverrid
e) {\n if ('' != buffer) {\n var temp = parseInt(buffer,
10);\n if (temp != relative[this._scheme]) {\n this
._port = temp + '';\n }\n buffer = '';\n }\
n if (stateOverride) {\n break loop;\n }\n
state = 'relative path start';\n continue;\n } else
if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid code po
int in port: ' + c);\n } else {\n invalid.call(this);\n
}\n break;\n\n case 'relative path start':\n if ('
\\\\' == c)\n err(\"'\\\\' not allowed in path.\");\n state
= 'relative path';\n if ('/' != c && '\\\\' != c) {\n contin
ue;\n }\n break;\n\n case 'relative path':\n i
f (EOF == c || '/' == c || '\\\\' == c || (!stateOverride && ('?' == c || '#' ==
c))) {\n if ('\\\\' == c) {\n err('\\\\ not allowed in
relative path.');\n }\n var tmp;\n if (tmp = re
lativePathDotMapping[buffer.toLowerCase()]) {\n buffer = tmp;\n
}\n if ('..' == buffer) {\n this._path.pop();\n
if ('/' != c && '\\\\' != c) {\n this._path.push('')
;\n }\n } else if ('.' == buffer && '/' != c && '\\\\' !
= c) {\n this._path.push('');\n } else if ('.' != buffer
) {\n if ('file' == this._scheme && this._path.length == 0 && buffe
r.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == '|') {\n b
uffer = buffer[0] + ':';\n }\n this._path.push(buffer)
;\n }\n buffer = '';\n if ('?' == c) {\n
this._query = '?';\n state = 'query';\n } else if
('#' == c) {\n this._fragment = '#';\n state = 'fragm
ent';\n }\n } else if ('\\t' != c && '\\n' != c && '\\r' !=
c) {\n buffer += percentEscape(c);\n }\n break;\n\n
case 'query':\n if (!stateOverride && '#' == c) {\n
this._fragment = '#';\n state = 'fragment';\n } else if (EOF
!= c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._query += p
ercentEscapeQuery(c);\n }\n break;\n\n case 'fragment':
\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n
this._fragment += c;\n }\n break;\n }\n\n cursor+
+;\n }\n }\n\n function clear() {\n this._scheme = '';\n this._scheme
Data = '';\n this._username = '';\n this._password = null;\n this._host
= '';\n this._port = '';\n this._path = [];\n this._query = '';\n t
his._fragment = '';\n this._isInvalid = false;\n this._isRelative = false;
\n }\n\n // Does not process domain names or IP addresses.\n // Does not hand
le encoding for the query parameter.\n function jURL(url, base /* , encoding */
) {\n if (base !== undefined && !(base instanceof jURL))\n base = new jU
RL(String(base));\n\n this._url = url;\n clear.call(this);\n\n var inpu
t = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]+$/g, '');\n // encoding =
encoding || 'utf-8'\n\n parse.call(this, input, null, base);\n }\n\n jURL.p
rototype = {\n get href() {\n if (this._isInvalid)\n return this.
_url;\n\n var authority = '';\n if ('' != this._username || null != th
is._password) {\n authority = this._username +\n (null != this
._password ? ':' + this._password : '') + '@';\n }\n\n return this.pro
tocol +\n (this._isRelative ? '//' + authority + this.host : '') +\n
this.pathname + this._query + this._fragment;\n },\n set href(href)
{\n clear.call(this);\n parse.call(this, href);\n },\n\n get pr
otocol() {\n return this._scheme + ':';\n },\n set protocol(protocol)
{\n if (this._isInvalid)\n return;\n parse.call(this, protocol
+ ':', 'scheme start');\n },\n\n get host() {\n return this._isInval
id ? '' : this._port ?\n this._host + ':' + this._port : this._host;\n
},\n set host(host) {\n if (this._isInvalid || !this._isRelative)\n
return;\n parse.call(this, host, 'host');\n },\n\n get hostname
() {\n return this._host;\n },\n set hostname(hostname) {\n if (
this._isInvalid || !this._isRelative)\n return;\n parse.call(this, h
ostname, 'hostname');\n },\n\n get port() {\n return this._port;\n
},\n set port(port) {\n if (this._isInvalid || !this._isRelative)\n
return;\n parse.call(this, port, 'port');\n },\n\n get pathname()
{\n return this._isInvalid ? '' : this._isRelative ?\n '/' + this
._path.join('/') : this._schemeData;\n },\n set pathname(pathname) {\n
if (this._isInvalid || !this._isRelative)\n return;\n this._path =
[];\n parse.call(this, pathname, 'relative path start');\n },\n\n ge
t search() {\n return this._isInvalid || !this._query || '?' == this._query
?\n '' : this._query;\n },\n set search(search) {\n if (thi
s._isInvalid || !this._isRelative)\n return;\n this._query = '?';\n
if ('?' == search[0])\n search = search.slice(1);\n parse.call(
this, search, 'query');\n },\n\n get hash() {\n return this._isInvali
d || !this._fragment || '#' == this._fragment ?\n '' : this._fragment;\
n },\n set hash(hash) {\n if (this._isInvalid)\n return;\n
this._fragment = '#';\n if ('#' == hash[0])\n hash = hash.slice(1)
;\n parse.call(this, hash, 'fragment');\n },\n\n get origin() {\n
var host;\n if (this._isInvalid || !this._scheme) {\n return '';\n
}\n // javascript: Gecko returns String(\"\"), WebKit/Blink String(\"
null\")\n // Gecko throws error for \"data://\"\n // data: Gecko retur
ns \"\", Blink returns \"data://\", WebKit returns \"null\"\n // Gecko retu
rns String(\"\") for file: mailto:\n // WebKit/Blink returns String(\"SCHEM
E://\") for file: mailto:\n switch (this._scheme) {\n case 'data':\n
case 'file':\n case 'javascript':\n case 'mailto':\n
return 'null';\n }\n host = this.host;\n if (!host) {\n
return '';\n }\n return this._scheme + '://' + host;\n }\n };\n\
n // Copy over the static methods\n var OriginalURL = scope.URL;\n if (Origin
alURL) {\n jURL.createObjectURL = function(blob) {\n // IE extension all
ows a second optional options argument.\n // http://msdn.microsoft.com/en-u
s/library/ie/hh772302(v=vs.85).aspx\n return OriginalURL.createObjectURL.ap
ply(OriginalURL, arguments);\n };\n jURL.revokeObjectURL = function(url) {
\n OriginalURL.revokeObjectURL(url);\n };\n }\n\n scope.URL = jURL;\n\
n})(this);\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", | 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 IMPORT_LINK_TYPE = 'import';\r\nvar hasNative = (IMPORT_L
INK_TYPE in document.createElement('link'));\r\nvar useNative = hasNative;\r\nva
r isIE = /Trident/.test(navigator.userAgent);\r\n\r\n// TODO(sorvell): SD polyfi
ll intrusion\r\nvar hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill);\r\
nvar wrap = function(node) {\r\n return hasShadowDOMPolyfill ? ShadowDOMPolyfil
l.wrapIfNeeded(node) : node;\r\n};\r\n\r\nvar rootDocument = wrap(document);\r\n
\r\n// NOTE: We cannot polyfill document.currentScript because it's not poss
ible\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 currentScriptDescriptor = {\r\n get: fu
nction() {\r\n var script = HTMLImports.currentScript || document.currentScri
pt ||\r\n // NOTE: only works when called in synchronously 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 !== 'c
omplete' ? \r\n document.scripts[document.scripts.length - 1] : null);\r\
n return wrap(script);\r\n },\r\n configurable: true\r\n};\r\n\r\nObject.de
fineProperty(document, '_currentScript', currentScriptDescriptor);\r\nObject.def
ineProperty(rootDocument, '_currentScript', currentScriptDescriptor);\r\n\r\n//
call a callback when all HTMLImports in the document at call (or at least\r\n//
document ready) time have loaded.\r\n// 1. ensure the document is in a ready st
ate (has dom), then \r\n// 2. watch for loading of imports and call callback whe
n done\r\nfunction whenReady(callback, doc) {\r\n doc = doc || rootDocument;\r\
n // if document is loading, wait and try again\r\n whenDocumentReady(function
() {\r\n watchImportsLoad(callback, doc);\r\n }, doc);\r\n}\r\n\r\n// call t
he callback when the document is in a ready state (has dom)\r\nvar requiredReady
State = isIE ? 'complete' : 'interactive';\r\nvar READY_EVENT = 'readystatechang
e';\r\nfunction isDocumentReady(doc) {\r\n return (doc.readyState === 'complete
' ||\r\n doc.readyState === requiredReadyState);\r\n}\r\n\r\n// call <callb
ack> when we ensure the document is in a ready state\r\nfunction whenDocumentRea
dy(callback, doc) {\r\n if (!isDocumentReady(doc)) {\r\n var checkReady = fu
nction() {\r\n if (doc.readyState === 'complete' || \r\n doc.ready
State === requiredReadyState) {\r\n doc.removeEventListener(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 markTargetLoaded(event) {\r\n e
vent.target.__loaded = true;\r\n}\r\n\r\n// call <callback> when we ensure all i
mports have loaded\r\nfunction watchImportsLoad(callback, doc) {\r\n var import
s = doc.querySelectorAll('link[rel=import]');\r\n var loaded = 0, l = imports.l
ength;\r\n function checkDone(d) { \r\n if ((loaded == l) && callback) {\r\n
callback();\r\n }\r\n }\r\n function loadedImport(e) {\r\n markTa
rgetLoaded(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.addEventListe
ner('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 loading is based on explic
itly watching\r\n// all imports (see below).\r\n// We cannot rely on this entire
ly without watching the entire document\r\n// for import links. For perf reasons
, currently only head is watched.\r\n// Instead, we fallback to checking if the
import property is available \r\n// and the document is not itself loading. \r\n
function isImportLoaded(link) {\r\n return useNative ? link.__loaded || \r\n
(link.import && link.import.readyState !== 'loading') :\r\n link.__impor
tParsed;\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 addr
essed.\r\n// (1) Install a mutation observer to see when HTMLImports have loaded
\r\n// (2) if this script is run during document load it will watch any existing
\r\n// imports for loading.\r\n//\r\n// NOTE: The workaround has restricted func
tionality: (1) it's only compatible\r\n// with imports that are added to documen
t.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 have completed loading
.\r\nif (useNative) {\r\n new MutationObserver(function(mxns) {\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 handleImports(nodes) {\r\n
for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\r\n if (i
sImport(n)) {\r\n handleImport(n); \r\n }\r\n }\r\n }\r\n\r\n
function isImport(element) {\r\n return element.localName === 'link' && eleme
nt.rel === 'import';\r\n }\r\n\r\n function handleImport(element) {\r\n var
loaded = element.import;\r\n if (loaded) {\r\n markTargetLoaded({target
: element});\r\n } else {\r\n element.addEventListener('load', markTarge
tLoaded);\r\n element.addEventListener('error', markTargetLoaded);\r\n }
\r\n }\r\n\r\n // make sure to catch any imports that are in the process of lo
ading\r\n // when this script is run.\r\n (function() {\r\n if (document.re
adyState === 'loading') {\r\n var imports = document.querySelectorAll('link
[rel=import]');\r\n for (var i=0, l=imports.length, imp; (i<l) && (imp=impo
rts[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 imports in document at l
oad time \r\n// have loaded. This event is required to simulate the script block
ing \r\n// behavior of native imports. A main document script that needs to be s
ure\r\n// imports have loaded should wait for this event.\r\nwhenReady(function(
) {\r\n HTMLImports.ready = true;\r\n HTMLImports.readyTime = new Date().getTi
me();\r\n rootDocument.dispatchEvent(\r\n new CustomEvent('HTMLImportsLoaded
', {bubbles: true})\r\n );\r\n});\r\n\r\n// exports\r\nscope.useNative = useNat
ive;\r\nscope.isImportLoaded = isImportLoaded;\r\nscope.whenReady = whenReady;\r
\nscope.rootDocument = rootDocument;\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYP
E;\r\nscope.isIE = isIE;\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\n addNodes: function(nodes) {\n // numbe
r of transactions to complete\n this.inflight += nodes.length;\n // co
mmence 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 th
is.checkDone();\n },\n\n addNode: function(node) {\n // number of tra
nsactions to complete\n this.inflight++;\n // commence transactions\n
this.require(node);\n // anything to do?\n this.checkDone();\n
},\n\n require: function(elt) {\n var url = elt.src || elt.href;\n
// ensure we have a standard url that can be used\n // reliably for dedupi
ng.\n // TODO(sjmiles): ad-hoc\n elt.__nodeUrl = url;\n // dedupl
ication\n if (!this.dedupe(url, elt)) {\n // fetch this resource\n
this.fetch(url, elt);\n }\n },\n\n dedupe: function(url, elt) {
\n if (this.pending[url]) {\n // add to list of nodes waiting for in
Url\n this.pending[url].push(elt);\n // don't need fetch\n
return true;\n }\n var resource;\n if (this.cache[url]) {\n
this.onload(url, elt, this.cache[url]);\n // finished this transaction\
n this.tail();\n // don't need fetch\n return true;\n
}\n // first node waiting for inUrl\n this.pending[url] = [elt];\n
// need fetch (not a dupe)\n return false;\n },\n\n fetch: function
(url, elt) {\n flags.load && console.log('fetch', url, elt);\n if (url
.match(/^data:/)) {\n // Handle Data URI Scheme\n var pieces = url
.split(',');\n var header = pieces[0];\n var body = pieces[1];\n
if(header.indexOf(';base64') > -1) {\n body = atob(body);\n
} else {\n body = decodeURIComponent(body);\n }\n setTi
meout(function() {\n this.receive(url, elt, null, body);\n }.b
ind(this), 0);\n } else {\n var receiveXhr = function(err, resource,
redirectedUrl) {\n this.receive(url, elt, err, resource, redirectedUrl
);\n }.bind(this);\n xhr.load(url, receiveXhr);\n // TODO(s
orvell): blocked on)\n // https://code.google.com/p/chromium/issues/detai
l?id=257221\n // xhr'ing for a document makes scripts in imports runnable
; otherwise\n // they are not; however, it requires that we have doctype=
html in\n // the import which is unacceptable. This is only needed on Chr
ome\n // to avoid the bug above.\n /*\n if (isDocumentLink(
elt)) {\n xhr.loadDocument(url, receiveXhr);\n } else {\n
xhr.load(url, receiveXhr);\n }\n */\n }\n },\n\n rec
eive: function(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 redire
cted location so paths are\n // calculated relative to that.\n thi
s.onload(url, p, resource, err, redirectedUrl);\n this.tail();\n }\n
this.pending[url] = null;\n },\n\n tail: function() {\n --this.
inflight;\n this.checkDone();\n },\n\n checkDone: function() {\n
if (!this.inflight) {\n this.oncomplete();\n }\n }\n\n };\n\n
xhr = xhr || {\n async: true,\n\n ok: function(request) {\n return (r
equest.status >= 200 && request.status < 300)\n || (request.status ===
304)\n || (request.status === 0);\n },\n\n load: function(url, ne
xt, nextContext) {\n var request = new XMLHttpRequest();\n if (scope.f
lags.debug || scope.flags.bust) {\n url += '?' + Math.random();\n }\
n request.open('GET', url, xhr.async);\n request.addEventListener('rea
dystatechange', function(e) {\n if (request.readyState === 4) {\n
// Servers redirecting an import can add a Location header to help us\n
// polyfill correctly.\n var locationHeader = request.getResponseHea
der(\"Location\");\n var redirectedUrl = null;\n if (locationH
eader) {\n var redirectedUrl = (locationHeader.substr( 0, 1 ) === \"/
\")\n ? location.origin + locationHeader // Location is a relative
path\n : locationHeader; // Full path\n
}\n next.call(nextContext, !xhr.ok(request) && request,\n
request.response || request.responseText, redirectedUrl);\n }\n })
;\n request.send();\n return request;\n },\n\n loadDocument: fun
ction(url, next, nextContext) {\n this.load(url, next, nextContext).respons
eType = 'document';\n }\n \n };\n\n // exports\n scope.xhr = xhr;\n sc
ope.Loader = Loader;\n\n})(window.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\n// im
ports\nvar rootDocument = scope.rootDocument;\nvar flags = scope.flags;\nvar isI
E = scope.isIE;\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\n\n// importPars
er\n// highlander object to manage parsing of imports\n// parses import related
elements\n// and ensures proper parse order\n// parse order is enforced by crawl
ing the tree and monitoring which elements\n// have been parsed; async parsing i
s also supported.\n\n// highlander object for parsing a document tree\nvar impor
tParser = {\n\n // parse selectors for main document elements\n documentSelect
ors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n\n // parse selectors for import do
cument elements\n importsSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'
,\n 'link[rel=stylesheet]',\n 'style',\n 'script:not([type])',\n 'sc
ript[type=\"text/javascript\"]'\n ].join(','),\n\n map: {\n link: 'parseLin
k',\n script: 'parseScript',\n style: 'parseStyle'\n },\n\n dynamicEleme
nts: [],\n\n // try to parse the next import in the tree\n parseNext: function
() {\n var next = this.nextToParse();\n if (next) {\n this.parse(next
);\n }\n },\n\n parse: function(elt) {\n if (this.isParsed(elt)) {\n
flags.parse && console.log('[%s] is already parsed', elt.localName);\n re
turn;\n }\n var fn = this[this.map[elt.localName]];\n if (fn) {\n
this.markParsing(elt);\n fn.call(this, elt);\n }\n },\n\n parseDynamic
: function(elt, quiet) {\n this.dynamicElements.push(elt);\n if (!quiet) {
\n this.parseNext();\n }\n },\n\n // only 1 element may be parsed at a
time; parsing is async so each\n // parsing implementation must inform the sys
tem that parsing is complete\n // via markParsingComplete.\n // To prompt the
system to parse the next element, parseNext should then be\n // called.\n // N
ote, parseNext 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 m
arkParsing: function(elt) {\n flags.parse && console.log('parsing', elt);\n
this.parsingElement = elt;\n },\n\n markParsingComplete: function(elt) {\n
elt.__importParsed = true;\n this.markDynamicParsingComplete(elt);\n if
(elt.__importElement) {\n elt.__importElement.__importParsed = true;\n
this.markDynamicParsingComplete(elt.__importElement);\n }\n this.parsingE
lement = null;\n flags.parse && console.log('completed', elt);\n },\n\n mar
kDynamicParsingComplete: function(elt) {\n var i = this.dynamicElements.index
Of(elt);\n if (i >= 0) {\n this.dynamicElements.splice(i, 1);\n }\n
},\n\n parseImport: function(elt) {\n // TODO(sorvell): consider if there's
a better way to do this;\n // expose an imports parsing hook; this is needed,
for example, by the\n // CustomElements polyfill.\n if (HTMLImports.__imp
ortsParsingHook) {\n HTMLImports.__importsParsingHook(elt);\n }\n if
(elt.import) {\n elt.import.__importParsed = true;\n }\n this.markPar
singComplete(elt);\n // fire load event\n if (elt.__resource && !elt.__err
or) {\n elt.dispatchEvent(new CustomEvent('load', {bubbles: false})); \n
} else {\n elt.dispatchEvent(new CustomEvent('error', {bubbles: false})
);\n }\n // TODO(sorvell): workaround for Safari addEventListener not work
ing\n // for elements not in the main document.\n if (elt.__pending) {\n
var fn;\n while (elt.__pending.length) {\n fn = elt.__pending.sh
ift();\n if (fn) {\n fn({target: elt});\n }\n }\n
}\n this.parseNext();\n },\n\n parseLink: function(linkElt) {\n if (nod
eIsImport(linkElt)) {\n this.parseImport(linkElt);\n } else {\n //
make href absolute\n linkElt.href = linkElt.href;\n this.parseGeneric(
linkElt);\n }\n },\n\n parseStyle: function(elt) {\n // TODO(sorvell): s
tyle element load event can just not fire so clone styles\n var src = elt;\n
elt = cloneStyle(elt);\n elt.__importElement = src;\n this.parseGeneric
(elt);\n },\n\n parseGeneric: function(elt) {\n this.trackElement(elt);\n
this.addElementToDocument(elt);\n },\n\n rootImportForElement: function(elt)
{\n var n = elt;\n while (n.ownerDocument.__importLink) {\n n = n.ow
nerDocument.__importLink;\n }\n return n;\n },\n\n addElementToDocument:
function(elt) {\n var port = this.rootImportForElement(elt.__importElement |
| elt);\n var l = port.__insertedElements = port.__insertedElements || 0;\n
var refNode = port.nextElementSibling;\n for (var i=0; i < l; i++) {\n
refNode = refNode && refNode.nextElementSibling;\n }\n port.parentNode.in
sertBefore(elt, refNode);\n },\n\n // tracks when a loadable element has loade
d\n trackElement: function(elt, callback) {\n var self = this;\n var done
= function(e) {\n if (callback) {\n callback(e);\n }\n se
lf.markParsingComplete(elt);\n self.parseNext();\n };\n elt.addEventL
istener('load', done);\n elt.addEventListener('error', done);\n\n // NOTE:
IE does not fire \"load\" event for styles that have already loaded\n // Thi
s is in violation of the spec, so we try our hardest to work around it\n if (
isIE && elt.localName === 'style') {\n var fakeLoad = false;\n // If t
here's not @import in the textContent, assume it has loaded\n if (elt.textC
ontent.indexOf('@import') == -1) {\n fakeLoad = true;\n // if we hav
e a sheet, we have been parsed\n } else if (elt.sheet) {\n fakeLoad
= true;\n var csr = elt.sheet.cssRules;\n var len = csr ? csr.leng
th : 0;\n // search the rules for @import's\n for (var i = 0, r; (
i < len) && (r = csr[i]); i++) {\n if (r.type === CSSRule.IMPORT_RULE)
{\n // if every @import has resolved, fake the load\n fake
Load = fakeLoad && Boolean(r.styleSheet);\n }\n }\n }\n
// dispatch a fake load event and continue parsing\n if (fakeLoad) {\n
elt.dispatchEvent(new CustomEvent('load', {bubbles: false}));\n }\n
}\n },\n\n // NOTE: execute scripts by injecting them and watching for the lo
ad/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 compa
tibility\n // issues, we can switch to injecting the inline script with textCon
tent.\n // Scripts with dataURL's do not appear to generate load events and the
refore\n // we assume they execute synchronously.\n parseScript: function(scri
ptElt) {\n var script = document.createElement('script');\n script.__impor
tElement = scriptElt;\n script.src = scriptElt.src ? scriptElt.src : \n
generateScriptDataUrl(scriptElt);\n scope.currentScript = scriptElt;\n t
his.trackElement(script, function(e) {\n script.parentNode.removeChild(scri
pt);\n scope.currentScript = null; \n });\n this.addElementToDocumen
t(script);\n },\n\n // determine the next element in the tree which should be
parsed\n nextToParse: function() {\n this._mayParse = [];\n return !this.
parsingElement && (this.nextToParseInDoc(rootDocument) || \n this.nextToP
arseDynamic());\n },\n\n nextToParseInDoc: function(doc, link) {\n // use `
marParse` list to avoid looping into the same document again\n // since it co
uld cause an iloop.\n if (doc && this._mayParse.indexOf(doc) < 0) {\n th
is._mayParse.push(doc);\n var nodes = doc.querySelectorAll(this.parseSelect
orsForNode(doc));\n for (var i=0, l=nodes.length, p=0, n; (i<l) && (n=nodes
[i]); i++) {\n if (!this.isParsed(n)) {\n if (this.hasResource(n
)) {\n return nodeIsImport(n) ? this.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 retur
n link;\n },\n\n nextToParseDynamic: function() {\n return this.dynamicElem
ents[0];\n },\n\n // return the set of parse selectors relevant for this node.
\n parseSelectorsForNode: function(node) {\n var doc = node.ownerDocument ||
node;\n return doc === rootDocument ? this.documentSelectors :\n this
.importsSelectors;\n },\n\n isParsed: function(node) {\n return node.__impo
rtParsed;\n },\n\n needsDynamicParsing: function(elt) {\n return (this.dyna
micElements.indexOf(elt) >= 0);\n },\n\n hasResource: function(node) {\n if
(nodeIsImport(node) && (node.import === undefined)) {\n return false;\n
}\n return true;\n }\n\n};\n\nfunction nodeIsImport(elt) {\n return (elt.l
ocalName === 'link') && (elt.rel === IMPORT_LINK_TYPE);\n}\n\nfunction generateS
criptDataUrl(script) {\n var scriptContent = generateScriptContent(script);\n
return 'data:text/javascript;charset=utf-8,' + encodeURIComponent(scriptContent)
;\n}\n\nfunction generateScriptContent(script) {\n return script.textContent +
generateSourceMapHint(script);\n}\n\n// calculate source map hint\nfunction gene
rateSourceMapHint(script) {\n var moniker = script.__nodeUrl;\n if (!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 need to allow
\n // this sort of thing\n var matches = script.textContent.match(/Polymer
\\(['\"]([^'\"]*)/);\n tag = matches && matches[1] || tag;\n // tag the mo
niker\n moniker += '/' + tag + '.js';\n }\n return '\\n//# sourceURL=' + mo
niker + '\\n';\n}\n\n// style/stylesheet handling\n\n// clone style with proper
path resolution for main document\n// NOTE: styles are the only elements that re
quire direct path fixup.\nfunction cloneStyle(style) {\n var clone = style.owne
rDocument.createElement('style');\n clone.textContent = style.textContent;\n p
ath.resolveUrlsInStyle(clone);\n return clone;\n}\n\n// path fixup: style eleme
nts in imports must be made relative to the main \n// document. We fixup url's i
n url() and @import.\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CSS_IMP
ORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n\nvar path = {\n\n resolv
eUrlsInStyle: function(style) {\n var doc = style.ownerDocument;\n var res
olver = doc.createElement('a');\n style.textContent = this.resolveUrlsInCssTe
xt(style.textContent, resolver);\n return style; \n },\n\n resolveUrlsInCs
sText: function(cssText, urlObj) {\n var r = this.replaceUrls(cssText, urlObj
, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGEXP);\n
return r;\n },\n\n replaceUrls: function(text, urlObj, regexp) {\n return
text.replace(regexp, function(m, pre, url, post) {\n var urlPath = url.repl
ace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlObj.href;\n
return pre + '\\'' + urlPath + '\\'' + post;\n }); \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\n// i
mports\nvar useNative = scope.useNative;\nvar flags = scope.flags;\nvar IMPORT_L
INK_TYPE = scope.IMPORT_LINK_TYPE;\n\nif (!useNative) {\n\n // imports\n var r
ootDocument = scope.rootDocument;\n var xhr = scope.xhr;\n var Loader = scope.
Loader;\n var parser = scope.parser;\n\n // importer\n // highlander object t
o manage loading of imports\n\n // for any document, importer:\n // - loads an
y linked import documents (with deduping)\n\n var importer = {\n\n documents
: {},\n \n // nodes to load in the mian document\n documentPreloadSelec
tors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n \n // nodes to load in impor
ts\n importsPreloadSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n
].join(','),\n \n loadNode: function(node) {\n importLoader.addNo
de(node);\n },\n \n // load all loadable elements within the parent ele
ment\n loadSubtree: function(parent) {\n var nodes = this.marshalNodes(p
arent);\n // add these nodes to loader's queue\n importLoader.addNodes
(nodes);\n },\n \n marshalNodes: function(parent) {\n // all prelo
adable nodes in inDocument\n return parent.querySelectorAll(this.loadSelect
orsForNode(parent));\n },\n \n // find the proper set of load selectors
for a given node\n loadSelectorsForNode: function(node) {\n var doc = n
ode.ownerDocument || node;\n return doc === rootDocument ? this.documentPre
loadSelectors :\n this.importsPreloadSelectors;\n },\n \n load
ed: function(url, elt, resource, err, redirectedUrl) {\n flags.load && cons
ole.log('loaded', url, elt);\n // store generic resource\n // TODO(sor
vell): fails for nodes inside <template>.content\n // see https://code.goog
le.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 document at this url\n
if (doc === undefined) {\n // generate an HTMLDocument from data\n
doc = err ? null : makeDocument(resource, redirectedUrl || url);\n
if (doc) {\n doc.__importLink = elt;\n // note, we canno
t use MO to detect parsed nodes because\n // SD polyfill does not rep
ort these as mutations.\n this.bootDocument(doc);\n }\n
// cache document\n this.documents[url] = doc;\n }\n
// don't store import record until we're actually loaded\n // store docu
ment resource\n elt.import = doc;\n }\n parser.parseNext();\n
},\n \n bootDocument: function(doc) {\n this.loadSubtree(doc);\n
this.observe(doc);\n parser.parseNext();\n },\n \n loadedAll: f
unction() {\n parser.parseNext();\n }\n\n };\n\n // loader singleton\n
var importLoader = new Loader(importer.loaded.bind(importer), \n importer
.loadedAll.bind(importer));\n\n function isDocumentLink(elt) {\n return isLi
nkRel(elt, IMPORT_LINK_TYPE);\n }\n\n function isLinkRel(elt, rel) {\n retu
rn elt.localName === 'link' && elt.getAttribute('rel') === rel;\n }\n\n functi
on isScript(elt) {\n return elt.localName === 'script';\n }\n\n function ma
keDocument(resource, url) {\n // create a new HTML document\n var doc = re
source;\n if (!(doc instanceof Document)) {\n doc = document.implementat
ion.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('href', 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 d
oc.head.appendChild(meta);\n doc.head.appendChild(base);\n // install HTML
last as it may trigger CustomElement upgrades\n // TODO(sjmiles): problem wr
t to template boostrapping below,\n // template bootstrapping must (?) come b
efore element upgrade\n // but we cannot bootstrap templates until they are i
n a document\n // which is too late\n if (!(resource instanceof Document))
{\n // install html\n doc.body.innerHTML = resource;\n }\n // T
ODO(sorvell): ideally this code is not aware of Template polyfill,\n // but f
or now the polyfill needs help to bootstrap these templates\n if (window.HTML
TemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemplateElement.b
ootstrap(doc);\n }\n return doc;\n }\n\n // Polyfill document.baseURI fo
r browsers without it.\n if (!document.baseURI) {\n var baseURIDescriptor =
{\n get: function() {\n var base = document.querySelector('base');\n
return base ? base.href : window.location.href;\n },\n configu
rable: true\n };\n\n Object.defineProperty(document, 'baseURI', baseURIDes
criptor);\n Object.defineProperty(rootDocument, 'baseURI', baseURIDescriptor)
;\n }\n\n // IE shim for CustomEvent\n if (typeof window.CustomEvent !== 'fun
ction') {\n window.CustomEvent = function(inType, dictionary) {\n var e
= document.createEvent('HTMLEvents');\n e.initEvent(inType,\n di
ctionary.bubbles === false ? false : true,\n dictionary.cancelable ===
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 = IMPORT_LIN
K_TYPE;\nscope.importLoader = importLoader;\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\n// imp
orts\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\nvar importer = scope.impor
ter;\nvar parser = scope.parser;\n\nvar importSelector = 'link[rel=' + IMPORT_LI
NK_TYPE + ']';\n\n\n// we track mutations for addedNodes, looking for imports\nf
unction 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 addedNodes(m.addedNodes);\n }\n }\n}\n\n// find loadable elements an
d add them to the importer\n// IFF the owning document has already parsed, then
parsable elements\n// need to be marked for dynamic parsing.\nfunction addedNode
s(nodes) {\n var owner, parsed;\n for (var i=0, l=nodes.length, n, loading; (i
<l) && (n=nodes[i]); i++) {\n if (!owner) {\n owner = n.ownerDocument;\n
parsed = parser.isParsed(owner);\n }\n // note: the act of loading k
icks the parser, so we use parseDynamic's\n // 2nd argument to control if thi
s added node needs to kick the parser.\n loading = shouldLoadNode(n);\n if
(loading) {\n importer.loadNode(n);\n }\n if (shouldParseNode(n) &&
parsed) {\n parser.parseDynamic(n, loading);\n }\n if (n.children &&
n.children.length) {\n addedNodes(n.children);\n }\n }\n}\n\nfunction s
houldLoadNode(node) {\n return (node.nodeType === 1) && matches.call(node,\n
importer.loadSelectorsForNode(node));\n}\n\nfunction shouldParseNode(node) {\
n return (node.nodeType === 1) && matches.call(node,\n parser.parseSelecto
rsForNode(node)); \n}\n\n// x-plat matches\nvar matches = HTMLElement.prototype
.matches || \n HTMLElement.prototype.matchesSelector || \n HTMLElement.pro
totype.webkitMatchesSelector ||\n HTMLElement.prototype.mozMatchesSelector ||
\n HTMLElement.prototype.msMatchesSelector;\n\nvar observer = new MutationObs
erver(handler);\n\n// observe the given root for loadable elements\nfunction obs
erve(root) {\n observer.observe(root, {childList: true, subtree: true});\n}\n\n
// exports\n// TODO(sorvell): factor so can put on scope\nscope.observe = observ
e;\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)
node = wrapIfNeeded(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, {childL
ist: true, subtree: true});\r\n inRoot.__observer = observer;\r\n}\r\n\r\nfunct
ion observeDocument(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocume
nt(doc) {\r\n logFlags.dom && console.group('upgradeDocument: ', (doc.baseURI).
split('/').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 (
including imports)\r\nhas pending custom elements to upgrade. It can be called m
ultiple 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\
nmust be taken to avoid recursion.\r\n*/\r\nvar upgradedDocuments;\r\nfunction u
pgradeDocumentTree(doc) {\r\n upgradedDocuments = [];\r\n _upgradeDocumentTree
(doc);\r\n upgradedDocuments = null;\r\n}\r\n\r\n\r\nfunction _upgradeDocumentT
ree(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.
log('upgradeDocumentTree: ', (doc.baseURI).split('/').pop());\r\n // upgrade co
ntained 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=im
ports[i]); i++) {\r\n if (n.import && n.import.__parsed) {\r\n _upgradeD
ocumentTree(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 = wa
tchShadow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeA
ll = addedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\nscope.insertedNode =
insertedNode;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDo
cument = upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(wind
ow.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 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)
node = wrapIfNeeded(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, {childL
ist: true, subtree: true});\r\n inRoot.__observer = observer;\r\n}\r\n\r\nfunct
ion observeDocument(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocume
nt(doc) {\r\n logFlags.dom && console.group('upgradeDocument: ', (doc.baseURI).
split('/').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 (
including imports)\r\nhas pending custom elements to upgrade. It can be called m
ultiple 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\
nmust be taken to avoid recursion.\r\n*/\r\nvar upgradedDocuments;\r\nfunction u
pgradeDocumentTree(doc) {\r\n upgradedDocuments = [];\r\n _upgradeDocumentTree
(doc);\r\n upgradedDocuments = null;\r\n}\r\n\r\n\r\nfunction _upgradeDocumentT
ree(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.
log('upgradeDocumentTree: ', (doc.baseURI).split('/').pop());\r\n // upgrade co
ntained 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=im
ports[i]); i++) {\r\n if (n.import && n.import.__parsed) {\r\n _upgradeD
ocumentTree(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 = wa
tchShadow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeA
ll = addedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\nscope.insertedNode =
insertedNode;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDo
cument = upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(wind
ow.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 } |
OLD | NEW |