aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTravis CI <julien.tanguy@jhome.fr>2016-01-16 10:32:55 +0000
committerTravis CI <julien.tanguy@jhome.fr>2016-01-16 10:32:55 +0000
commit19f6782ef4a09195abf9c45acde992e5b3147853 (patch)
tree61f2d2732db5746bce4a684a3a8ed61f4fe68cc4
downloadhmacaroons-gh-pages.tar.gz
hmacaroons-gh-pages.tar.zst
hmacaroons-gh-pages.zip
Deploy to GitHub Pagesgh-pages
-rw-r--r--Crypto-Macaroon-Serializer-Base64.html4
-rw-r--r--Crypto-Macaroon-Verifier.html13
-rw-r--r--Crypto-Macaroon.html5
-rw-r--r--benchmark.html610
-rw-r--r--doc-index.html4
-rw-r--r--frames.html30
-rw-r--r--haddock-util.js344
-rw-r--r--hmacaroons.haddockbin0 -> 13790 bytes
-rw-r--r--hslogo-16.pngbin0 -> 1684 bytes
-rw-r--r--index-frames.html4
-rw-r--r--index.html9
-rw-r--r--mini_Crypto-Macaroon-Serializer-Base64.html4
-rw-r--r--mini_Crypto-Macaroon-Verifier.html4
-rw-r--r--mini_Crypto-Macaroon.html4
-rw-r--r--minus.gifbin0 -> 56 bytes
-rw-r--r--ocean.css600
-rw-r--r--plus.gifbin0 -> 59 bytes
-rw-r--r--synopsis.pngbin0 -> 11327 bytes
18 files changed, 1635 insertions, 0 deletions
diff --git a/Crypto-Macaroon-Serializer-Base64.html b/Crypto-Macaroon-Serializer-Base64.html
new file mode 100644
index 0000000..3a8aa14
--- /dev/null
+++ b/Crypto-Macaroon-Serializer-Base64.html
@@ -0,0 +1,4 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Crypto.Macaroon.Serializer.Base64</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2window.onload = function () {pageLoad();setSynopsis("mini_Crypto-Macaroon-Serializer-Base64.html");};
3//]]>
4</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">hmacaroons-0.5.0.0: Haskell implementation of macaroons</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Copyright</th><td>(c) 2015 Julien Tanguy</td></tr><tr><th>License</th><td>BSD3</td></tr><tr><th>Maintainer</th><td>julien.tanguy@jhome.fr</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Portability</th><td>portable</td></tr><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Crypto.Macaroon.Serializer.Base64</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Base64 serializer/deserializer</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:serialize">serialize</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a></li><li class="src short"><a href="#v:deserialize">deserialize</a> :: <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a> -&gt; <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Either.html#t:Either">Either</a> <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-String.html#t:String">String</a> <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:serialize" class="def">serialize</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a></p><div class="doc"><p>Serialize a macaroon in an URL-safe Base64 encoding</p></div></div><div class="top"><p class="src"><a name="v:deserialize" class="def">deserialize</a> :: <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a> -&gt; <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Either.html#t:Either">Either</a> <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-String.html#t:String">String</a> <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a></p><div class="doc"><p>Deserialize a macaroon from a base64url-encoded ByteString</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.1</p></div></body></html> \ No newline at end of file
diff --git a/Crypto-Macaroon-Verifier.html b/Crypto-Macaroon-Verifier.html
new file mode 100644
index 0000000..b58f97c
--- /dev/null
+++ b/Crypto-Macaroon-Verifier.html
@@ -0,0 +1,13 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Crypto.Macaroon.Verifier</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2window.onload = function () {pageLoad();setSynopsis("mini_Crypto-Macaroon-Verifier.html");};
3//]]>
4</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">hmacaroons-0.5.0.0: Haskell implementation of macaroons</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Copyright</th><td>(c) 2015 Julien Tanguy</td></tr><tr><th>License</th><td>BSD3</td></tr><tr><th>Maintainer</th><td>julien.tanguy@jhome.fr</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Portability</th><td>portable</td></tr><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Crypto.Macaroon.Verifier</p></div><div id="description"><p class="caption">Description</p><div class="doc empty">&nbsp;</div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:verify">verify</a> :: (<a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Functor.html#t:Functor">Functor</a> m, <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/transformers-0.4.2.0/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m) =&gt; <a href="Crypto-Macaroon.html#t:Secret">Secret</a> -&gt; [<a href="Crypto-Macaroon.html#t:Caveat">Caveat</a> -&gt; m <a href="Crypto-Macaroon-Verifier.html#t:VerifierResult">VerifierResult</a>] -&gt; <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; m (<a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Either.html#t:Either">Either</a> <a href="Crypto-Macaroon-Verifier.html#t:ValidationError">ValidationError</a> <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a>)</li><li class="src short"><span class="keyword">data</span> <a href="#t:VerifierResult">VerifierResult</a><ul class="subs"><li>= <a href="#v:Verified">Verified</a></li><li>| <a href="#v:Refused">Refused</a> <a href="Crypto-Macaroon-Verifier.html#t:ValidationError">ValidationError</a></li><li>| <a href="#v:Unrelated">Unrelated</a></li></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:ValidationError">ValidationError</a><ul class="subs"><li>= <a href="#v:ParseError">ParseError</a> <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-String.html#t:String">String</a></li><li>| <a href="#v:ValidatorError">ValidatorError</a> <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-String.html#t:String">String</a></li></ul></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:verify" class="def">verify</a> :: (<a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Functor.html#t:Functor">Functor</a> m, <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/transformers-0.4.2.0/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a> m) =&gt; <a href="Crypto-Macaroon.html#t:Secret">Secret</a> -&gt; [<a href="Crypto-Macaroon.html#t:Caveat">Caveat</a> -&gt; m <a href="Crypto-Macaroon-Verifier.html#t:VerifierResult">VerifierResult</a>] -&gt; <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; m (<a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Either.html#t:Either">Either</a> <a href="Crypto-Macaroon-Verifier.html#t:ValidationError">ValidationError</a> <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a>)</p><div class="doc"><p>Verify a Macaroon's signature and caveats, given the corresponding Secret
5 and verifiers.</p><p>A verifier is a function of type
6 <code><code><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/transformers-0.4.2.0/Control-Monad-IO-Class.html#t:MonadIO">MonadIO</a></code> m =&gt; <code><a href="Crypto-Macaroon.html#t:Caveat">Caveat</a></code> -&gt; m VerifierResult</code>.</p><p>It should return:</p><ul><li><code><a href="Crypto-Macaroon-Verifier.html#v:Unrelated">Unrelated</a></code> if the caveat is not related to the verifier
7 (for instance a time verifier is given an action caveat);</li><li><code><a href="Crypto-Macaroon-Verifier.html#v:Refused">Refused</a></code> (<code><a href="Crypto-Macaroon-Verifier.html#v:ParseError">ParseError</a></code> reason) if the verifier is related to the
8 caveat, but failed to parse it completely;</li><li><code><a href="Crypto-Macaroon-Verifier.html#v:Refused">Refused</a></code> (<code><a href="Crypto-Macaroon-Verifier.html#v:ValidatorError">ValidatorError</a></code> reason) if the verifier is related to the
9 caveat, parsed it and invalidated it;</li><li><code><a href="Crypto-Macaroon-Verifier.html#v:Verified">Verified</a></code> if the verifier has successfully verified the
10 given caveat</li></ul></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:VerifierResult" class="def">VerifierResult</a></p><div class="doc"><p>Type representing the result of a validator</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Verified" class="def">Verified</a></td><td class="doc"><p>The caveat is correctly parsed and verified</p></td></tr><tr><td class="src"><a name="v:Refused" class="def">Refused</a> <a href="Crypto-Macaroon-Verifier.html#t:ValidationError">ValidationError</a></td><td class="doc"><p>The caveat is refused (Either a parse error or a validation error</p></td></tr><tr><td class="src"><a name="v:Unrelated" class="def">Unrelated</a></td><td class="doc"><p>The given verifier does not verify the caveat</p></td></tr></table></div><div class="subs instances"><p id="control.i:VerifierResult" class="caption collapser" onclick="toggleSection('i:VerifierResult')">Instances</p><div id="section.i:VerifierResult" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Macaroon-Verifier.html#t:VerifierResult">VerifierResult</a></span></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Text-Show.html#t:Show">Show</a> <a href="Crypto-Macaroon-Verifier.html#t:VerifierResult">VerifierResult</a></span></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:ValidationError" class="def">ValidationError</a></p><div class="doc"><p>Type representing different validation errors.
11 Only <code><a href="Crypto-Macaroon-Verifier.html#v:ParseError">ParseError</a></code> and <code><a href="Crypto-Macaroon-Verifier.html#v:ValidatorError">ValidatorError</a></code> are exported, <code>SigMismatch</code> and
12 <code>NoVerifier</code> are used internally and should not be used by the user</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:ParseError" class="def">ParseError</a> <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-String.html#t:String">String</a></td><td class="doc"><p>A verifier had a parse error</p></td></tr><tr><td class="src"><a name="v:ValidatorError" class="def">ValidatorError</a> <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-String.html#t:String">String</a></td><td class="doc"><p>A verifier failed</p></td></tr></table></div><div class="subs instances"><p id="control.i:ValidationError" class="caption collapser" onclick="toggleSection('i:ValidationError')">Instances</p><div id="section.i:ValidationError" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Macaroon-Verifier.html#t:ValidationError">ValidationError</a></span></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Text-Show.html#t:Show">Show</a> <a href="Crypto-Macaroon-Verifier.html#t:ValidationError">ValidationError</a></span></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Monoid.html#t:Monoid">Monoid</a> <a href="Crypto-Macaroon-Verifier.html#t:ValidationError">ValidationError</a></span></td><td class="doc"><p>The <code><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Monoid.html#t:Monoid">Monoid</a></code> instance is written so <code>SigMismatch</code> is an annihilator,
13 and <code>NoVerifier</code> is the identity element</p></td></tr></table></div></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.1</p></div></body></html> \ No newline at end of file
diff --git a/Crypto-Macaroon.html b/Crypto-Macaroon.html
new file mode 100644
index 0000000..963fcaa
--- /dev/null
+++ b/Crypto-Macaroon.html
@@ -0,0 +1,5 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Crypto.Macaroon</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2window.onload = function () {pageLoad();setSynopsis("mini_Crypto-Macaroon.html");};
3//]]>
4</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">hmacaroons-0.5.0.0: Haskell implementation of macaroons</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Copyright</th><td>(c) 2015 Julien Tanguy</td></tr><tr><th>License</th><td>BSD3</td></tr><tr><th>Maintainer</th><td>julien.tanguy@jhome.fr</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Portability</th><td>portable</td></tr><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Crypto.Macaroon</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Types</a></li><li><a href="#g:2">Accessing functions</a><ul><li><a href="#g:3">Macaroons</a></li><li><a href="#g:4">Caveats</a></li></ul></li><li><a href="#g:5">Create Macaroons</a></li><li><a href="#g:6">Serialize</a></li><li><a href="#g:7">Verify</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Pure haskell implementations of macaroons.</p><p>Warning: this implementation has not been audited by security experts.
5Do not use in production</p><p>References:</p><ul><li>Macaroons: Cookies with Contextual Caveats for Decentralized Authorization in the Cloud <a href="http://research.google.com/pubs/pub41892.html">http://research.google.com/pubs/pub41892.html</a></li><li>Time for better security in NoSQL <a href="http://hackingdistributed.com/2014/11/23/macaroons-in-hyperdex">http://hackingdistributed.com/2014/11/23/macaroons-in-hyperdex</a></li></ul></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span> <a href="#t:Macaroon">Macaroon</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:Caveat">Caveat</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:Secret">Secret</a> = <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:Key">Key</a> = <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:Location">Location</a> = <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:Sig">Sig</a> = <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a></li><li class="src short"><a href="#v:location">location</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="Crypto-Macaroon.html#t:Location">Location</a></li><li class="src short"><a href="#v:identifier">identifier</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="Crypto-Macaroon.html#t:Key">Key</a></li><li class="src short"><a href="#v:caveats">caveats</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; [<a href="Crypto-Macaroon.html#t:Caveat">Caveat</a>]</li><li class="src short"><a href="#v:signature">signature</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="Crypto-Macaroon.html#t:Sig">Sig</a></li><li class="src short"><a href="#v:cl">cl</a> :: <a href="Crypto-Macaroon.html#t:Caveat">Caveat</a> -&gt; <a href="Crypto-Macaroon.html#t:Location">Location</a></li><li class="src short"><a href="#v:cid">cid</a> :: <a href="Crypto-Macaroon.html#t:Caveat">Caveat</a> -&gt; <a href="Crypto-Macaroon.html#t:Key">Key</a></li><li class="src short"><a href="#v:vid">vid</a> :: <a href="Crypto-Macaroon.html#t:Caveat">Caveat</a> -&gt; <a href="Crypto-Macaroon.html#t:Key">Key</a></li><li class="src short"><a href="#v:create">create</a> :: <a href="Crypto-Macaroon.html#t:Secret">Secret</a> -&gt; <a href="Crypto-Macaroon.html#t:Key">Key</a> -&gt; <a href="Crypto-Macaroon.html#t:Location">Location</a> -&gt; <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a></li><li class="src short"><a href="#v:inspect">inspect</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-String.html#t:String">String</a></li><li class="src short"><a href="#v:addFirstPartyCaveat">addFirstPartyCaveat</a> :: <a href="Crypto-Macaroon.html#t:Key">Key</a> -&gt; <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a></li><li class="src short">module <a href="Crypto-Macaroon-Serializer-Base64.html">Crypto.Macaroon.Serializer.Base64</a></li><li class="src short">module <a href="Crypto-Macaroon-Verifier.html">Crypto.Macaroon.Verifier</a></li></ul></div><div id="interface"><h1 id="g:1">Types</h1><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Macaroon" class="def">Macaroon</a></p><div class="doc"><p>Main structure of a macaroon</p></div><div class="subs instances"><p id="control.i:Macaroon" class="caption collapser" onclick="toggleSection('i:Macaroon')">Instances</p><div id="section.i:Macaroon" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a></span></td><td class="doc"><p>Constant-time Eq instance</p></td></tr><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Text-Show.html#t:Show">Show</a> <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a></span></td><td class="doc"><p>show instance conforming to the <code>inspect</code> &quot;specification&quot;</p></td></tr><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/deepseq-1.4.1.1/Control-DeepSeq.html#t:NFData">NFData</a> <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a></span></td><td class="doc"><p>NFData instance for use in the benchmark</p></td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Caveat" class="def">Caveat</a></p><div class="doc"><p>Caveat structure</p></div><div class="subs instances"><p id="control.i:Caveat" class="caption collapser" onclick="toggleSection('i:Caveat')">Instances</p><div id="section.i:Caveat" class="show"><table><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Macaroon.html#t:Caveat">Caveat</a></span></td><td class="doc"><p>Constant-time Eq instance</p></td></tr><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Text-Show.html#t:Show">Show</a> <a href="Crypto-Macaroon.html#t:Caveat">Caveat</a></span></td><td class="doc"><p>show instance conforming to the <code>inspect</code> &quot;specification&quot;</p></td></tr><tr><td class="src clearfix"><span class="inst-left"><a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/deepseq-1.4.1.1/Control-DeepSeq.html#t:NFData">NFData</a> <a href="Crypto-Macaroon.html#t:Caveat">Caveat</a></span></td><td class="doc"><p>NFData instance for use in the benchmark</p></td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Secret" class="def">Secret</a> = <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a></p><div class="doc"><p>Type alias for Macaroons secret keys</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Key" class="def">Key</a> = <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a></p><div class="doc"><p>Type alias for Macaroons and Caveat and identifiers</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Location" class="def">Location</a> = <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a></p><div class="doc"><p>Type alias for Macaroons and Caveat locations</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Sig" class="def">Sig</a> = <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/bytestring-0.10.6.0/Data-ByteString.html#t:ByteString">ByteString</a></p><div class="doc"><p>Type alias for Macaroons signatures</p></div></div><h1 id="g:2">Accessing functions</h1><h2 id="g:3">Macaroons</h2><div class="top"><p class="src"><a name="v:location" class="def">location</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="Crypto-Macaroon.html#t:Location">Location</a></p><div class="doc"><p>Target location</p></div></div><div class="top"><p class="src"><a name="v:identifier" class="def">identifier</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="Crypto-Macaroon.html#t:Key">Key</a></p><div class="doc"><p>Macaroon Identifier</p></div></div><div class="top"><p class="src"><a name="v:caveats" class="def">caveats</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; [<a href="Crypto-Macaroon.html#t:Caveat">Caveat</a>]</p><div class="doc"><p>List of caveats</p></div></div><div class="top"><p class="src"><a name="v:signature" class="def">signature</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="Crypto-Macaroon.html#t:Sig">Sig</a></p><div class="doc"><p>Macaroon HMAC signature</p></div></div><h2 id="g:4">Caveats</h2><div class="top"><p class="src"><a name="v:cl" class="def">cl</a> :: <a href="Crypto-Macaroon.html#t:Caveat">Caveat</a> -&gt; <a href="Crypto-Macaroon.html#t:Location">Location</a></p><div class="doc"><p>Caveat target location</p></div></div><div class="top"><p class="src"><a name="v:cid" class="def">cid</a> :: <a href="Crypto-Macaroon.html#t:Caveat">Caveat</a> -&gt; <a href="Crypto-Macaroon.html#t:Key">Key</a></p><div class="doc"><p>Caveat identifier</p></div></div><div class="top"><p class="src"><a name="v:vid" class="def">vid</a> :: <a href="Crypto-Macaroon.html#t:Caveat">Caveat</a> -&gt; <a href="Crypto-Macaroon.html#t:Key">Key</a></p><div class="doc"><p>Caveat verification key identifier</p></div></div><h1 id="g:5">Create Macaroons</h1><div class="top"><p class="src"><a name="v:create" class="def">create</a> :: <a href="Crypto-Macaroon.html#t:Secret">Secret</a> -&gt; <a href="Crypto-Macaroon.html#t:Key">Key</a> -&gt; <a href="Crypto-Macaroon.html#t:Location">Location</a> -&gt; <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a></p><div class="doc"><p>Create a Macaroon from its key, identifier and location</p></div></div><div class="top"><p class="src"><a name="v:inspect" class="def">inspect</a> :: <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="file:///opt/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0/Data-String.html#t:String">String</a></p><div class="doc"><p>Inspect a macaroon's contents. For debugging purposes.</p></div></div><div class="top"><p class="src"><a name="v:addFirstPartyCaveat" class="def">addFirstPartyCaveat</a> :: <a href="Crypto-Macaroon.html#t:Key">Key</a> -&gt; <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a> -&gt; <a href="Crypto-Macaroon.html#t:Macaroon">Macaroon</a></p><div class="doc"><p>Add a first party Caveat to a Macaroon, with its identifier</p></div></div><h1 id="g:6">Serialize</h1><div class="top"><p class="src">module <a href="Crypto-Macaroon-Serializer-Base64.html">Crypto.Macaroon.Serializer.Base64</a></p></div><h1 id="g:7">Verify</h1><div class="top"><p class="src">module <a href="Crypto-Macaroon-Verifier.html">Crypto.Macaroon.Verifier</a></p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.1</p></div></body></html> \ No newline at end of file
diff --git a/benchmark.html b/benchmark.html
new file mode 100644
index 0000000..bb218eb
--- /dev/null
+++ b/benchmark.html
@@ -0,0 +1,610 @@
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5 <title>criterion report</title>
6 <script language="javascript" type="text/javascript">
7 /*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
8!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
9},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
10},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
11
12 </script>
13 <script language="javascript" type="text/javascript">
14 /* Javascript plotting library for jQuery, version 0.8.3.
15
16Copyright (c) 2007-2014 IOLA and Ole Laursen.
17Licensed under the MIT license.
18
19*/
20(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function($){var hasOwnProperty=Object.prototype.hasOwnProperty;if(!$.fn.detach){$.fn.detach=function(){return this.each(function(){if(this.parentNode){this.parentNode.removeChild(this)}})}}function Canvas(cls,container){var element=container.children("."+cls)[0];if(element==null){element=document.createElement("canvas");element.className=cls;$(element).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(container);if(!element.getContext){if(window.G_vmlCanvasManager){element=window.G_vmlCanvasManager.initElement(element)}else{throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.")}}}this.element=element;var context=this.context=element.getContext("2d");var devicePixelRatio=window.devicePixelRatio||1,backingStoreRatio=context.webkitBackingStorePixelRatio||context.mozBackingStorePixelRatio||context.msBackingStorePixelRatio||context.oBackingStorePixelRatio||context.backingStorePixelRatio||1;this.pixelRatio=devicePixelRatio/backingStoreRatio;this.resize(container.width(),container.height());this.textContainer=null;this.text={};this._textCache={}}Canvas.prototype.resize=function(width,height){if(width<=0||height<=0){throw new Error("Invalid dimensions for plot, width = "+width+", height = "+height)}var element=this.element,context=this.context,pixelRatio=this.pixelRatio;if(this.width!=width){element.width=width*pixelRatio;element.style.width=width+"px";this.width=width}if(this.height!=height){element.height=height*pixelRatio;element.style.height=height+"px";this.height=height}context.restore();context.save();context.scale(pixelRatio,pixelRatio)};Canvas.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)};Canvas.prototype.render=function(){var cache=this._textCache;for(var layerKey in cache){if(hasOwnProperty.call(cache,layerKey)){var layer=this.getTextLayer(layerKey),layerCache=cache[layerKey];layer.hide();for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var positions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){if(position.active){if(!position.rendered){layer.append(position.element);position.rendered=true}}else{positions.splice(i--,1);if(position.rendered){position.element.detach()}}}if(positions.length==0){delete styleCache[key]}}}}}layer.show()}}};Canvas.prototype.getTextLayer=function(classes){var layer=this.text[classes];if(layer==null){if(this.textContainer==null){this.textContainer=$("<div class='flot-text'></div>").css({position:"absolute",top:0,left:0,bottom:0,right:0,"font-size":"smaller",color:"#545454"}).insertAfter(this.element)}layer=this.text[classes]=$("<div></div>").addClass(classes).css({position:"absolute",top:0,left:0,bottom:0,right:0}).appendTo(this.textContainer)}return layer};Canvas.prototype.getTextInfo=function(layer,text,font,angle,width){var textStyle,layerCache,styleCache,info;text=""+text;if(typeof font==="object"){textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px/"+font.lineHeight+"px "+font.family}else{textStyle=font}layerCache=this._textCache[layer];if(layerCache==null){layerCache=this._textCache[layer]={}}styleCache=layerCache[textStyle];if(styleCache==null){styleCache=layerCache[textStyle]={}}info=styleCache[text];if(info==null){var element=$("<div></div>").html(text).css({position:"absolute","max-width":width,top:-9999}).appendTo(this.getTextLayer(layer));if(typeof font==="object"){element.css({font:textStyle,color:font.color})}else if(typeof font==="string"){element.addClass(font)}info=styleCache[text]={width:element.outerWidth(true),height:element.outerHeight(true),element:element,positions:[]};element.detach()}return info};Canvas.prototype.addText=function(layer,x,y,text,font,angle,width,halign,valign){var info=this.getTextInfo(layer,text,font,angle,width),positions=info.positions;if(halign=="center"){x-=info.width/2}else if(halign=="right"){x-=info.width}if(valign=="middle"){y-=info.height/2}else if(valign=="bottom"){y-=info.height}for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=true;return}}position={active:true,rendered:false,element:positions.length?info.element.clone():info.element,x:x,y:y};positions.push(position);position.element.css({top:Math.round(y),left:Math.round(x),"text-align":halign})};Canvas.prototype.removeText=function(layer,x,y,text,font,angle){if(text==null){var layerCache=this._textCache[layer];if(layerCache!=null){for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var positions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){position.active=false}}}}}}}else{var positions=this.getTextInfo(layer,text,font,angle).positions;for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=false}}}};function Plot(placeholder,data_,options_,plugins){var series=[],options={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:.85,sorted:null},xaxis:{show:null,position:"bottom",mode:null,font:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false,zero:true},shadowSize:3,highlightColor:null},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},interaction:{redrawOverlayInterval:1e3/60},hooks:{}},surface=null,overlay=null,eventHolder=null,ctx=null,octx=null,xaxes=[],yaxes=[],plotOffset={left:0,right:0,top:0,bottom:0},plotWidth=0,plotHeight=0,hooks={processOptions:[],processRawData:[],processDatapoints:[],processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},plot=this;plot.setData=setData;plot.setupGrid=setupGrid;plot.draw=draw;plot.getPlaceholder=function(){return placeholder};plot.getCanvas=function(){return surface.element};plot.getPlotOffset=function(){return plotOffset};plot.width=function(){return plotWidth};plot.height=function(){return plotHeight};plot.offset=function(){var o=eventHolder.offset();o.left+=plotOffset.left;o.top+=plotOffset.top;return o};plot.getData=function(){return series};plot.getAxes=function(){var res={},i;$.each(xaxes.concat(yaxes),function(_,axis){if(axis)res[axis.direction+(axis.n!=1?axis.n:"")+"axis"]=axis});return res};plot.getXAxes=function(){return xaxes};plot.getYAxes=function(){return yaxes};plot.c2p=canvasToAxisCoords;plot.p2c=axisToCanvasCoords;plot.getOptions=function(){return options};plot.highlight=highlight;plot.unhighlight=unhighlight;plot.triggerRedrawOverlay=triggerRedrawOverlay;plot.pointOffset=function(point){return{left:parseInt(xaxes[axisNumber(point,"x")-1].p2c(+point.x)+plotOffset.left,10),top:parseInt(yaxes[axisNumber(point,"y")-1].p2c(+point.y)+plotOffset.top,10)}};plot.shutdown=shutdown;plot.destroy=function(){shutdown();placeholder.removeData("plot").empty();series=[];options=null;surface=null;overlay=null;eventHolder=null;ctx=null;octx=null;xaxes=[];yaxes=[];hooks=null;highlights=[];plot=null};plot.resize=function(){var width=placeholder.width(),height=placeholder.height();surface.resize(width,height);overlay.resize(width,height)};plot.hooks=hooks;initPlugins(plot);parseOptions(options_);setupCanvases();setData(data_);setupGrid();draw();bindEvents();function executeHooks(hook,args){args=[plot].concat(args);for(var i=0;i<hook.length;++i)hook[i].apply(this,args)}function initPlugins(){var classes={Canvas:Canvas};for(var i=0;i<plugins.length;++i){var p=plugins[i];p.init(plot,classes);if(p.options)$.extend(true,options,p.options)}}function parseOptions(opts){$.extend(true,options,opts);if(opts&&opts.colors){options.colors=opts.colors}if(options.xaxis.color==null)options.xaxis.color=$.color.parse(options.grid.color).scale("a",.22).toString();if(options.yaxis.color==null)options.yaxis.color=$.color.parse(options.grid.color).scale("a",.22).toString();if(options.xaxis.tickColor==null)options.xaxis.tickColor=options.grid.tickColor||options.xaxis.color;if(options.yaxis.tickColor==null)options.yaxis.tickColor=options.grid.tickColor||options.yaxis.color;if(options.grid.borderColor==null)options.grid.borderColor=options.grid.color;if(options.grid.tickColor==null)options.grid.tickColor=$.color.parse(options.grid.color).scale("a",.22).toString();var i,axisOptions,axisCount,fontSize=placeholder.css("font-size"),fontSizeDefault=fontSize?+fontSize.replace("px",""):13,fontDefaults={style:placeholder.css("font-style"),size:Math.round(.8*fontSizeDefault),variant:placeholder.css("font-variant"),weight:placeholder.css("font-weight"),family:placeholder.css("font-family")};axisCount=options.xaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.xaxes[i];if(axisOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},options.xaxis,axisOptions);options.xaxes[i]=axisOptions;if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}if(!axisOptions.font.lineHeight){axisOptions.font.lineHeight=Math.round(axisOptions.font.size*1.15)}}}axisCount=options.yaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.yaxes[i];if(axisOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},options.yaxis,axisOptions);options.yaxes[i]=axisOptions;if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}if(!axisOptions.font.lineHeight){axisOptions.font.lineHeight=Math.round(axisOptions.font.size*1.15)}}}if(options.xaxis.noTicks&&options.xaxis.ticks==null)options.xaxis.ticks=options.xaxis.noTicks;if(options.yaxis.noTicks&&options.yaxis.ticks==null)options.yaxis.ticks=options.yaxis.noTicks;if(options.x2axis){options.xaxes[1]=$.extend(true,{},options.xaxis,options.x2axis);options.xaxes[1].position="top";if(options.x2axis.min==null){options.xaxes[1].min=null}if(options.x2axis.max==null){options.xaxes[1].max=null}}if(options.y2axis){options.yaxes[1]=$.extend(true,{},options.yaxis,options.y2axis);options.yaxes[1].position="right";if(options.y2axis.min==null){options.yaxes[1].min=null}if(options.y2axis.max==null){options.yaxes[1].max=null}}if(options.grid.coloredAreas)options.grid.markings=options.grid.coloredAreas;if(options.grid.coloredAreasColor)options.grid.markingsColor=options.grid.coloredAreasColor;if(options.lines)$.extend(true,options.series.lines,options.lines);if(options.points)$.extend(true,options.series.points,options.points);if(options.bars)$.extend(true,options.series.bars,options.bars);if(options.shadowSize!=null)options.series.shadowSize=options.shadowSize;if(options.highlightColor!=null)options.series.highlightColor=options.highlightColor;for(i=0;i<options.xaxes.length;++i)getOrCreateAxis(xaxes,i+1).options=options.xaxes[i];for(i=0;i<options.yaxes.length;++i)getOrCreateAxis(yaxes,i+1).options=options.yaxes[i];for(var n in hooks)if(options.hooks[n]&&options.hooks[n].length)hooks[n]=hooks[n].concat(options.hooks[n]);executeHooks(hooks.processOptions,[options])}function setData(d){series=parseData(d);fillInSeriesOptions();processData()}function parseData(d){var res=[];for(var i=0;i<d.length;++i){var s=$.extend(true,{},options.series);if(d[i].data!=null){s.data=d[i].data;delete d[i].data;$.extend(true,s,d[i]);d[i].data=s.data}else s.data=d[i];res.push(s)}return res}function axisNumber(obj,coord){var a=obj[coord+"axis"];if(typeof a=="object")a=a.n;if(typeof a!="number")a=1;return a}function allAxes(){return $.grep(xaxes.concat(yaxes),function(a){return a})}function canvasToAxisCoords(pos){var res={},i,axis;for(i=0;i<xaxes.length;++i){axis=xaxes[i];if(axis&&axis.used)res["x"+axis.n]=axis.c2p(pos.left)}for(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used)res["y"+axis.n]=axis.c2p(pos.top)}if(res.x1!==undefined)res.x=res.x1;if(res.y1!==undefined)res.y=res.y1;return res}function axisToCanvasCoords(pos){var res={},i,axis,key;for(i=0;i<xaxes.length;++i){axis=xaxes[i];if(axis&&axis.used){key="x"+axis.n;if(pos[key]==null&&axis.n==1)key="x";if(pos[key]!=null){res.left=axis.p2c(pos[key]);break}}}for(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used){key="y"+axis.n;if(pos[key]==null&&axis.n==1)key="y";if(pos[key]!=null){res.top=axis.p2c(pos[key]);break}}}return res}function getOrCreateAxis(axes,number){if(!axes[number-1])axes[number-1]={n:number,direction:axes==xaxes?"x":"y",options:$.extend(true,{},axes==xaxes?options.xaxis:options.yaxis)};return axes[number-1]}function fillInSeriesOptions(){var neededColors=series.length,maxIndex=-1,i;for(i=0;i<series.length;++i){var sc=series[i].color;if(sc!=null){neededColors--;if(typeof sc=="number"&&sc>maxIndex){maxIndex=sc}}}if(neededColors<=maxIndex){neededColors=maxIndex+1}var c,colors=[],colorPool=options.colors,colorPoolSize=colorPool.length,variation=0;for(i=0;i<neededColors;i++){c=$.color.parse(colorPool[i%colorPoolSize]||"#666");if(i%colorPoolSize==0&&i){if(variation>=0){if(variation<.5){variation=-variation-.2}else variation=0}else variation=-variation}colors[i]=c.scale("rgb",1+variation)}var colori=0,s;for(i=0;i<series.length;++i){s=series[i];if(s.color==null){s.color=colors[colori].toString();++colori}else if(typeof s.color=="number")s.color=colors[s.color].toString();if(s.lines.show==null){var v,show=true;for(v in s)if(s[v]&&s[v].show){show=false;break}if(show)s.lines.show=true}if(s.lines.zero==null){s.lines.zero=!!s.lines.fill}s.xaxis=getOrCreateAxis(xaxes,axisNumber(s,"x"));s.yaxis=getOrCreateAxis(yaxes,axisNumber(s,"y"))}}function processData(){var topSentry=Number.POSITIVE_INFINITY,bottomSentry=Number.NEGATIVE_INFINITY,fakeInfinity=Number.MAX_VALUE,i,j,k,m,length,s,points,ps,x,y,axis,val,f,p,data,format;function updateAxis(axis,min,max){if(min<axis.datamin&&min!=-fakeInfinity)axis.datamin=min;if(max>axis.datamax&&max!=fakeInfinity)axis.datamax=max}$.each(allAxes(),function(_,axis){axis.datamin=topSentry;axis.datamax=bottomSentry;axis.used=false});for(i=0;i<series.length;++i){s=series[i];s.datapoints={points:[]};executeHooks(hooks.processRawData,[s,s.data,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];data=s.data;format=s.datapoints.format;if(!format){format=[];format.push({x:true,number:true,required:true});format.push({y:true,number:true,required:true});if(s.bars.show||s.lines.show&&s.lines.fill){var autoscale=!!(s.bars.show&&s.bars.zero||s.lines.show&&s.lines.zero);format.push({y:true,number:true,required:false,defaultValue:0,autoscale:autoscale});if(s.bars.horizontal){delete format[format.length-1].y;format[format.length-1].x=true}}s.datapoints.format=format}if(s.datapoints.pointsize!=null)continue;s.datapoints.pointsize=format.length;ps=s.datapoints.pointsize;points=s.datapoints.points;var insertSteps=s.lines.show&&s.lines.steps;s.xaxis.used=s.yaxis.used=true;for(j=k=0;j<data.length;++j,k+=ps){p=data[j];var nullify=p==null;if(!nullify){for(m=0;m<ps;++m){val=p[m];f=format[m];if(f){if(f.number&&val!=null){val=+val;if(isNaN(val))val=null;else if(val==Infinity)val=fakeInfinity;else if(val==-Infinity)val=-fakeInfinity}if(val==null){if(f.required)nullify=true;if(f.defaultValue!=null)val=f.defaultValue}}points[k+m]=val}}if(nullify){for(m=0;m<ps;++m){val=points[k+m];if(val!=null){f=format[m];if(f.autoscale!==false){if(f.x){updateAxis(s.xaxis,val,val)}if(f.y){updateAxis(s.yaxis,val,val)}}}points[k+m]=null}}else{if(insertSteps&&k>0&&points[k-ps]!=null&&points[k-ps]!=points[k]&&points[k-ps+1]!=points[k+1]){for(m=0;m<ps;++m)points[k+ps+m]=points[k+m];points[k+1]=points[k-ps+1];k+=ps}}}}for(i=0;i<series.length;++i){s=series[i];executeHooks(hooks.processDatapoints,[s,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];points=s.datapoints.points;ps=s.datapoints.pointsize;format=s.datapoints.format;var xmin=topSentry,ymin=topSentry,xmax=bottomSentry,ymax=bottomSentry;for(j=0;j<points.length;j+=ps){if(points[j]==null)continue;for(m=0;m<ps;++m){val=points[j+m];f=format[m];if(!f||f.autoscale===false||val==fakeInfinity||val==-fakeInfinity)continue;if(f.x){if(val<xmin)xmin=val;if(val>xmax)xmax=val}if(f.y){if(val<ymin)ymin=val;if(val>ymax)ymax=val}}}if(s.bars.show){var delta;switch(s.bars.align){case"left":delta=0;break;case"right":delta=-s.bars.barWidth;break;default:delta=-s.bars.barWidth/2}if(s.bars.horizontal){ymin+=delta;ymax+=delta+s.bars.barWidth}else{xmin+=delta;xmax+=delta+s.bars.barWidth}}updateAxis(s.xaxis,xmin,xmax);updateAxis(s.yaxis,ymin,ymax)}$.each(allAxes(),function(_,axis){if(axis.datamin==topSentry)axis.datamin=null;if(axis.datamax==bottomSentry)axis.datamax=null})}function setupCanvases(){placeholder.css("padding",0).children().filter(function(){return!$(this).hasClass("flot-overlay")&&!$(this).hasClass("flot-base")}).remove();if(placeholder.css("position")=="static")placeholder.css("position","relative");surface=new Canvas("flot-base",placeholder);overlay=new Canvas("flot-overlay",placeholder);ctx=surface.context;octx=overlay.context;eventHolder=$(overlay.element).unbind();var existing=placeholder.data("plot");if(existing){existing.shutdown();overlay.clear()}placeholder.data("plot",plot)}function bindEvents(){if(options.grid.hoverable){eventHolder.mousemove(onMouseMove);eventHolder.bind("mouseleave",onMouseLeave)}if(options.grid.clickable)eventHolder.click(onClick);executeHooks(hooks.bindEvents,[eventHolder])}function shutdown(){if(redrawTimeout)clearTimeout(redrawTimeout);eventHolder.unbind("mousemove",onMouseMove);eventHolder.unbind("mouseleave",onMouseLeave);eventHolder.unbind("click",onClick);executeHooks(hooks.shutdown,[eventHolder])}function setTransformationHelpers(axis){function identity(x){return x}var s,m,t=axis.options.transform||identity,it=axis.options.inverseTransform;if(axis.direction=="x"){s=axis.scale=plotWidth/Math.abs(t(axis.max)-t(axis.min));m=Math.min(t(axis.max),t(axis.min))}else{s=axis.scale=plotHeight/Math.abs(t(axis.max)-t(axis.min));s=-s;m=Math.max(t(axis.max),t(axis.min))}if(t==identity)axis.p2c=function(p){return(p-m)*s};else axis.p2c=function(p){return(t(p)-m)*s};if(!it)axis.c2p=function(c){return m+c/s};else axis.c2p=function(c){return it(m+c/s)}}function measureTickLabels(axis){var opts=axis.options,ticks=axis.ticks||[],labelWidth=opts.labelWidth||0,labelHeight=opts.labelHeight||0,maxWidth=labelWidth||(axis.direction=="x"?Math.floor(surface.width/(ticks.length||1)):null),legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=opts.font||"flot-tick-label tickLabel";for(var i=0;i<ticks.length;++i){var t=ticks[i];if(!t.label)continue;var info=surface.getTextInfo(layer,t.label,font,null,maxWidth);labelWidth=Math.max(labelWidth,info.width);labelHeight=Math.max(labelHeight,info.height)}axis.labelWidth=opts.labelWidth||labelWidth;axis.labelHeight=opts.labelHeight||labelHeight}function allocateAxisBoxFirstPhase(axis){var lw=axis.labelWidth,lh=axis.labelHeight,pos=axis.options.position,isXAxis=axis.direction==="x",tickLength=axis.options.tickLength,axisMargin=options.grid.axisMargin,padding=options.grid.labelMargin,innermost=true,outermost=true,first=true,found=false;$.each(isXAxis?xaxes:yaxes,function(i,a){if(a&&(a.show||a.reserveSpace)){if(a===axis){found=true}else if(a.options.position===pos){if(found){outermost=false}else{innermost=false}}if(!found){first=false}}});if(outermost){axisMargin=0}if(tickLength==null){tickLength=first?"full":5}if(!isNaN(+tickLength))padding+=+tickLength;if(isXAxis){lh+=padding;if(pos=="bottom"){plotOffset.bottom+=lh+axisMargin;axis.box={top:surface.height-plotOffset.bottom,height:lh}}else{axis.box={top:plotOffset.top+axisMargin,height:lh};plotOffset.top+=lh+axisMargin}}else{lw+=padding;if(pos=="left"){axis.box={left:plotOffset.left+axisMargin,width:lw};plotOffset.left+=lw+axisMargin}else{plotOffset.right+=lw+axisMargin;axis.box={left:surface.width-plotOffset.right,width:lw}}}axis.position=pos;axis.tickLength=tickLength;axis.box.padding=padding;axis.innermost=innermost}function allocateAxisBoxSecondPhase(axis){if(axis.direction=="x"){axis.box.left=plotOffset.left-axis.labelWidth/2;axis.box.width=surface.width-plotOffset.left-plotOffset.right+axis.labelWidth}else{axis.box.top=plotOffset.top-axis.labelHeight/2;axis.box.height=surface.height-plotOffset.bottom-plotOffset.top+axis.labelHeight}}function adjustLayoutForThingsStickingOut(){var minMargin=options.grid.minBorderMargin,axis,i;if(minMargin==null){minMargin=0;for(i=0;i<series.length;++i)minMargin=Math.max(minMargin,2*(series[i].points.radius+series[i].points.lineWidth/2))}var margins={left:minMargin,right:minMargin,top:minMargin,bottom:minMargin};$.each(allAxes(),function(_,axis){if(axis.reserveSpace&&axis.ticks&&axis.ticks.length){if(axis.direction==="x"){margins.left=Math.max(margins.left,axis.labelWidth/2);margins.right=Math.max(margins.right,axis.labelWidth/2)}else{margins.bottom=Math.max(margins.bottom,axis.labelHeight/2);margins.top=Math.max(margins.top,axis.labelHeight/2)}}});plotOffset.left=Math.ceil(Math.max(margins.left,plotOffset.left));plotOffset.right=Math.ceil(Math.max(margins.right,plotOffset.right));plotOffset.top=Math.ceil(Math.max(margins.top,plotOffset.top));plotOffset.bottom=Math.ceil(Math.max(margins.bottom,plotOffset.bottom))}function setupGrid(){var i,axes=allAxes(),showGrid=options.grid.show;for(var a in plotOffset){var margin=options.grid.margin||0;plotOffset[a]=typeof margin=="number"?margin:margin[a]||0}executeHooks(hooks.processOffset,[plotOffset]);for(var a in plotOffset){if(typeof options.grid.borderWidth=="object"){plotOffset[a]+=showGrid?options.grid.borderWidth[a]:0}else{plotOffset[a]+=showGrid?options.grid.borderWidth:0}}$.each(axes,function(_,axis){var axisOpts=axis.options;axis.show=axisOpts.show==null?axis.used:axisOpts.show;axis.reserveSpace=axisOpts.reserveSpace==null?axis.show:axisOpts.reserveSpace;setRange(axis)});if(showGrid){var allocatedAxes=$.grep(axes,function(axis){return axis.show||axis.reserveSpace});$.each(allocatedAxes,function(_,axis){setupTickGeneration(axis);setTicks(axis);snapRangeToTicks(axis,axis.ticks);measureTickLabels(axis)});for(i=allocatedAxes.length-1;i>=0;--i)allocateAxisBoxFirstPhase(allocatedAxes[i]);adjustLayoutForThingsStickingOut();$.each(allocatedAxes,function(_,axis){allocateAxisBoxSecondPhase(axis)})}plotWidth=surface.width-plotOffset.left-plotOffset.right;plotHeight=surface.height-plotOffset.bottom-plotOffset.top;$.each(axes,function(_,axis){setTransformationHelpers(axis)});if(showGrid){drawAxisLabels()}insertLegend()}function setRange(axis){var opts=axis.options,min=+(opts.min!=null?opts.min:axis.datamin),max=+(opts.max!=null?opts.max:axis.datamax),delta=max-min;if(delta==0){var widen=max==0?1:.01;if(opts.min==null)min-=widen;if(opts.max==null||opts.min!=null)max+=widen}else{var margin=opts.autoscaleMargin;if(margin!=null){if(opts.min==null){min-=delta*margin;if(min<0&&axis.datamin!=null&&axis.datamin>=0)min=0}if(opts.max==null){max+=delta*margin;if(max>0&&axis.datamax!=null&&axis.datamax<=0)max=0}}}axis.min=min;axis.max=max}function setupTickGeneration(axis){var opts=axis.options;var noTicks;if(typeof opts.ticks=="number"&&opts.ticks>0)noTicks=opts.ticks;else noTicks=.3*Math.sqrt(axis.direction=="x"?surface.width:surface.height);var delta=(axis.max-axis.min)/noTicks,dec=-Math.floor(Math.log(delta)/Math.LN10),maxDec=opts.tickDecimals;if(maxDec!=null&&dec>maxDec){dec=maxDec}var magn=Math.pow(10,-dec),norm=delta/magn,size;if(norm<1.5){size=1}else if(norm<3){size=2;if(norm>2.25&&(maxDec==null||dec+1<=maxDec)){size=2.5;++dec}}else if(norm<7.5){size=5}else{size=10}size*=magn;if(opts.minTickSize!=null&&size<opts.minTickSize){size=opts.minTickSize}axis.delta=delta;axis.tickDecimals=Math.max(0,maxDec!=null?maxDec:dec);axis.tickSize=opts.tickSize||size;if(opts.mode=="time"&&!axis.tickGenerator){throw new Error("Time mode requires the flot.time plugin.")}if(!axis.tickGenerator){axis.tickGenerator=function(axis){var ticks=[],start=floorInBase(axis.min,axis.tickSize),i=0,v=Number.NaN,prev;do{prev=v;v=start+i*axis.tickSize;ticks.push(v);++i}while(v<axis.max&&v!=prev);return ticks};axis.tickFormatter=function(value,axis){var factor=axis.tickDecimals?Math.pow(10,axis.tickDecimals):1;var formatted=""+Math.round(value*factor)/factor;if(axis.tickDecimals!=null){var decimal=formatted.indexOf(".");var precision=decimal==-1?0:formatted.length-decimal-1;if(precision<axis.tickDecimals){return(precision?formatted:formatted+".")+(""+factor).substr(1,axis.tickDecimals-precision)}}return formatted}}if($.isFunction(opts.tickFormatter))axis.tickFormatter=function(v,axis){return""+opts.tickFormatter(v,axis)};if(opts.alignTicksWithAxis!=null){var otherAxis=(axis.direction=="x"?xaxes:yaxes)[opts.alignTicksWithAxis-1];if(otherAxis&&otherAxis.used&&otherAxis!=axis){var niceTicks=axis.tickGenerator(axis);if(niceTicks.length>0){if(opts.min==null)axis.min=Math.min(axis.min,niceTicks[0]);if(opts.max==null&&niceTicks.length>1)axis.max=Math.max(axis.max,niceTicks[niceTicks.length-1])}axis.tickGenerator=function(axis){var ticks=[],v,i;for(i=0;i<otherAxis.ticks.length;++i){v=(otherAxis.ticks[i].v-otherAxis.min)/(otherAxis.max-otherAxis.min);v=axis.min+v*(axis.max-axis.min);ticks.push(v)}return ticks};if(!axis.mode&&opts.tickDecimals==null){var extraDec=Math.max(0,-Math.floor(Math.log(axis.delta)/Math.LN10)+1),ts=axis.tickGenerator(axis);if(!(ts.length>1&&/\..*0$/.test((ts[1]-ts[0]).toFixed(extraDec))))axis.tickDecimals=extraDec}}}}function setTicks(axis){var oticks=axis.options.ticks,ticks=[];if(oticks==null||typeof oticks=="number"&&oticks>0)ticks=axis.tickGenerator(axis);else if(oticks){if($.isFunction(oticks))ticks=oticks(axis);else ticks=oticks}var i,v;axis.ticks=[];for(i=0;i<ticks.length;++i){var label=null;var t=ticks[i];if(typeof t=="object"){v=+t[0];if(t.length>1)label=t[1]}else v=+t;if(label==null)label=axis.tickFormatter(v,axis);if(!isNaN(v))axis.ticks.push({v:v,label:label})}}function snapRangeToTicks(axis,ticks){if(axis.options.autoscaleMargin&&ticks.length>0){if(axis.options.min==null)axis.min=Math.min(axis.min,ticks[0].v);if(axis.options.max==null&&ticks.length>1)axis.max=Math.max(axis.max,ticks[ticks.length-1].v)}}function draw(){surface.clear();executeHooks(hooks.drawBackground,[ctx]);var grid=options.grid;if(grid.show&&grid.backgroundColor)drawBackground();if(grid.show&&!grid.aboveData){drawGrid()}for(var i=0;i<series.length;++i){executeHooks(hooks.drawSeries,[ctx,series[i]]);drawSeries(series[i])}executeHooks(hooks.draw,[ctx]);if(grid.show&&grid.aboveData){drawGrid()}surface.render();triggerRedrawOverlay()}function extractRange(ranges,coord){var axis,from,to,key,axes=allAxes();for(var i=0;i<axes.length;++i){axis=axes[i];if(axis.direction==coord){key=coord+axis.n+"axis";if(!ranges[key]&&axis.n==1)key=coord+"axis";if(ranges[key]){from=ranges[key].from;to=ranges[key].to;break}}}if(!ranges[key]){axis=coord=="x"?xaxes[0]:yaxes[0];from=ranges[coord+"1"];to=ranges[coord+"2"]}if(from!=null&&to!=null&&from>to){var tmp=from;from=to;to=tmp}return{from:from,to:to,axis:axis}}function drawBackground(){ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.fillStyle=getColorOrGradient(options.grid.backgroundColor,plotHeight,0,"rgba(255, 255, 255, 0)");ctx.fillRect(0,0,plotWidth,plotHeight);ctx.restore()}function drawGrid(){var i,axes,bw,bc;ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var markings=options.grid.markings;if(markings){if($.isFunction(markings)){axes=plot.getAxes();axes.xmin=axes.xaxis.min;axes.xmax=axes.xaxis.max;axes.ymin=axes.yaxis.min;axes.ymax=axes.yaxis.max;markings=markings(axes)}for(i=0;i<markings.length;++i){var m=markings[i],xrange=extractRange(m,"x"),yrange=extractRange(m,"y");if(xrange.from==null)xrange.from=xrange.axis.min;if(xrange.to==null)xrange.to=xrange.axis.max;
21if(yrange.from==null)yrange.from=yrange.axis.min;if(yrange.to==null)yrange.to=yrange.axis.max;if(xrange.to<xrange.axis.min||xrange.from>xrange.axis.max||yrange.to<yrange.axis.min||yrange.from>yrange.axis.max)continue;xrange.from=Math.max(xrange.from,xrange.axis.min);xrange.to=Math.min(xrange.to,xrange.axis.max);yrange.from=Math.max(yrange.from,yrange.axis.min);yrange.to=Math.min(yrange.to,yrange.axis.max);var xequal=xrange.from===xrange.to,yequal=yrange.from===yrange.to;if(xequal&&yequal){continue}xrange.from=Math.floor(xrange.axis.p2c(xrange.from));xrange.to=Math.floor(xrange.axis.p2c(xrange.to));yrange.from=Math.floor(yrange.axis.p2c(yrange.from));yrange.to=Math.floor(yrange.axis.p2c(yrange.to));if(xequal||yequal){var lineWidth=m.lineWidth||options.grid.markingsLineWidth,subPixel=lineWidth%2?.5:0;ctx.beginPath();ctx.strokeStyle=m.color||options.grid.markingsColor;ctx.lineWidth=lineWidth;if(xequal){ctx.moveTo(xrange.to+subPixel,yrange.from);ctx.lineTo(xrange.to+subPixel,yrange.to)}else{ctx.moveTo(xrange.from,yrange.to+subPixel);ctx.lineTo(xrange.to,yrange.to+subPixel)}ctx.stroke()}else{ctx.fillStyle=m.color||options.grid.markingsColor;ctx.fillRect(xrange.from,yrange.to,xrange.to-xrange.from,yrange.from-yrange.to)}}}axes=allAxes();bw=options.grid.borderWidth;for(var j=0;j<axes.length;++j){var axis=axes[j],box=axis.box,t=axis.tickLength,x,y,xoff,yoff;if(!axis.show||axis.ticks.length==0)continue;ctx.lineWidth=1;if(axis.direction=="x"){x=0;if(t=="full")y=axis.position=="top"?0:plotHeight;else y=box.top-plotOffset.top+(axis.position=="top"?box.height:0)}else{y=0;if(t=="full")x=axis.position=="left"?0:plotWidth;else x=box.left-plotOffset.left+(axis.position=="left"?box.width:0)}if(!axis.innermost){ctx.strokeStyle=axis.options.color;ctx.beginPath();xoff=yoff=0;if(axis.direction=="x")xoff=plotWidth+1;else yoff=plotHeight+1;if(ctx.lineWidth==1){if(axis.direction=="x"){y=Math.floor(y)+.5}else{x=Math.floor(x)+.5}}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff);ctx.stroke()}ctx.strokeStyle=axis.options.tickColor;ctx.beginPath();for(i=0;i<axis.ticks.length;++i){var v=axis.ticks[i].v;xoff=yoff=0;if(isNaN(v)||v<axis.min||v>axis.max||t=="full"&&(typeof bw=="object"&&bw[axis.position]>0||bw>0)&&(v==axis.min||v==axis.max))continue;if(axis.direction=="x"){x=axis.p2c(v);yoff=t=="full"?-plotHeight:t;if(axis.position=="top")yoff=-yoff}else{y=axis.p2c(v);xoff=t=="full"?-plotWidth:t;if(axis.position=="left")xoff=-xoff}if(ctx.lineWidth==1){if(axis.direction=="x")x=Math.floor(x)+.5;else y=Math.floor(y)+.5}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff)}ctx.stroke()}if(bw){bc=options.grid.borderColor;if(typeof bw=="object"||typeof bc=="object"){if(typeof bw!=="object"){bw={top:bw,right:bw,bottom:bw,left:bw}}if(typeof bc!=="object"){bc={top:bc,right:bc,bottom:bc,left:bc}}if(bw.top>0){ctx.strokeStyle=bc.top;ctx.lineWidth=bw.top;ctx.beginPath();ctx.moveTo(0-bw.left,0-bw.top/2);ctx.lineTo(plotWidth,0-bw.top/2);ctx.stroke()}if(bw.right>0){ctx.strokeStyle=bc.right;ctx.lineWidth=bw.right;ctx.beginPath();ctx.moveTo(plotWidth+bw.right/2,0-bw.top);ctx.lineTo(plotWidth+bw.right/2,plotHeight);ctx.stroke()}if(bw.bottom>0){ctx.strokeStyle=bc.bottom;ctx.lineWidth=bw.bottom;ctx.beginPath();ctx.moveTo(plotWidth+bw.right,plotHeight+bw.bottom/2);ctx.lineTo(0,plotHeight+bw.bottom/2);ctx.stroke()}if(bw.left>0){ctx.strokeStyle=bc.left;ctx.lineWidth=bw.left;ctx.beginPath();ctx.moveTo(0-bw.left/2,plotHeight+bw.bottom);ctx.lineTo(0-bw.left/2,0);ctx.stroke()}}else{ctx.lineWidth=bw;ctx.strokeStyle=options.grid.borderColor;ctx.strokeRect(-bw/2,-bw/2,plotWidth+bw,plotHeight+bw)}}ctx.restore()}function drawAxisLabels(){$.each(allAxes(),function(_,axis){var box=axis.box,legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=axis.options.font||"flot-tick-label tickLabel",tick,x,y,halign,valign;surface.removeText(layer);if(!axis.show||axis.ticks.length==0)return;for(var i=0;i<axis.ticks.length;++i){tick=axis.ticks[i];if(!tick.label||tick.v<axis.min||tick.v>axis.max)continue;if(axis.direction=="x"){halign="center";x=plotOffset.left+axis.p2c(tick.v);if(axis.position=="bottom"){y=box.top+box.padding}else{y=box.top+box.height-box.padding;valign="bottom"}}else{valign="middle";y=plotOffset.top+axis.p2c(tick.v);if(axis.position=="left"){x=box.left+box.width-box.padding;halign="right"}else{x=box.left+box.padding}}surface.addText(layer,x,y,tick.label,font,null,null,halign,valign)}})}function drawSeries(series){if(series.lines.show)drawSeriesLines(series);if(series.bars.show)drawSeriesBars(series);if(series.points.show)drawSeriesPoints(series)}function drawSeriesLines(series){function plotLine(datapoints,xoffset,yoffset,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,prevx=null,prevy=null;ctx.beginPath();for(var i=ps;i<points.length;i+=ps){var x1=points[i-ps],y1=points[i-ps+1],x2=points[i],y2=points[i+1];if(x1==null||x2==null)continue;if(y1<=y2&&y1<axisy.min){if(y2<axisy.min)continue;x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else if(y2<=y1&&y2<axisy.min){if(y1<axisy.min)continue;x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}if(y1>=y2&&y1>axisy.max){if(y2>axisy.max)continue;x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else if(y2>=y1&&y2>axisy.max){if(y1>axisy.max)continue;x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}if(x1<=x2&&x1<axisx.min){if(x2<axisx.min)continue;y1=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else if(x2<=x1&&x2<axisx.min){if(x1<axisx.min)continue;y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}if(x1>=x2&&x1>axisx.max){if(x2>axisx.max)continue;y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max}else if(x2>=x1&&x2>axisx.max){if(x1>axisx.max)continue;y2=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.max}if(x1!=prevx||y1!=prevy)ctx.moveTo(axisx.p2c(x1)+xoffset,axisy.p2c(y1)+yoffset);prevx=x2;prevy=y2;ctx.lineTo(axisx.p2c(x2)+xoffset,axisy.p2c(y2)+yoffset)}ctx.stroke()}function plotLineArea(datapoints,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,bottom=Math.min(Math.max(0,axisy.min),axisy.max),i=0,top,areaOpen=false,ypos=1,segmentStart=0,segmentEnd=0;while(true){if(ps>0&&i>points.length+ps)break;i+=ps;var x1=points[i-ps],y1=points[i-ps+ypos],x2=points[i],y2=points[i+ypos];if(areaOpen){if(ps>0&&x1!=null&&x2==null){segmentEnd=i;ps=-ps;ypos=2;continue}if(ps<0&&i==segmentStart+ps){ctx.fill();areaOpen=false;ps=-ps;ypos=1;i=segmentStart=segmentEnd+ps;continue}}if(x1==null||x2==null)continue;if(x1<=x2&&x1<axisx.min){if(x2<axisx.min)continue;y1=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else if(x2<=x1&&x2<axisx.min){if(x1<axisx.min)continue;y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}if(x1>=x2&&x1>axisx.max){if(x2>axisx.max)continue;y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max}else if(x2>=x1&&x2>axisx.max){if(x1>axisx.max)continue;y2=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.max}if(!areaOpen){ctx.beginPath();ctx.moveTo(axisx.p2c(x1),axisy.p2c(bottom));areaOpen=true}if(y1>=axisy.max&&y2>=axisy.max){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.max));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.max));continue}else if(y1<=axisy.min&&y2<=axisy.min){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.min));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.min));continue}var x1old=x1,x2old=x2;if(y1<=y2&&y1<axisy.min&&y2>=axisy.min){x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else if(y2<=y1&&y2<axisy.min&&y1>=axisy.min){x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}if(y1>=y2&&y1>axisy.max&&y2<=axisy.max){x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else if(y2>=y1&&y2>axisy.max&&y1<=axisy.max){x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}if(x1!=x1old){ctx.lineTo(axisx.p2c(x1old),axisy.p2c(y1))}ctx.lineTo(axisx.p2c(x1),axisy.p2c(y1));ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));if(x2!=x2old){ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));ctx.lineTo(axisx.p2c(x2old),axisy.p2c(y2))}}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineJoin="round";var lw=series.lines.lineWidth,sw=series.shadowSize;if(lw>0&&sw>0){ctx.lineWidth=sw;ctx.strokeStyle="rgba(0,0,0,0.1)";var angle=Math.PI/18;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/2),Math.cos(angle)*(lw/2+sw/2),series.xaxis,series.yaxis);ctx.lineWidth=sw/2;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/4),Math.cos(angle)*(lw/2+sw/4),series.xaxis,series.yaxis)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;var fillStyle=getFillStyle(series.lines,series.color,0,plotHeight);if(fillStyle){ctx.fillStyle=fillStyle;plotLineArea(series.datapoints,series.xaxis,series.yaxis)}if(lw>0)plotLine(series.datapoints,0,0,series.xaxis,series.yaxis);ctx.restore()}function drawSeriesPoints(series){function plotPoints(datapoints,radius,fillStyle,offset,shadow,axisx,axisy,symbol){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points.length;i+=ps){var x=points[i],y=points[i+1];if(x==null||x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max)continue;ctx.beginPath();x=axisx.p2c(x);y=axisy.p2c(y)+offset;if(symbol=="circle")ctx.arc(x,y,radius,0,shadow?Math.PI:Math.PI*2,false);else symbol(ctx,x,y,radius,shadow);ctx.closePath();if(fillStyle){ctx.fillStyle=fillStyle;ctx.fill()}ctx.stroke()}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var lw=series.points.lineWidth,sw=series.shadowSize,radius=series.points.radius,symbol=series.points.symbol;if(lw==0)lw=1e-4;if(lw>0&&sw>0){var w=sw/2;ctx.lineWidth=w;ctx.strokeStyle="rgba(0,0,0,0.1)";plotPoints(series.datapoints,radius,null,w+w/2,true,series.xaxis,series.yaxis,symbol);ctx.strokeStyle="rgba(0,0,0,0.2)";plotPoints(series.datapoints,radius,null,w/2,true,series.xaxis,series.yaxis,symbol)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;plotPoints(series.datapoints,radius,getFillStyle(series.points,series.color),0,false,series.xaxis,series.yaxis,symbol);ctx.restore()}function drawBar(x,y,b,barLeft,barRight,fillStyleCallback,axisx,axisy,c,horizontal,lineWidth){var left,right,bottom,top,drawLeft,drawRight,drawTop,drawBottom,tmp;if(horizontal){drawBottom=drawRight=drawTop=true;drawLeft=false;left=b;right=x;top=y+barLeft;bottom=y+barRight;if(right<left){tmp=right;right=left;left=tmp;drawLeft=true;drawRight=false}}else{drawLeft=drawRight=drawTop=true;drawBottom=false;left=x+barLeft;right=x+barRight;bottom=b;top=y;if(top<bottom){tmp=top;top=bottom;bottom=tmp;drawBottom=true;drawTop=false}}if(right<axisx.min||left>axisx.max||top<axisy.min||bottom>axisy.max)return;if(left<axisx.min){left=axisx.min;drawLeft=false}if(right>axisx.max){right=axisx.max;drawRight=false}if(bottom<axisy.min){bottom=axisy.min;drawBottom=false}if(top>axisy.max){top=axisy.max;drawTop=false}left=axisx.p2c(left);bottom=axisy.p2c(bottom);right=axisx.p2c(right);top=axisy.p2c(top);if(fillStyleCallback){c.fillStyle=fillStyleCallback(bottom,top);c.fillRect(left,top,right-left,bottom-top)}if(lineWidth>0&&(drawLeft||drawRight||drawTop||drawBottom)){c.beginPath();c.moveTo(left,bottom);if(drawLeft)c.lineTo(left,top);else c.moveTo(left,top);if(drawTop)c.lineTo(right,top);else c.moveTo(right,top);if(drawRight)c.lineTo(right,bottom);else c.moveTo(right,bottom);if(drawBottom)c.lineTo(left,bottom);else c.moveTo(left,bottom);c.stroke()}}function drawSeriesBars(series){function plotBars(datapoints,barLeft,barRight,fillStyleCallback,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points.length;i+=ps){if(points[i]==null)continue;drawBar(points[i],points[i+1],points[i+2],barLeft,barRight,fillStyleCallback,axisx,axisy,ctx,series.bars.horizontal,series.bars.lineWidth)}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineWidth=series.bars.lineWidth;ctx.strokeStyle=series.color;var barLeft;switch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:barLeft=-series.bars.barWidth/2}var fillStyleCallback=series.bars.fill?function(bottom,top){return getFillStyle(series.bars,series.color,bottom,top)}:null;plotBars(series.datapoints,barLeft,barLeft+series.bars.barWidth,fillStyleCallback,series.xaxis,series.yaxis);ctx.restore()}function getFillStyle(filloptions,seriesColor,bottom,top){var fill=filloptions.fill;if(!fill)return null;if(filloptions.fillColor)return getColorOrGradient(filloptions.fillColor,bottom,top,seriesColor);var c=$.color.parse(seriesColor);c.a=typeof fill=="number"?fill:.4;c.normalize();return c.toString()}function insertLegend(){if(options.legend.container!=null){$(options.legend.container).html("")}else{placeholder.find(".legend").remove()}if(!options.legend.show){return}var fragments=[],entries=[],rowStarted=false,lf=options.legend.labelFormatter,s,label;for(var i=0;i<series.length;++i){s=series[i];if(s.label){label=lf?lf(s.label,s):s.label;if(label){entries.push({label:label,color:s.color})}}}if(options.legend.sorted){if($.isFunction(options.legend.sorted)){entries.sort(options.legend.sorted)}else if(options.legend.sorted=="reverse"){entries.reverse()}else{var ascending=options.legend.sorted!="descending";entries.sort(function(a,b){return a.label==b.label?0:a.label<b.label!=ascending?1:-1})}}for(var i=0;i<entries.length;++i){var entry=entries[i];if(i%options.legend.noColumns==0){if(rowStarted)fragments.push("</tr>");fragments.push("<tr>");rowStarted=true}fragments.push('<td class="legendColorBox"><div style="border:1px solid '+options.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+entry.color+';overflow:hidden"></div></div></td>'+'<td class="legendLabel">'+entry.label+"</td>")}if(rowStarted)fragments.push("</tr>");if(fragments.length==0)return;var table='<table style="font-size:smaller;color:'+options.grid.color+'">'+fragments.join("")+"</table>";if(options.legend.container!=null)$(options.legend.container).html(table);else{var pos="",p=options.legend.position,m=options.legend.margin;if(m[0]==null)m=[m,m];if(p.charAt(0)=="n")pos+="top:"+(m[1]+plotOffset.top)+"px;";else if(p.charAt(0)=="s")pos+="bottom:"+(m[1]+plotOffset.bottom)+"px;";if(p.charAt(1)=="e")pos+="right:"+(m[0]+plotOffset.right)+"px;";else if(p.charAt(1)=="w")pos+="left:"+(m[0]+plotOffset.left)+"px;";var legend=$('<div class="legend">'+table.replace('style="','style="position:absolute;'+pos+";")+"</div>").appendTo(placeholder);if(options.legend.backgroundOpacity!=0){var c=options.legend.backgroundColor;if(c==null){c=options.grid.backgroundColor;if(c&&typeof c=="string")c=$.color.parse(c);else c=$.color.extract(legend,"background-color");c.a=1;c=c.toString()}var div=legend.children();$('<div style="position:absolute;width:'+div.width()+"px;height:"+div.height()+"px;"+pos+"background-color:"+c+';"> </div>').prependTo(legend).css("opacity",options.legend.backgroundOpacity)}}}var highlights=[],redrawTimeout=null;function findNearbyItem(mouseX,mouseY,seriesFilter){var maxDistance=options.grid.mouseActiveRadius,smallestDistance=maxDistance*maxDistance+1,item=null,foundPoint=false,i,j,ps;for(i=series.length-1;i>=0;--i){if(!seriesFilter(series[i]))continue;var s=series[i],axisx=s.xaxis,axisy=s.yaxis,points=s.datapoints.points,mx=axisx.c2p(mouseX),my=axisy.c2p(mouseY),maxx=maxDistance/axisx.scale,maxy=maxDistance/axisy.scale;ps=s.datapoints.pointsize;if(axisx.options.inverseTransform)maxx=Number.MAX_VALUE;if(axisy.options.inverseTransform)maxy=Number.MAX_VALUE;if(s.lines.show||s.points.show){for(j=0;j<points.length;j+=ps){var x=points[j],y=points[j+1];if(x==null)continue;if(x-mx>maxx||x-mx<-maxx||y-my>maxy||y-my<-maxy)continue;var dx=Math.abs(axisx.p2c(x)-mouseX),dy=Math.abs(axisy.p2c(y)-mouseY),dist=dx*dx+dy*dy;if(dist<smallestDistance){smallestDistance=dist;item=[i,j/ps]}}}if(s.bars.show&&!item){var barLeft,barRight;switch(s.bars.align){case"left":barLeft=0;break;case"right":barLeft=-s.bars.barWidth;break;default:barLeft=-s.bars.barWidth/2}barRight=barLeft+s.bars.barWidth;for(j=0;j<points.length;j+=ps){var x=points[j],y=points[j+1],b=points[j+2];if(x==null)continue;if(series[i].bars.horizontal?mx<=Math.max(b,x)&&mx>=Math.min(b,x)&&my>=y+barLeft&&my<=y+barRight:mx>=x+barLeft&&mx<=x+barRight&&my>=Math.min(b,y)&&my<=Math.max(b,y))item=[i,j/ps]}}}if(item){i=item[0];j=item[1];ps=series[i].datapoints.pointsize;return{datapoint:series[i].datapoints.points.slice(j*ps,(j+1)*ps),dataIndex:j,series:series[i],seriesIndex:i}}return null}function onMouseMove(e){if(options.grid.hoverable)triggerClickHoverEvent("plothover",e,function(s){return s["hoverable"]!=false})}function onMouseLeave(e){if(options.grid.hoverable)triggerClickHoverEvent("plothover",e,function(s){return false})}function onClick(e){triggerClickHoverEvent("plotclick",e,function(s){return s["clickable"]!=false})}function triggerClickHoverEvent(eventname,event,seriesFilter){var offset=eventHolder.offset(),canvasX=event.pageX-offset.left-plotOffset.left,canvasY=event.pageY-offset.top-plotOffset.top,pos=canvasToAxisCoords({left:canvasX,top:canvasY});pos.pageX=event.pageX;pos.pageY=event.pageY;var item=findNearbyItem(canvasX,canvasY,seriesFilter);if(item){item.pageX=parseInt(item.series.xaxis.p2c(item.datapoint[0])+offset.left+plotOffset.left,10);item.pageY=parseInt(item.series.yaxis.p2c(item.datapoint[1])+offset.top+plotOffset.top,10)}if(options.grid.autoHighlight){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.auto==eventname&&!(item&&h.series==item.series&&h.point[0]==item.datapoint[0]&&h.point[1]==item.datapoint[1]))unhighlight(h.series,h.point)}if(item)highlight(item.series,item.datapoint,eventname)}placeholder.trigger(eventname,[pos,item])}function triggerRedrawOverlay(){var t=options.interaction.redrawOverlayInterval;if(t==-1){drawOverlay();return}if(!redrawTimeout)redrawTimeout=setTimeout(drawOverlay,t)}function drawOverlay(){redrawTimeout=null;octx.save();overlay.clear();octx.translate(plotOffset.left,plotOffset.top);var i,hi;for(i=0;i<highlights.length;++i){hi=highlights[i];if(hi.series.bars.show)drawBarHighlight(hi.series,hi.point);else drawPointHighlight(hi.series,hi.point)}octx.restore();executeHooks(hooks.drawOverlay,[octx])}function highlight(s,point,auto){if(typeof s=="number")s=series[s];if(typeof point=="number"){var ps=s.datapoints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=indexOfHighlight(s,point);if(i==-1){highlights.push({series:s,point:point,auto:auto});triggerRedrawOverlay()}else if(!auto)highlights[i].auto=false}function unhighlight(s,point){if(s==null&&point==null){highlights=[];triggerRedrawOverlay();return}if(typeof s=="number")s=series[s];if(typeof point=="number"){var ps=s.datapoints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=indexOfHighlight(s,point);if(i!=-1){highlights.splice(i,1);triggerRedrawOverlay()}}function indexOfHighlight(s,p){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.series==s&&h.point[0]==p[0]&&h.point[1]==p[1])return i}return-1}function drawPointHighlight(series,point){var x=point[0],y=point[1],axisx=series.xaxis,axisy=series.yaxis,highlightColor=typeof series.highlightColor==="string"?series.highlightColor:$.color.parse(series.color).scale("a",.5).toString();if(x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max)return;var pointRadius=series.points.radius+series.points.lineWidth/2;octx.lineWidth=pointRadius;octx.strokeStyle=highlightColor;var radius=1.5*pointRadius;x=axisx.p2c(x);y=axisy.p2c(y);octx.beginPath();if(series.points.symbol=="circle")octx.arc(x,y,radius,0,2*Math.PI,false);else series.points.symbol(octx,x,y,radius,false);octx.closePath();octx.stroke()}function drawBarHighlight(series,point){var highlightColor=typeof series.highlightColor==="string"?series.highlightColor:$.color.parse(series.color).scale("a",.5).toString(),fillStyle=highlightColor,barLeft;switch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:barLeft=-series.bars.barWidth/2}octx.lineWidth=series.bars.lineWidth;octx.strokeStyle=highlightColor;drawBar(point[0],point[1],point[2]||0,barLeft,barLeft+series.bars.barWidth,function(){return fillStyle},series.xaxis,series.yaxis,octx,series.bars.horizontal,series.bars.lineWidth)}function getColorOrGradient(spec,bottom,top,defaultColor){if(typeof spec=="string")return spec;else{var gradient=ctx.createLinearGradient(0,top,0,bottom);for(var i=0,l=spec.colors.length;i<l;++i){var c=spec.colors[i];if(typeof c!="string"){var co=$.color.parse(defaultColor);if(c.brightness!=null)co=co.scale("rgb",c.brightness);if(c.opacity!=null)co.a*=c.opacity;c=co.toString()}gradient.addColorStop(i/(l-1),c)}return gradient}}}$.plot=function(placeholder,data,options){var plot=new Plot($(placeholder),data,options,$.plot.plugins);return plot};$.plot.version="0.8.3";$.plot.plugins=[];$.fn.plot=function(data,options){return this.each(function(){$.plot(this,data,options)})};function floorInBase(n,base){return base*Math.floor(n/base)}})(jQuery);
22 </script>
23 <script language="javascript" type="text/javascript">
24 (function ($) {
25 $.zip = function(a,b) {
26 var x = Math.min(a.length,b.length);
27 var c = new Array(x);
28 for (var i = 0; i < x; i++)
29 c[i] = [a[i],b[i]];
30 return c;
31 };
32
33 $.mean = function(ary) {
34 var m = 0, i = 0;
35
36 while (i < ary.length) {
37 var j = i++;
38 m += (ary[j] - m) / i;
39 }
40
41 return m;
42 };
43
44 $.timeUnits = function(secs) {
45 if (secs < 0) return $.timeUnits(-secs);
46 else if (secs >= 1e9) return [1e-9, "Gs"];
47 else if (secs >= 1e6) return [1e-6, "Ms"];
48 else if (secs >= 1) return [1, "s"];
49 else if (secs >= 1e-3) return [1e3, "ms"];
50 else if (secs >= 1e-6) return [1e6, "\u03bcs"];
51 else if (secs >= 1e-9) return [1e9, "ns"];
52 else if (secs >= 1e-12) return [1e12, "ps"];
53 return [1, "s"];
54 };
55
56 $.scaleTimes = function(ary) {
57 var s = $.timeUnits($.mean(ary));
58 return [$.scaleBy(s[0], ary), s[0]];
59 };
60
61 $.prepareTime = function(secs) {
62 var units = $.timeUnits(secs);
63 var scaled = secs * units[0];
64 var s = scaled.toPrecision(3);
65 var t = scaled.toString();
66 return [t.length < s.length ? t : s, units[1]];
67 };
68
69 $.scaleBy = function(x, ary) {
70 var nary = new Array(ary.length);
71 for (var i = 0; i < ary.length; i++)
72 nary[i] = ary[i] * x;
73 return nary;
74 };
75
76 $.renderTime = function(secs) {
77 var x = $.prepareTime(secs);
78 return x[0] + ' ' + x[1];
79 };
80
81 $.unitFormatter = function(scale) {
82 var labelname;
83 return function(secs,axis) {
84 var x = $.prepareTime(secs / scale);
85 if (labelname === x[1])
86 return x[0];
87 else {
88 labelname = x[1];
89 return x[0] + ' ' + x[1];
90 }
91 };
92 };
93
94 $.addTooltip = function(name, renderText) {
95 function showTooltip(x, y, contents) {
96 $('<div id="tooltip">' + contents + '</div>').css( {
97 position: 'absolute',
98 display: 'none',
99 top: y + 5,
100 left: x + 5,
101 border: '1px solid #fdd',
102 padding: '2px',
103 'background-color': '#fee',
104 opacity: 0.80
105 }).appendTo("body").fadeIn(200);
106 };
107 var pp = null;
108 $(name).bind("plothover", function (event, pos, item) {
109 $("#x").text(pos.x.toFixed(2));
110 $("#y").text(pos.y.toFixed(2));
111
112 if (item) {
113 if (pp != item.dataIndex) {
114 pp = item.dataIndex;
115
116 $("#tooltip").remove();
117 var x = item.datapoint[0],
118 y = item.datapoint[1];
119
120 showTooltip(item.pageX, item.pageY, renderText(x,y));
121 }
122 }
123 else {
124 $("#tooltip").remove();
125 pp = null;
126 }
127 });
128 };
129})(jQuery);
130
131 </script>
132 <style type="text/css">
133html, body {
134 height: 100%;
135 margin: 0;
136}
137
138#wrap {
139 min-height: 100%;
140}
141
142#main {
143 overflow: auto;
144 padding-bottom: 180px; /* must be same height as the footer */
145}
146
147#footer {
148 position: relative;
149 margin-top: -180px; /* negative value of footer height */
150 height: 180px;
151 clear: both;
152 background: #888;
153 margin: 40px 0 0;
154 color: white;
155 font-size: larger;
156 font-weight: 300;
157}
158
159body:before {
160 /* Opera fix */
161 content: "";
162 height: 100%;
163 float: left;
164 width: 0;
165 margin-top: -32767px;
166}
167
168body {
169 font: 14px Helvetica Neue;
170 text-rendering: optimizeLegibility;
171 margin-top: 1em;
172}
173
174a:link {
175 color: steelblue;
176 text-decoration: none;
177}
178
179a:visited {
180 color: #4a743b;
181 text-decoration: none;
182}
183
184#footer a {
185 color: white;
186 text-decoration: underline;
187}
188
189.hover {
190 color: steelblue;
191 text-decoration: none;
192}
193
194.body {
195 width: 960px;
196 margin: auto;
197}
198
199.footfirst {
200 position: relative;
201 top: 30px;
202}
203
204th {
205 font-weight: 500;
206 opacity: 0.8;
207}
208
209th.cibound {
210 opacity: 0.4;
211}
212
213.confinterval {
214 opacity: 0.5;
215}
216
217h1 {
218 font-size: 36px;
219 font-weight: 300;
220 margin-bottom: .3em;
221}
222
223h2 {
224 font-size: 30px;
225 font-weight: 300;
226 margin-bottom: .3em;
227}
228
229.meanlegend {
230 color: #404040;
231 background-color: #ffffff;
232 opacity: 0.6;
233 font-size: smaller;
234}
235
236 </style>
237 <!--[if !IE 7]>
238 <style type="text/css">
239 #wrap {display:table;height:100%}
240 </style>
241 <![endif]-->
242 </head>
243 <body>
244 <div id="wrap">
245 <div id="main" class="body">
246 <h1>criterion performance measurements</h1>
247
248<h2>overview</h2>
249
250<p><a href="#grokularation">want to understand this report?</a></p>
251
252<div id="overview" class="ovchart" style="width:900px;height:100px;"></div>
253
254<h2><a name="b0">Crypto.Macaroon/create</a></h2>
255 <table width="100%">
256 <tbody>
257 <tr>
258 <td><div id="kde0" class="kdechart"
259 style="width:450px;height:278px;"></div></td>
260 <td><div id="time0" class="timechart"
261 style="width:450px;height:278px;"></div></td>
262<!--
263 <td><div id="cycle0" class="cyclechart"
264 style="width:300px;height:278px;"></div></td>
265-->
266 </tr>
267 </tbody>
268 </table>
269
270 <table>
271 <thead class="analysis">
272 <th></th>
273 <th class="cibound"
274 title="0.95 confidence level">lower bound</th>
275 <th>estimate</th>
276 <th class="cibound"
277 title="0.95 confidence level">upper bound</th>
278 </thead>
279 <tbody>
280 <tr>
281 <td>OLS regression</td>
282 <td><span class="confinterval olstimelb0">xxx</span></td>
283 <td><span class="olstimept0">xxx</span></td>
284 <td><span class="confinterval olstimeub0">xxx</span></td>
285 </tr>
286 <tr>
287 <td>R&#xb2; goodness-of-fit</td>
288 <td><span class="confinterval olsr2lb0">xxx</span></td>
289 <td><span class="olsr2pt0">xxx</span></td>
290 <td><span class="confinterval olsr2ub0">xxx</span></td>
291 </tr>
292 <tr>
293 <td>Mean execution time</td>
294 <td><span class="confinterval citime">1.1654644382453032e-5</span></td>
295 <td><span class="time">1.2600205848891467e-5</span></td>
296 <td><span class="confinterval citime">1.3603312414896145e-5</span></td>
297 </tr>
298 <tr>
299 <td>Standard deviation</td>
300 <td><span class="confinterval citime">3.003924313903839e-6</span></td>
301 <td><span class="time">3.5028611160687134e-6</span></td>
302 <td><span class="confinterval citime">4.226311433630701e-6</span></td>
303 </tr>
304 </tbody>
305 </table>
306
307 <span class="outliers">
308 <p>Outlying measurements have severe
309 (<span class="percent">0.979908058912253</span>%)
310 effect on estimated standard deviation.</p>
311 </span>
312<h2><a name="b1">Crypto.Macaroon/mint</a></h2>
313 <table width="100%">
314 <tbody>
315 <tr>
316 <td><div id="kde1" class="kdechart"
317 style="width:450px;height:278px;"></div></td>
318 <td><div id="time1" class="timechart"
319 style="width:450px;height:278px;"></div></td>
320<!--
321 <td><div id="cycle1" class="cyclechart"
322 style="width:300px;height:278px;"></div></td>
323-->
324 </tr>
325 </tbody>
326 </table>
327
328 <table>
329 <thead class="analysis">
330 <th></th>
331 <th class="cibound"
332 title="0.95 confidence level">lower bound</th>
333 <th>estimate</th>
334 <th class="cibound"
335 title="0.95 confidence level">upper bound</th>
336 </thead>
337 <tbody>
338 <tr>
339 <td>OLS regression</td>
340 <td><span class="confinterval olstimelb1">xxx</span></td>
341 <td><span class="olstimept1">xxx</span></td>
342 <td><span class="confinterval olstimeub1">xxx</span></td>
343 </tr>
344 <tr>
345 <td>R&#xb2; goodness-of-fit</td>
346 <td><span class="confinterval olsr2lb1">xxx</span></td>
347 <td><span class="olsr2pt1">xxx</span></td>
348 <td><span class="confinterval olsr2ub1">xxx</span></td>
349 </tr>
350 <tr>
351 <td>Mean execution time</td>
352 <td><span class="confinterval citime">1.926374087710549e-5</span></td>
353 <td><span class="time">2.0415738325732072e-5</span></td>
354 <td><span class="confinterval citime">2.1426448032743204e-5</span></td>
355 </tr>
356 <tr>
357 <td>Standard deviation</td>
358 <td><span class="confinterval citime">2.731769151469443e-6</span></td>
359 <td><span class="time">3.4477868085704054e-6</span></td>
360 <td><span class="confinterval citime">4.392710894614489e-6</span></td>
361 </tr>
362 </tbody>
363 </table>
364
365 <span class="outliers">
366 <p>Outlying measurements have severe
367 (<span class="percent">0.943016050183587</span>%)
368 effect on estimated standard deviation.</p>
369 </span>
370
371 <h2><a name="grokularation">understanding this report</a></h2>
372
373 <p>In this report, each function benchmarked by criterion is assigned
374 a section of its own. The charts in each section are active; if
375 you hover your mouse over data points and annotations, you will see
376 more details.</p>
377
378 <ul>
379 <li>The chart on the left is a
380 <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel
381 density estimate</a> (also known as a KDE) of time
382 measurements. This graphs the probability of any given time
383 measurement occurring. A spike indicates that a measurement of a
384 particular time occurred; its height indicates how often that
385 measurement was repeated.</li>
386
387 <li>The chart on the right is the raw data from which the kernel
388 density estimate is built. The <i>x</i> axis indicates the
389 number of loop iterations, while the <i>y</i> axis shows measured
390 execution time for the given number of loop iterations. The
391 line behind the values is the linear regression prediction of
392 execution time for a given number of iterations. Ideally, all
393 measurements will be on (or very near) this line.</li>
394 </ul>
395
396 <p>Under the charts is a small table.
397 The first two rows are the results of a linear regression run
398 on the measurements displayed in the right-hand chart.</p>
399
400 <ul>
401 <li><i>OLS regression</i> indicates the
402 time estimated for a single loop iteration using an ordinary
403 least-squares regression model. This number is more accurate
404 than the <i>mean</i> estimate below it, as it more effectively
405 eliminates measurement overhead and other constant factors.</li>
406 <li><i>R&#xb2; goodness-of-fit</i> is a measure of how
407 accurately the linear regression model fits the observed
408 measurements. If the measurements are not too noisy, R&#xb2;
409 should lie between 0.99 and 1, indicating an excellent fit. If
410 the number is below 0.99, something is confounding the accuracy
411 of the linear model.</li>
412 <li><i>Mean execution time</i> and <i>standard deviation</i> are
413 statistics calculated from execution time
414 divided by number of iterations.</li>
415 </ul>
416
417 <p>We use a statistical technique called
418 the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a>
419 to provide confidence intervals on our estimates. The
420 bootstrap-derived upper and lower bounds on estimates let you see
421 how accurate we believe those estimates to be. (Hover the mouse
422 over the table headers to see the confidence levels.)</p>
423
424 <p>A noisy benchmarking environment can cause some or many
425 measurements to fall far from the mean. These outlying
426 measurements can have a significant inflationary effect on the
427 estimate of the standard deviation. We calculate and display an
428 estimate of the extent to which the standard deviation has been
429 inflated by outliers.</p>
430
431<script type="text/javascript">
432$(function () {
433 function mangulate(rpt) {
434 var measured = function(key) {
435 var idx = rpt.reportKeys.indexOf(key);
436 return rpt.reportMeasured.map(function(r) { return r[idx]; });
437 };
438 var number = rpt.reportNumber;
439 var name = rpt.reportName;
440 var mean = rpt.reportAnalysis.anMean.estPoint;
441 var iters = measured("iters");
442 var times = measured("time");
443 var kdetimes = rpt.reportKDEs[0].kdeValues;
444 var kdepdf = rpt.reportKDEs[0].kdePDF;
445
446 var meanSecs = mean;
447 var units = $.timeUnits(mean);
448 var rgrs = rpt.reportAnalysis.anRegress[0];
449 var scale = units[0];
450 var olsTime = rgrs.regCoeffs.iters;
451 $(".olstimept" + number).text(function() {
452 return $.renderTime(olsTime.estPoint);
453 });
454 $(".olstimelb" + number).text(function() {
455 return $.renderTime(olsTime.estLowerBound);
456 });
457 $(".olstimeub" + number).text(function() {
458 return $.renderTime(olsTime.estUpperBound);
459 });
460 $(".olsr2pt" + number).text(function() {
461 return rgrs.regRSquare.estPoint.toFixed(3);
462 });
463 $(".olsr2lb" + number).text(function() {
464 return rgrs.regRSquare.estLowerBound.toFixed(3);
465 });
466 $(".olsr2ub" + number).text(function() {
467 return rgrs.regRSquare.estUpperBound.toFixed(3);
468 });
469 mean *= scale;
470 kdetimes = $.scaleBy(scale, kdetimes);
471 var kq = $("#kde" + number);
472 var k = $.plot(kq,
473 [{ label: name + " time densities",
474 data: $.zip(kdetimes, kdepdf),
475 }],
476 { xaxis: { tickFormatter: $.unitFormatter(scale) },
477 yaxis: { ticks: false },
478 grid: { borderColor: "#777",
479 hoverable: true, markings: [ { color: '#6fd3fb',
480 lineWidth: 1.5, xaxis: { from: mean, to: mean } } ] },
481 });
482 var o = k.pointOffset({ x: mean, y: 0});
483 kq.append('<div class="meanlegend" title="' + $.renderTime(meanSecs) +
484 '" style="position:absolute;left:' + (o.left + 4) +
485 'px;bottom:139px;">mean</div>');
486 $.addTooltip("#kde" + number,
487 function(secs) { return $.renderTime(secs / scale); });
488 var timepairs = new Array(times.length);
489 var lastiter = iters[iters.length-1];
490 var olspairs = [[0,0], [lastiter, lastiter * scale * olsTime.estPoint]];
491 for (var i = 0; i < times.length; i++)
492 timepairs[i] = [iters[i],times[i]*scale];
493 iterFormatter = function() {
494 var denom = 0;
495 return function(iters) {
496 if (iters == 0)
497 return '';
498 if (denom > 0)
499 return (iters / denom).toFixed();
500 var power;
501 if (iters >= 1e9) {
502 denom = '1e9'; power = '&#x2079;';
503 }
504 if (iters >= 1e6) {
505 denom = '1e6'; power = '&#x2076;';
506 }
507 else if (iters >= 1e3) {
508 denom = '1e3'; power = '&#xb3;';
509 }
510 else denom = 1;
511 if (denom > 1) {
512 iters = (iters / denom).toFixed();
513 iters += '&times;10' + power + ' iters';
514 } else {
515 iters += ' iters';
516 }
517 return iters;
518 };
519 };
520 $.plot($("#time" + number),
521 [{ label: "regression", data: olspairs,
522 lines: { show: true } },
523 { label: name + " times", data: timepairs,
524 points: { show: true } }],
525 { grid: { borderColor: "#777", hoverable: true },
526 xaxis: { tickFormatter: iterFormatter() },
527 yaxis: { tickFormatter: $.unitFormatter(scale) } });
528 $.addTooltip("#time" + number,
529 function(iters,secs) {
530 return ($.renderTime(secs / scale) + ' / ' +
531 iters.toLocaleString() + ' iters');
532 });
533 if (0) {
534 var cyclepairs = new Array(cycles.length);
535 for (var i = 0; i < cycles.length; i++)
536 cyclepairs[i] = [cycles[i],i];
537 $.plot($("#cycle" + number),
538 [{ label: name + " cycles",
539 data: cyclepairs }],
540 { points: { show: true },
541 grid: { borderColor: "#777", hoverable: true },
542 xaxis: { tickFormatter:
543 function(cycles,axis) { return cycles + ' cycles'; }},
544 yaxis: { ticks: false },
545 });
546 $.addTooltip("#cycles" + number, function(x,y) { return x + ' cycles'; });
547 }
548 };
549 var reports = [{"reportAnalysis":{"anMean":{"estUpperBound":1.3603312414896145e-5,"estLowerBound":1.1654644382453032e-5,"estPoint":1.2600205848891467e-5,"estConfidenceLevel":0.95},"anRegress":[{"regRSquare":{"estUpperBound":0.9630860867180253,"estLowerBound":0.9145343291806819,"estPoint":0.939694199249037,"estConfidenceLevel":0.95},"regResponder":"time","regCoeffs":{"y":{"estUpperBound":1.060693235706013e-3,"estLowerBound":-1.9921004288233676e-3,"estPoint":-6.568568738966464e-4,"estConfidenceLevel":0.95},"iters":{"estUpperBound":1.3948436293543248e-5,"estLowerBound":1.1671226648265523e-5,"estPoint":1.2926417608983415e-5,"estConfidenceLevel":0.95}}}],"anStdDev":{"estUpperBound":4.226311433630701e-6,"estLowerBound":3.003924313903839e-6,"estPoint":3.5028611160687134e-6,"estConfidenceLevel":0.95},"anOutlierVar":{"ovFraction":0.979908058912253,"ovDesc":"severe","ovEffect":"Severe"},"anOverhead":2.32651976653174e-6},"reportKDEs":[{"kdeValues":[4.051664497053189e-6,4.182309290915803e-6,4.3129540847784164e-6,4.443598878641031e-6,4.574243672503644e-6,4.704888466366258e-6,4.835533260228872e-6,4.966178054091486e-6,5.096822847954099e-6,5.227467641816713e-6,5.358112435679326e-6,5.488757229541941e-6,5.619402023404554e-6,5.750046817267168e-6,5.880691611129782e-6,6.0113364049923955e-6,6.141981198855009e-6,6.2726259927176226e-6,6.403270786580236e-6,6.5339155804428504e-6,6.664560374305464e-6,6.7952051681680775e-6,6.925849962030692e-6,7.056494755893305e-6,7.187139549755919e-6,7.317784343618532e-6,7.448429137481146e-6,7.57907393134376e-6,7.709718725206375e-6,7.840363519068987e-6,7.971008312931602e-6,8.101653106794214e-6,8.232297900656829e-6,8.362942694519443e-6,8.493587488382056e-6,8.62423228224467e-6,8.754877076107283e-6,8.885521869969897e-6,9.016166663832511e-6,9.146811457695126e-6,9.277456251557738e-6,9.408101045420351e-6,9.538745839282966e-6,9.66939063314558e-6,9.800035427008194e-6,9.930680220870807e-6,1.0061325014733421e-5,1.0191969808596034e-5,1.0322614602458648e-5,1.0453259396321263e-5,1.0583904190183875e-5,1.071454898404649e-5,1.0845193777909102e-5,1.0975838571771717e-5,1.1106483365634331e-5,1.1237128159496945e-5,1.1367772953359558e-5,1.149841774722217e-5,1.1629062541084785e-5,1.17597073349474e-5,1.1890352128810014e-5,1.2020996922672627e-5,1.2151641716535241e-5,1.2282286510397854e-5,1.2412931304260468e-5,1.2543576098123082e-5,1.2674220891985695e-5,1.280486568584831e-5,1.2935510479710922e-5,1.3066155273573536e-5,1.319680006743615e-5,1.3327444861298763e-5,1.3458089655161378e-5,1.3588734449023992e-5,1.3719379242886605e-5,1.385002403674922e-5,1.3980668830611834e-5,1.4111313624474446e-5,1.424195841833706e-5,1.4372603212199673e-5,1.4503248006062288e-5,1.4633892799924902e-5,1.4764537593787515e-5,1.4895182387650129e-5,1.5025827181512742e-5,1.5156471975375356e-5,1.528711676923797e-5,1.5417761563100585e-5,1.5548406356963196e-5,1.5679051150825813e-5,1.5809695944688424e-5,1.594034073855104e-5,1.6070985532413653e-5,1.6201630326276264e-5,1.6332275120138882e-5,1.6462919914001493e-5,1.6593564707864107e-5,1.672420950172672e-5,1.6854854295589333e-5,1.698549908945195e-5,1.711614388331456e-5,1.7246788677177176e-5,1.737743347103979e-5,1.75080782649024e-5,1.763872305876502e-5,1.776936785262763e-5,1.7900012646490244e-5,1.803065744035286e-5,1.8161302234215473e-5,1.8291947028078087e-5,1.8422591821940698e-5,1.8553236615803313e-5,1.8683881409665927e-5,1.881452620352854e-5,1.8945170997391156e-5,1.9075815791253767e-5,1.920646058511638e-5,1.9337105378978995e-5,1.946775017284161e-5,1.9598394966704224e-5,1.972903976056684e-5,1.985968455442945e-5,1.9990329348292064e-5,2.0120974142154678e-5,2.0251618936017292e-5,2.0382263729879907e-5,2.0512908523742518e-5,2.0643553317605132e-5],"kdeType":"time","kdePDF":[17903.895587438794,18424.97907107043,19442.535843500198,20908.574269294008,22754.153959623607,24892.961292254702,27225.91142819349,29646.58565246039,32047.225696586134,34324.92128622994,36387.561433990784,38159.09161739727,39583.64104774873,40628.16191991716,41283.35136469022,41562.79298500762,41500.43735543405,41146.715050989835,40563.717413989434,39819.96939650922,38985.342715692546,38126.61253373444,37304.052695758204,36569.30769241065,35964.59531900429,35523.10811375041,35270.32074809734,35225.79870589237,35405.05866410772,35821.06131113743,36485.01951827872,37406.36312712757,38591.889681124274,40044.31475558048,41760.5812383593,43730.36417221614,45935.19803432446,48348.55378128816,50937.0182089516,53662.508391679716,56485.23002499904,59366.90445067003,62273.68386086253,65178.17365302894,68060.09281702018,70905.31481178661,73703.31100711242,76443.32095191049,79109.84665488843,81678.26221457342,84111.4067274716,86357.9661727745,88353.2493206294,90022.64653640847,91287.67138551158,92074.07986291798,92321.20315489154,91991.37527441044,91078.23123619695,89612.71767984297,87665.8928126616,85347.96627414468,82803.48933537568,80203.08443187996,77732.52937066216,75580.32273218987,73925.00871971327,72923.51363358909,72701.55253601831,73346.84006750787,74905.43973777883,77381.17670651125,80737.68363178316,84902.39886628796,89771.72223252832,95216.56259972428,101087.66603971025,107220.35571645897,113438.59398012978,119558.53833954484,125391.95623366174,130749.95250390844,135447.43141263752,139308.56746967928,142173.32304440375,143904.76930531862,144396.69319838105,143580.75967330023,141432.38851509965,137974.52502240613,133278.63741709632,127462.54234126324,120685.0044575668,113137.42543909639,105033.2759863839,96596.18195053069,88047.71592531403,79595.95176804456,71425.71549592176,63691.23526033113,56511.593397135075,49969.060143518116,44110.08668916083,38948.4930198194,34470.22960379099,30639.03249006958,27402.32471809215,24696.825812260482,22453.48903102549,20601.562198871674,19071.732631546034,17798.445848167994,16721.566544899746,15787.57450885001,14950.463953720351,14172.456479548975,13424.564422686493,12686.972184170523,11949.154268356337,11209.630133426706,10475.27002361681,9760.108146286831,9083.680039375186,8468.967266924517,7940.0923212990865,7519.949828094677,7227.980625430664,7078.290909799596]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":0,"reportName":"Crypto.Macaroon/create","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":46,"lowSevere":0},"reportMeasured":[[2.1454005036503077e-5,2.093799999999986e-5,57991,1,null,null,null,null,null,null,null],[2.8629001462832093e-5,2.8903000000000262e-5,80849,2,null,null,null,null,null,null,null],[4.0471000829711556e-5,4.082400000000007e-5,114046,3,null,null,null,null,null,null,null],[5.320100171957165e-5,5.377600000000017e-5,151200,4,null,null,null,null,null,null,null],[6.849299825262278e-5,6.894300000000013e-5,193282,5,null,null,null,null,null,null,null],[8.089499897323549e-5,8.13719999999997e-5,228077,6,null,null,null,null,null,null,null],[8.870899910107255e-5,8.936400000000063e-5,250594,7,null,null,null,null,null,null,null],[1.2613799481187016e-4,1.2671600000000068e-4,355147,8,null,null,null,null,null,null,null],[1.81914001586847e-4,1.822830000000001e-4,510999,9,null,null,null,null,null,null,null],[1.9121100194752216e-4,1.9164300000000002e-4,537020,10,null,null,null,null,null,null,null],[2.0844399114139378e-4,2.0884200000000075e-4,585200,11,null,null,null,null,null,null,null],[2.442210097797215e-4,2.444379999999996e-4,684716,12,null,null,null,null,null,null,null],[9.759998647496104e-5,9.780499999999942e-5,273860,13,null,null,null,null,null,null,null],[1.0391999967396259e-4,1.0405699999999941e-4,291377,14,null,null,null,null,null,null,null],[1.1508500028867275e-4,1.1551299999999938e-4,323787,15,null,null,null,null,null,null,null],[1.1779401393141598e-4,1.1800500000000089e-4,330435,16,null,null,null,null,null,null,null],[1.2529100058600307e-4,1.2555600000000063e-4,351573,17,null,null,null,null,null,null,null],[1.5148799866437912e-4,1.5194600000000003e-4,425600,18,null,null,null,null,null,null,null],[1.3943100930191576e-4,1.3967499999999883e-4,391114,19,null,null,null,null,null,null,null],[1.465909881517291e-4,1.5279900000000034e-4,428445,20,null,null,null,null,null,null,null],[1.781070022843778e-4,1.783879999999998e-4,499988,21,null,null,null,null,null,null,null],[2.4283099628519267e-4,2.1934600000000047e-4,682436,22,null,null,null,null,null,null,null],[1.695099927019328e-4,1.6971099999999947e-4,475228,23,null,null,null,null,null,null,null],[1.8331900355406106e-4,1.8355700000000086e-4,514025,25,null,null,null,null,null,null,null],[2.0941399270668626e-4,2.0984500000000017e-4,587654,26,null,null,null,null,null,null,null],[2.3212599626276642e-4,2.3275300000000047e-4,652355,27,null,null,null,null,null,null,null],[2.0403099188115448e-4,2.0429999999999927e-4,572131,28,null,null,null,null,null,null,null],[2.4375399516429752e-4,2.442810000000007e-4,684320,30,null,null,null,null,null,null,null],[2.4600100005045533e-4,2.466120000000002e-4,691259,31,null,null,null,null,null,null,null],[2.699780015973374e-4,2.7029500000000026e-4,757105,33,null,null,null,null,null,null,null],[2.5435700081288815e-4,2.546349999999996e-4,713017,35,null,null,null,null,null,null,null],[2.620070008561015e-4,2.622939999999997e-4,734501,36,null,null,null,null,null,null,null],[3.0122199677862227e-4,3.01771000000001e-4,845493,38,null,null,null,null,null,null,null],[2.916140074376017e-4,2.9179900000000057e-4,817172,40,null,null,null,null,null,null,null],[3.342179988976568e-4,3.347999999999997e-4,937537,42,null,null,null,null,null,null,null],[3.42586004990153e-4,3.4277899999999965e-4,959855,44,null,null,null,null,null,null,null],[4.131719906581566e-4,4.137359999999996e-4,1158740,47,null,null,null,null,null,null,null],[3.7918100133538246e-4,3.851089999999998e-4,1079063,49,null,null,null,null,null,null,null],[3.8264300383161753e-4,3.8000399999999976e-4,1063495,52,null,null,null,null,null,null,null],[4.116829950362444e-4,4.121690000000004e-4,1154200,54,null,null,null,null,null,null,null],[4.5922100252937526e-4,4.5989900000000146e-4,1288468,57,null,null,null,null,null,null,null],[4.762259923154488e-4,4.767460000000001e-4,1335590,60,null,null,null,null,null,null,null],[4.647839959943667e-4,4.651360000000014e-4,1302062,63,null,null,null,null,null,null,null],[5.341509968275204e-4,5.345810000000027e-4,1497487,66,null,null,null,null,null,null,null],[5.725049995817244e-4,5.728259999999985e-4,1604818,69,null,null,null,null,null,null,null],[6.590810080524534e-4,6.598270000000017e-4,1848183,73,null,null,null,null,null,null,null],[6.282359972828999e-4,6.285460000000007e-4,1760495,76,null,null,null,null,null,null,null],[6.323099951259792e-4,6.326409999999998e-4,1771629,80,null,null,null,null,null,null,null],[7.016210001893342e-4,6.812729999999996e-4,1966338,84,null,null,null,null,null,null,null],[7.023719954304397e-4,7.028819999999984e-4,1968298,89,null,null,null,null,null,null,null],[7.942299998831004e-4,7.945079999999993e-4,2225705,93,null,null,null,null,null,null,null],[7.875459996284917e-4,7.875299999999981e-4,2205715,98,null,null,null,null,null,null,null],[8.624449983472005e-4,8.631750000000007e-4,2417431,103,null,null,null,null,null,null,null],[8.637139981146902e-4,8.643719999999987e-4,2420501,108,null,null,null,null,null,null,null],[9.866039908956736e-4,9.873529999999998e-4,2765313,113,null,null,null,null,null,null,null],[1.0416730074211955e-3,1.042284000000001e-3,2919621,119,null,null,null,null,null,null,null],[1.7584169982001185e-3,1.759603000000002e-3,4928712,125,null,null,null,null,null,null,null],[2.037008001934737e-3,2.0080529999999992e-3,5706480,131,null,null,null,null,null,null,null],[2.044669003225863e-3,2.0455639999999997e-3,5728382,138,null,null,null,null,null,null,null],[2.221767994342372e-3,2.2235389999999966e-3,6225363,144,null,null,null,null,null,null,null],[2.2816359996795654e-3,2.282092999999999e-3,6390760,152,null,null,null,null,null,null,null],[2.446975006023422e-3,2.448103e-3,6855062,159,null,null,null,null,null,null,null],[2.570480006397702e-3,2.544321000000002e-3,7199950,167,null,null,null,null,null,null,null],[2.8665329882642254e-3,2.867184000000002e-3,8028779,176,null,null,null,null,null,null,null],[3.0553070100722834e-3,3.0559640000000013e-3,8557808,185,null,null,null,null,null,null,null],[3.4385889885015786e-3,3.3615830000000013e-3,9631482,194,null,null,null,null,null,null,null],[3.508622001390904e-3,3.509736999999999e-3,9827210,204,null,null,null,null,null,null,null],[3.6775600019609556e-3,3.6782490000000015e-3,10300388,214,null,null,null,null,null,null,null],[3.667219993076287e-3,3.642994999999996e-3,10270940,224,null,null,null,null,null,null,null],[3.7024240009486675e-3,3.7028009999999986e-3,10368358,236,null,null,null,null,null,null,null],[3.886182006681338e-3,3.887115999999996e-3,10884602,247,null,null,null,null,null,null,null],[4.148421008721925e-3,4.125076999999991e-3,11618744,260,null,null,null,null,null,null,null],[4.411300003994256e-3,4.411356000000005e-3,12353358,273,null,null,null,null,null,null,null],[4.630084993550554e-3,4.604096000000002e-3,12968368,287,null,null,null,null,null,null,null],[4.7905960091156885e-3,4.791385999999995e-3,13416734,301,null,null,null,null,null,null,null],[5.0435769953764975e-3,5.019898000000009e-3,14125160,316,null,null,null,null,null,null,null],[4.973192000761628e-3,4.974329999999999e-3,13929103,332,null,null,null,null,null,null,null],[5.54904701129999e-3,5.520412000000002e-3,15541540,348,null,null,null,null,null,null,null],[5.822106002597138e-3,5.8231850000000085e-3,16305606,366,null,null,null,null,null,null,null],[6.2799799925414845e-3,6.25241e-3,17588704,384,null,null,null,null,null,null,null],[6.63041599909775e-3,6.601592000000003e-3,18568898,403,null,null,null,null,null,null,null],[7.364643999608234e-3,7.364898000000009e-3,20624036,424,null,null,null,null,null,null,null],[8.015228988369927e-3,7.988169000000017e-3,22448248,445,null,null,null,null,null,null,null],[8.546622993890196e-3,8.517898000000024e-3,23935690,467,null,null,null,null,null,null,null],[8.819940005196258e-3,8.790420999999993e-3,24700116,490,null,null,null,null,null,null,null],[9.851441005594097e-3,9.818511000000002e-3,27590108,515,null,null,null,null,null,null,null],[1.0484722995897755e-2,1.0439754999999995e-2,29362354,541,null,null,null,null,null,null,null],[1.0801180003909394e-2,1.0767945000000001e-2,30248358,568,null,null,null,null,null,null,null],[1.0156638993066736e-2,1.0130645999999993e-2,28443194,596,null,null,null,null,null,null,null],[1.1145889002364129e-2,1.1118964000000009e-2,31213298,626,null,null,null,null,null,null,null],[1.1520961008500308e-2,1.1456292000000007e-2,32263360,657,null,null,null,null,null,null,null],[1.1655224996502511e-2,1.1601736000000001e-2,32640564,690,null,null,null,null,null,null,null],[1.1809774005087093e-2,1.178448700000001e-2,33072890,725,null,null,null,null,null,null,null],[1.251749400398694e-2,1.2438766000000018e-2,35054786,761,null,null,null,null,null,null,null],[1.2895277992356569e-2,1.286690500000004e-2,36112299,799,null,null,null,null,null,null,null],[9.736631996929646e-3,9.711733999999972e-3,27264608,839,null,null,null,null,null,null,null],[1.2803764009731822e-2,1.2726124000000005e-2,35857111,881,null,null,null,null,null,null,null],[1.36815530131571e-2,1.3655627000000004e-2,38314155,925,null,null,null,null,null,null,null],[1.4628352000727318e-2,1.4605022999999995e-2,40964538,972,null,null,null,null,null,null,null],[1.665880200744141e-2,1.6544287000000046e-2,46652468,1020,null,null,null,null,null,null,null],[1.8068254998070188e-2,1.803595800000002e-2,50597618,1071,null,null,null,null,null,null,null],[1.8612885003676638e-2,1.8613494000000008e-2,52120986,1125,null,null,null,null,null,null,null],[1.9165578007232398e-2,1.912196100000002e-2,53668920,1181,null,null,null,null,null,null,null],[2.0233278992236592e-2,2.0234262999999975e-2,56659276,1240,null,null,null,null,null,null,null],[2.1110846995725296e-2,2.1111941999999995e-2,59036606,1302,null,null,null,null,null,null,null],[1.773524899908807e-2,1.769457000000002e-2,49663644,1367,null,null,null,null,null,null,null],[1.360478599963244e-2,1.3605196999999958e-2,38097141,1436,null,null,null,null,null,null,null],[1.7050730006303638e-2,1.705110000000004e-2,47746531,1507,null,null,null,null,null,null,null],[2.0907601996441372e-2,2.090856499999999e-2,58548543,1583,null,null,null,null,null,null,null],[2.613096400455106e-2,2.6043397000000024e-2,73173193,1662,null,null,null,null,null,null,null],[2.5526494995574467e-2,2.5527065999999987e-2,71480673,1745,null,null,null,null,null,null,null],[2.5463892001425847e-2,2.546432200000004e-2,71304429,1832,null,null,null,null,null,null,null],[2.699225199467037e-2,2.6993142999999997e-2,75585990,1924,null,null,null,null,null,null,null],[3.890817300998606e-2,3.8908783999999974e-2,108952254,2020,null,null,null,null,null,null,null],[3.7787443012348376e-2,3.755011900000005e-2,105815485,2121,null,null,null,null,null,null,null],[3.416623899829574e-2,3.4167265e-2,95674051,2227,null,null,null,null,null,null,null],[3.266121599881444e-2,3.266203099999998e-2,91458947,2339,null,null,null,null,null,null,null],[3.4623086990904994e-2,3.462388100000002e-2,96953193,2456,null,null,null,null,null,null,null],[4.11352990049636e-2,4.1136143000000014e-2,115187034,2579,null,null,null,null,null,null,null],[4.149079900525976e-2,4.143614699999998e-2,116182018,2708,null,null,null,null,null,null,null],[3.872826699807774e-2,3.8729503e-2,108449820,2843,null,null,null,null,null,null,null],[4.302478198951576e-2,4.3025249999999904e-2,120478615,2985,null,null,null,null,null,null,null],[4.664601100375876e-2,4.6646763000000036e-2,130618326,3134,null,null,null,null,null,null,null],[5.143429400050081e-2,5.1434790000000064e-2,144027191,3291,null,null,null,null,null,null,null],[5.459544699988328e-2,5.4547365999999986e-2,152880748,3456,null,null,null,null,null,null,null],[5.726200999924913e-2,5.726338799999997e-2,160346728,3629,null,null,null,null,null,null,null],[6.400984201172832e-2,6.39960690000001e-2,179239168,3810,null,null,null,null,null,null,null],[6.271813999046572e-2,6.259697600000003e-2,175626277,4001,null,null,null,null,null,null,null],[6.796568298886996e-2,6.796678999999983e-2,190319287,4201,null,null,null,null,null,null,null],[6.701216200599447e-2,6.701224299999997e-2,187564700,4411,null,null,null,null,null,null,null],[5.398853699443862e-2,5.394020799999999e-2,151177388,4631,null,null,null,null,null,null,null],[3.809215700312052e-2,3.809272200000002e-2,106665891,4863,null,null,null,null,null,null,null],[3.4793213999364525e-2,3.479330699999994e-2,97427317,5106,null,null,null,null,null,null,null],[3.352504399663303e-2,3.352540199999998e-2,93877136,5361,null,null,null,null,null,null,null],[3.2472215010784566e-2,3.247248200000019e-2,90928688,5629,null,null,null,null,null,null,null],[3.212344000348821e-2,3.212385699999998e-2,89952634,5911,null,null,null,null,null,null,null],[3.437376700458117e-2,3.4358872999999956e-2,96253941,6207,null,null,null,null,null,null,null],[6.645461100561079e-2,6.645594499999996e-2,186089358,6517,null,null,null,null,null,null,null],[7.99127439968288e-2,7.991354400000006e-2,223771940,6843,null,null,null,null,null,null,null],[7.714429499174003e-2,7.711606400000015e-2,216017614,7185,null,null,null,null,null,null,null],[8.132087798730936e-2,8.132095400000017e-2,227713888,7544,null,null,null,null,null,null,null],[9.083227699738927e-2,9.08067050000001e-2,254348484,7921,null,null,null,null,null,null,null],[9.74855490057962e-2,9.747396599999991e-2,272978344,8318,null,null,null,null,null,null,null],[8.049184600531589e-2,8.047067399999985e-2,225392658,8733,null,null,null,null,null,null,null],[0.11147414900187869,0.11141836699999974,312148887,9170,null,null,null,null,null,null,null],[0.11347173299873248,0.11341979400000035,317661121,9629,null,null,null,null,null,null,null],[8.07543309929315e-2,8.075488099999983e-2,226127352,10110,null,null,null,null,null,null,null],[0.1024523709929781,0.10240889300000022,286885093,10616,null,null,null,null,null,null,null],[0.10798869699647184,0.10798946700000034,302389444,11146,null,null,null,null,null,null,null],[0.11395698999695014,0.11391749699999965,319099072,11704,null,null,null,null,null,null,null],[0.13785551000910345,0.13784030599999975,386020320,12289,null,null,null,null,null,null,null],[0.15517897599784192,0.15510799299999967,434527938,12903,null,null,null,null,null,null,null],[0.18246970500331372,0.18235372699999974,510947409,13549,null,null,null,null,null,null,null],[0.20665685601125006,0.20659243799999993,578594519,14226,null,null,null,null,null,null,null],[0.2328063029999612,0.23274576300000005,651896924,14937,null,null,null,null,null,null,null],[0.2369888789980905,0.23690336199999962,663608634,15684,null,null,null,null,null,null,null],[0.2489938539947616,0.24886532100000025,697224277,16469,null,null,null,null,null,null,null],[0.28007445100229234,0.27998514799999974,784176960,17292,null,null,null,null,null,null,null],[0.26412455800164025,0.2640624579999997,739592840,18157,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estUpperBound":2.1426448032743204e-5,"estLowerBound":1.926374087710549e-5,"estPoint":2.0415738325732072e-5,"estConfidenceLevel":0.95},"anRegress":[{"regRSquare":{"estUpperBound":0.9832883223589589,"estLowerBound":0.9388761812776063,"estPoint":0.9622448083655497,"estConfidenceLevel":0.95},"regResponder":"time","regCoeffs":{"y":{"estUpperBound":2.0502038750417825e-3,"estLowerBound":-1.1372929557245029e-4,"estPoint":1.0304864021243598e-3,"estConfidenceLevel":0.95},"iters":{"estUpperBound":2.1441050735543513e-5,"estLowerBound":1.844164100359473e-5,"estPoint":1.9853907167369603e-5,"estConfidenceLevel":0.95}}}],"anStdDev":{"estUpperBound":4.392710894614489e-6,"estLowerBound":2.731769151469443e-6,"estPoint":3.4477868085704054e-6,"estConfidenceLevel":0.95},"anOutlierVar":{"ovFraction":0.943016050183587,"ovDesc":"severe","ovEffect":"Severe"},"anOverhead":2.32651976653174e-6},"reportKDEs":[{"kdeValues":[1.091329886356974e-5,1.1060967907949681e-5,1.1208636952329624e-5,1.1356305996709565e-5,1.1503975041089508e-5,1.1651644085469449e-5,1.1799313129849391e-5,1.1946982174229333e-5,1.2094651218609274e-5,1.2242320262989216e-5,1.2389989307369158e-5,1.25376583517491e-5,1.2685327396129041e-5,1.2832996440508984e-5,1.2980665484888925e-5,1.3128334529268866e-5,1.327600357364881e-5,1.342367261802875e-5,1.3571341662408691e-5,1.3719010706788634e-5,1.3866679751168577e-5,1.4014348795548518e-5,1.416201783992846e-5,1.4309686884308402e-5,1.4457355928688343e-5,1.4605024973068284e-5,1.4752694017448227e-5,1.490036306182817e-5,1.5048032106208111e-5,1.5195701150588052e-5,1.5343370194967995e-5,1.5491039239347934e-5,1.5638708283727877e-5,1.578637732810782e-5,1.5934046372487763e-5,1.6081715416867705e-5,1.6229384461247645e-5,1.6377053505627588e-5,1.652472255000753e-5,1.667239159438747e-5,1.6820060638767413e-5,1.6967729683147355e-5,1.7115398727527295e-5,1.7263067771907238e-5,1.741073681628718e-5,1.755840586066712e-5,1.7706074905047063e-5,1.7853743949427005e-5,1.8001412993806945e-5,1.8149082038186888e-5,1.829675108256683e-5,1.8444420126946773e-5,1.8592089171326716e-5,1.8739758215706655e-5,1.8887427260086598e-5,1.903509630446654e-5,1.918276534884648e-5,1.9330434393226423e-5,1.9478103437606366e-5,1.9625772481986305e-5,1.9773441526366248e-5,1.992111057074619e-5,2.006877961512613e-5,2.0216448659506076e-5,2.0364117703886016e-5,2.0511786748265955e-5,2.06594557926459e-5,2.080712483702584e-5,2.0954793881405784e-5,2.1102462925785726e-5,2.1250131970165666e-5,2.139780101454561e-5,2.154547005892555e-5,2.169313910330549e-5,2.1840808147685434e-5,2.1988477192065376e-5,2.2136146236445316e-5,2.228381528082526e-5,2.24314843252052e-5,2.257915336958514e-5,2.2726822413965087e-5,2.2874491458345026e-5,2.302216050272497e-5,2.3169829547104912e-5,2.331749859148485e-5,2.3465167635864794e-5,2.3612836680244737e-5,2.3760505724624676e-5,2.390817476900462e-5,2.4055843813384562e-5,2.42035128577645e-5,2.4351181902144444e-5,2.4498850946524387e-5,2.4646519990904326e-5,2.4794189035284273e-5,2.4941858079664212e-5,2.508952712404415e-5,2.5237196168424098e-5,2.5384865212804037e-5,2.553253425718398e-5,2.5680203301563923e-5,2.5827872345943862e-5,2.5975541390323805e-5,2.6123210434703748e-5,2.6270879479083687e-5,2.6418548523463633e-5,2.6566217567843573e-5,2.6713886612223512e-5,2.6861555656603458e-5,2.7009224700983398e-5,2.7156893745363337e-5,2.7304562789743283e-5,2.7452231834123223e-5,2.7599900878503162e-5,2.7747569922883108e-5,2.7895238967263048e-5,2.8042908011642987e-5,2.8190577056022933e-5,2.8338246100402873e-5,2.848591514478282e-5,2.8633584189162758e-5,2.8781253233542698e-5,2.8928922277922644e-5,2.9076591322302583e-5,2.9224260366682523e-5,2.937192941106247e-5,2.9519598455442408e-5,2.9667267499822348e-5],"kdeType":"time","kdePDF":[16880.14933519924,16912.806888941177,16977.78559869775,17074.44315872375,17201.890875741115,17359.07936780772,17544.906323675623,17758.3411238193,17998.560276130986,18265.087041319413,18557.928340386366,18877.702060667714,19225.748205195545,19604.217945926146,20016.13551489658,20465.428957047545,20956.927023048025,21496.320841528457,22090.09041500968,22745.397368699534,23469.94668457728,24271.821318377475,25159.294575949214,26140.625880220417,27223.846065229023,28416.538577392283,29725.62294814518,31157.146641258994,32716.090899449908,34406.19555502165,36229.80697220534,38187.75240262431,40279.24310890174,42501.80769145808,44851.256181392906,47321.67467165676,49905.44957372986,52593.3200215889,55374.45650237249,58236.5634678203,61166.003458409534,64147.94013368549,67166.49752527519,70204.9327910799,73245.81973042198,76271.24030557722,79262.9813968027,82202.73399455895,85072.29201022712,87853.74787742784,90529.68213660143,93083.34426417139,95498.82214187042,97761.19777536558,99856.68717166322,101772.76267117531,103498.25649285255,105023.44477017925,106340.11190462661,107441.59560772016,108322.81350635951,108980.27261186796,109412.06326899714,109617.83938197135,109598.7867466195,109357.58119958857,108898.33804035133,108226.55381550675,107349.04111579685,106273.85657114418,105010.22178936946,103568.43662158477,101959.78389813243,100196.42470026799,98291.28333787502,96257.92149921357,94110.40151406603,91863.13929806864,89530.74827918205,87127.87639049122,84669.03898241867,82168.45119528024,79639.86387665031,77096.40747303072,74550.44843151118,72013.46249178657,69495.92882916954,67007.24834259685,64555.688504628786,62148.35615592759,59791.19849949509,57489.03140171951,55245.59301076774,53063.619726207915,50944.94075525062,48890.58691485675,46900.90901224555,44975.70106754925,43114.323821466394,41315.82437087264,39579.04835556538,37902.74182877262,36285.64072637901,34726.54664799147,33224.38842377868,31778.26961909663,30387.50268966607,29051.630921665255,27770.439565088625,26543.957699559516,25372.452375189263,24256.41647159827,23196.55154613228,22193.74673033485,21249.054513684787,20363.664053498393,19538.87249154568,18776.05465543187,18076.631481737797,17442.03751561225,16873.687907908818,16372.945430350497,15941.088142257247,15579.27844857251,15288.53436886226,15069.703874521705,14923.443135439351,14850.199442775007]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":1,"reportName":"Crypto.Macaroon/mint","reportOutliers":{"highSevere":0,"highMild":1,"lowMild":2,"samplesSeen":40,"lowSevere":0},"reportMeasured":[[3.318500239402056e-5,3.280500000002462e-5,90924,1,null,null,null,null,null,null,null],[4.836599691770971e-5,4.868700000049131e-5,136460,2,null,null,null,null,null,null,null],[6.721400131937116e-5,6.786000000058579e-5,190224,3,null,null,null,null,null,null,null],[9.236799087375402e-5,9.278899999998202e-5,260200,4,null,null,null,null,null,null,null],[1.191729970742017e-4,1.1963200000053575e-4,335576,5,null,null,null,null,null,null,null],[1.4254299458116293e-4,1.431360000001547e-4,401072,6,null,null,null,null,null,null,null],[1.5913500101305544e-4,1.5990500000029328e-4,448362,7,null,null,null,null,null,null,null],[1.8280600488651544e-4,1.8348099999965228e-4,514242,8,null,null,null,null,null,null,null],[2.1128800290171057e-4,2.1210199999988077e-4,594340,9,null,null,null,null,null,null,null],[3.003129968419671e-4,3.009929999997496e-4,843342,10,null,null,null,null,null,null,null],[2.802200033329427e-4,2.806100000007916e-4,785710,11,null,null,null,null,null,null,null],[3.1191299785859883e-4,3.123740000008368e-4,874956,12,null,null,null,null,null,null,null],[3.3588099176995456e-4,3.3630200000001054e-4,942194,13,null,null,null,null,null,null,null],[3.98050993680954e-4,4.001149999997011e-4,1120976,14,null,null,null,null,null,null,null],[3.868710045935586e-4,3.8720900000033254e-4,1084110,15,null,null,null,null,null,null,null],[4.410479887155816e-4,4.4161000000020323e-4,1236604,16,null,null,null,null,null,null,null],[4.605980066116899e-4,4.611789999993121e-4,1291734,17,null,null,null,null,null,null,null],[4.6561399358324707e-4,4.6645399999967196e-4,1306760,18,null,null,null,null,null,null,null],[4.5494399091694504e-4,4.556769999997101e-4,1276738,19,null,null,null,null,null,null,null],[5.215890123508871e-4,5.217939999999643e-4,1461270,20,null,null,null,null,null,null,null],[5.081090057501569e-4,5.087520000000012e-4,1425286,21,null,null,null,null,null,null,null],[5.564689927268773e-4,5.569860000003146e-4,1560136,22,null,null,null,null,null,null,null],[6.059879960957915e-4,6.067500000002113e-4,1699320,23,null,null,null,null,null,null,null],[6.991409900365397e-4,6.676990000000771e-4,1960692,25,null,null,null,null,null,null,null],[6.834730011178181e-4,6.842340000003944e-4,1916588,26,null,null,null,null,null,null,null],[6.742149998899549e-4,6.748480000000612e-4,1890422,27,null,null,null,null,null,null,null],[7.306750048883259e-4,6.9753100000014e-4,2048934,28,null,null,null,null,null,null,null],[6.920199957676232e-4,6.931160000007708e-4,1941694,30,null,null,null,null,null,null,null],[7.826719956938177e-4,7.834200000003122e-4,2194776,31,null,null,null,null,null,null,null],[8.629980002297089e-4,8.633100000006166e-4,2418148,33,null,null,null,null,null,null,null],[8.804140088614076e-4,8.816620000002828e-4,2469426,35,null,null,null,null,null,null,null],[9.895319963106886e-4,9.903300000004833e-4,2773792,36,null,null,null,null,null,null,null],[9.570960100973025e-4,9.579100000003393e-4,2682842,38,null,null,null,null,null,null,null],[1.0519780043978244e-3,1.0523500000001462e-3,2947304,40,null,null,null,null,null,null,null],[1.038069007336162e-3,1.0389870000002688e-3,2909696,42,null,null,null,null,null,null,null],[1.1905870051123202e-3,1.1916580000006505e-3,3337190,44,null,null,null,null,null,null,null],[1.3282069994602352e-3,1.3289840000005881e-3,3722496,47,null,null,null,null,null,null,null],[1.3478069886332378e-3,1.348673000000744e-3,3776634,49,null,null,null,null,null,null,null],[1.4017870125826448e-3,1.402642000000398e-3,3928070,52,null,null,null,null,null,null,null],[1.4739369944436476e-3,1.4750310000000155e-3,4131203,54,null,null,null,null,null,null,null],[1.6841390024637803e-3,1.6851439999996387e-3,4718959,57,null,null,null,null,null,null,null],[1.7285159992752597e-3,1.7296709999996551e-3,4843552,60,null,null,null,null,null,null,null],[1.8039269925793633e-3,1.8048089999993522e-3,5054119,63,null,null,null,null,null,null,null],[1.937083012307994e-3,1.9381880000004514e-3,5427464,66,null,null,null,null,null,null,null],[2.0412829908309504e-3,2.0421299999995313e-3,5719350,69,null,null,null,null,null,null,null],[2.3467470018658787e-3,2.3475930000005363e-3,6574533,73,null,null,null,null,null,null,null],[2.2699620021739975e-3,2.271083000000118e-3,6360088,76,null,null,null,null,null,null,null],[2.5363739987369627e-3,2.5370389999999077e-3,7104405,80,null,null,null,null,null,null,null],[2.4229690025094897e-3,2.4242860000001087e-3,6788943,84,null,null,null,null,null,null,null],[2.787372999591753e-3,2.788340000000389e-3,7809613,89,null,null,null,null,null,null,null],[2.938906996860169e-3,2.9395740000000004e-3,8231622,93,null,null,null,null,null,null,null],[3.0613639974035323e-3,3.062566000000544e-3,8574972,98,null,null,null,null,null,null,null],[3.0521110020345077e-3,3.0528579999993255e-3,8548617,103,null,null,null,null,null,null,null],[3.1713089992990717e-3,3.171807000000193e-3,8882363,108,null,null,null,null,null,null,null],[3.2714889966882765e-3,3.2721169999998523e-3,9163602,113,null,null,null,null,null,null,null],[3.440717002376914e-3,3.441715000000123e-3,9637677,119,null,null,null,null,null,null,null],[3.541559010045603e-3,3.5420489999999916e-3,9918580,125,null,null,null,null,null,null,null],[3.6150879896013066e-3,3.6158909999999267e-3,10126062,131,null,null,null,null,null,null,null],[3.8866919931024313e-3,3.8872789999997437e-3,10885758,138,null,null,null,null,null,null,null],[3.8377989985747263e-3,3.8387939999999787e-3,10749294,144,null,null,null,null,null,null,null],[4.2303529917262495e-3,4.231024999999278e-3,11848156,152,null,null,null,null,null,null,null],[4.390414003864862e-3,4.391211000000617e-3,12296392,159,null,null,null,null,null,null,null],[4.39330299559515e-3,4.393932000000156e-3,12304674,167,null,null,null,null,null,null,null],[4.792025007191114e-3,4.792930999999889e-3,13421396,176,null,null,null,null,null,null,null],[5.094331994769163e-3,5.094994999999436e-3,14267196,185,null,null,null,null,null,null,null],[5.390218997490592e-3,5.391039000000042e-3,15096078,194,null,null,null,null,null,null,null],[5.519480007933453e-3,5.520665999999785e-3,15459320,204,null,null,null,null,null,null,null],[5.850831003044732e-3,5.851837999999887e-3,16386302,214,null,null,null,null,null,null,null],[5.86443800420966e-3,5.864727999999708e-3,16423576,224,null,null,null,null,null,null,null],[5.818784004077315e-3,5.8196810000001875e-3,16296752,236,null,null,null,null,null,null,null],[6.119199999375269e-3,6.120150000000102e-3,17137866,247,null,null,null,null,null,null,null],[6.8335109972395e-3,6.834021999999607e-3,19137968,260,null,null,null,null,null,null,null],[7.047702994896099e-3,7.048726999999921e-3,19737864,273,null,null,null,null,null,null,null],[7.136714004445821e-3,7.137776000000429e-3,19987062,287,null,null,null,null,null,null,null],[7.03160600096453e-3,7.032252000000128e-3,19691402,301,null,null,null,null,null,null,null],[7.137143998988904e-3,7.137880000000152e-3,19987791,316,null,null,null,null,null,null,null],[7.072006002999842e-3,7.072775999999337e-3,19805889,332,null,null,null,null,null,null,null],[7.800470993970521e-3,7.801075000000601e-3,21844540,348,null,null,null,null,null,null,null],[7.7897659939480945e-3,7.790390000000258e-3,21814539,366,null,null,null,null,null,null,null],[8.162729995092377e-3,8.163593999999996e-3,22859148,384,null,null,null,null,null,null,null],[8.471291992464103e-3,8.414804999999248e-3,23724411,403,null,null,null,null,null,null,null],[8.850770987919532e-3,8.851405999999784e-3,24786525,424,null,null,null,null,null,null,null],[1.1013360999641009e-2,1.1014463999999613e-2,30842374,445,null,null,null,null,null,null,null],[1.251450800918974e-2,1.251440899999956e-2,35046120,467,null,null,null,null,null,null,null],[1.359039700764697e-2,1.3592165000000378e-2,38058230,490,null,null,null,null,null,null,null],[1.3432934996671975e-2,1.343355699999993e-2,37617700,515,null,null,null,null,null,null,null],[1.3021823993767612e-2,1.3022594000000609e-2,36464940,541,null,null,null,null,null,null,null],[1.3667067993083037e-2,1.3667886000000351e-2,38273910,568,null,null,null,null,null,null,null],[1.4729143993463367e-2,1.4729602999999258e-2,41246116,596,null,null,null,null,null,null,null],[1.477747000171803e-2,1.4779074999999864e-2,41382509,626,null,null,null,null,null,null,null],[1.469013599853497e-2,1.4690908000000391e-2,41138347,657,null,null,null,null,null,null,null],[1.5756145992781967e-2,1.5757567999999722e-2,44124126,690,null,null,null,null,null,null,null],[1.5854099998250604e-2,1.585493700000029e-2,44396757,725,null,null,null,null,null,null,null],[1.618620500084944e-2,1.618698800000029e-2,45327581,761,null,null,null,null,null,null,null],[1.7723048003972508e-2,1.7723930999999915e-2,49630056,799,null,null,null,null,null,null,null],[2.0179361003101803e-2,2.0121158999999444e-2,56508314,839,null,null,null,null,null,null,null],[2.1233624007436447e-2,2.123460399999999e-2,59459503,881,null,null,null,null,null,null,null],[2.0524716994259506e-2,2.0525171000000064e-2,57474990,925,null,null,null,null,null,null,null],[2.204325700586196e-2,2.204444900000002e-2,61727886,972,null,null,null,null,null,null,null],[2.5214926994522102e-2,2.52009150000001e-2,70608480,1020,null,null,null,null,null,null,null],[2.9276907996973023e-2,2.9277957000000576e-2,81982595,1071,null,null,null,null,null,null,null],[2.9507632003515027e-2,2.950961599999946e-2,82633529,1125,null,null,null,null,null,null,null],[2.8251476993318647e-2,2.8252246000000092e-2,79110550,1181,null,null,null,null,null,null,null],[2.837201200600248e-2,2.8286325999999917e-2,79450127,1240,null,null,null,null,null,null,null],[2.3389260997646488e-2,2.3360486000000513e-2,65496129,1302,null,null,null,null,null,null,null],[2.0693750004284084e-2,2.069452299999952e-2,57950129,1367,null,null,null,null,null,null,null],[2.0554106013150886e-2,2.0554407000000552e-2,57556320,1436,null,null,null,null,null,null,null],[1.8479820995707996e-2,1.8480576999999165e-2,51748988,1507,null,null,null,null,null,null,null],[3.206318001321051e-2,3.20637210000001e-2,89783782,1583,null,null,null,null,null,null,null],[3.673566698853392e-2,3.6738337000000065e-2,102795989,1662,null,null,null,null,null,null,null],[3.335605999745894e-2,3.330191699999929e-2,93404734,1745,null,null,null,null,null,null,null],[2.22325580107281e-2,2.2232851999999248e-2,62256834,1832,null,null,null,null,null,null,null],[3.640676199574955e-2,3.640753100000005e-2,101948825,1924,null,null,null,null,null,null,null],[3.7450617004651576e-2,3.745170200000025e-2,104870667,2020,null,null,null,null,null,null,null],[3.693961800308898e-2,3.694023400000024e-2,103439344,2121,null,null,null,null,null,null,null],[3.881600500608329e-2,3.8816611000000556e-2,108693804,2227,null,null,null,null,null,null,null],[5.777611800294835e-2,5.774516999999957e-2,161786192,2339,null,null,null,null,null,null,null],[6.902565999189392e-2,6.902662199999998e-2,193286826,2456,null,null,null,null,null,null,null],[4.289167799288407e-2,4.287076600000006e-2,120108724,2579,null,null,null,null,null,null,null],[5.975378499715589e-2,5.972653899999969e-2,167322528,2708,null,null,null,null,null,null,null],[6.317756399221253e-2,6.3178379e-2,176909497,2843,null,null,null,null,null,null,null],[6.424331699963659e-2,6.424391699999976e-2,179894247,2985,null,null,null,null,null,null,null],[6.534310200368054e-2,6.534339000000067e-2,182972967,3134,null,null,null,null,null,null,null],[6.268998999439646e-2,6.2690688e-2,175544044,3291,null,null,null,null,null,null,null],[5.819168900779914e-2,5.818402999999961e-2,162948888,3456,null,null,null,null,null,null,null],[9.038010600488633e-2,9.038122499999979e-2,253082790,3629,null,null,null,null,null,null,null],[9.550739701080602e-2,9.54807810000009e-2,267437927,3810,null,null,null,null,null,null,null],[5.212935799499974e-2,5.212942400000031e-2,145891082,4001,null,null,null,null,null,null,null],[9.383227399666794e-2,9.383349299999999e-2,262750209,4201,null,null,null,null,null,null,null],[9.034867899026722e-2,9.034938799999992e-2,252993539,4411,null,null,null,null,null,null,null],[0.10285112999554258,0.10285187399999884,288003109,4631,null,null,null,null,null,null,null],[0.12308451499848161,0.12308511099999997,344659552,4863,null,null,null,null,null,null,null],[0.12210206298914272,0.12210304399999927,341907984,5106,null,null,null,null,null,null,null],[0.10318260300846305,0.10318287700000006,288929157,5361,null,null,null,null,null,null,null],[0.12426190900441725,0.1242509380000012,347955102,5629,null,null,null,null,null,null,null],[0.11723032999725547,0.11718626800000109,328267953,5911,null,null,null,null,null,null,null],[0.1219554529961897,0.12195629100000005,341417243,6207,null,null,null,null,null,null,null],[0.12313399399863556,0.12313421200000008,344795488,6517,null,null,null,null,null,null,null],[8.537531799811404e-2,8.537607799999947e-2,239067364,6843,null,null,null,null,null,null,null],[9.954123299394269e-2,9.954158599999907e-2,278733398,7185,null,null,null,null,null,null,null],[0.1488054220099002,0.14880671100000065,416683497,7544,null,null,null,null,null,null,null],[0.1692656389932381,0.16926582999999873,473973093,7921,null,null,null,null,null,null,null],[0.22558237999328412,0.22552590499999958,631669866,8318,null,null,null,null,null,null,null],[0.1734932179970201,0.1734249769999998,485731110,8733,null,null,null,null,null,null,null],[0.20563035001396202,0.20563068499999915,575801701,9170,null,null,null,null,null,null,null],[0.20802002599521074,0.20802141499999927,582493068,9629,null,null,null,null,null,null,null],[0.20306554100534413,0.20306635799999917,568617569,10110,null,null,null,null,null,null,null],[0.19761227299750317,0.19759983200000164,553349222,10616,null,null,null,null,null,null,null],[0.1871238369931234,0.18707817199999965,523899567,11146,null,null,null,null,null,null,null]]}];
550 reports.map(mangulate);
551
552 var benches = ["Crypto.Macaroon/create","Crypto.Macaroon/mint",];
553 var ylabels = [[-0,'<a href="#b0">Crypto.Macaroon/create</a>'],[-1,'<a href="#b1">Crypto.Macaroon/mint</a>'],];
554 var means = $.scaleTimes([1.2600205848891467e-5,2.0415738325732072e-5,]);
555 var xs = [];
556 var prev = null;
557 for (var i = 0; i < means[0].length; i++) {
558 var name = benches[i].split(/\//);
559 name.pop();
560 name = name.join('/');
561 if (name != prev) {
562 xs.push({ label: name, data: [[means[0][i], -i]]});
563 prev = name;
564 }
565 else
566 xs[xs.length-1].data.push([means[0][i],-i]);
567 }
568 var oq = $("#overview");
569 o = $.plot(oq, xs, { bars: { show: true, horizontal: true,
570 barWidth: 0.75, align: "center" },
571 grid: { borderColor: "#777", hoverable: true },
572 legend: { show: xs.length > 1 },
573 xaxis: { max: Math.max.apply(undefined,means[0]) * 1.02 },
574 yaxis: { ticks: ylabels, tickColor: '#ffffff' } });
575 if (benches.length > 3)
576 o.getPlaceholder().height(28*benches.length);
577 o.resize();
578 o.setupGrid();
579 o.draw();
580 $.addTooltip("#overview", function(x,y) { return $.renderTime(x / means[1]); });
581});
582$(document).ready(function () {
583 $(".time").text(function(_, text) {
584 return $.renderTime(text);
585 });
586 $(".citime").text(function(_, text) {
587 return $.renderTime(text);
588 });
589 $(".percent").text(function(_, text) {
590 return (text*100).toFixed(1);
591 });
592 });
593</script>
594
595 </div>
596 </div>
597 <div id="footer">
598 <div class="body">
599 <div class="footfirst">
600 <h2>colophon</h2>
601 <p>This report was created using the
602 <a href="http://hackage.haskell.org/package/criterion">criterion</a>
603 benchmark execution and performance analysis tool.</p>
604 <p>Criterion is developed and maintained
605 by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.</p>
606 </div>
607 </div>
608 </div>
609 </body>
610</html>
diff --git a/doc-index.html b/doc-index.html
new file mode 100644
index 0000000..39b7f10
--- /dev/null
+++ b/doc-index.html
@@ -0,0 +1,4 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>hmacaroons-0.5.0.0: Haskell implementation of macaroons (Index)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2window.onload = function () {pageLoad();};
3//]]>
4</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">hmacaroons-0.5.0.0: Haskell implementation of macaroons</p></div><div id="content"><div id="index"><p class="caption">Index</p><table><tr><td class="src">addFirstPartyCaveat</td><td class="module"><a href="Crypto-Macaroon.html#v:addFirstPartyCaveat">Crypto.Macaroon</a></td></tr><tr><td class="src">Caveat</td><td class="module"><a href="Crypto-Macaroon.html#t:Caveat">Crypto.Macaroon</a></td></tr><tr><td class="src">caveats</td><td class="module"><a href="Crypto-Macaroon.html#v:caveats">Crypto.Macaroon</a></td></tr><tr><td class="src">cid</td><td class="module"><a href="Crypto-Macaroon.html#v:cid">Crypto.Macaroon</a></td></tr><tr><td class="src">cl</td><td class="module"><a href="Crypto-Macaroon.html#v:cl">Crypto.Macaroon</a></td></tr><tr><td class="src">create</td><td class="module"><a href="Crypto-Macaroon.html#v:create">Crypto.Macaroon</a></td></tr><tr><td class="src">deserialize</td><td class="module"><a href="Crypto-Macaroon-Serializer-Base64.html#v:deserialize">Crypto.Macaroon.Serializer.Base64</a>, Crypto.Macaroon</td></tr><tr><td class="src">identifier</td><td class="module"><a href="Crypto-Macaroon.html#v:identifier">Crypto.Macaroon</a></td></tr><tr><td class="src">inspect</td><td class="module"><a href="Crypto-Macaroon.html#v:inspect">Crypto.Macaroon</a></td></tr><tr><td class="src">Key</td><td class="module"><a href="Crypto-Macaroon.html#t:Key">Crypto.Macaroon</a></td></tr><tr><td class="src">Location</td><td class="module"><a href="Crypto-Macaroon.html#t:Location">Crypto.Macaroon</a></td></tr><tr><td class="src">location</td><td class="module"><a href="Crypto-Macaroon.html#v:location">Crypto.Macaroon</a></td></tr><tr><td class="src">Macaroon</td><td class="module"><a href="Crypto-Macaroon.html#t:Macaroon">Crypto.Macaroon</a></td></tr><tr><td class="src">ParseError</td><td class="module"><a href="Crypto-Macaroon-Verifier.html#v:ParseError">Crypto.Macaroon.Verifier</a>, Crypto.Macaroon</td></tr><tr><td class="src">Refused</td><td class="module"><a href="Crypto-Macaroon-Verifier.html#v:Refused">Crypto.Macaroon.Verifier</a>, Crypto.Macaroon</td></tr><tr><td class="src">Secret</td><td class="module"><a href="Crypto-Macaroon.html#t:Secret">Crypto.Macaroon</a></td></tr><tr><td class="src">serialize</td><td class="module"><a href="Crypto-Macaroon-Serializer-Base64.html#v:serialize">Crypto.Macaroon.Serializer.Base64</a>, Crypto.Macaroon</td></tr><tr><td class="src">Sig</td><td class="module"><a href="Crypto-Macaroon.html#t:Sig">Crypto.Macaroon</a></td></tr><tr><td class="src">signature</td><td class="module"><a href="Crypto-Macaroon.html#v:signature">Crypto.Macaroon</a></td></tr><tr><td class="src">Unrelated</td><td class="module"><a href="Crypto-Macaroon-Verifier.html#v:Unrelated">Crypto.Macaroon.Verifier</a>, Crypto.Macaroon</td></tr><tr><td class="src">ValidationError</td><td class="module"><a href="Crypto-Macaroon-Verifier.html#t:ValidationError">Crypto.Macaroon.Verifier</a>, Crypto.Macaroon</td></tr><tr><td class="src">ValidatorError</td><td class="module"><a href="Crypto-Macaroon-Verifier.html#v:ValidatorError">Crypto.Macaroon.Verifier</a>, Crypto.Macaroon</td></tr><tr><td class="src">Verified</td><td class="module"><a href="Crypto-Macaroon-Verifier.html#v:Verified">Crypto.Macaroon.Verifier</a>, Crypto.Macaroon</td></tr><tr><td class="src">VerifierResult</td><td class="module"><a href="Crypto-Macaroon-Verifier.html#t:VerifierResult">Crypto.Macaroon.Verifier</a>, Crypto.Macaroon</td></tr><tr><td class="src">verify</td><td class="module"><a href="Crypto-Macaroon-Verifier.html#v:verify">Crypto.Macaroon.Verifier</a>, Crypto.Macaroon</td></tr><tr><td class="src">vid</td><td class="module"><a href="Crypto-Macaroon.html#v:vid">Crypto.Macaroon</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.1</p></div></body></html> \ No newline at end of file
diff --git a/frames.html b/frames.html
new file mode 100644
index 0000000..1b4e38d
--- /dev/null
+++ b/frames.html
@@ -0,0 +1,30 @@
1<!DOCTYPE html
2 PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml">
5<head>
6<title></title>
7<script src="haddock-util.js" type="text/javascript"></script>
8<script type="text/javascript"><!--
9/*
10
11 The synopsis frame needs to be updated using javascript, so we hide
12 it by default and only show it if javascript is enabled.
13
14 TODO: provide some means to disable it.
15*/
16function load() {
17 var d = document.getElementById("inner-fs");
18 d.rows = "50%,50%";
19 postReframe();
20}
21--></script>
22</head>
23<frameset id="outer-fs" cols="25%,75%" onload="load()">
24 <frameset id="inner-fs" rows="100%,0%">
25 <frame src="index-frames.html" name="modules" />
26 <frame src="" name="synopsis" />
27 </frameset>
28 <frame src="index.html" name="main" />
29</frameset>
30</html>
diff --git a/haddock-util.js b/haddock-util.js
new file mode 100644
index 0000000..9a6fccf
--- /dev/null
+++ b/haddock-util.js
@@ -0,0 +1,344 @@
1// Haddock JavaScript utilities
2
3var rspace = /\s\s+/g,
4 rtrim = /^\s+|\s+$/g;
5
6function spaced(s) { return (" " + s + " ").replace(rspace, " "); }
7function trim(s) { return s.replace(rtrim, ""); }
8
9function hasClass(elem, value) {
10 var className = spaced(elem.className || "");
11 return className.indexOf( " " + value + " " ) >= 0;
12}
13
14function addClass(elem, value) {
15 var className = spaced(elem.className || "");
16 if ( className.indexOf( " " + value + " " ) < 0 ) {
17 elem.className = trim(className + " " + value);
18 }
19}
20
21function removeClass(elem, value) {
22 var className = spaced(elem.className || "");
23 className = className.replace(" " + value + " ", " ");
24 elem.className = trim(className);
25}
26
27function toggleClass(elem, valueOn, valueOff, bool) {
28 if (bool == null) { bool = ! hasClass(elem, valueOn); }
29 if (bool) {
30 removeClass(elem, valueOff);
31 addClass(elem, valueOn);
32 }
33 else {
34 removeClass(elem, valueOn);
35 addClass(elem, valueOff);
36 }
37 return bool;
38}
39
40
41function makeClassToggle(valueOn, valueOff)
42{
43 return function(elem, bool) {
44 return toggleClass(elem, valueOn, valueOff, bool);
45 }
46}
47
48toggleShow = makeClassToggle("show", "hide");
49toggleCollapser = makeClassToggle("collapser", "expander");
50
51function toggleSection(id)
52{
53 var b = toggleShow(document.getElementById("section." + id));
54 toggleCollapser(document.getElementById("control." + id), b);
55 rememberCollapsed(id, b);
56 return b;
57}
58
59var collapsed = {};
60function rememberCollapsed(id, b)
61{
62 if(b)
63 delete collapsed[id]
64 else
65 collapsed[id] = null;
66
67 var sections = [];
68 for(var i in collapsed)
69 {
70 if(collapsed.hasOwnProperty(i))
71 sections.push(i);
72 }
73 // cookie specific to this page; don't use setCookie which sets path=/
74 document.cookie = "collapsed=" + escape(sections.join('+'));
75}
76
77function restoreCollapsed()
78{
79 var cookie = getCookie("collapsed");
80 if(!cookie)
81 return;
82
83 var ids = cookie.split('+');
84 for(var i in ids)
85 {
86 if(document.getElementById("section." + ids[i]))
87 toggleSection(ids[i]);
88 }
89}
90
91function setCookie(name, value) {
92 document.cookie = name + "=" + escape(value) + ";path=/;";
93}
94
95function clearCookie(name) {
96 document.cookie = name + "=;path=/;expires=Thu, 01-Jan-1970 00:00:01 GMT;";
97}
98
99function getCookie(name) {
100 var nameEQ = name + "=";
101 var ca = document.cookie.split(';');
102 for(var i=0;i < ca.length;i++) {
103 var c = ca[i];
104 while (c.charAt(0)==' ') c = c.substring(1,c.length);
105 if (c.indexOf(nameEQ) == 0) {
106 return unescape(c.substring(nameEQ.length,c.length));
107 }
108 }
109 return null;
110}
111
112
113
114var max_results = 75; // 50 is not enough to search for map in the base libraries
115var shown_range = null;
116var last_search = null;
117
118function quick_search()
119{
120 perform_search(false);
121}
122
123function full_search()
124{
125 perform_search(true);
126}
127
128
129function perform_search(full)
130{
131 var text = document.getElementById("searchbox").value.toLowerCase();
132 if (text == last_search && !full) return;
133 last_search = text;
134
135 var table = document.getElementById("indexlist");
136 var status = document.getElementById("searchmsg");
137 var children = table.firstChild.childNodes;
138
139 // first figure out the first node with the prefix
140 var first = bisect(-1);
141 var last = (first == -1 ? -1 : bisect(1));
142
143 if (first == -1)
144 {
145 table.className = "";
146 status.innerHTML = "No results found, displaying all";
147 }
148 else if (first == 0 && last == children.length - 1)
149 {
150 table.className = "";
151 status.innerHTML = "";
152 }
153 else if (last - first >= max_results && !full)
154 {
155 table.className = "";
156 status.innerHTML = "More than " + max_results + ", press Search to display";
157 }
158 else
159 {
160 // decide what you need to clear/show
161 if (shown_range)
162 setclass(shown_range[0], shown_range[1], "indexrow");
163 setclass(first, last, "indexshow");
164 shown_range = [first, last];
165 table.className = "indexsearch";
166 status.innerHTML = "";
167 }
168
169
170 function setclass(first, last, status)
171 {
172 for (var i = first; i <= last; i++)
173 {
174 children[i].className = status;
175 }
176 }
177
178
179 // do a binary search, treating 0 as ...
180 // return either -1 (no 0's found) or location of most far match
181 function bisect(dir)
182 {
183 var first = 0, finish = children.length - 1;
184 var mid, success = false;
185
186 while (finish - first > 3)
187 {
188 mid = Math.floor((finish + first) / 2);
189
190 var i = checkitem(mid);
191 if (i == 0) i = dir;
192 if (i == -1)
193 finish = mid;
194 else
195 first = mid;
196 }
197 var a = (dir == 1 ? first : finish);
198 var b = (dir == 1 ? finish : first);
199 for (var i = b; i != a - dir; i -= dir)
200 {
201 if (checkitem(i) == 0) return i;
202 }
203 return -1;
204 }
205
206
207 // from an index, decide what the result is
208 // 0 = match, -1 is lower, 1 is higher
209 function checkitem(i)
210 {
211 var s = getitem(i).toLowerCase().substr(0, text.length);
212 if (s == text) return 0;
213 else return (s > text ? -1 : 1);
214 }
215
216
217 // from an index, get its string
218 // this abstracts over alternates
219 function getitem(i)
220 {
221 for ( ; i >= 0; i--)
222 {
223 var s = children[i].firstChild.firstChild.data;
224 if (s.indexOf(' ') == -1)
225 return s;
226 }
227 return ""; // should never be reached
228 }
229}
230
231function setSynopsis(filename) {
232 if (parent.window.synopsis) {
233 if (parent.window.synopsis.location.replace) {
234 // In Firefox this avoids adding the change to the history.
235 parent.window.synopsis.location.replace(filename);
236 } else {
237 parent.window.synopsis.location = filename;
238 }
239 }
240}
241
242function addMenuItem(html) {
243 var menu = document.getElementById("page-menu");
244 if (menu) {
245 var btn = menu.firstChild.cloneNode(false);
246 btn.innerHTML = html;
247 menu.appendChild(btn);
248 }
249}
250
251function adjustForFrames() {
252 var bodyCls;
253
254 if (parent.location.href == window.location.href) {
255 // not in frames, so add Frames button
256 addMenuItem("<a href='#' onclick='reframe();return true;'>Frames</a>");
257 bodyCls = "no-frame";
258 }
259 else {
260 bodyCls = "in-frame";
261 }
262 addClass(document.body, bodyCls);
263}
264
265function reframe() {
266 setCookie("haddock-reframe", document.URL);
267 window.location = "frames.html";
268}
269
270function postReframe() {
271 var s = getCookie("haddock-reframe");
272 if (s) {
273 parent.window.main.location = s;
274 clearCookie("haddock-reframe");
275 }
276}
277
278function styles() {
279 var i, a, es = document.getElementsByTagName("link"), rs = [];
280 for (i = 0; a = es[i]; i++) {
281 if(a.rel.indexOf("style") != -1 && a.title) {
282 rs.push(a);
283 }
284 }
285 return rs;
286}
287
288function addStyleMenu() {
289 var as = styles();
290 var i, a, btns = "";
291 for(i=0; a = as[i]; i++) {
292 btns += "<li><a href='#' onclick=\"setActiveStyleSheet('"
293 + a.title + "'); return false;\">"
294 + a.title + "</a></li>"
295 }
296 if (as.length > 1) {
297 var h = "<div id='style-menu-holder'>"
298 + "<a href='#' onclick='styleMenu(); return false;'>Style &#9662;</a>"
299 + "<ul id='style-menu' class='hide'>" + btns + "</ul>"
300 + "</div>";
301 addMenuItem(h);
302 }
303}
304
305function setActiveStyleSheet(title) {
306 var as = styles();
307 var i, a, found;
308 for(i=0; a = as[i]; i++) {
309 a.disabled = true;
310 // need to do this always, some browsers are edge triggered
311 if(a.title == title) {
312 found = a;
313 }
314 }
315 if (found) {
316 found.disabled = false;
317 setCookie("haddock-style", title);
318 }
319 else {
320 as[0].disabled = false;
321 clearCookie("haddock-style");
322 }
323 styleMenu(false);
324}
325
326function resetStyle() {
327 var s = getCookie("haddock-style");
328 if (s) setActiveStyleSheet(s);
329}
330
331
332function styleMenu(show) {
333 var m = document.getElementById('style-menu');
334 if (m) toggleShow(m, show);
335}
336
337
338function pageLoad() {
339 addStyleMenu();
340 adjustForFrames();
341 resetStyle();
342 restoreCollapsed();
343}
344
diff --git a/hmacaroons.haddock b/hmacaroons.haddock
new file mode 100644
index 0000000..396db6f
--- /dev/null
+++ b/hmacaroons.haddock
Binary files differ
diff --git a/hslogo-16.png b/hslogo-16.png
new file mode 100644
index 0000000..0ff8579
--- /dev/null
+++ b/hslogo-16.png
Binary files differ
diff --git a/index-frames.html b/index-frames.html
new file mode 100644
index 0000000..23d7ff8
--- /dev/null
+++ b/index-frames.html
@@ -0,0 +1,4 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>hmacaroons-0.5.0.0: Haskell implementation of macaroons</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2window.onload = function () {pageLoad();};
3//]]>
4</script></head><body id="mini"><div id="module-list"><p class="caption">Modules</p><ul><li class="module"><a href="Crypto-Macaroon.html" target="main">Crypto.Macaroon</a></li><li class="module"><a href="Crypto-Macaroon-Serializer-Base64.html" target="main">Crypto.Macaroon.Serializer.Base64</a></li><li class="module"><a href="Crypto-Macaroon-Verifier.html" target="main">Crypto.Macaroon.Verifier</a></li></ul></div></body></html> \ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..806d141
--- /dev/null
+++ b/index.html
@@ -0,0 +1,9 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>hmacaroons-0.5.0.0: Haskell implementation of macaroons</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2window.onload = function () {pageLoad();};
3//]]>
4</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">hmacaroons-0.5.0.0: Haskell implementation of macaroons</p></div><div id="content"><div id="description"><h1>hmacaroons-0.5.0.0: Haskell implementation of macaroons</h1><div class="doc"><p>Hmacaroons is a pure haskell implementation of macaroons. It aims to
5provide compatibility at a serialized level with the
6<a href="https://github.com/rescrv/libmacaroons">reference implementation</a> and
7the <a href="https://github.com/ecordell/pymacaroons">python implementation</a></p><p><strong>WARNING: This library has not been audited by security experts.</strong>
8<strong>There is no error handling at the moment, everything is silently accepted</strong></p><p>It is developed in the purpose of exploration purposes, and would need
9much more attention if it were to be used in production.</p><h1>References</h1><p><a name="references"></a></p><h2>Papers and articles</h2><p><a name="papers-and-articles"></a></p><ul><li><a href="http://research.google.com/pubs/pub41892.html">Google paper on macaroons</a></li><li><a href="https://air.mozilla.org/macaroons-cookies-with-contextual-caveats-for-decentralized-authorization-in-the-cloud/">Macaroons at Mozilla</a></li><li><a href="http://hackingdistributed.com/2014/11/23/macaroons-in-hyperdex/">Time for better security in NoSQL</a></li></ul><h2>Implementations</h2><p><a name="implementations"></a></p><ul><li><a href="https://github.com/rescrv/libmacaroons">C</a></li><li><a href="https://github.com/nitram509/jmacaroons">Java</a></li><li><a href="https://github.com/nitram509/macaroons.js">Node.js</a></li><li><a href="https://github.com/ecordell/pymacaroons">Python</a></li><li><a href="https://github.com/cryptosphere/rust-macaroons.git">Rust</a></li></ul></div></div><div id="module-list"><p class="caption">Modules</p><ul><li><span id="control.n.1" class="module collapser" onclick="toggleSection('n.1')">Crypto</span><ul id="section.n.1" class="show"><li><span class="module"><span id="control.n.1.1" class="collapser" onclick="toggleSection('n.1.1')">&nbsp;</span><a href="Crypto-Macaroon.html">Crypto.Macaroon</a></span><ul id="section.n.1.1" class="show"><li><span id="control.n.1.1.1" class="module collapser" onclick="toggleSection('n.1.1.1')">Serializer</span><ul id="section.n.1.1.1" class="show"><li><span class="module"><a href="Crypto-Macaroon-Serializer-Base64.html">Crypto.Macaroon.Serializer.Base64</a></span></li></ul></li><li><span class="module"><a href="Crypto-Macaroon-Verifier.html">Crypto.Macaroon.Verifier</a></span></li></ul></li></ul></li></ul></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.1</p></div></body></html> \ No newline at end of file
diff --git a/mini_Crypto-Macaroon-Serializer-Base64.html b/mini_Crypto-Macaroon-Serializer-Base64.html
new file mode 100644
index 0000000..2ceba26
--- /dev/null
+++ b/mini_Crypto-Macaroon-Serializer-Base64.html
@@ -0,0 +1,4 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Crypto.Macaroon.Serializer.Base64</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2window.onload = function () {pageLoad();};
3//]]>
4</script></head><body id="mini"><div id="module-header"><p class="caption">Crypto.Macaroon.Serializer.Base64</p></div><div id="interface"><div class="top"><p class="src"><a href="Crypto-Macaroon-Serializer-Base64.html#v:serialize" target="main">serialize</a></p></div><div class="top"><p class="src"><a href="Crypto-Macaroon-Serializer-Base64.html#v:deserialize" target="main">deserialize</a></p></div></div></body></html> \ No newline at end of file
diff --git a/mini_Crypto-Macaroon-Verifier.html b/mini_Crypto-Macaroon-Verifier.html
new file mode 100644
index 0000000..d31b570
--- /dev/null
+++ b/mini_Crypto-Macaroon-Verifier.html
@@ -0,0 +1,4 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Crypto.Macaroon.Verifier</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2window.onload = function () {pageLoad();};
3//]]>
4</script></head><body id="mini"><div id="module-header"><p class="caption">Crypto.Macaroon.Verifier</p></div><div id="interface"><div class="top"><p class="src"><a href="Crypto-Macaroon-Verifier.html#v:verify" target="main">verify</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Crypto-Macaroon-Verifier.html#t:VerifierResult" target="main">VerifierResult</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Crypto-Macaroon-Verifier.html#t:ValidationError" target="main">ValidationError</a></p></div></div></body></html> \ No newline at end of file
diff --git a/mini_Crypto-Macaroon.html b/mini_Crypto-Macaroon.html
new file mode 100644
index 0000000..f1b4f71
--- /dev/null
+++ b/mini_Crypto-Macaroon.html
@@ -0,0 +1,4 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Crypto.Macaroon</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
2window.onload = function () {pageLoad();};
3//]]>
4</script></head><body id="mini"><div id="module-header"><p class="caption">Crypto.Macaroon</p></div><div id="interface"><h1>Types</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Crypto-Macaroon.html#t:Macaroon" target="main">Macaroon</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Crypto-Macaroon.html#t:Caveat" target="main">Caveat</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Crypto-Macaroon.html#t:Secret" target="main">Secret</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Crypto-Macaroon.html#t:Key" target="main">Key</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Crypto-Macaroon.html#t:Location" target="main">Location</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Crypto-Macaroon.html#t:Sig" target="main">Sig</a></p></div><h1>Accessing functions</h1><h2>Macaroons</h2><div class="top"><p class="src"><a href="Crypto-Macaroon.html#v:location" target="main">location</a></p></div><div class="top"><p class="src"><a href="Crypto-Macaroon.html#v:identifier" target="main">identifier</a></p></div><div class="top"><p class="src"><a href="Crypto-Macaroon.html#v:caveats" target="main">caveats</a></p></div><div class="top"><p class="src"><a href="Crypto-Macaroon.html#v:signature" target="main">signature</a></p></div><h2>Caveats</h2><div class="top"><p class="src"><a href="Crypto-Macaroon.html#v:cl" target="main">cl</a></p></div><div class="top"><p class="src"><a href="Crypto-Macaroon.html#v:cid" target="main">cid</a></p></div><div class="top"><p class="src"><a href="Crypto-Macaroon.html#v:vid" target="main">vid</a></p></div><h1>Create Macaroons</h1><div class="top"><p class="src"><a href="Crypto-Macaroon.html#v:create" target="main">create</a></p></div><div class="top"><p class="src"><a href="Crypto-Macaroon.html#v:inspect" target="main">inspect</a></p></div><div class="top"><p class="src"><a href="Crypto-Macaroon.html#v:addFirstPartyCaveat" target="main">addFirstPartyCaveat</a></p></div><h1>Serialize</h1><h1>Verify</h1></div></body></html> \ No newline at end of file
diff --git a/minus.gif b/minus.gif
new file mode 100644
index 0000000..1deac2f
--- /dev/null
+++ b/minus.gif
Binary files differ
diff --git a/ocean.css b/ocean.css
new file mode 100644
index 0000000..1110b40
--- /dev/null
+++ b/ocean.css
@@ -0,0 +1,600 @@
1/* @group Fundamentals */
2
3* { margin: 0; padding: 0 }
4
5/* Is this portable? */
6html {
7 background-color: white;
8 width: 100%;
9 height: 100%;
10}
11
12body {
13 background: white;
14 color: black;
15 text-align: left;
16 min-height: 100%;
17 position: relative;
18}
19
20p {
21 margin: 0.8em 0;
22}
23
24ul, ol {
25 margin: 0.8em 0 0.8em 2em;
26}
27
28dl {
29 margin: 0.8em 0;
30}
31
32dt {
33 font-weight: bold;
34}
35dd {
36 margin-left: 2em;
37}
38
39a { text-decoration: none; }
40a[href]:link { color: rgb(196,69,29); }
41a[href]:visited { color: rgb(171,105,84); }
42a[href]:hover { text-decoration:underline; }
43
44/* @end */
45
46/* @group Fonts & Sizes */
47
48/* Basic technique & IE workarounds from YUI 3
49 For reasons, see:
50 http://yui.yahooapis.com/3.1.1/build/cssfonts/fonts.css
51 */
52
53body {
54 font:13px/1.4 sans-serif;
55 *font-size:small; /* for IE */
56 *font:x-small; /* for IE in quirks mode */
57}
58
59h1 { font-size: 146.5%; /* 19pt */ }
60h2 { font-size: 131%; /* 17pt */ }
61h3 { font-size: 116%; /* 15pt */ }
62h4 { font-size: 100%; /* 13pt */ }
63h5 { font-size: 100%; /* 13pt */ }
64
65select, input, button, textarea {
66 font:99% sans-serif;
67}
68
69table {
70 font-size:inherit;
71 font:100%;
72}
73
74pre, code, kbd, samp, tt, .src {
75 font-family:monospace;
76 *font-size:108%;
77 line-height: 124%;
78}
79
80.links, .link {
81 font-size: 85%; /* 11pt */
82}
83
84#module-header .caption {
85 font-size: 182%; /* 24pt */
86}
87
88.info {
89 font-size: 85%; /* 11pt */
90}
91
92#table-of-contents, #synopsis {
93 /* font-size: 85%; /* 11pt */
94}
95
96
97/* @end */
98
99/* @group Common */
100
101.caption, h1, h2, h3, h4, h5, h6 {
102 font-weight: bold;
103 color: rgb(78,98,114);
104 margin: 0.8em 0 0.4em;
105}
106
107* + h1, * + h2, * + h3, * + h4, * + h5, * + h6 {
108 margin-top: 2em;
109}
110
111h1 + h2, h2 + h3, h3 + h4, h4 + h5, h5 + h6 {
112 margin-top: inherit;
113}
114
115ul.links {
116 list-style: none;
117 text-align: left;
118 float: right;
119 display: inline-table;
120 margin: 0 0 0 1em;
121}
122
123ul.links li {
124 display: inline;
125 border-left: 1px solid #d5d5d5;
126 white-space: nowrap;
127 padding: 0;
128}
129
130ul.links li a {
131 padding: 0.2em 0.5em;
132}
133
134.hide { display: none; }
135.show { display: inherit; }
136.clear { clear: both; }
137
138.collapser {
139 background-image: url(minus.gif);
140 background-repeat: no-repeat;
141}
142.expander {
143 background-image: url(plus.gif);
144 background-repeat: no-repeat;
145}
146p.caption.collapser,
147p.caption.expander {
148 background-position: 0 0.4em;
149}
150.collapser, .expander {
151 padding-left: 14px;
152 margin-left: -14px;
153 cursor: pointer;
154}
155
156pre {
157 padding: 0.25em;
158 margin: 0.8em 0;
159 background: rgb(229,237,244);
160 overflow: auto;
161 border-bottom: 0.25em solid white;
162 /* white border adds some space below the box to compensate
163 for visual extra space that paragraphs have between baseline
164 and the bounding box */
165}
166
167.src {
168 background: #f0f0f0;
169 padding: 0.2em 0.5em;
170}
171
172.keyword { font-weight: normal; }
173.def { font-weight: bold; }
174
175
176/* @end */
177
178/* @group Page Structure */
179
180#content {
181 margin: 0 auto;
182 padding: 0 2em 6em;
183}
184
185#package-header {
186 background: rgb(41,56,69);
187 border-top: 5px solid rgb(78,98,114);
188 color: #ddd;
189 padding: 0.2em;
190 position: relative;
191 text-align: left;
192}
193
194#package-header .caption {
195 background: url(hslogo-16.png) no-repeat 0em;
196 color: white;
197 margin: 0 2em;
198 font-weight: normal;
199 font-style: normal;
200 padding-left: 2em;
201}
202
203#package-header a:link, #package-header a:visited { color: white; }
204#package-header a:hover { background: rgb(78,98,114); }
205
206#module-header .caption {
207 color: rgb(78,98,114);
208 font-weight: bold;
209 border-bottom: 1px solid #ddd;
210}
211
212table.info {
213 float: right;
214 padding: 0.5em 1em;
215 border: 1px solid #ddd;
216 color: rgb(78,98,114);
217 background-color: #fff;
218 max-width: 40%;
219 border-spacing: 0;
220 position: relative;
221 top: -0.5em;
222 margin: 0 0 0 2em;
223}
224
225.info th {
226 padding: 0 1em 0 0;
227}
228
229div#style-menu-holder {
230 position: relative;
231 z-index: 2;
232 display: inline;
233}
234
235#style-menu {
236 position: absolute;
237 z-index: 1;
238 overflow: visible;
239 background: #374c5e;
240 margin: 0;
241 text-align: center;
242 right: 0;
243 padding: 0;
244 top: 1.25em;
245}
246
247#style-menu li {
248 display: list-item;
249 border-style: none;
250 margin: 0;
251 padding: 0;
252 color: #000;
253 list-style-type: none;
254}
255
256#style-menu li + li {
257 border-top: 1px solid #919191;
258}
259
260#style-menu a {
261 width: 6em;
262 padding: 3px;
263 display: block;
264}
265
266#footer {
267 background: #ddd;
268 border-top: 1px solid #aaa;
269 padding: 0.5em 0;
270 color: #666;
271 text-align: center;
272 position: absolute;
273 bottom: 0;
274 width: 100%;
275 height: 3em;
276}
277
278/* @end */
279
280/* @group Front Matter */
281
282#table-of-contents {
283 float: right;
284 clear: right;
285 background: #faf9dc;
286 border: 1px solid #d8d7ad;
287 padding: 0.5em 1em;
288 max-width: 20em;
289 margin: 0.5em 0 1em 1em;
290}
291
292#table-of-contents .caption {
293 text-align: center;
294 margin: 0;
295}
296
297#table-of-contents ul {
298 list-style: none;
299 margin: 0;
300}
301
302#table-of-contents ul ul {
303 margin-left: 2em;
304}
305
306#description .caption {
307 display: none;
308}
309
310#synopsis {
311 display: none;
312}
313
314.no-frame #synopsis {
315 display: block;
316 position: fixed;
317 right: 0;
318 height: 80%;
319 top: 10%;
320 padding: 0;
321 max-width: 75%;
322}
323
324#synopsis .caption {
325 float: left;
326 width: 29px;
327 color: rgba(255,255,255,0);
328 height: 110px;
329 margin: 0;
330 font-size: 1px;
331 padding: 0;
332}
333
334#synopsis p.caption.collapser {
335 background: url(synopsis.png) no-repeat -64px -8px;
336}
337
338#synopsis p.caption.expander {
339 background: url(synopsis.png) no-repeat 0px -8px;
340}
341
342#synopsis ul {
343 height: 100%;
344 overflow: auto;
345 padding: 0.5em;
346 margin: 0;
347}
348
349#synopsis ul ul {
350 overflow: hidden;
351}
352
353#synopsis ul,
354#synopsis ul li.src {
355 background-color: #faf9dc;
356 white-space: nowrap;
357 list-style: none;
358 margin-left: 0;
359}
360
361/* @end */
362
363/* @group Main Content */
364
365#interface div.top { margin: 2em 0; }
366#interface h1 + div.top,
367#interface h2 + div.top,
368#interface h3 + div.top,
369#interface h4 + div.top,
370#interface h5 + div.top {
371 margin-top: 1em;
372}
373#interface p.src .link {
374 float: right;
375 color: #919191;
376 border-left: 1px solid #919191;
377 background: #f0f0f0;
378 padding: 0 0.5em 0.2em;
379 margin: 0 -0.5em 0 0.5em;
380}
381
382#interface td.src .link {
383 float: right;
384 color: #919191;
385 border-left: 1px solid #919191;
386 background: #f0f0f0;
387 padding: 0 0.5em 0.2em;
388 margin: 0 -0.5em 0 0.5em;
389}
390
391#interface span.fixity {
392 color: #919191;
393 border-left: 1px solid #919191;
394 padding: 0.2em 0.5em 0.2em 0.5em;
395 margin: 0 -1em 0 1em;
396}
397
398#interface span.rightedge {
399 border-left: 1px solid #919191;
400 padding: 0.2em 0 0.2em 0;
401 margin: 0 0 0 1em;
402}
403
404#interface table { border-spacing: 2px; }
405#interface td {
406 vertical-align: top;
407 padding-left: 0.5em;
408}
409#interface td.src {
410 white-space: nowrap;
411}
412#interface td.doc p {
413 margin: 0;
414}
415#interface td.doc p + p {
416 margin-top: 0.8em;
417}
418
419.clearfix:after {
420 clear: both;
421 content: " ";
422 display: block;
423 height: 0;
424 visibility: hidden;
425}
426
427.subs dl {
428 margin: 0;
429}
430
431.subs dt {
432 float: left;
433 clear: left;
434 display: block;
435 margin: 1px 0;
436}
437
438.subs dd {
439 float: right;
440 width: 90%;
441 display: block;
442 padding-left: 0.5em;
443 margin-bottom: 0.5em;
444}
445
446.subs dd.empty {
447 display: none;
448}
449
450.subs dd p {
451 margin: 0;
452}
453
454/* Render short-style data instances */
455.inst ul {
456 height: 100%;
457 padding: 0.5em;
458 margin: 0;
459}
460
461.inst, .inst li {
462 list-style: none;
463 margin-left: 1em;
464}
465
466/* Workaround for bug in Firefox (issue #384) */
467.inst-left {
468 float: left;
469}
470
471.top p.src {
472 border-top: 1px solid #ccc;
473}
474
475.subs, .doc {
476 /* use this selector for one level of indent */
477 padding-left: 2em;
478}
479
480.warning {
481 color: red;
482}
483
484.arguments {
485 margin-top: -0.4em;
486}
487.arguments .caption {
488 display: none;
489}
490
491.fields { padding-left: 1em; }
492
493.fields .caption { display: none; }
494
495.fields p { margin: 0 0; }
496
497/* this seems bulky to me
498.methods, .constructors {
499 background: #f8f8f8;
500 border: 1px solid #eee;
501}
502*/
503
504/* @end */
505
506/* @group Auxillary Pages */
507
508
509.extension-list {
510 list-style-type: none;
511 margin-left: 0;
512}
513
514#mini {
515 margin: 0 auto;
516 padding: 0 1em 1em;
517}
518
519#mini > * {
520 font-size: 93%; /* 12pt */
521}
522
523#mini #module-list .caption,
524#mini #module-header .caption {
525 font-size: 125%; /* 15pt */
526}
527
528#mini #interface h1,
529#mini #interface h2,
530#mini #interface h3,
531#mini #interface h4 {
532 font-size: 109%; /* 13pt */
533 margin: 1em 0 0;
534}
535
536#mini #interface .top,
537#mini #interface .src {
538 margin: 0;
539}
540
541#mini #module-list ul {
542 list-style: none;
543 margin: 0;
544}
545
546#alphabet ul {
547 list-style: none;
548 padding: 0;
549 margin: 0.5em 0 0;
550 text-align: center;
551}
552
553#alphabet li {
554 display: inline;
555 margin: 0 0.25em;
556}
557
558#alphabet a {
559 font-weight: bold;
560}
561
562#index .caption,
563#module-list .caption { font-size: 131%; /* 17pt */ }
564
565#index table {
566 margin-left: 2em;
567}
568
569#index .src {
570 font-weight: bold;
571}
572#index .alt {
573 font-size: 77%; /* 10pt */
574 font-style: italic;
575 padding-left: 2em;
576}
577
578#index td + td {
579 padding-left: 1em;
580}
581
582#module-list ul {
583 list-style: none;
584 margin: 0 0 0 2em;
585}
586
587#module-list li {
588 clear: right;
589}
590
591#module-list span.collapser,
592#module-list span.expander {
593 background-position: 0 0.3em;
594}
595
596#module-list .package {
597 float: right;
598}
599
600/* @end */
diff --git a/plus.gif b/plus.gif
new file mode 100644
index 0000000..2d15c14
--- /dev/null
+++ b/plus.gif
Binary files differ
diff --git a/synopsis.png b/synopsis.png
new file mode 100644
index 0000000..85fb86e
--- /dev/null
+++ b/synopsis.png
Binary files differ