aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
m---------commonlib0
-rw-r--r--todo.txt91
-rw-r--r--vendor/gems/json-1.5.1/.specification65
-rw-r--r--vendor/gems/json-1.5.1/CHANGES188
-rw-r--r--vendor/gems/json-1.5.1/COPYING58
-rw-r--r--vendor/gems/json-1.5.1/COPYING-json-jruby57
-rw-r--r--vendor/gems/json-1.5.1/GPL340
-rw-r--r--vendor/gems/json-1.5.1/README356
-rw-r--r--vendor/gems/json-1.5.1/README-json-jruby.markdown33
-rw-r--r--vendor/gems/json-1.5.1/Rakefile401
-rw-r--r--vendor/gems/json-1.5.1/TODO1
-rw-r--r--vendor/gems/json-1.5.1/VERSION1
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log52
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat1000
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat1001
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat900
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat901
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat1000
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat1001
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log261
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat1000
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat1001
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat1000
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat1001
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat1000
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat1001
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log262
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat1000
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat1001
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log82
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log34
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat900
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat901
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log81
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat1000
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat1001
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log82
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat1000
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat1001
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log82
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat1000
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat1001
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log82
-rwxr-xr-xvendor/gems/json-1.5.1/benchmarks/generator2_benchmark.rb222
-rwxr-xr-xvendor/gems/json-1.5.1/benchmarks/generator_benchmark.rb224
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/ohai.json1216
-rw-r--r--vendor/gems/json-1.5.1/benchmarks/ohai.ruby1
-rwxr-xr-xvendor/gems/json-1.5.1/benchmarks/parser2_benchmark.rb251
-rwxr-xr-xvendor/gems/json-1.5.1/benchmarks/parser_benchmark.rb259
-rwxr-xr-xvendor/gems/json-1.5.1/bin/edit_json.rb9
-rwxr-xr-xvendor/gems/json-1.5.1/bin/prettify_json.rb75
-rw-r--r--vendor/gems/json-1.5.1/data/example.json1
-rw-r--r--vendor/gems/json-1.5.1/data/index.html38
-rw-r--r--vendor/gems/json-1.5.1/data/prototype.js4184
-rw-r--r--vendor/gems/json-1.5.1/ext/json/ext/generator/extconf.rb20
-rw-r--r--vendor/gems/json-1.5.1/ext/json/ext/generator/generator.c1417
-rw-r--r--vendor/gems/json-1.5.1/ext/json/ext/generator/generator.h197
-rw-r--r--vendor/gems/json-1.5.1/ext/json/ext/parser/extconf.rb16
-rw-r--r--vendor/gems/json-1.5.1/ext/json/ext/parser/parser.c1969
-rw-r--r--vendor/gems/json-1.5.1/ext/json/ext/parser/parser.h78
-rw-r--r--vendor/gems/json-1.5.1/ext/json/ext/parser/parser.rl826
-rwxr-xr-xvendor/gems/json-1.5.1/install.rb26
-rw-r--r--vendor/gems/json-1.5.1/java/lib/bytelist-1.0.6.jarbin0 -> 10493 bytes
-rw-r--r--vendor/gems/json-1.5.1/java/lib/jcodings.jarbin0 -> 242327 bytes
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/ByteListTranscoder.java167
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/Generator.java441
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/GeneratorMethods.java231
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/GeneratorService.java42
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/GeneratorState.java473
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/OptionsReader.java119
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/Parser.java2295
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/Parser.rl825
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/ParserService.java34
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/RuntimeInfo.java119
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/StringDecoder.java166
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/StringEncoder.java106
-rw-r--r--vendor/gems/json-1.5.1/java/src/json/ext/Utils.java89
-rw-r--r--vendor/gems/json-1.5.1/json-java.gemspec20
-rw-r--r--vendor/gems/json-1.5.1/lib/json.rb10
-rw-r--r--vendor/gems/json-1.5.1/lib/json/Array.xpm21
-rw-r--r--vendor/gems/json-1.5.1/lib/json/FalseClass.xpm21
-rw-r--r--vendor/gems/json-1.5.1/lib/json/Hash.xpm21
-rw-r--r--vendor/gems/json-1.5.1/lib/json/Key.xpm73
-rw-r--r--vendor/gems/json-1.5.1/lib/json/NilClass.xpm21
-rw-r--r--vendor/gems/json-1.5.1/lib/json/Numeric.xpm28
-rw-r--r--vendor/gems/json-1.5.1/lib/json/String.xpm96
-rw-r--r--vendor/gems/json-1.5.1/lib/json/TrueClass.xpm21
-rw-r--r--vendor/gems/json-1.5.1/lib/json/add/core.rb147
-rw-r--r--vendor/gems/json-1.5.1/lib/json/add/rails.rb8
-rw-r--r--vendor/gems/json-1.5.1/lib/json/common.rb419
-rw-r--r--vendor/gems/json-1.5.1/lib/json/editor.rb1369
-rw-r--r--vendor/gems/json-1.5.1/lib/json/ext.rb28
-rw-r--r--vendor/gems/json-1.5.1/lib/json/json.xpm1499
-rw-r--r--vendor/gems/json-1.5.1/lib/json/pure.rb15
-rw-r--r--vendor/gems/json-1.5.1/lib/json/pure/generator.rb441
-rw-r--r--vendor/gems/json-1.5.1/lib/json/pure/parser.rb320
-rw-r--r--vendor/gems/json-1.5.1/lib/json/version.rb8
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail1.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail10.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail11.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail12.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail13.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail14.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail18.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail19.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail2.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail20.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail21.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail22.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail23.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail24.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail25.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail27.json2
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail28.json2
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail3.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail4.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail5.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail6.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail7.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail8.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/fail9.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/pass1.json56
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/pass15.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/pass16.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/pass17.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/pass2.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/pass26.json1
-rw-r--r--vendor/gems/json-1.5.1/tests/fixtures/pass3.json6
-rw-r--r--vendor/gems/json-1.5.1/tests/setup_variant.rb11
-rwxr-xr-xvendor/gems/json-1.5.1/tests/test_json.rb390
-rwxr-xr-xvendor/gems/json-1.5.1/tests/test_json_addition.rb167
-rw-r--r--vendor/gems/json-1.5.1/tests/test_json_encoding.rb65
-rwxr-xr-xvendor/gems/json-1.5.1/tests/test_json_fixtures.rb35
-rwxr-xr-xvendor/gems/json-1.5.1/tests/test_json_generate.rb179
-rw-r--r--vendor/gems/json-1.5.1/tests/test_json_string_matching.rb40
-rwxr-xr-xvendor/gems/json-1.5.1/tests/test_json_unicode.rb72
-rwxr-xr-xvendor/gems/json-1.5.1/tools/fuzz.rb139
-rwxr-xr-xvendor/gems/json-1.5.1/tools/server.rb61
138 files changed, 46137 insertions, 57 deletions
diff --git a/commonlib b/commonlib
-Subproject 7c4680edc7f6b69888db90b2555c775b48959a0
+Subproject b43b5949501f763e84bed7fce30458578bf92f0
diff --git a/todo.txt b/todo.txt
index 49ec8568f..e78429960 100644
--- a/todo.txt
+++ b/todo.txt
@@ -5,10 +5,7 @@ Next (things that will reduce admin time mainly)
- "Can I help out" a bit invisible
-Keep URL through funnel for Louise
-
Destroy request - does it remove the tags?
-
Richard says he wants the internationalisation to be so it could be one site
with combined search. Why obey the notion of a country? I'm not sure, but
it might be prudent to write it so it can run multiple jurisdictions in
@@ -97,6 +94,19 @@ Things to make bots not crawl somehow:
Renaming of a body, or changing its domain, should clear the cached bubbles of
all requests to that body.
+Change it to store emails as files in the filesystem? For speed of backup if nothing else.
+Should have simpler system for us to upload files sent to us via CD etc.
+Currently we have to manually put them in the files directory on the vhost.
+Make it so web upload interface copes gracefully with arbitarily large messages
+(it causes speed trouble having them in the database right now)
+Maybe have flag saying "don't try to make snippet for this it is just too big".
+
+Compress the emails in the database, or on disk
+
+Keep cached columns in database in their own table, might give performance benefits
+
+
+
Letting you hide individual events (incoming/outgoing messages, annotations)
==================================
@@ -150,6 +160,7 @@ The image in a "stream" section get corrupted:
Needs a fancy PDF library (which doesn't exist yet) that can tell when it is
binary or text stream within the file. See thread in email "corrupted pdf" for
more details. Maybe have option in admin to turn off censoring on a particular file.
+Maybe just do an MX check to see if it is really an email :)
check-recent-requests-sent probably doesn't work, as exim log lines wouldn't
be load in case where the envelope from gets broken?
@@ -157,32 +168,6 @@ be load in case where the envelope from gets broken?
Point all MX records to one server, so can see incoming messages in exim logs also.
Hmmm, but less robust. Run the exim log grabber across all mail servers?
-XXX Not sure all this matters really, requests seems to be getting through better these days?
-Make request addresses easier to type in again, and routing work better:
-* Put the request from address in the database,
- XXX make sure it knows the type, as need fuzzy rule for matching/guessing according to type
-then change the rule for making it.
-* Change holding pen to lookup hash e.g. 1bd8ea of the request address in database
- (so gives good guess it the hash is right, but the number is wrong)
-* Use maybe words for generated email address? Name of the person and a request
-number (i.e. number of that persons request, so there are few numbers)?
-julian.todd@section44.whatdotheyknow.com
-* Use words from a dictionary, e.g. cat, mouse, rat, hat etc.
-* Use single words from the request, e.g. section, terrorism, allotment
-* Make sure avoid FROM_ENDS_IN_NUMS rule in Spam Assassin
-* It looks like an error generated by GFI MailEssentials, see p62 of chapter
- 11 of the manual at http://www.gfi.com/mes/me11manual.pdf which states:
- 7. Check if emails contain more than X numbers in the MIME from:
- Frequently, more than 3 numbers in the MIME from means that the sender is a
- spammer. The reason for this is that spammers often use tools to
- automatically create reply-to: addresses on hotmail and other free email
- services. Frequently they use 3 or more numbers in the name to make sure
- the reply-to: is unique.
-* Use FOI code allocated by authority to work out where emails are to go
-* Second request to same authority by same person - tell them to be sure
-to use the right email
-* Improve routing from Exim so copes with addresses not having request- prefix.
-
When on a small screen, the actual form when making a new request is below
the fold, and it isn't obvious what you need to do. (Seen while watching
a new user try to make a request)
@@ -201,6 +186,7 @@ substantively different (modulo Re: and Fwd:) from the title and other subjects
For Scotland, don't need to say "normally" equivocally when it is taking more than 20 days
(as there is no public interest test).
+Arguably, and to simplify things with Alaveteli, we should just be campaigning about this whole public interest test thing anyway, and not pussy foot about it. Not sure what form of wording to use that does that that is true though.
Add explicit option for user to select "misdelivered to the wrong request"
and let people move them to the right place.
@@ -227,13 +213,16 @@ as well.
Let requesters view the uncensored versions of their correspondence (e.g. with
emails in it). Let other people do so with a CAPTCHA?
+Perhaps easy thing to do is just to do it for email addresses (and not the request email address)
For followups, have radio button to say is it a new request or followup
Do by uncommenting the "new information" option when writing a followup, so
that it makes a new request
-When it prompts error_message people to send annotation, maybe just show them
-the email address of the error to check then and there?
+When a user says that a response is an error message, it prompts them to say
+what the problem is to administrators. It could at that time show them the
+email of the authority that their request was sent to for them to check
+then and there, and tell the administrators.
If you've already conducted an internal review, at all places
- when on unhappy/url
@@ -243,13 +232,12 @@ don't offer it again, as they've already done it.
Example of completed review:
http://www.whatdotheyknow.com/request/request_for_full_disclosure_of_b#incoming-9267
-Don't allow sending internal review text twice (although make sure they
+Don't allow sending internal review boiler plate text twice (although make sure they
can write followups to internal review)
e.g. http://www.whatdotheyknow.com/request/reply_to_letter_from_historic_ro
Clock for internal review
- The Information Commissioner has issued a "Good Practice Guidance" document:
- http://www.ico.gov.uk/upload/documents/library/freedom_of_information/detailed_specialist_guides/foi_good_practice_guidance_5.pdf
+ The Information Commissioner has issued a "Good Practice Guidance" document: http://www.ico.gov.uk/upload/documents/library/freedom_of_information/detailed_specialist_guides/foi_good_practice_guidance_5.pdf
20 days is late
40 days max.
Fix up the text: "The internal review should take 2-3 weeks for simple cases,
@@ -300,28 +288,11 @@ Show similar requests after you have filed yours - maybe on preview too.
Test code for rendering lots of different attachments and filetypes
Test code for internal review submitting
-Protect from CSRF with this in app controller (care it doesn't break anything):
- # See ActionController::RequestForgeryProtection for details
- # Uncomment the :secret if you're not using the cookie session store
- protect_from_forgery # :secret => '<%= app_secret %>'
-
Look at quote_address_if_necessary in actionmailer's quoting.rb - why did it
not work for the email address with "@" in its name part?
-Should group by the request id for search queries (so all appear
-together when request and response mention same term)
-
Something to check which tags are used but aren't in PublicBody category lists
-Change it to store emails as files in the filesystem? For speed of backup if nothing else.
-Should have simpler system for us to upload files sent to us via CD etc.
-Currently we have to manually put them in the files directory on the vhost.
-Make it so web upload interface copes gracefully with arbitarily large messages
-(it causes speed trouble having them in the database right now)
-
-Compress the emails in the database
-Don't store the cached text in backups - maybe keep it in its own table to avoid that?
-
Other references to title field changes don't get search index updated when title is altered
(e.g. when a public body is renamed)
Maybe just reindex all once a week, but it is a bit slow now, so perhaps do it properly.
@@ -336,6 +307,8 @@ Never updates cached attachment text unless cache is explicitly cleared (which
might matter with software updates, or code changes). Should we clear the
cache automatically every month in the middle of the night or something?
$ ./script/clear-caches
+Alternative - embed some identifier in the code and the cache directory, and
+detect it changes and automatically clear the cache.
Display and indexing of response emails/attachments
@@ -485,7 +458,8 @@ Lisa asked for this - is definitely only whole requests needed. Tony says
anyone should be able to edit the tags, but requester should have last say (so
can prevent a tag being added that they removed).
-Read reply - ask for exchange read receipts, and show if mail was read.
+Read reply - ask for Microsoft Exchange "read receipts", and show if mail was read.
+Or maybe use a webbug.
Telephone numbers. Add advice in workflow to call authority first to check
form they have info in. Store telephone numbers in database.
@@ -508,8 +482,6 @@ their email address (perhaps just have admins validate / approve it)
Detect councils that always send automatic acknowledgements, and notice if they
do not for a particular request? (e.g. Leicestershire County Council)
-Interface for when you change your email address - easier to do now with post_redirect.circumstance?
-
Add tips on using the law, e.g.:
- You can go up and down between local and national - ask local places what
their policy is, and hwo they are implementing it. Ask national things what
@@ -519,7 +491,7 @@ Add note by any exemption to the page on FOI Wiki Add note on mention of
"Re-Use of Public Sector Information Regulations 2005"
to the appropriate FAQ.
-Hyperlink Section 1(3) to the act
+Hyperlink Section 1(3) to the act (or have an automatic tip appear)
http://www.whatdotheyknow.com/request/university_investment_in_the_arm#incoming-86
and to guidance notes
http://www.ico.gov.uk/what_we_cover/freedom_of_information/guidance.aspx
@@ -541,7 +513,13 @@ Make text boxes autogrow as you type into them.
(10:32:52) Matthew: their function is called autogrow_textarea() by the way, if you just want to look at it...
thanks :) I won't do it now as there are more important things, I was just accidentally impressed
-Editable user profile, including photo upload
+"Why not fill in your profile?" not that many people fill in their profile, we could have special
+advert (on page when they are on site) trying to force them to (maybe only if active). Give
+points for doing this.
+Also could offer option of Gravatar during signup, or later (as explicit option, so not leaking private info)
+
+Scoreboards and gamification. Put all admin functions in the main site, and let anyone get
+power to do them by accumulating points doing other useful things. There's lots of stuff!
.tif files are hard for people to view as multi page, consider automatically
separating out the pages as separate links (to .png files or whatever)
@@ -578,5 +556,4 @@ EU regulation 1049/2001 requests
US requests (with Sunlight)
OCR all images automatically, even if badly (check for tiffs!)
-Maybe use Scrbd's free service :) http://www.scribd.com/paper
diff --git a/vendor/gems/json-1.5.1/.specification b/vendor/gems/json-1.5.1/.specification
new file mode 100644
index 000000000..26813246a
--- /dev/null
+++ b/vendor/gems/json-1.5.1/.specification
@@ -0,0 +1,65 @@
+--- !ruby/object:Gem::Specification
+name: json
+version: !ruby/object:Gem::Version
+ hash: 1
+ segments:
+ - 1
+ - 5
+ - 1
+ version: 1.5.1
+platform: ruby
+authors:
+- Florian Frank
+autorequire:
+bindir: bin
+cert_chain: []
+
+date: 2011-01-25 23:00:00 +00:00
+default_executable:
+dependencies: []
+
+description: This is a JSON implementation as a Ruby extension in C.
+email: flori@ping.de
+executables: []
+
+extensions: []
+
+extra_rdoc_files: []
+
+files: []
+
+has_rdoc: true
+homepage: http://flori.github.com/json
+licenses: []
+
+post_install_message:
+rdoc_options: []
+
+require_paths:
+- lib
+required_ruby_version: !ruby/object:Gem::Requirement
+ requirements:
+ - - ">="
+ - !ruby/object:Gem::Version
+ hash: 3
+ segments:
+ - 0
+ version: "0"
+required_rubygems_version: !ruby/object:Gem::Requirement
+ requirements:
+ - - ">="
+ - !ruby/object:Gem::Version
+ hash: 3
+ segments:
+ - 0
+ version: "0"
+requirements: []
+
+rubyforge_project: json
+rubygems_version: 1.3.7
+signing_key:
+specification_version: 3
+summary: JSON Implementation for Ruby
+test_files: []
+
+
diff --git a/vendor/gems/json-1.5.1/CHANGES b/vendor/gems/json-1.5.1/CHANGES
new file mode 100644
index 000000000..3ee1a8b8b
--- /dev/null
+++ b/vendor/gems/json-1.5.1/CHANGES
@@ -0,0 +1,188 @@
+2011-01-24 (1.5.1)
+ * Made rake-compiler build a fat binary gem. This should fix issue
+ https://github.com/flori/json/issues#issue/54.
+2011-01-22 (1.5.0)
+ * Included Java source codes for the Jruby extension made by Daniel Luz
+ <dev@mernen.com>.
+ * Output full exception message of deep_const_get to aid debugging.
+ * Fixed an issue with ruby 1.9 Module#const_defined? method, that was
+ reported by Riley Goodside.
+2010-08-09 (1.4.6)
+ * Fixed oversight reported in http://github.com/flori/json/issues/closed#issue/23,
+ always create a new object from the state prototype.
+ * Made pure and ext api more similar again.
+2010-08-07 (1.4.5)
+ * Manage data structure nesting depth in state object during generation. This
+ should reduce problems with to_json method definіtions that only have one
+ argument.
+ * Some fixes in the state objects and additional tests.
+2010-08-06 (1.4.4)
+ * Fixes build problem for rubinius under OS X, http://github.com/flori/json/issues/closed#issue/25
+ * Fixes crashes described in http://github.com/flori/json/issues/closed#issue/21 and
+ http://github.com/flori/json/issues/closed#issue/23
+2010-05-05 (1.4.3)
+ * Fixed some test assertions, from Ruby r27587 and r27590, patch by nobu.
+ * Fixed issue http://github.com/flori/json/issues/#issue/20 reported by
+ electronicwhisper@github. Thx!
+2010-04-26 (1.4.2)
+ * Applied patch from naruse Yui NARUSE <naruse@airemix.com> to make building with
+ Microsoft Visual C possible again.
+ * Applied patch from devrandom <c1.github@niftybox.net> in order to allow building of
+ json_pure if extensiontask is not present.
+ * Thanks to Dustin Schneider <dustin@stocktwits.com>, who reported a memory
+ leak, which is fixed in this release.
+ * Applied 993f261ccb8f911d2ae57e9db48ec7acd0187283 patch from josh@github.
+2010-04-25 (1.4.1)
+ * Fix for a bug reported by Dan DeLeo <dan@kallistec.com>, caused by T_FIXNUM
+ being different on 32bit/64bit architectures.
+2010-04-23 (1.4.0)
+ * Major speed improvements and building with simplified
+ directory/file-structure.
+ * Extension should at least be comapatible with MRI, YARV and Rubinius.
+2010-04-07 (1.2.4)
+ * Triger const_missing callback to make Rails' dynamic class loading work.
+2010-03-11 (1.2.3)
+ * Added a State#[] method which returns an attribute's value in order to
+ increase duck type compatibility to Hash.
+2010-02-27 (1.2.2)
+ * Made some changes to make the building of the parser/generator compatible
+ to Rubinius.
+2009-11-25 (1.2.1)
+ * Added :symbolize_names option to Parser, which returns symbols instead of
+ strings in object names/keys.
+2009-10-01 (1.2.0)
+ * fast_generate now raises an exeception for nan and infinite floats.
+ * On Ruby 1.8 json supports parsing of UTF-8, UTF-16BE, UTF-16LE, UTF-32BE,
+ and UTF-32LE JSON documents now. Under Ruby 1.9 the M17n conversion
+ functions are used to convert from all supported encodings. ASCII-8BIT
+ encoded strings are handled like all strings under Ruby 1.8 were.
+ * Better documentation
+2009-08-23 (1.1.9)
+ * Added forgotten main doc file extra_rdoc_files.
+2009-08-23 (1.1.8)
+ * Applied a patch by OZAWA Sakuro <sakuro@2238club.org> to make json/pure
+ work in environments that don't provide iconv.
+ * Applied patch by okkez_ in order to fix Ruby Bug #1768:
+ http://redmine.ruby-lang.org/issues/show/1768.
+ * Finally got around to avoid the rather paranoid escaping of ?/ characters
+ in the generator's output. The parsers aren't affected by this change.
+ Thanks to Rich Apodaca <rapodaca@metamolecular.com> for the suggestion.
+2009-06-29 (1.1.7)
+ * Security Fix for JSON::Pure::Parser. A specially designed string could
+ cause catastrophic backtracking in one of the parser's regular expressions
+ in earlier 1.1.x versions. JSON::Ext::Parser isn't affected by this issue.
+ Thanks to Bartosz Blimke <bartosz@new-bamboo.co.uk> for reporting this
+ problem.
+ * This release also uses a less strict ruby version requirement for the
+ creation of the mswin32 native gem.
+2009-05-10 (1.1.6)
+ * No changes. І tested native linux gems in the last release and they don't
+ play well with different ruby versions other than the one the gem was built
+ with. This release is just to bump the version number in order to skip the
+ native gem on rubyforge.
+2009-05-10 (1.1.5)
+ * Started to build gems with rake-compiler gem.
+ * Applied patch object/array class patch from Brian Candler
+ <B.Candler@pobox.com> and fixes.
+2009-04-01 (1.1.4)
+ * Fixed a bug in the creation of serialized generic rails objects reported by
+ Friedrich Graeter <graeter@hydrixos.org>.
+ * Deleted tests/runner.rb, we're using testrb instead.
+ * Editor supports Infinity in numbers now.
+ * Made some changes in order to get the library to compile/run under Ruby
+ 1.9.
+ * Improved speed of the code path for the fast_generate method in the pure
+ variant.
+2008-07-10 (1.1.3)
+ * Wesley Beary <monki@geemus.com> reported a bug in json/add/core's DateTime
+ handling: If the nominator and denominator of the offset were divisible by
+ each other Ruby's Rational#to_s returns them as an integer not a fraction
+ with '/'. This caused a ZeroDivisionError during parsing.
+ * Use Date#start and DateTime#start instead of sg method, while
+ remaining backwards compatible.
+ * Supports ragel >= 6.0 now.
+ * Corrected some tests.
+ * Some minor changes.
+2007-11-27 (1.1.2)
+ * Remember default dir (last used directory) in editor.
+ * JSON::Editor.edit method added, the editor can now receive json texts from
+ the clipboard via C-v.
+ * Load json texts from an URL pasted via middle button press.
+ * Added :create_additions option to Parser. This makes it possible to disable
+ the creation of additions by force, in order to treat json texts as data
+ while having additions loaded.
+ * Jacob Maine <jmaine@blurb.com> reported, that JSON(:foo) outputs a JSON
+ object if the rails addition is enabled, which is wrong. It now outputs a
+ JSON string "foo" instead, like suggested by Jacob Maine.
+ * Discovered a bug in the Ruby Bugs Tracker on rubyforge, that was reported
+ by John Evans lgastako@gmail.com. He could produce a crash in the JSON
+ generator by returning something other than a String instance from a
+ to_json method. I now guard against this by doing a rather crude type
+ check, which raises an exception instead of crashing.
+2007-07-06 (1.1.1)
+ * Yui NARUSE <naruse@airemix.com> sent some patches to fix tests for Ruby
+ 1.9. I applied them and adapted some of them a bit to run both on 1.8 and
+ 1.9.
+ * Introduced a JSON.parse! method without depth checking for people who like
+ danger.
+ * Made generate and pretty_generate methods configurable by an options hash.
+ * Added :allow_nan option to parser and generator in order to handle NaN,
+ Infinity, and -Infinity correctly - if requested. Floats, which aren't numbers,
+ aren't valid JSON according to RFC4627, so by default an exception will be
+ raised if any of these symbols are encountered. Thanks to Andrea Censi
+ <andrea.censi@dis.uniroma1.it> for his hint about this.
+ * Fixed some more tests for Ruby 1.9.
+ * Implemented dump/load interface of Marshal as suggested in ruby-core:11405
+ by murphy <murphy@rubychan.de>.
+ * Implemented the max_nesting feature for generate methods, too.
+ * Added some implementations for ruby core's custom objects for
+ serialisation/deserialisation purposes.
+2007-05-21 (1.1.0)
+ * Implemented max_nesting feature for parser to avoid stack overflows for
+ data from untrusted sources. If you trust the source, you can disable it
+ with the option max_nesting => false.
+ * Piers Cawley <pdcawley@bofh.org.uk> reported a bug, that not every
+ character can be escaped by ?\ as required by RFC4627. There's a
+ contradiction between David Crockford's JSON checker test vectors (in
+ tests/fixtures) and RFC4627, though. I decided to stick to the RFC, because
+ the JSON checker seems to be a bit older than the RFC.
+ * Extended license to Ruby License, which includes the GPL.
+ * Added keyboard shortcuts, and 'Open location' menu item to edit_json.rb.
+2007-05-09 (1.0.4)
+ * Applied a patch from Yui NARUSE <naruse@airemix.com> to make JSON compile
+ under Ruby 1.9. Thank you very much for mailing it to me!
+ * Made binary variants of JSON fail early, instead of falling back to the
+ pure version. This should avoid overshadowing of eventual problems while
+ loading of the binary.
+2007-03-24 (1.0.3)
+ * Improved performance of pure variant a bit.
+ * The ext variant of this release supports the mswin32 platform. Ugh!
+2007-03-24 (1.0.2)
+ * Ext Parser didn't parse 0e0 correctly into 0.0: Fixed!
+2007-03-24 (1.0.1)
+ * Forgot some object files in the build dir. I really like that - not!
+2007-03-24 (1.0.0)
+ * Added C implementations for the JSON generator and a ragel based JSON
+ parser in C.
+ * Much more tests, especially fixtures from json.org.
+ * Further improved conformance to RFC4627.
+2007-02-09 (0.4.3)
+ * Conform more to RFC4627 for JSON: This means JSON strings
+ now always must contain exactly one object "{ ... }" or array "[ ... ]" in
+ order to be parsed without raising an exception. The definition of what
+ constitutes a whitespace is narrower in JSON than in Ruby ([ \t\r\n]), and
+ there are differences in floats and integers (no octals or hexadecimals) as
+ well.
+ * Added aliases generate and pretty_generate of unparse and pretty_unparse.
+ * Fixed a test case.
+ * Catch an Iconv::InvalidEncoding exception, that seems to occur on some Sun
+ boxes with SunOS 5.8, if iconv doesn't support utf16 conversions. This was
+ reported by Andrew R Jackson <andrewj@bcm.tmc.edu>, thanks a bunch!
+2006-08-25 (0.4.2)
+ * Fixed a bug in handling solidi (/-characters), that was reported by
+ Kevin Gilpin <kevin.gilpin@alum.mit.edu>.
+2006-02-06 (0.4.1)
+ * Fixed a bug related to escaping with backslashes. Thanks for the report go
+ to Florian Munz <surf@theflow.de>.
+2005-09-23 (0.4.0)
+ * Initial Rubyforge Version
diff --git a/vendor/gems/json-1.5.1/COPYING b/vendor/gems/json-1.5.1/COPYING
new file mode 100644
index 000000000..c3a2126d5
--- /dev/null
+++ b/vendor/gems/json-1.5.1/COPYING
@@ -0,0 +1,58 @@
+Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.co.jp>.
+You can redistribute it and/or modify it under either the terms of the GPL
+(see GPL file), or the conditions below:
+
+ 1. You may make and give away verbatim copies of the source form of the
+ software without restriction, provided that you duplicate all of the
+ original copyright notices and associated disclaimers.
+
+ 2. You may modify your copy of the software in any way, provided that
+ you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise
+ make them Freely Available, such as by posting said
+ modifications to Usenet or an equivalent medium, or by allowing
+ the author to include your modifications in the software.
+
+ b) use the modified software only within your corporation or
+ organization.
+
+ c) rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided.
+
+ d) make other distribution arrangements with the author.
+
+ 3. You may distribute the software in object code or executable
+ form, provided that you do at least ONE of the following:
+
+ a) distribute the executables and library files of the software,
+ together with instructions (in the manual page or equivalent)
+ on where to get the original distribution.
+
+ b) accompany the distribution with the machine-readable source of
+ the software.
+
+ c) give non-standard executables non-standard names, with
+ instructions on where to get the original software distribution.
+
+ d) make other distribution arrangements with the author.
+
+ 4. You may modify and include the part of the software into any other
+ software (possibly commercial). But some files in the distribution
+ are not written by the author, so that they are not under this terms.
+
+ They are gc.c(partly), utils.c(partly), regex.[ch], st.[ch] and some
+ files under the ./missing directory. See each file for the copying
+ condition.
+
+ 5. The scripts and library files supplied as input to or produced as
+ output from the software do not automatically fall under the
+ copyright of the software, but belong to whomever generated them,
+ and may be sold commercially, and may be aggregated with this
+ software.
+
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
+
diff --git a/vendor/gems/json-1.5.1/COPYING-json-jruby b/vendor/gems/json-1.5.1/COPYING-json-jruby
new file mode 100644
index 000000000..137a3da2b
--- /dev/null
+++ b/vendor/gems/json-1.5.1/COPYING-json-jruby
@@ -0,0 +1,57 @@
+JSON-JRuby is copyrighted free software by Daniel Luz <mernen at gmail dot com>,
+and is a derivative work of Florian Frank's json library <flori at ping dot de>.
+You can redistribute it and/or modify it under either the terms of the GPL
+version 2 (see the file GPL), or the conditions below:
+
+ 1. You may make and give away verbatim copies of the source form of the
+ software without restriction, provided that you duplicate all of the
+ original copyright notices and associated disclaimers.
+
+ 2. You may modify your copy of the software in any way, provided that
+ you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise
+ make them Freely Available, such as by posting said
+ modifications to Usenet or an equivalent medium, or by allowing
+ the author to include your modifications in the software.
+
+ b) use the modified software only within your corporation or
+ organization.
+
+ c) give non-standard binaries non-standard names, with
+ instructions on where to get the original software distribution.
+
+ d) make other distribution arrangements with the author.
+
+ 3. You may distribute the software in object code or binary form,
+ provided that you do at least ONE of the following:
+
+ a) distribute the binaries and library files of the software,
+ together with instructions (in the manual page or equivalent)
+ on where to get the original distribution.
+
+ b) accompany the distribution with the machine-readable source of
+ the software.
+
+ c) give non-standard binaries non-standard names, with
+ instructions on where to get the original software distribution.
+
+ d) make other distribution arrangements with the author.
+
+ 4. You may modify and include the part of the software into any other
+ software (possibly commercial). But some files in the distribution
+ are not written by the author, so that they are not under these terms.
+
+ For the list of those files and their copying conditions, see the
+ file LEGAL.
+
+ 5. The scripts and library files supplied as input to or produced as
+ output from the software do not automatically fall under the
+ copyright of the software, but belong to whomever generated them,
+ and may be sold commercially, and may be aggregated with this
+ software.
+
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
diff --git a/vendor/gems/json-1.5.1/GPL b/vendor/gems/json-1.5.1/GPL
new file mode 100644
index 000000000..db2fc4505
--- /dev/null
+++ b/vendor/gems/json-1.5.1/GPL
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/vendor/gems/json-1.5.1/README b/vendor/gems/json-1.5.1/README
new file mode 100644
index 000000000..22249bad8
--- /dev/null
+++ b/vendor/gems/json-1.5.1/README
@@ -0,0 +1,356 @@
+== Description
+
+This is a implementation of the JSON specification according to RFC 4627
+http://www.ietf.org/rfc/rfc4627.txt . Starting from version 1.0.0 on there
+will be two variants available:
+
+* A pure ruby variant, that relies on the iconv and the stringscan
+ extensions, which are both part of the ruby standard library.
+* The quite a bit faster C extension variant, which is in parts implemented
+ in C and comes with its own unicode conversion functions and a parser
+ generated by the ragel state machine compiler
+ http://www.cs.queensu.ca/~thurston/ragel .
+
+Both variants of the JSON generator generate UTF-8 character sequences by
+default. If an :ascii_only option with a true value is given, they escape all
+non-ASCII and control characters with \uXXXX escape sequences, and support
+UTF-16 surrogate pairs in order to be able to generate the whole range of
+unicode code points.
+
+All strings, that are to be encoded as JSON strings, should be UTF-8 byte
+sequences on the Ruby side. To encode raw binary strings, that aren't UTF-8
+encoded, please use the to_json_raw_object method of String (which produces
+an object, that contains a byte array) and decode the result on the receiving
+endpoint.
+
+The JSON parsers can parse UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, and UTF-32LE
+JSON documents under Ruby 1.8. Under Ruby 1.9 they take advantage of Ruby's
+M17n features and can parse all documents which have the correct
+String#encoding set. If a document string has ASCII-8BIT as an encoding the
+parser attempts to figure out which of the UTF encodings from above it is and
+trys to parse it.
+
+== Installation
+
+It's recommended to use the extension variant of JSON, because it's faster than
+the pure ruby variant. If you cannot build it on your system, you can settle
+for the latter.
+
+Just type into the command line as root:
+
+ # rake install
+
+The above command will build the extensions and install them on your system.
+
+ # rake install_pure
+
+or
+
+ # ruby install.rb
+
+will just install the pure ruby implementation of JSON.
+
+If you use Rubygems you can type
+
+ # gem install json
+
+instead, to install the newest JSON version.
+
+There is also a pure ruby json only variant of the gem, that can be installed
+with:
+
+ # gem install json_pure
+
+== Compiling the extensions yourself
+
+If you want to build the extensions yourself you need rake:
+
+ You can get it from rubyforge:
+ http://rubyforge.org/projects/rake
+
+ or just type
+
+ # gem install rake
+
+ for the installation via rubygems.
+
+If you want to create the parser.c file from its parser.rl file or draw nice
+graphviz images of the state machines, you need ragel from: http://www.cs.queensu.ca/~thurston/ragel
+
+
+== Usage
+
+To use JSON you can
+ require 'json'
+to load the installed variant (either the extension 'json' or the pure
+variant 'json_pure'). If you have installed the extension variant, you can
+pick either the extension variant or the pure variant by typing
+ require 'json/ext'
+or
+ require 'json/pure'
+
+Now you can parse a JSON document into a ruby data structure by calling
+
+ JSON.parse(document)
+
+If you want to generate a JSON document from a ruby data structure call
+ JSON.generate(data)
+
+You can also use the pretty_generate method (which formats the output more
+verbosely and nicely) or fast_generate (which doesn't do any of the security
+checks generate performs, e. g. nesting deepness checks).
+
+To create a valid JSON document you have to make sure, that the output is
+embedded in either a JSON array [] or a JSON object {}. The easiest way to do
+this, is by putting your values in a Ruby Array or Hash instance.
+
+There are also the JSON and JSON[] methods which use parse on a String or
+generate a JSON document from an array or hash:
+
+ document = JSON 'test' => 23 # => "{\"test\":23}"
+ document = JSON['test'] => 23 # => "{\"test\":23}"
+
+and
+
+ data = JSON '{"test":23}' # => {"test"=>23}
+ data = JSON['{"test":23}'] # => {"test"=>23}
+
+You can choose to load a set of common additions to ruby core's objects if
+you
+ require 'json/add/core'
+
+After requiring this you can, e. g., serialise/deserialise Ruby ranges:
+
+ JSON JSON(1..10) # => 1..10
+
+To find out how to add JSON support to other or your own classes, read the
+section "More Examples" below.
+
+To get the best compatibility to rails' JSON implementation, you can
+ require 'json/add/rails'
+
+Both of the additions attempt to require 'json' (like above) first, if it has
+not been required yet.
+
+== More Examples
+
+To create a JSON document from a ruby data structure, you can call
+JSON.generate like that:
+
+ json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
+ # => "[1,2,{\"a\":3.141},false,true,null,\"4..10\"]"
+
+To get back a ruby data structure from a JSON document, you have to call
+JSON.parse on it:
+
+ JSON.parse json
+ # => [1, 2, {"a"=>3.141}, false, true, nil, "4..10"]
+
+Note, that the range from the original data structure is a simple
+string now. The reason for this is, that JSON doesn't support ranges
+or arbitrary classes. In this case the json library falls back to call
+Object#to_json, which is the same as #to_s.to_json.
+
+It's possible to add JSON support serialization to arbitrary classes by
+simply implementing a more specialized version of the #to_json method, that
+should return a JSON object (a hash converted to JSON with #to_json) like
+this (don't forget the *a for all the arguments):
+
+ class Range
+ def to_json(*a)
+ {
+ 'json_class' => self.class.name, # = 'Range'
+ 'data' => [ first, last, exclude_end? ]
+ }.to_json(*a)
+ end
+ end
+
+The hash key 'json_class' is the class, that will be asked to deserialise the
+JSON representation later. In this case it's 'Range', but any namespace of
+the form 'A::B' or '::A::B' will do. All other keys are arbitrary and can be
+used to store the necessary data to configure the object to be deserialised.
+
+If a the key 'json_class' is found in a JSON object, the JSON parser checks
+if the given class responds to the json_create class method. If so, it is
+called with the JSON object converted to a Ruby hash. So a range can
+be deserialised by implementing Range.json_create like this:
+
+ class Range
+ def self.json_create(o)
+ new(*o['data'])
+ end
+ end
+
+Now it possible to serialise/deserialise ranges as well:
+
+ json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
+ # => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]"
+ JSON.parse json
+ # => [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
+
+JSON.generate always creates the shortest possible string representation of a
+ruby data structure in one line. This is good for data storage or network
+protocols, but not so good for humans to read. Fortunately there's also
+JSON.pretty_generate (or JSON.pretty_generate) that creates a more readable
+output:
+
+ puts JSON.pretty_generate([1, 2, {"a"=>3.141}, false, true, nil, 4..10])
+ [
+ 1,
+ 2,
+ {
+ "a": 3.141
+ },
+ false,
+ true,
+ null,
+ {
+ "json_class": "Range",
+ "data": [
+ 4,
+ 10,
+ false
+ ]
+ }
+ ]
+
+There are also the methods Kernel#j for generate, and Kernel#jj for
+pretty_generate output to the console, that work analogous to Core Ruby's p and
+the pp library's pp methods.
+
+The script tools/server.rb contains a small example if you want to test, how
+receiving a JSON object from a webrick server in your browser with the
+javasript prototype library http://www.prototypejs.org works.
+
+== Speed Comparisons
+
+I have created some benchmark results (see the benchmarks/data-p4-3Ghz
+subdir of the package) for the JSON-parser to estimate the speed up in the C
+extension:
+
+ Comparing times (call_time_mean):
+ 1 ParserBenchmarkExt#parser 900 repeats:
+ 553.922304770 ( real) -> 21.500x
+ 0.001805307
+ 2 ParserBenchmarkYAML#parser 1000 repeats:
+ 224.513358139 ( real) -> 8.714x
+ 0.004454078
+ 3 ParserBenchmarkPure#parser 1000 repeats:
+ 26.755020642 ( real) -> 1.038x
+ 0.037376163
+ 4 ParserBenchmarkRails#parser 1000 repeats:
+ 25.763381731 ( real) -> 1.000x
+ 0.038814780
+ calls/sec ( time) -> speed covers
+ secs/call
+
+In the table above 1 is JSON::Ext::Parser, 2 is YAML.load with YAML
+compatbile JSON document, 3 is is JSON::Pure::Parser, and 4 is
+ActiveSupport::JSON.decode. The ActiveSupport JSON-decoder converts the
+input first to YAML and then uses the YAML-parser, the conversion seems to
+slow it down so much that it is only as fast as the JSON::Pure::Parser!
+
+If you look at the benchmark data you can see that this is mostly caused by
+the frequent high outliers - the median of the Rails-parser runs is still
+overall smaller than the median of the JSON::Pure::Parser runs:
+
+ Comparing times (call_time_median):
+ 1 ParserBenchmarkExt#parser 900 repeats:
+ 800.592479481 ( real) -> 26.936x
+ 0.001249075
+ 2 ParserBenchmarkYAML#parser 1000 repeats:
+ 271.002390644 ( real) -> 9.118x
+ 0.003690004
+ 3 ParserBenchmarkRails#parser 1000 repeats:
+ 30.227910865 ( real) -> 1.017x
+ 0.033082008
+ 4 ParserBenchmarkPure#parser 1000 repeats:
+ 29.722384421 ( real) -> 1.000x
+ 0.033644676
+ calls/sec ( time) -> speed covers
+ secs/call
+
+I have benchmarked the JSON-Generator as well. This generated a few more
+values, because there are different modes that also influence the achieved
+speed:
+
+ Comparing times (call_time_mean):
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+ 547.354332608 ( real) -> 15.090x
+ 0.001826970
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+ 443.968212317 ( real) -> 12.240x
+ 0.002252414
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+ 375.104545883 ( real) -> 10.341x
+ 0.002665923
+ 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+ 49.978706968 ( real) -> 1.378x
+ 0.020008521
+ 5 GeneratorBenchmarkRails#generator 1000 repeats:
+ 38.531868759 ( real) -> 1.062x
+ 0.025952543
+ 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+ 36.927649925 ( real) -> 1.018x 7 (>=3859)
+ 0.027079979
+ 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+ 36.272134441 ( real) -> 1.000x 6 (>=3859)
+ 0.027569373
+ calls/sec ( time) -> speed covers
+ secs/call
+
+In the table above 1-3 are JSON::Ext::Generator methods. 4, 6, and 7 are
+JSON::Pure::Generator methods and 5 is the Rails JSON generator. It is now a
+bit faster than the generator_safe and generator_pretty methods of the pure
+variant but slower than the others.
+
+To achieve the fastest JSON document output, you can use the fast_generate
+method. Beware, that this will disable the checking for circular Ruby data
+structures, which may cause JSON to go into an infinite loop.
+
+Here are the median comparisons for completeness' sake:
+
+ Comparing times (call_time_median):
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+ 708.258020939 ( real) -> 16.547x
+ 0.001411915
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+ 569.105020353 ( real) -> 13.296x
+ 0.001757145
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+ 482.825371244 ( real) -> 11.280x
+ 0.002071142
+ 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+ 62.717626652 ( real) -> 1.465x
+ 0.015944481
+ 5 GeneratorBenchmarkRails#generator 1000 repeats:
+ 43.965681162 ( real) -> 1.027x
+ 0.022745013
+ 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+ 43.929073409 ( real) -> 1.026x 7 (>=3859)
+ 0.022763968
+ 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+ 42.802514491 ( real) -> 1.000x 6 (>=3859)
+ 0.023363113
+ calls/sec ( time) -> speed covers
+ secs/call
+
+== Author
+
+Florian Frank <mailto:flori@ping.de>
+
+== License
+
+Ruby License, see the COPYING file included in the source distribution. The
+Ruby License includes the GNU General Public License (GPL), Version 2, so see
+the file GPL as well.
+
+== Download
+
+The latest version of this library can be downloaded at
+
+* http://rubyforge.org/frs?group_id=953
+
+Online Documentation should be located at
+
+* http://json.rubyforge.org
diff --git a/vendor/gems/json-1.5.1/README-json-jruby.markdown b/vendor/gems/json-1.5.1/README-json-jruby.markdown
new file mode 100644
index 000000000..13368378d
--- /dev/null
+++ b/vendor/gems/json-1.5.1/README-json-jruby.markdown
@@ -0,0 +1,33 @@
+JSON-JRuby
+==========
+
+JSON-JRuby is a port of Florian Frank's native
+[`json` library](http://json.rubyforge.org/) to JRuby.
+It aims to be a perfect drop-in replacement for `json_pure`.
+
+
+Development version
+===================
+
+The latest version is available from the
+[Git repository](http://github.com/mernen/json-jruby/tree):
+
+ git clone git://github.com/mernen/json-jruby.git
+
+
+Compiling
+=========
+
+You'll need JRuby version 1.2 or greater to build JSON-JRuby.
+Its path must be set on the `jruby.dir` property of
+`nbproject/project.properties` (defaults to `../jruby`).
+
+Additionally, you'll need [Ant](http://ant.apache.org/), and
+[Ragel](http://www.cs.queensu.ca/~thurston/ragel/) 6.4 or greater.
+
+Then, from the folder where the sources are located, type:
+
+ ant clean jar
+
+to clean any leftovers from previous builds and generate the `.jar` files.
+To generate a RubyGem, specify the `gem` action rather than `jar`.
diff --git a/vendor/gems/json-1.5.1/Rakefile b/vendor/gems/json-1.5.1/Rakefile
new file mode 100644
index 000000000..8bbd7d95d
--- /dev/null
+++ b/vendor/gems/json-1.5.1/Rakefile
@@ -0,0 +1,401 @@
+begin
+ require 'rake/gempackagetask'
+rescue LoadError
+end
+
+begin
+ require 'rake/extensiontask'
+rescue LoadError
+ warn "WARNING: rake-compiler is not installed. You will not be able to build the json gem until you install it."
+end
+
+require 'rbconfig'
+include Config
+
+require 'rake/clean'
+CLOBBER.include Dir['benchmarks/data/*.{dat,log}']
+CLEAN.include FileList['diagrams/*.*'], 'doc', 'coverage', 'tmp',
+ FileList["ext/**/{Makefile,mkmf.log}"], 'build', 'dist', FileList['**/*.rbc'],
+ FileList["{ext,lib}/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def,jar,class}"],
+ FileList['java/src/**/*.class']
+
+MAKE = ENV['MAKE'] || %w[gmake make].find { |c| system(c, '-v') }
+PKG_NAME = 'json'
+PKG_TITLE = 'JSON Implementation for Ruby'
+PKG_VERSION = File.read('VERSION').chomp
+PKG_FILES = FileList["**/*"].exclude(/CVS|pkg|tmp|coverage|Makefile|\.nfs\.|\.iml\Z/).exclude(/\.(so|bundle|o|class|#{CONFIG['DLEXT']})$/)
+
+EXT_ROOT_DIR = 'ext/json/ext'
+EXT_PARSER_DIR = "#{EXT_ROOT_DIR}/parser"
+EXT_PARSER_DL = "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}"
+RAGEL_PATH = "#{EXT_PARSER_DIR}/parser.rl"
+EXT_PARSER_SRC = "#{EXT_PARSER_DIR}/parser.c"
+PKG_FILES << EXT_PARSER_SRC
+EXT_GENERATOR_DIR = "#{EXT_ROOT_DIR}/generator"
+EXT_GENERATOR_DL = "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}"
+EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
+
+JAVA_DIR = "java/src/json/ext"
+JAVA_RAGEL_PATH = "#{JAVA_DIR}/Parser.rl"
+JAVA_PARSER_SRC = "#{JAVA_DIR}/Parser.java"
+JAVA_SOURCES = FileList["#{JAVA_DIR}/*.java"]
+JAVA_CLASSES = []
+JRUBY_PARSER_JAR = File.expand_path("lib/json/ext/parser.jar")
+JRUBY_GENERATOR_JAR = File.expand_path("lib/json/ext/generator.jar")
+
+RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find { |c| system(c, '-v') }
+RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find { |c| system(c, '-v') }
+
+def myruby(*args, &block)
+ @myruby ||= File.join(CONFIG['bindir'], CONFIG['ruby_install_name'])
+ options = (Hash === args.last) ? args.pop : {}
+ if args.length > 1 then
+ sh(*([@myruby] + args + [options]), &block)
+ else
+ sh("#{@myruby} #{args.first}", options, &block)
+ end
+end
+
+desc "Installing library (pure)"
+task :install_pure => :version do
+ myruby 'install.rb'
+end
+
+task :install_ext_really do
+ sitearchdir = CONFIG["sitearchdir"]
+ cd 'ext' do
+ for file in Dir["json/ext/*.#{CONFIG['DLEXT']}"]
+ d = File.join(sitearchdir, file)
+ mkdir_p File.dirname(d)
+ install(file, d)
+ end
+ end
+end
+
+desc "Installing library (extension)"
+task :install_ext => [ :compile_ext, :install_pure, :install_ext_really ]
+
+desc "Installing library (extension)"
+if RUBY_PLATFORM =~ /java/
+ task :install => :install_pure
+else
+ task :install => :install_ext
+end
+
+if defined?(Gem) and defined?(Rake::GemPackageTask)
+ spec_pure = Gem::Specification.new do |s|
+ s.name = 'json_pure'
+ s.version = PKG_VERSION
+ s.summary = PKG_TITLE
+ s.description = "This is a JSON implementation in pure Ruby."
+
+ s.files = PKG_FILES
+
+ s.require_path = 'lib'
+
+ s.bindir = "bin"
+ s.executables = [ "edit_json.rb", "prettify_json.rb" ]
+ s.default_executable = "edit_json.rb"
+
+ s.has_rdoc = true
+ s.extra_rdoc_files << 'README'
+ s.rdoc_options <<
+ '--title' << 'JSON implemention for ruby' << '--main' << 'README'
+ s.test_files.concat Dir['./tests/test_*.rb']
+
+ s.author = "Florian Frank"
+ s.email = "flori@ping.de"
+ s.homepage = "http://flori.github.com/#{PKG_NAME}"
+ s.rubyforge_project = "json"
+ end
+
+ Rake::GemPackageTask.new(spec_pure) do |pkg|
+ pkg.need_tar = true
+ pkg.package_files = PKG_FILES
+ end
+end
+
+if defined?(Gem) and defined?(Rake::GemPackageTask) and defined?(Rake::ExtensionTask)
+ spec_ext = Gem::Specification.new do |s|
+ s.name = 'json'
+ s.version = PKG_VERSION
+ s.summary = PKG_TITLE
+ s.description = "This is a JSON implementation as a Ruby extension in C."
+
+ s.files = PKG_FILES
+
+ s.extensions = FileList['ext/**/extconf.rb']
+
+ s.require_path = EXT_ROOT_DIR
+ s.require_paths << 'ext'
+ s.require_paths << 'lib'
+
+ s.bindir = "bin"
+ s.executables = [ "edit_json.rb", "prettify_json.rb" ]
+ s.default_executable = "edit_json.rb"
+
+ s.has_rdoc = true
+ s.extra_rdoc_files << 'README'
+ s.rdoc_options <<
+ '--title' << 'JSON implemention for Ruby' << '--main' << 'README'
+ s.test_files.concat Dir['./tests/test_*.rb']
+
+ s.author = "Florian Frank"
+ s.email = "flori@ping.de"
+ s.homepage = "http://flori.github.com/#{PKG_NAME}"
+ s.rubyforge_project = "json"
+ end
+
+ Rake::GemPackageTask.new(spec_ext) do |pkg|
+ pkg.need_tar = true
+ pkg.package_files = PKG_FILES
+ end
+
+ Rake::ExtensionTask.new do |ext|
+ ext.name = 'parser'
+ ext.gem_spec = spec_ext
+ ext.cross_compile = true
+ ext.cross_platform = %w[i386-mswin32 i386-mingw32]
+ ext.ext_dir = 'ext/json/ext/parser'
+ ext.lib_dir = 'lib/json/ext'
+ end
+
+ Rake::ExtensionTask.new do |ext|
+ ext.name = 'generator'
+ ext.gem_spec = spec_ext
+ ext.cross_compile = true
+ ext.cross_platform = %w[i386-mswin32 i386-mingw32]
+ ext.ext_dir = 'ext/json/ext/generator'
+ ext.lib_dir = 'lib/json/ext'
+ end
+end
+
+desc m = "Writing version information for #{PKG_VERSION}"
+task :version do
+ puts m
+ File.open(File.join('lib', 'json', 'version.rb'), 'w') do |v|
+ v.puts <<EOT
+module JSON
+ # JSON version
+ VERSION = '#{PKG_VERSION}'
+ VERSION_ARRAY = VERSION.split(/\\./).map { |x| x.to_i } # :nodoc:
+ VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
+ VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
+ VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
+end
+EOT
+ end
+end
+
+desc "Testing library (pure ruby)"
+task :test_pure => :clean do
+ ENV['JSON'] = 'pure'
+ ENV['RUBYOPT'] = "-Ilib #{ENV['RUBYOPT']}"
+ myruby '-S', 'testrb', *Dir['./tests/test_*.rb']
+end
+
+desc "Testing library (pure ruby and extension)"
+task :test => [ :test_pure, :test_ext ]
+
+
+if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
+ file JAVA_PARSER_SRC => JAVA_RAGEL_PATH do
+ cd JAVA_DIR do
+ if RAGEL_CODEGEN == 'ragel'
+ sh "ragel Parser.rl -J -o Parser.java"
+ else
+ sh "ragel -x Parser.rl | #{RAGEL_CODEGEN} -J"
+ end
+ end
+ end
+
+ desc "Generate parser for java with ragel"
+ task :ragel => JAVA_PARSER_SRC
+
+ desc "Delete the ragel generated Java source"
+ task :ragel_clean do
+ rm_rf JAVA_PARSER_SRC
+ end
+
+ JRUBY_JAR = File.join(Config::CONFIG["libdir"], "jruby.jar")
+ if File.exist?(JRUBY_JAR)
+ JAVA_SOURCES.each do |src|
+ classpath = (Dir['java/lib/*.jar'] << 'java/src' << JRUBY_JAR) * ':'
+ obj = src.sub(/\.java\Z/, '.class')
+ file obj => src do
+ sh 'javac', '-classpath', classpath, '-source', '1.5', src
+ end
+ JAVA_CLASSES << obj
+ end
+ else
+ warn "WARNING: Cannot find jruby in path => Cannot build jruby extension!"
+ end
+
+ desc "Compiling jruby extension"
+ task :compile_ext => JAVA_CLASSES
+
+ desc "Package the jruby gem"
+ task :jruby_gem => :create_jar do
+ sh 'gem build json-java.gemspec'
+ mkdir_p 'pkg'
+ mv "json-#{PKG_VERSION}-java.gem", 'pkg'
+ end
+
+ desc "Testing library (jruby)"
+ task :test_ext => :create_jar do
+ ENV['JSON'] = 'ext'
+ myruby '-S', 'testrb', '-Ilib', *Dir['./tests/test_*.rb']
+ end
+
+ file JRUBY_PARSER_JAR => :compile_ext do
+ cd 'java/src' do
+ parser_classes = FileList[
+ "json/ext/ByteListTranscoder*.class",
+ "json/ext/OptionsReader*.class",
+ "json/ext/Parser*.class",
+ "json/ext/RuntimeInfo*.class",
+ "json/ext/StringDecoder*.class",
+ "json/ext/Utils*.class"
+ ]
+ sh 'jar', 'cf', File.basename(JRUBY_PARSER_JAR), *parser_classes
+ mv File.basename(JRUBY_PARSER_JAR), File.dirname(JRUBY_PARSER_JAR)
+ end
+ end
+
+ desc "Create parser jar"
+ task :create_parser_jar => JRUBY_PARSER_JAR
+
+ file JRUBY_GENERATOR_JAR => :compile_ext do
+ cd 'java/src' do
+ generator_classes = FileList[
+ "json/ext/ByteListTranscoder*.class",
+ "json/ext/OptionsReader*.class",
+ "json/ext/Generator*.class",
+ "json/ext/RuntimeInfo*.class",
+ "json/ext/StringEncoder*.class",
+ "json/ext/Utils*.class"
+ ]
+ sh 'jar', 'cf', File.basename(JRUBY_GENERATOR_JAR), *generator_classes
+ mv File.basename(JRUBY_GENERATOR_JAR), File.dirname(JRUBY_GENERATOR_JAR)
+ end
+ end
+
+ desc "Create generator jar"
+ task :create_generator_jar => JRUBY_GENERATOR_JAR
+
+ desc "Create parser and generator jars"
+ task :create_jar => [ :create_parser_jar, :create_generator_jar ]
+
+ desc "Build all gems and archives for a new release of the jruby extension."
+ task :release => [ :clean, :version, :jruby_gem ]
+else
+ desc "Compiling extension"
+ task :compile_ext => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
+
+ file EXT_PARSER_DL => EXT_PARSER_SRC do
+ cd EXT_PARSER_DIR do
+ myruby 'extconf.rb'
+ sh MAKE
+ end
+ cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
+ end
+
+ file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
+ cd EXT_GENERATOR_DIR do
+ myruby 'extconf.rb'
+ sh MAKE
+ end
+ cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
+ end
+
+ desc "Testing library (extension)"
+ task :test_ext => :compile_ext do
+ ENV['JSON'] = 'ext'
+ ENV['RUBYOPT'] = "-Iext:lib #{ENV['RUBYOPT']}"
+ myruby '-S', 'testrb', *Dir['./tests/test_*.rb']
+ end
+
+ desc "Benchmarking parser"
+ task :benchmark_parser do
+ ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
+ myruby 'benchmarks/parser_benchmark.rb'
+ myruby 'benchmarks/parser2_benchmark.rb'
+ end
+
+ desc "Benchmarking generator"
+ task :benchmark_generator do
+ ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
+ myruby 'benchmarks/generator_benchmark.rb'
+ myruby 'benchmarks/generator2_benchmark.rb'
+ end
+
+ desc "Benchmarking library"
+ task :benchmark => [ :benchmark_parser, :benchmark_generator ]
+
+ desc "Create RDOC documentation"
+ task :doc => [ :version, EXT_PARSER_SRC ] do
+ sh "sdoc -o doc -t '#{PKG_TITLE}' -m README README lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
+ end
+
+ desc "Generate parser with ragel"
+ task :ragel => EXT_PARSER_SRC
+
+ desc "Delete the ragel generated C source"
+ task :ragel_clean do
+ rm_rf EXT_PARSER_SRC
+ end
+
+ file EXT_PARSER_SRC => RAGEL_PATH do
+ cd EXT_PARSER_DIR do
+ if RAGEL_CODEGEN == 'ragel'
+ sh "ragel parser.rl -G2 -o parser.c"
+ else
+ sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
+ end
+ end
+ end
+
+ desc "Generate diagrams of ragel parser (ps)"
+ task :ragel_dot_ps do
+ root = 'diagrams'
+ specs = []
+ File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
+ for s in specs
+ if RAGEL_DOTGEN == 'ragel'
+ sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tps -o#{root}/#{s}.ps"
+ else
+ sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
+ end
+ end
+ end
+
+ desc "Generate diagrams of ragel parser (png)"
+ task :ragel_dot_png do
+ root = 'diagrams'
+ specs = []
+ File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
+ for s in specs
+ if RAGEL_DOTGEN == 'ragel'
+ sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tpng -o#{root}/#{s}.png"
+ else
+ sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
+ end
+ end
+ end
+
+ desc "Generate diagrams of ragel parser"
+ task :ragel_dot => [ :ragel_dot_png, :ragel_dot_ps ]
+
+ task :environment do
+ ENV['RUBY_CC_VERSION'] = '1.8.7:1.9.2'
+ end
+
+ desc "Build all gems and archives for a new release of json and json_pure."
+ task :release => [ :clean, :version, :environment, :cross, :native, :gem, ] do
+ sh "#$0 clean native gem"
+ sh "#$0 clean package"
+ end
+end
+
+desc "Compile in the the source directory"
+task :default => [ :version ]
diff --git a/vendor/gems/json-1.5.1/TODO b/vendor/gems/json-1.5.1/TODO
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/vendor/gems/json-1.5.1/TODO
@@ -0,0 +1 @@
+
diff --git a/vendor/gems/json-1.5.1/VERSION b/vendor/gems/json-1.5.1/VERSION
new file mode 100644
index 000000000..26ca59460
--- /dev/null
+++ b/vendor/gems/json-1.5.1/VERSION
@@ -0,0 +1 @@
+1.5.1
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log
new file mode 100644
index 000000000..f63d7ff11
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log
@@ -0,0 +1,52 @@
+========================== 2009-04-01T16:54:14 CEST ===========================
+
+Comparing times (call_time_mean):
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+ 547.354332608 ( real) -> 15.090x
+ 0.001826970
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+ 443.968212317 ( real) -> 12.240x
+ 0.002252414
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+ 375.104545883 ( real) -> 10.341x
+ 0.002665923
+ 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+ 49.978706968 ( real) -> 1.378x
+ 0.020008521
+ 5 GeneratorBenchmarkRails#generator 1000 repeats:
+ 38.531868759 ( real) -> 1.062x
+ 0.025952543
+ 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+ 36.927649925 ( real) -> 1.018x 7 (>=3859)
+ 0.027079979
+ 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+ 36.272134441 ( real) -> 1.000x 6 (>=3859)
+ 0.027569373
+ calls/sec ( time) -> speed covers
+ secs/call
+
+Comparing times (call_time_median):
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+ 708.258020939 ( real) -> 16.547x
+ 0.001411915
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+ 569.105020353 ( real) -> 13.296x
+ 0.001757145
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+ 482.825371244 ( real) -> 11.280x
+ 0.002071142
+ 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+ 62.717626652 ( real) -> 1.465x
+ 0.015944481
+ 5 GeneratorBenchmarkRails#generator 1000 repeats:
+ 43.965681162 ( real) -> 1.027x
+ 0.022745013
+ 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+ 43.929073409 ( real) -> 1.026x 7 (>=3859)
+ 0.022763968
+ 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+ 42.802514491 ( real) -> 1.000x 6 (>=3859)
+ 0.023363113
+ calls/sec ( time) -> speed covers
+ secs/call
+===============================================================================
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat
new file mode 100644
index 000000000..4b1253c71
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.00598106516199361
+3 -0.0112807270419403
+4 -0.0123696625707977
+5 -0.0156474123184087
+6 -0.0167058727326317
+7 -0.0174226257732614
+8 -0.0189193377912716
+9 -0.0214634645195233
+10 -0.0210243967687236
+11 -0.0184155266311585
+12 -0.0181108782382041
+13 -0.0176431070033873
+14 -0.0156578972028912
+15 -0.0177374502087085
+16 -0.0141455286987274
+17 -0.00795945141612284
+18 -0.0113514826844811
+19 -0.00973302086315654
+20 -0.00752544154967475
+21 -0.00910755332739381
+22 -0.0135251862007292
+23 -0.018973749693597
+24 -0.0204970425654037
+25 -0.0215794434931503
+26 -0.0208820323198205
+27 -0.0215343932179269
+28 -0.0197971427401652
+29 -0.0184170283596744
+30 -0.0175671796001255
+31 -0.0182236843115851
+32 -0.0197281221230859
+33 -0.0150052309130744
+34 -0.0149918485410557
+35 -0.0148118613887254
+36 -0.0167181900944588
+37 -0.0206983251289769
+38 -0.0210801801789031
+39 -0.0208844740744579
+40 -0.019184207940328
+41 -0.017212049362023
+42 -0.0120240041713764
+43 -0.0100234143586629
+44 -0.00665522354326635
+45 -0.0100620537646498
+46 -0.00769258313093049
+47 -0.0101574928855612
+48 -0.0159677916154784
+49 -0.0165646691066312
+50 -0.0130718375795871
+51 -0.0164703973814153
+52 -0.0175737709174274
+53 -0.0196185539680136
+54 -0.0206376650276647
+55 -0.0205816624943907
+56 -0.0182046841305021
+57 -0.0170847346598826
+58 -0.0173697791657325
+59 -0.0137208345061376
+60 -0.015172781992446
+61 -0.0115255106202091
+62 0.417092484407713
+63 0.504693995877898
+64 -0.00952721402961746
+65 -0.0131282852877526
+66 -0.0119948030163429
+67 -0.016073832621251
+68 -0.0161014355592232
+69 -0.0171579854383285
+70 -0.01991680519785
+71 -0.0201834782243293
+72 -0.0193410584396016
+73 -0.0171039752714963
+74 -0.0161429988491727
+75 -0.0132132704199617
+76 -0.0168078802690772
+77 -0.0158003286920553
+78 -0.00835714207351243
+79 -0.00762120905134282
+80 -0.0123153809247642
+81 -0.00899280191875777
+82 -0.0119224362468367
+83 -0.0119149552172981
+84 -0.0153878383194161
+85 -0.0180946307259483
+86 -0.0183903902356951
+87 -0.0192363155579457
+88 -0.0187515314979391
+89 -0.017863448747676
+90 -0.0164433211511183
+91 -0.0165939525554464
+92 -0.0165402045616707
+93 -0.0185978157278274
+94 -0.0142998133920208
+95 -0.0132850828003168
+96 -0.0138653751741504
+97 -0.015439338933265
+98 -0.020103623875719
+99 -0.0195401109212907
+100 -0.0201426108270252
+101 -0.0189159648139772
+102 -0.017741354411347
+103 -0.0123542006315354
+104 -0.00844298039184578
+105 -0.00684884437276309
+106 -0.00886668438174435
+107 -0.0112356781545771
+108 -0.00988387556228173
+109 -0.0132456696681112
+110 -0.0163390481544352
+111 -0.0139327158127501
+112 -0.0163794215654705
+113 -0.016828431108095
+114 -0.0170664831346389
+115 -0.0194839016196901
+116 -0.0196691116442597
+117 -0.0171523870407326
+118 -0.0162329780166863
+119 -0.015465269120626
+120 -0.0149628404982249
+121 -0.0131035423300313
+122 -0.0131195334166545
+123 -0.00981529237544382
+124 0.80187886471569
+125 0.0584684544905557
+126 -0.0102423491415993
+127 -0.0120909818906237
+128 -0.0108758895949621
+129 -0.014289679096502
+130 -0.0143039174642426
+131 -0.0156868282211593
+132 -0.0179722786147755
+133 -0.018466068371964
+134 -0.017079048029739
+135 -0.015065426013034
+136 -0.0138193891158787
+137 -0.0108007611003438
+138 -0.0135404983439662
+139 -0.0106058448707185
+140 -0.00496922876002826
+141 -0.00606791982549938
+142 -0.00898435609237426
+143 -0.00744828430883844
+144 -0.00954635887187427
+145 -0.0117471427501629
+146 -0.0167882985759187
+147 -0.0165458334875186
+148 -0.0185963339262843
+149 -0.0180476363378826
+150 -0.0184792287658906
+151 -0.0168571398090795
+152 -0.0156376237363163
+153 -0.0147405503105207
+154 -0.0155752570759927
+155 -0.0168091690226222
+156 -0.0121055609701471
+157 -0.0119152241705694
+158 -0.0119692018483073
+159 -0.0139405471343238
+160 -0.0182047564679262
+161 -0.0184815245671085
+162 -0.0183316150688267
+163 -0.016818527387266
+164 -0.0172998927309072
+165 -0.0124657171517376
+166 -0.0142205952112049
+167 -0.0114632791024164
+168 -0.011221691825434
+169 -0.00957685728179515
+170 -0.0118576208768814
+171 -0.0153568395493832
+172 -0.0151309123215381
+173 -0.0112872846794788
+174 -0.0147612619416181
+175 -0.0154278253183317
+176 -0.017303559049782
+177 -0.0182913411620323
+178 -0.0177712913609271
+179 -0.0155461026200739
+180 -0.0145007758787646
+181 -0.0144152256728993
+182 -0.0107727311780094
+183 -0.0119747664680712
+184 -0.00882273326524172
+185 0.298288232093739
+186 0.504424933837681
+187 -0.00805741122482888
+188 -0.00961890557289795
+189 -0.00944688808242372
+190 -0.0119139223572203
+191 -0.0124508210479303
+192 -0.0127383878728495
+193 -0.0140193628792942
+194 -0.0170021455698375
+195 -0.0164885587823976
+196 -0.0148914800888949
+197 -0.0140274704089252
+198 -0.0131444255262164
+199 -0.0142902568930679
+200 -0.0126395509953569
+201 -0.00514616330632373
+202 -0.00425889059218646
+203 -0.00870210148720889
+204 -0.00484025498847868
+205 -0.00794583465279226
+206 -0.0116098809300245
+207 -0.0102840248799257
+208 -0.0140847096783508
+209 -0.0161819274468977
+210 -0.0172520609046289
+211 -0.0165784733425168
+212 -0.0171152877835852
+213 -0.0173274798435417
+214 -0.0172101117258917
+215 -0.0170745436946526
+216 -0.0166392767496565
+217 -0.0113694394099134
+218 -0.0105561014609266
+219 -0.0105629655709691
+220 -0.0125843349808509
+221 -0.0169833235509721
+222 -0.0165970567333725
+223 -0.0169456130691041
+224 -0.0161440375799497
+225 -0.0149208783509213
+226 -0.0127041663317928
+227 -0.0111128965166982
+228 -0.0107029810231524
+229 -0.0101086923411873
+230 -0.0118221345845309
+231 -0.0102332052283776
+232 -0.0142577541114976
+233 -0.0140498538213083
+234 -0.010942704916447
+235 -0.0136212685457223
+236 -0.0138034339481212
+237 -0.0142845001756096
+238 -0.0165754738828122
+239 -0.0171898507581589
+240 -0.0146271352439982
+241 -0.0137790375298089
+242 -0.0133917511680577
+243 -0.0131288925890812
+244 -0.0109685827301647
+245 -0.0109244911317575
+246 -0.0080777880722406
+247 0.629508042863424
+248 0.116751190107802
+249 -0.00891172050628469
+250 -0.0107100331770611
+251 -0.00937995296389259
+252 -0.0124380337244143
+253 -0.0121281792844181
+254 -0.0135654919014245
+255 -0.0157362779934119
+256 -0.0164366578243166
+257 -0.0158700429675927
+258 -0.0136292281849102
+259 -0.0127546292697666
+260 -0.0122591657651713
+261 -0.0127690216839386
+262 -0.00988530296069743
+263 -0.00345655852423828
+264 -0.00433593866795492
+265 -0.00706082950577672
+266 -0.00451315885069749
+267 -0.00668518865876445
+268 -0.00988046989504585
+269 -0.0142752753866166
+270 -0.0139256221754419
+271 -0.0154989360192202
+272 -0.0151674600751258
+273 -0.0149460719819308
+274 -0.0149332807768296
+275 -0.0156711823892888
+276 -0.0155655062141426
+277 -0.0160655120365346
+278 -0.0148872833405304
+279 -0.00979872106668723
+280 -0.00908095518721164
+281 -0.00991496017614028
+282 -0.0116461289373857
+283 -0.0161876753215528
+284 -0.0160928457909713
+285 -0.0161826534411892
+286 -0.0144074994368989
+287 -0.0150828945998731
+288 -0.0112888375805587
+289 -0.01017522369822
+290 -0.00930009208093838
+291 -0.00867898201478243
+292 -0.00724704290881507
+293 -0.00975976377430877
+294 -0.0136277415192816
+295 -0.013064486102752
+296 -0.00951242385528366
+297 -0.0127976272170567
+298 -0.0136452137191805
+299 -0.0153115325990551
+300 -0.0163644585755829
+301 -0.0159743500315232
+302 -0.0137072967343182
+303 -0.0124465021916348
+304 -0.0124687214149045
+305 -0.00923829560254089
+306 -0.0116586507911887
+307 -0.0118002509969036
+308 0.176862227601212
+309 0.507428903450577
+310 -0.00730757087579498
+311 -0.00846216129742899
+312 -0.0086945045504047
+313 -0.011091656573089
+314 -0.0114036881984761
+315 -0.0114574795677765
+316 -0.0125072909586858
+317 -0.0147923369011883
+318 -0.0139629326786614
+319 -0.0118661842320723
+320 -0.0108640634604502
+321 -0.010582567791708
+322 -0.0114105551744683
+323 -0.0105534816285999
+324 -0.00543143567377151
+325 -0.00207879610778993
+326 -0.00616628496249775
+327 -0.00538988970591758
+328 -0.0031888414219768
+329 -0.00479592155107035
+330 -0.00797063379731725
+331 -0.011431205793035
+332 -0.0133294486936305
+333 -0.0147073192182352
+334 -0.014038242930232
+335 -0.0143451636631283
+336 -0.0140952574704935
+337 -0.0141886904764963
+338 -0.0136754388417917
+339 -0.0130591984480721
+340 -0.00725308466960931
+341 -0.00666308425269444
+342 -0.00687998553665841
+343 -0.00973374474504822
+344 -0.0145448202812331
+345 -0.0144458922456604
+346 -0.0146115187586966
+347 -0.0137964028516015
+348 -0.0124149959973093
+349 -0.0103171021174392
+350 -0.00982139573529766
+351 -0.0112899814813755
+352 -0.0106130941986117
+353 -0.0130952590767051
+354 -0.0147157103352019
+355 -0.0148442531106679
+356 -0.0143141102828524
+357 -0.0117602635999597
+358 -0.013769448570632
+359 -0.0143111324151261
+360 -0.0143034333755129
+361 -0.0145038145090546
+362 -0.0142515435786701
+363 -0.0119387033366702
+364 -0.0110049806968185
+365 -0.0105761121274039
+366 -0.0104785382739133
+367 -0.00944568136776289
+368 -0.0114291935775792
+369 -0.00879625572792011
+370 0.438761037882253
+371 0.179388282669024
+372 -0.00564395369291442
+373 -0.00796462420259203
+374 -0.00642615015965443
+375 -0.00989354521629732
+376 -0.00988574813192154
+377 -0.010723082658232
+378 -0.0127986854912136
+379 -0.0136055571418597
+380 -0.0128927066034855
+381 -0.0107658464618742
+382 -0.00995213975574464
+383 -0.00950294253792146
+384 -0.00955020479384878
+385 -0.00635693744222024
+386 -0.000110105629481581
+387 -0.00115234232053054
+388 -0.00429086433256201
+389 -0.00179503584405276
+390 -0.00481498545647159
+391 -0.00622514956456138
+392 -0.0109222820132791
+393 -0.0108955712556429
+394 -0.0123614076397208
+395 -0.0126411139244774
+396 -0.0124467915001655
+397 -0.0130137305814043
+398 -0.0128228771923896
+399 -0.0133955237199494
+400 -0.0133849955851085
+401 -0.0122588534660976
+402 -0.00605726179970702
+403 -0.00502476043379232
+404 -0.00560189961426453
+405 -0.0075065597345586
+406 -0.0127782782962923
+407 -0.0123644950908042
+408 -0.0124232734011331
+409 -0.0109783824772762
+410 -0.0115303718379531
+411 -0.00784267469552262
+412 -0.00849462201372912
+413 -0.00971386505469192
+414 -0.00917632724668119
+415 -0.0115816105603832
+416 -0.0132376761929919
+417 -0.0135661416672985
+418 -0.0131585974552153
+419 -0.009660405912689
+420 -0.013055251783936
+421 -0.0133821772767449
+422 -0.0130499023401334
+423 -0.0135178049026562
+424 -0.0131069725662085
+425 -0.0108380392131661
+426 -0.00969469507043081
+427 -0.00954426797454458
+428 -0.00662684836615926
+429 -0.00886476227407113
+430 -0.00950496793349554
+431 0.0516441983020747
+432 0.49322914953269
+433 -0.00439284173686481
+434 -0.00627870269436533
+435 -0.00627332941383523
+436 -0.0081288435528136
+437 -0.0083780008033963
+438 -0.00862522210775739
+439 -0.00957558038511007
+440 -0.0117456231732853
+441 -0.0115534470740916
+442 -0.00933816760400665
+443 -0.00879390501434828
+444 -0.00845807802179637
+445 -0.00898392178831317
+446 -0.00828222615510185
+447 -0.00430409141657551
+448 0.00156457708563651
+449 -0.00326984307949075
+450 -0.00317159959830949
+451 -0.000555487307447615
+452 -0.00364382690619819
+453 -0.0048566860611129
+454 -0.00894018408715954
+455 -0.0107486040996964
+456 -0.0116685949740421
+457 -0.0110016491468837
+458 -0.0115059582687225
+459 -0.0113472600167867
+460 -0.0116171812940172
+461 -0.0117282268858408
+462 -0.0117299783690078
+463 -0.010643752908432
+464 -0.00459501012645056
+465 -0.00453644637628407
+466 -0.0046306868795152
+467 -0.00635091362132938
+468 -0.0110723370950498
+469 -0.0112408403912337
+470 -0.0111324401483636
+471 -0.00982286064921767
+472 -0.00975128137366522
+473 -0.00628951348673262
+474 -0.00786220555305698
+475 -0.00721222723625666
+476 -0.0090992927480125
+477 -0.0111183444128793
+478 -0.0113067097038558
+479 -0.011160514456695
+480 -0.0112090771926765
+481 -0.00787638634175043
+482 -0.0112615847473125
+483 -0.011628136525895
+484 -0.011622337861315
+485 -0.0117577801145762
+486 -0.0116192296501852
+487 -0.0116776081404665
+488 -0.0111121010572735
+489 -0.0114339606683442
+490 -0.00850048144220754
+491 -0.00902076717194715
+492 -0.00658807969775991
+493 0.308280122150922
+494 0.179904382021428
+495 -0.00620246818692402
+496 -0.00732155340431931
+497 -0.00633028997310617
+498 -0.00733583870036483
+499 -0.00727032081926197
+500 -0.008010509906149
+501 -0.0104317034705988
+502 -0.0108056052586449
+503 -0.0101990692728759
+504 -0.00818461307326559
+505 -0.00749890086004878
+506 -0.00705010773652864
+507 -0.00756096305230179
+508 -0.00672526873673494
+509 0.00243080947177157
+510 0.00196312027219733
+511 -0.00235862710511876
+512 0.000701377712459682
+513 -0.00162314281016339
+514 -0.00353069628359856
+515 -0.00535592160011964
+516 -0.009629255720372
+517 -0.00984838119518035
+518 -0.0101309734254507
+519 -0.00965058701149376
+520 -0.00979426033632281
+521 -0.00938720368934997
+522 -0.00970041415352301
+523 -0.00945810455304286
+524 -0.00835333695491461
+525 -0.00280808168888623
+526 -0.0018804910475821
+527 -0.00249542031082639
+528 -0.00423360594570751
+529 -0.00881996119495001
+530 -0.00884482660493057
+531 -0.00893861689042032
+532 -0.00886923400254016
+533 -0.00998854214305494
+534 -0.00781482686410285
+535 -0.0048629430667884
+536 -0.00625148660128163
+537 -0.00591714866358709
+538 -0.00819957670878541
+539 -0.0104317069032842
+540 -0.0106270020619331
+541 -0.0104145097418402
+542 -0.00717985135988735
+543 -0.0101615859824435
+544 -0.0104518334037382
+545 -0.0100972729943529
+546 -0.0104524105955466
+547 -0.0103545229187737
+548 -0.0101624037567498
+549 -0.0100186657519469
+550 -0.0099303685542785
+551 -0.00989811608443676
+552 -0.00956029844279647
+553 -0.00987970559123677
+554 -0.00776430984790597
+555 0.433831953345655
+556 -0.00507447586044935
+557 -0.00562849792786146
+558 -0.00769600508140686
+559 -0.00901860581255264
+560 -0.00910092607595847
+561 -0.00887368633065391
+562 -0.00919143351659684
+563 -0.00919246832815283
+564 -0.008693156564635
+565 -0.00662529921447376
+566 -0.00607353164847735
+567 -0.00581991561933677
+568 -0.00632678279589719
+569 -0.00589706554542697
+570 -0.00209808022849792
+571 0.00411078303934323
+572 -0.000550094449704642
+573 -0.000635669377549439
+574 0.00207348794440178
+575 -0.000652521824982924
+576 -0.00515463244200143
+577 -0.00805160292500236
+578 -0.00758462894007334
+579 -0.00865860296291249
+580 -0.00829675359569146
+581 -0.0086341327011501
+582 -0.0083284907763213
+583 -0.00874191010292116
+584 -0.00870026046977296
+585 -0.00874342968783533
+586 -0.00782090704127864
+587 -0.00226753389792357
+588 -0.00233729750931911
+589 -0.00253165604475073
+590 -0.00420974711192665
+591 -0.00876258732479398
+592 -0.00860694373819948
+593 -0.00860741436892977
+594 -0.0083641380851702
+595 -0.00895178779353354
+596 -0.00556499426763376
+597 -0.00484682362918658
+598 -0.00431757566397834
+599 -0.00499416642389915
+600 -0.0069669589511167
+601 -0.00890645540721195
+602 -0.00886958918530451
+603 -0.00887658861258958
+604 -0.00581930809163898
+605 -0.00874979775103718
+606 -0.00880186470377256
+607 -0.0082818394785986
+608 -0.00853275083442652
+609 -0.00830191068093658
+610 -0.00821443778904117
+611 -0.00784238482387328
+612 -0.0079414174200303
+613 -0.00783383912859581
+614 -0.00787555505012593
+615 -0.00665499786835605
+616 0.176487627240953
+617 0.182522618275643
+618 -0.00369616845832028
+619 -0.00629001903058491
+620 -0.0075473564025736
+621 -0.00792057625851698
+622 -0.00782303511234032
+623 -0.00755843668657251
+624 -0.00792883379421707
+625 -0.00821060913555977
+626 -0.00741039814688092
+627 -0.00537210505585104
+628 -0.00495675282893683
+629 -0.00433218280972181
+630 -0.00535942261482297
+631 -0.00418008644241062
+632 0.00339696969399508
+633 0.00414508932380595
+634 -0.000193158774272635
+635 0.00259164894888744
+636 0.000223760303507433
+637 -0.00430196126108769
+638 -0.00456371747951704
+639 -0.00736903921601653
+640 -0.00712023652975677
+641 -0.0075278214202441
+642 -0.00720130207341965
+643 -0.00737872965783862
+644 -0.00699531188368127
+645 -0.00746073468584514
+646 -0.00732625819637498
+647 -0.00635877618822083
+648 -0.000793999038955055
+649 -8.0164531740219e-05
+650 -0.000446668232184141
+651 -0.00235908247044392
+652 -0.00713214115663551
+653 -0.00713237034121296
+654 -0.00694174474662415
+655 -0.00660829668781119
+656 -0.00716164439750203
+657 -0.00538381268641803
+658 -0.00345728430157964
+659 -0.0033493822325227
+660 -0.00308002139612534
+661 -0.00485508307526379
+662 -0.00689806029174172
+663 -0.00725543105565978
+664 -0.00698203515046677
+665 -0.0036867796009008
+666 -0.00651046025528584
+667 -0.0064253977689179
+668 -0.00603538702792052
+669 -0.00663542008142919
+670 -0.00686564183730989
+671 -0.007061940627829
+672 -0.00723724969313594
+673 -0.00690352936553413
+674 -0.00708800826417091
+675 -0.0068488351807369
+676 -0.00697588236069582
+677 -0.00489382754866038
+678 0.293679681878456
+679 -0.00217575247097526
+680 -0.00251980831108943
+681 -0.00469346437639234
+682 -0.00602274026620383
+683 -0.00613736008179977
+684 -0.00587828046880654
+685 -0.00631371498944638
+686 -0.00631120094430527
+687 -0.00664034373839927
+688 -0.0065666129986998
+689 -0.0067007590666881
+690 -0.00636748542215835
+691 -0.00656138473046679
+692 -0.00601000081275883
+693 -0.0026357408923799
+694 -0.000456498707602518
+695 -0.0016897260544663
+696 -0.00129952239659223
+697 0.00153196218519829
+698 0.000970496676276022
+699 -0.00251269063690647
+700 -0.00524088068527027
+701 -0.00518392957419252
+702 -0.00545009901887635
+703 -0.00523471171454499
+704 -0.00546688754012952
+705 -0.00514683356691874
+706 -0.00558347319397717
+707 -0.00550031695581813
+708 -0.00556266938963792
+709 -0.00450101319069993
+710 0.000877138356826208
+711 0.00114849594155746
+712 0.00116701578333245
+713 -0.000552903676364493
+714 -0.0051532107788052
+715 -0.00508271809802478
+716 -0.00497444873496618
+717 -0.00492017832252063
+718 -0.00541639497149525
+719 -0.00390291948630837
+720 -0.00239018748643075
+721 -0.00232508546653691
+722 -0.00238990898592966
+723 -0.00406012905361738
+724 -0.00582934957876193
+725 -0.00577054545061284
+726 -0.00588044486012239
+727 -0.00321173514726905
+728 -0.00576676030640332
+729 -0.00581363201901516
+730 -0.0056403530033928
+731 -0.00588225715878274
+732 -0.00580726160331349
+733 -0.00584418671281739
+734 -0.00551263103237493
+735 -0.00574673916997464
+736 -0.00550923727010732
+737 -0.00564351841421052
+738 -0.00461818807132501
+739 0.114369039955867
+740 0.113874088642992
+741 -0.00428093342498865
+742 -0.00466682336739501
+743 -0.00457646329947025
+744 -0.00489743453576601
+745 -0.00478667563624186
+746 -0.00478604895368296
+747 -0.00490784598204448
+748 -0.00514403999502352
+749 -0.00513630650904552
+750 -0.00518918499122095
+751 -0.00520548675089309
+752 -0.00507998628564919
+753 -0.00523911370578295
+754 -0.00411076499229555
+755 -0.000110526273692137
+756 -6.97046088930254e-05
+757 -0.000654613465091875
+758 0.00250880368745154
+759 0.00224241061455796
+760 -0.00127852637176592
+761 -0.00157811331971793
+762 -0.00436060574090802
+763 -0.00420211405494215
+764 -0.00448393259372739
+765 -0.00432404767220953
+766 -0.00453637743990225
+767 -0.0044808869432662
+768 -0.00464814288481283
+769 -0.00453419455157583
+770 -0.00369714822055501
+771 0.00151504237188244
+772 0.00179518632309489
+773 0.001877255156902
+774 -5.89581979368288e-06
+775 -0.00470919317381923
+776 -0.00458472486731563
+777 -0.00444898240381536
+778 -0.00416698542857512
+779 -0.00466136770411855
+780 -0.00300892846748779
+781 -0.00124674831643176
+782 -0.00133718137527554
+783 -0.00138860486323427
+784 -0.00288124092405525
+785 -0.00481691924321098
+786 -0.00486161642251353
+787 -0.00471484323647818
+788 -0.00221399725838215
+789 -0.00461120524247493
+790 -0.00490984409593776
+791 -0.00458164873735298
+792 -0.00500568265157337
+793 -0.00490456309124687
+794 -0.00492264602032272
+795 -0.00479512401393326
+796 -0.00461122828156398
+797 -0.00469058713813641
+798 -0.00454741240404029
+799 -0.00452098615172967
+800 -0.00315464001423668
+801 0.176647243851048
+802 -0.00310821457329599
+803 -0.00336871130300844
+804 -0.00334712545163953
+805 -0.00333048116128302
+806 -0.00340010988805163
+807 -0.00329002162318321
+808 -0.00389183721144577
+809 -0.003901676075626
+810 -0.00414870722240944
+811 -0.0042711605574371
+812 -0.00421188870174774
+813 -0.00414929847217633
+814 -0.00411313613833283
+815 -0.00371760367608498
+816 -0.000349935639289262
+817 0.00180273856524285
+818 0.000409396862338841
+819 0.000734497343308131
+820 0.00357982919909658
+821 0.00303969865706741
+822 -0.000471276008475531
+823 -0.00316577242759788
+824 -0.00325311026089004
+825 -0.00334640971609744
+826 -0.00347090142695205
+827 -0.00347282859499611
+828 -0.00359181895609804
+829 -0.00354380245119079
+830 -0.0035817065706009
+831 -0.00354789086207514
+832 -0.0033749175776577
+833 -0.000494214343391087
+834 -0.000251455009457498
+835 -1.57658927165261e-05
+836 -0.000109367762943036
+837 -0.00314845093040657
+838 -0.00309137992026045
+839 -0.00318781326315422
+840 -0.00286403779926594
+841 -0.00342399488914169
+842 -0.00153873408849432
+843 0.000122565876620567
+844 -1.39442056199256e-05
+845 -8.34506223344456e-06
+846 -0.00166426373161533
+847 -0.0033554053632988
+848 -0.00333776480910794
+849 -0.00310606886442986
+850 -0.00260312208985637
+851 -0.00283750216949298
+852 -0.00285757048464359
+853 -0.00279461193366553
+854 -0.00292497054991065
+855 -0.00301956311195488
+856 -0.00315103554002891
+857 -0.00317407494144514
+858 -0.00344006955591978
+859 -0.00328324564157648
+860 -0.00336672245209469
+861 -0.00320070783993313
+862 0.0571143000302908
+863 0.0581421535264736
+864 -0.0023646349129562
+865 -0.00248000937790515
+866 -0.00253895254011341
+867 -0.00263523871798653
+868 -0.00263848242276221
+869 -0.00242543818411627
+870 -0.00273912401905961
+871 -0.00279476040899776
+872 -0.00276176065666512
+873 -0.00287486997075063
+874 -0.00286611281167776
+875 -0.00273356872691796
+876 -0.00288780319152133
+877 -0.002745393856585
+878 -0.00110006883426424
+879 -0.00137915534327329
+880 -0.00167310911091998
+881 -0.00155747103077571
+882 -0.00146093482278994
+883 -0.00154136929877317
+884 -0.00153121465319545
+885 -0.00155953620814648
+886 -0.00144267681269488
+887 -0.00161412167459229
+888 -0.00163145566649099
+889 -0.00167029505161209
+890 -0.0016373144133233
+891 -0.00175124070416498
+892 -0.00167165052115149
+893 -0.00171108984754183
+894 0.00117838884322948
+895 0.00144758999216869
+896 0.00151805445737221
+897 0.00143935117483618
+898 -0.00186099280431895
+899 -0.00179654067064747
+900 -0.00179116042661383
+901 -0.00142755861186833
+902 -0.00186611279612203
+903 -0.000162622805446086
+904 0.00152056201372212
+905 0.0013706788122524
+906 0.00143726069429263
+907 -0.000252329857205533
+908 -0.00193352667375601
+909 -0.00209884306201327
+910 -0.00202064054439592
+911 -0.00173618259943807
+912 -0.00205445430329035
+913 -0.00214780602120254
+914 -0.00196595166631794
+915 -0.00219157283133128
+916 -0.00212894079242623
+917 -0.00207889032650752
+918 -0.00219841623335388
+919 -0.00205620493282394
+920 -0.00208349802201294
+921 -0.001893539445651
+922 -0.00194526313087232
+923 -0.00168643075330111
+924 0.0586998178531413
+925 -0.000911884922536993
+926 -0.00117572577102972
+927 -0.00129923545036716
+928 -0.00118465790078785
+929 -0.00132314491365947
+930 -0.00127160006680386
+931 -0.00138439529549555
+932 -0.00129787510221711
+933 -0.00144993779770551
+934 -0.001425792453437
+935 -0.0014496057960256
+936 -0.00119586479826629
+937 -0.000922564261699133
+938 -0.000922740892289067
+939 -0.000848528386538916
+940 0.00175174402948496
+941 0.000128892409261148
+942 -0.000419829894278227
+943 -0.000466898563936845
+944 -0.00047122376341752
+945 -0.000471416288654379
+946 -0.000513935965825421
+947 -0.000572116986488244
+948 -0.000449041074008682
+949 -0.000574563662818422
+950 -0.000610788790280961
+951 -0.000662270176313313
+952 -0.000642471283187866
+953 -0.000686357192098764
+954 -0.000680811112666425
+955 -0.000667897583364248
+956 0.00217250089025851
+957 0.00241500705227074
+958 0.00258713826301258
+959 0.0024109350186895
+960 -0.000776314155991479
+961 -0.00084983870235422
+962 -0.000772678557610008
+963 -0.000413064616358682
+964 -0.000839502130396645
+965 -0.000791381040363275
+966 -0.00077040262869677
+967 -0.000754568976269093
+968 -0.000450602414219829
+969 -0.000688212102427542
+970 -0.0007167932903372
+971 -0.000785852386158499
+972 -0.000722306234880277
+973 -0.000324661092143018
+974 -0.000653202791545457
+975 -0.000633458113878451
+976 -0.000607853671870952
+977 -0.000679470747639321
+978 -0.000681703637956587
+979 -0.000664738980547628
+980 -0.000722422330407423
+981 -0.000669373102929127
+982 -0.000718387488703849
+983 -0.000712032436105745
+984 -0.000590219813904669
+985 -0.000416669360601081
+986 0.000288888405178535
+987 0.000270024550156701
+988 0.000249840739788964
+989 0.000235694503184828
+990 0.000215798850441515
+991 0.00019492814388371
+992 0.000175357251222976
+993 0.000153462442160884
+994 0.000132677328666247
+995 0.000111945810591477
+996 9.04814593951449e-05
+997 7.02106833140884e-05
+998 5.0145189268859e-05
+999 3.05214189890438e-05
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat
new file mode 100644
index 000000000..7df4c8275
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.00156402587890625 0.0 0.0 0.0 1
+2 0.00149393081665039 0.0 0.0 0.0 2
+3 0.00144386291503906 0.0 0.0 0.0 3
+4 0.0014338493347168 0.00999999999999979 0.00999999999999979 0.0 4
+5 0.00144386291503906 0.0 0.0 0.0 5
+6 0.00141716003417969 0.0 0.0 0.0 6
+7 0.00143003463745117 0.0 0.0 0.0 7
+8 0.0014190673828125 0.0 0.0 0.0 8
+9 0.00141215324401855 0.0 0.0 0.0 9
+10 0.00143003463745117 0.0 0.0 0.0 10
+11 0.00141310691833496 0.0100000000000007 0.0100000000000002 0.0 11
+12 0.0014190673828125 0.0 0.0 0.0 12
+13 0.00155305862426758 0.0 0.0 0.0 13
+14 0.00142192840576172 0.0 0.0 0.0 14
+15 0.00141000747680664 0.0 0.0 0.0 15
+16 0.00142812728881836 0.0 0.0 0.0 16
+17 0.00143098831176758 0.0 0.0 0.0 17
+18 0.00151705741882324 0.00999999999999979 0.00999999999999979 0.0 18
+19 0.00141406059265137 0.0 0.0 0.0 19
+20 0.0014197826385498 0.0 0.0 0.0 20
+21 0.00142383575439453 0.0 0.0 0.0 21
+22 0.00141191482543945 0.0 0.0 0.0 22
+23 0.00156402587890625 0.0 0.0 0.0 23
+24 0.00142812728881836 0.00999999999999979 0.00999999999999979 0.0 24
+25 0.00139307975769043 0.0 0.0 0.0 25
+26 0.00141000747680664 0.0 0.0 0.0 26
+27 0.00255894660949707 0.0 0.0 0.0 27
+28 0.00261497497558594 0.0 0.0 0.0 28
+29 0.00254607200622559 0.00999999999999979 0.00999999999999979 0.0 29
+30 0.00245094299316406 0.0 0.0 0.0 30
+31 0.00142312049865723 0.0 0.0 0.0 31
+32 0.00141000747680664 0.0 0.0 0.0 32
+33 0.00139904022216797 0.0 0.0 0.0 33
+34 0.00141096115112305 0.0 0.0 0.0 34
+35 0.00139689445495605 0.0100000000000007 0.0100000000000007 0.0 35
+36 0.00140500068664551 0.0 0.0 0.0 36
+37 0.00140786170959473 0.0 0.0 0.0 37
+38 0.00144600868225098 0.0 0.0 0.0 38
+39 0.00139689445495605 0.0 0.0 0.0 39
+40 0.00140810012817383 0.0 0.0 0.0 40
+41 0.00141406059265137 0.0 0.0 0.0 41
+42 0.00140595436096191 0.00999999999999979 0.00999999999999979 0.0 42
+43 0.00140094757080078 0.0 0.0 0.0 43
+44 0.00138092041015625 0.0 0.0 0.0 44
+45 0.00151491165161133 0.0 0.0 0.0 45
+46 0.00203394889831543 0.0 0.0 0.0 46
+47 0.00142693519592285 0.0 0.0 0.0 47
+48 0.00138998031616211 0.00999999999999979 0.00999999999999979 0.0 48
+49 0.00144696235656738 0.0 0.0 0.0 49
+50 0.00140500068664551 0.0 0.0 0.0 50
+51 0.00138998031616211 0.0 0.0 0.0 51
+52 0.00141000747680664 0.0 0.0 0.0 52
+53 0.00139188766479492 0.0 0.0 0.0 53
+54 0.00142598152160645 0.0 0.0 0.0 54
+55 0.00141406059265137 0.00999999999999979 0.00999999999999979 0.0 55
+56 0.00139594078063965 0.0 0.0 0.0 56
+57 0.00139284133911133 0.0 0.0 0.0 57
+58 0.00141692161560059 0.0 0.0 0.0 58
+59 0.00140810012817383 0.0 0.0 0.0 59
+60 0.00141215324401855 0.0 0.0 0.0 60
+61 0.00145602226257324 0.0 0.0 0.0 61
+62 0.0231201648712158 0.0300000000000002 0.0300000000000002 0.0 62
+63 0.0014808177947998 0.0 0.0 0.0 63
+64 0.00142788887023926 0.0 0.0 0.0 64
+65 0.00147199630737305 0.0 0.0 0.0 65
+66 0.00143098831176758 0.0 0.0 0.0 66
+67 0.00142908096313477 0.0 0.0 0.0 67
+68 0.00142097473144531 0.00999999999999979 0.00999999999999979 0.0 68
+69 0.00142598152160645 0.0 0.0 0.0 69
+70 0.00142812728881836 0.0 0.0 0.0 70
+71 0.00140595436096191 0.0 0.0 0.0 71
+72 0.00142288208007812 0.0 0.0 0.0 72
+73 0.00140810012817383 0.0 0.0 0.0 73
+74 0.00141692161560059 0.0 0.0 0.0 74
+75 0.00140786170959473 0.0100000000000007 0.0100000000000007 0.0 75
+76 0.00142312049865723 0.0 0.0 0.0 76
+77 0.00140213966369629 0.0 0.0 0.0 77
+78 0.00140500068664551 0.0 0.0 0.0 78
+79 0.00141096115112305 0.0 0.0 0.0 79
+80 0.00141406059265137 0.0 0.0 0.0 80
+81 0.00141310691833496 0.0 0.0 0.0 81
+82 0.00140905380249023 0.00999999999999979 0.00999999999999979 0.0 82
+83 0.00140190124511719 0.0 0.0 0.0 83
+84 0.00140881538391113 0.0 0.0 0.0 84
+85 0.00141191482543945 0.0 0.0 0.0 85
+86 0.00141406059265137 0.0 0.0 0.0 86
+87 0.00142097473144531 0.0 0.0 0.0 87
+88 0.0013890266418457 0.0 0.0 0.0 88
+89 0.00141406059265137 0.00999999999999979 0.00999999999999979 0.0 89
+90 0.00139498710632324 0.0 0.0 0.0 90
+91 0.00141286849975586 0.0 0.0 0.0 91
+92 0.00141096115112305 0.0 0.0 0.0 92
+93 0.00140190124511719 0.0 0.0 0.0 93
+94 0.00141501426696777 0.0 0.0 0.0 94
+95 0.0013880729675293 0.0 0.0 0.0 95
+96 0.00140595436096191 0.00999999999999979 0.00999999999999979 0.0 96
+97 0.00140213966369629 0.0 0.0 0.0 97
+98 0.0014040470123291 0.0 0.0 0.0 98
+99 0.00140500068664551 0.0 0.0 0.0 99
+100 0.00141501426696777 0.0 0.0 0.0 100
+101 0.00141119956970215 0.0 0.0 0.0 101
+102 0.00139808654785156 0.0 0.0 0.0 102
+103 0.00141000747680664 0.0 0.0 0.0 103
+104 0.00137805938720703 0.0 0.0 0.0 104
+105 0.00139307975769043 0.0 0.0 0.0 105
+106 0.00139594078063965 0.0 0.0 0.0 106
+107 0.00138688087463379 0.0 0.0 0.0 107
+108 0.00140810012817383 0.0 0.0 0.0 108
+109 0.00140094757080078 0.00999999999999979 0.00999999999999979 0.0 109
+110 0.00139999389648438 0.0 0.0 0.0 110
+111 0.00139808654785156 0.0 0.0 0.0 111
+112 0.00141096115112305 0.0 0.0 0.0 112
+113 0.00139212608337402 0.0 0.0 0.0 113
+114 0.00142288208007812 0.0 0.0 0.0 114
+115 0.00139188766479492 0.0 0.0 0.0 115
+116 0.00140810012817383 0.00999999999999979 0.00999999999999979 0.0 116
+117 0.00147700309753418 0.0 0.0 0.0 117
+118 0.00140810012817383 0.0 0.0 0.0 118
+119 0.0014030933380127 0.0 0.0 0.0 119
+120 0.00142097473144531 0.0 0.0 0.0 120
+121 0.00140213966369629 0.0 0.0 0.0 121
+122 0.00139689445495605 0.0 0.0 0.0 122
+123 0.0233688354492188 0.0300000000000002 0.0300000000000002 0.0 123
+124 0.0014951229095459 0.0 0.0 0.0 124
+125 0.00143909454345703 0.0 0.0 0.0 125
+126 0.00145697593688965 0.0 0.0 0.0 126
+127 0.00147509574890137 0.0 0.0 0.0 127
+128 0.00142598152160645 0.0 0.0 0.0 128
+129 0.00143003463745117 0.00999999999999979 0.00999999999999979 0.0 129
+130 0.00141477584838867 0.0 0.0 0.0 130
+131 0.00142502784729004 0.0 0.0 0.0 131
+132 0.00140786170959473 0.0 0.0 0.0 132
+133 0.00141310691833496 0.0 0.0 0.0 133
+134 0.00141000747680664 0.0 0.0 0.0 134
+135 0.00141501426696777 0.00999999999999979 0.00999999999999979 0.0 135
+136 0.00141501426696777 0.0 0.0 0.0 136
+137 0.0014190673828125 0.0 0.0 0.0 137
+138 0.00140500068664551 0.0 0.0 0.0 138
+139 0.00140595436096191 0.0 0.0 0.0 139
+140 0.00143909454345703 0.0 0.0 0.0 140
+141 0.00140094757080078 0.0 0.0 0.0 141
+142 0.00142407417297363 0.0100000000000007 0.0100000000000007 0.0 142
+143 0.00141406059265137 0.0 0.0 0.0 143
+144 0.00142002105712891 0.0 0.0 0.0 144
+145 0.00140094757080078 0.0 0.0 0.0 145
+146 0.00140690803527832 0.0 0.0 0.0 146
+147 0.0014188289642334 0.0 0.0 0.0 147
+148 0.00142002105712891 0.0 0.0 0.0 148
+149 0.00139808654785156 0.00999999999999979 0.00999999999999979 0.0 149
+150 0.00139594078063965 0.0 0.0 0.0 150
+151 0.00140285491943359 0.0 0.0 0.0 151
+152 0.0013880729675293 0.0 0.0 0.0 152
+153 0.00139498710632324 0.0 0.0 0.0 153
+154 0.0014040470123291 0.0 0.0 0.0 154
+155 0.0014040470123291 0.0 0.0 0.0 155
+156 0.00140094757080078 0.00999999999999979 0.00999999999999979 0.0 156
+157 0.0014030933380127 0.0 0.0 0.0 157
+158 0.00138711929321289 0.0 0.0 0.0 158
+159 0.00139999389648438 0.0 0.0 0.0 159
+160 0.00140595436096191 0.0 0.0 0.0 160
+161 0.00139689445495605 0.0 0.0 0.0 161
+162 0.00141000747680664 0.0 0.0 0.0 162
+163 0.00140094757080078 0.00999999999999979 0.00999999999999979 0.0 163
+164 0.00140905380249023 0.0 0.0 0.0 164
+165 0.00251889228820801 0.0 0.0 0.0 165
+166 0.00264787673950195 0.0 0.0 0.0 166
+167 0.00169110298156738 0.0 0.0 0.0 167
+168 0.00159692764282227 0.00999999999999979 0.00999999999999979 0.0 168
+169 0.00142788887023926 0.0 0.0 0.0 169
+170 0.00155997276306152 0.0 0.0 0.0 170
+171 0.00141811370849609 0.0 0.0 0.0 171
+172 0.00139784812927246 0.0 0.0 0.0 172
+173 0.00142884254455566 0.0 0.0 0.0 173
+174 0.00139999389648438 0.0 0.0 0.0 174
+175 0.00139784812927246 0.0100000000000007 0.0100000000000007 0.0 175
+176 0.00139999389648438 0.0 0.0 0.0 176
+177 0.00145101547241211 0.0 0.0 0.0 177
+178 0.00141716003417969 0.0 0.0 0.0 178
+179 0.00143289566040039 0.0 0.0 0.0 179
+180 0.00141310691833496 0.0 0.0 0.0 180
+181 0.00141406059265137 0.0 0.0 0.0 181
+182 0.00141406059265137 0.0 0.0 0.0 182
+183 0.00141310691833496 0.0 0.0 0.0 183
+184 0.00140595436096191 0.0 0.0 0.0 184
+185 0.0231029987335205 0.0199999999999996 0.0199999999999996 0.0 185
+186 0.00171899795532227 0.0 0.0 0.0 186
+187 0.00143694877624512 0.0100000000000007 0.0100000000000007 0.0 187
+188 0.00144410133361816 0.0 0.0 0.0 188
+189 0.00142693519592285 0.0 0.0 0.0 189
+190 0.00143599510192871 0.0 0.0 0.0 190
+191 0.00142097473144531 0.0 0.0 0.0 191
+192 0.00142979621887207 0.0 0.0 0.0 192
+193 0.00142502784729004 0.0 0.0 0.0 193
+194 0.00142002105712891 0.00999999999999979 0.00999999999999979 0.0 194
+195 0.00142908096313477 0.0 0.0 0.0 195
+196 0.00141191482543945 0.0 0.0 0.0 196
+197 0.00141382217407227 0.0 0.0 0.0 197
+198 0.00141191482543945 0.0 0.0 0.0 198
+199 0.00143718719482422 0.0 0.0 0.0 199
+200 0.00141096115112305 0.0 0.0 0.0 200
+201 0.00142407417297363 0.00999999999999979 0.00999999999999979 0.0 201
+202 0.00146198272705078 0.0 0.0 0.0 202
+203 0.00143194198608398 0.0 0.0 0.0 203
+204 0.00138998031616211 0.0 0.0 0.0 204
+205 0.00140595436096191 0.0 0.0 0.0 205
+206 0.00142097473144531 0.0 0.0 0.0 206
+207 0.00141787528991699 0.00999999999999979 0.00999999999999979 0.0 207
+208 0.00145101547241211 0.0 0.0 0.0 208
+209 0.00143909454345703 0.0 0.0 0.0 209
+210 0.00141215324401855 0.0 0.0 0.0 210
+211 0.00140094757080078 0.0 0.0 0.0 211
+212 0.0014030933380127 0.0 0.0 0.0 212
+213 0.00140595436096191 0.0 0.0 0.0 213
+214 0.00143194198608398 0.0100000000000007 0.0100000000000007 0.0 214
+215 0.00139999389648438 0.0 0.0 0.0 215
+216 0.00140786170959473 0.0 0.0 0.0 216
+217 0.00141501426696777 0.0 0.0 0.0 217
+218 0.00139904022216797 0.0 0.0 0.0 218
+219 0.00141310691833496 0.0 0.0 0.0 219
+220 0.00140786170959473 0.0 0.0 0.0 220
+221 0.00146889686584473 0.00999999999999979 0.00999999999999979 0.0 221
+222 0.00139880180358887 0.0 0.0 0.0 222
+223 0.00141501426696777 0.0 0.0 0.0 223
+224 0.00139808654785156 0.0 0.0 0.0 224
+225 0.00140690803527832 0.0 0.0 0.0 225
+226 0.00140500068664551 0.0 0.0 0.0 226
+227 0.00139713287353516 0.0 0.0 0.0 227
+228 0.00139498710632324 0.00999999999999979 0.00999999999999979 0.0 228
+229 0.00141000747680664 0.0 0.0 0.0 229
+230 0.00139284133911133 0.0 0.0 0.0 230
+231 0.00140690803527832 0.0 0.0 0.0 231
+232 0.0014040470123291 0.0 0.0 0.0 232
+233 0.00137710571289062 0.0 0.0 0.0 233
+234 0.00140595436096191 0.0 0.0 0.0 234
+235 0.00137901306152344 0.0 0.0 0.0 235
+236 0.00143909454345703 0.00999999999999979 0.00999999999999979 0.0 236
+237 0.00138688087463379 0.0 0.0 0.0 237
+238 0.00141811370849609 0.0 0.0 0.0 238
+239 0.00141406059265137 0.0 0.0 0.0 239
+240 0.00139284133911133 0.0 0.0 0.0 240
+241 0.0014188289642334 0.0 0.0 0.0 241
+242 0.0013878345489502 0.0 0.0 0.0 242
+243 0.00142407417297363 0.0100000000000007 0.0100000000000007 0.0 243
+244 0.00141000747680664 0.0 0.0 0.0 244
+245 0.00146222114562988 0.0 0.0 0.0 245
+246 0.0225439071655273 0.0199999999999996 0.0199999999999996 0.0 246
+247 0.00150012969970703 0.0 0.0 0.0 247
+248 0.00144600868225098 0.0 0.0 0.0 248
+249 0.00144791603088379 0.0 0.0 0.0 249
+250 0.00143003463745117 0.0 0.0 0.0 250
+251 0.00143313407897949 0.0 0.0 0.0 251
+252 0.00141406059265137 0.0 0.0 0.0 252
+253 0.00143194198608398 0.0 0.0 0.0 253
+254 0.00141596794128418 0.0 0.0 0.0 254
+255 0.00141811370849609 0.0 0.0 0.0 255
+256 0.00142002105712891 0.0100000000000007 0.0100000000000007 0.0 256
+257 0.0014190673828125 0.0 0.0 0.0 257
+258 0.00141000747680664 0.0 0.0 0.0 258
+259 0.00142097473144531 0.0 0.0 0.0 259
+260 0.00142192840576172 0.0 0.0 0.0 260
+261 0.00141096115112305 0.0 0.0 0.0 261
+262 0.00141215324401855 0.0 0.0 0.0 262
+263 0.00141501426696777 0.00999999999999979 0.00999999999999979 0.0 263
+264 0.00141096115112305 0.0 0.0 0.0 264
+265 0.00140213966369629 0.0 0.0 0.0 265
+266 0.00142192840576172 0.0 0.0 0.0 266
+267 0.0014030933380127 0.0 0.0 0.0 267
+268 0.00141596794128418 0.0 0.0 0.0 268
+269 0.00141000747680664 0.0 0.0 0.0 269
+270 0.00141406059265137 0.00999999999999979 0.00999999999999979 0.0 270
+271 0.00140810012817383 0.0 0.0 0.0 271
+272 0.00141215324401855 0.0 0.0 0.0 272
+273 0.00139999389648438 0.0 0.0 0.0 273
+274 0.00139093399047852 0.0 0.0 0.0 274
+275 0.00149083137512207 0.0 0.0 0.0 275
+276 0.00139594078063965 0.0 0.0 0.0 276
+277 0.00141191482543945 0.00999999999999979 0.00999999999999979 0.0 277
+278 0.0013887882232666 0.0 0.0 0.0 278
+279 0.00141382217407227 0.0 0.0 0.0 279
+280 0.0014030933380127 0.0 0.0 0.0 280
+281 0.00141787528991699 0.0 0.0 0.0 281
+282 0.0014030933380127 0.0 0.0 0.0 282
+283 0.00140714645385742 0.0100000000000007 0.0100000000000007 0.0 283
+284 0.00139999389648438 0.0 0.0 0.0 284
+285 0.00139904022216797 0.0 0.0 0.0 285
+286 0.00141000747680664 0.0 0.0 0.0 286
+287 0.00139498710632324 0.0 0.0 0.0 287
+288 0.00140500068664551 0.0 0.0 0.0 288
+289 0.00140810012817383 0.0 0.0 0.0 289
+290 0.00141096115112305 0.00999999999999979 0.00999999999999979 0.0 290
+291 0.0014030933380127 0.0 0.0 0.0 291
+292 0.00141692161560059 0.0 0.0 0.0 292
+293 0.00140786170959473 0.0 0.0 0.0 293
+294 0.00140810012817383 0.0 0.0 0.0 294
+295 0.00141000747680664 0.0 0.0 0.0 295
+296 0.00139212608337402 0.0 0.0 0.0 296
+297 0.00141406059265137 0.0 0.0 0.0 297
+298 0.0013890266418457 0.00999999999999979 0.00999999999999979 0.0 298
+299 0.00141096115112305 0.0 0.0 0.0 299
+300 0.00139379501342773 0.0 0.0 0.0 300
+301 0.00141501426696777 0.0 0.0 0.0 301
+302 0.00139498710632324 0.0 0.0 0.0 302
+303 0.00139594078063965 0.0 0.0 0.0 303
+304 0.00140690803527832 0.0 0.0 0.0 304
+305 0.00188708305358887 0.00999999999999979 0.00999999999999979 0.0 305
+306 0.00266003608703613 0.0 0.0 0.0 306
+307 0.00257205963134766 0.0 0.0 0.0 307
+308 0.0239479541778564 0.0300000000000002 0.0300000000000002 0.0 308
+309 0.0016789436340332 0.0 0.0 0.0 309
+310 0.00142788887023926 0.0 0.0 0.0 310
+311 0.00144720077514648 0.0 0.0 0.0 311
+312 0.00142407417297363 0.0 0.0 0.0 312
+313 0.00144100189208984 0.0 0.0 0.0 313
+314 0.00140810012817383 0.0 0.0 0.0 314
+315 0.00142502784729004 0.00999999999999979 0.00999999999999979 0.0 315
+316 0.00141501426696777 0.0 0.0 0.0 316
+317 0.00142884254455566 0.0 0.0 0.0 317
+318 0.00140810012817383 0.0 0.0 0.0 318
+319 0.00141692161560059 0.0 0.0 0.0 319
+320 0.00141096115112305 0.0 0.0 0.0 320
+321 0.00143098831176758 0.0 0.0 0.0 321
+322 0.00141501426696777 0.00999999999999979 0.00999999999999979 0.0 322
+323 0.00141501426696777 0.0 0.0 0.0 323
+324 0.00140595436096191 0.0 0.0 0.0 324
+325 0.00141692161560059 0.0 0.0 0.0 325
+326 0.00150609016418457 0.0 0.0 0.0 326
+327 0.00142478942871094 0.0 0.0 0.0 327
+328 0.00141191482543945 0.0 0.0 0.0 328
+329 0.00140190124511719 0.0100000000000007 0.0100000000000007 0.0 329
+330 0.00142121315002441 0.0 0.0 0.0 330
+331 0.00140500068664551 0.0 0.0 0.0 331
+332 0.00142288208007812 0.0 0.0 0.0 332
+333 0.00139188766479492 0.0 0.0 0.0 333
+334 0.00141811370849609 0.0 0.0 0.0 334
+335 0.00139999389648438 0.0 0.0 0.0 335
+336 0.00138592720031738 0.00999999999999979 0.00999999999999979 0.0 336
+337 0.00139522552490234 0.0 0.0 0.0 337
+338 0.00139093399047852 0.0 0.0 0.0 338
+339 0.00140500068664551 0.0 0.0 0.0 339
+340 0.00138497352600098 0.0 0.0 0.0 340
+341 0.00139999389648438 0.0 0.0 0.0 341
+342 0.00139594078063965 0.0 0.0 0.0 342
+343 0.00139617919921875 0.00999999999999979 0.00999999999999979 0.0 343
+344 0.00139784812927246 0.0 0.0 0.0 344
+345 0.00139784812927246 0.0 0.0 0.0 345
+346 0.00141716003417969 0.0 0.0 0.0 346
+347 0.00139307975769043 0.0 0.0 0.0 347
+348 0.00141191482543945 0.0 0.0 0.0 348
+349 0.00139999389648438 0.0 0.0 0.0 349
+350 0.00140380859375 0.00999999999999979 0.00999999999999979 0.0 350
+351 0.00140500068664551 0.0 0.0 0.0 351
+352 0.00149989128112793 0.0 0.0 0.0 352
+353 0.00278902053833008 0.0 0.0 0.0 353
+354 0.00261592864990234 0.0 0.0 0.0 354
+355 0.00245213508605957 0.0100000000000007 0.0100000000000007 0.0 355
+356 0.00246095657348633 0.0 0.0 0.0 356
+357 0.00265288352966309 0.0 0.0 0.0 357
+358 0.00261092185974121 0.00999999999999979 0.00999999999999979 0.0 358
+359 0.00242495536804199 0.0 0.0 0.0 359
+360 0.00170683860778809 0.0 0.0 0.0 360
+361 0.00139093399047852 0.0 0.0 0.0 361
+362 0.00142908096313477 0.0 0.0 0.0 362
+363 0.00140976905822754 0.0 0.0 0.0 363
+364 0.00142288208007812 0.00999999999999979 0.00999999999999979 0.0 364
+365 0.00140380859375 0.0 0.0 0.0 365
+366 0.00140714645385742 0.0 0.0 0.0 366
+367 0.00139594078063965 0.0 0.0 0.0 367
+368 0.00140118598937988 0.0 0.0 0.0 368
+369 0.0262439250946045 0.0300000000000002 0.0200000000000005 0.01 369
+370 0.00150489807128906 0.00999999999999979 0.00999999999999979 0.0 370
+371 0.00143313407897949 0.0 0.0 0.0 371
+372 0.00153613090515137 0.0 0.0 0.0 372
+373 0.00143313407897949 0.0 0.0 0.0 373
+374 0.00144290924072266 0.0 0.0 0.0 374
+375 0.00142097473144531 0.0 0.0 0.0 375
+376 0.00142097473144531 0.0 0.0 0.0 376
+377 0.00140810012817383 0.00999999999999979 0.00999999999999979 0.0 377
+378 0.00140690803527832 0.0 0.0 0.0 378
+379 0.0014338493347168 0.0 0.0 0.0 379
+380 0.00142192840576172 0.0 0.0 0.0 380
+381 0.00142502784729004 0.0 0.0 0.0 381
+382 0.00140595436096191 0.0 0.0 0.0 382
+383 0.00141811370849609 0.0 0.0 0.0 383
+384 0.00143003463745117 0.00999999999999979 0.00999999999999979 0.0 384
+385 0.00141596794128418 0.0 0.0 0.0 385
+386 0.00140619277954102 0.0 0.0 0.0 386
+387 0.00142288208007812 0.0 0.0 0.0 387
+388 0.00142002105712891 0.0 0.0 0.0 388
+389 0.00141596794128418 0.0 0.0 0.0 389
+390 0.00142407417297363 0.0 0.0 0.0 390
+391 0.00138282775878906 0.0100000000000007 0.0100000000000007 0.0 391
+392 0.00141501426696777 0.0 0.0 0.0 392
+393 0.00139188766479492 0.0 0.0 0.0 393
+394 0.00141382217407227 0.0 0.0 0.0 394
+395 0.00140714645385742 0.0 0.0 0.0 395
+396 0.00141000747680664 0.0 0.0 0.0 396
+397 0.00139307975769043 0.0 0.0 0.0 397
+398 0.00139307975769043 0.00999999999999979 0.00999999999999979 0.0 398
+399 0.00141000747680664 0.0 0.0 0.0 399
+400 0.00138998031616211 0.0 0.0 0.0 400
+401 0.00140213966369629 0.0 0.0 0.0 401
+402 0.00139904022216797 0.0 0.0 0.0 402
+403 0.00141191482543945 0.0 0.0 0.0 403
+404 0.00139999389648438 0.0 0.0 0.0 404
+405 0.00139188766479492 0.00999999999999979 0.00999999999999979 0.0 405
+406 0.00142502784729004 0.0 0.0 0.0 406
+407 0.00139904022216797 0.0 0.0 0.0 407
+408 0.00157594680786133 0.0 0.0 0.0 408
+409 0.00140500068664551 0.0 0.0 0.0 409
+410 0.00139784812927246 0.0 0.0 0.0 410
+411 0.00139188766479492 0.0 0.0 0.0 411
+412 0.00141215324401855 0.00999999999999979 0.00999999999999979 0.0 412
+413 0.00137901306152344 0.0 0.0 0.0 413
+414 0.0014040470123291 0.0 0.0 0.0 414
+415 0.00138497352600098 0.0 0.0 0.0 415
+416 0.00140285491943359 0.0 0.0 0.0 416
+417 0.00147199630737305 0.0 0.0 0.0 417
+418 0.00141096115112305 0.0100000000000007 0.0100000000000007 0.0 418
+419 0.0013890266418457 0.0 0.0 0.0 419
+420 0.00139093399047852 0.0 0.0 0.0 420
+421 0.00139999389648438 0.0 0.0 0.0 421
+422 0.00141406059265137 0.0 0.0 0.0 422
+423 0.00142383575439453 0.0 0.0 0.0 423
+424 0.00139904022216797 0.0 0.0 0.0 424
+425 0.00141310691833496 0.00999999999999979 0.00999999999999979 0.0 425
+426 0.0013880729675293 0.0 0.0 0.0 426
+427 0.00140094757080078 0.0 0.0 0.0 427
+428 0.00140786170959473 0.0 0.0 0.0 428
+429 0.00139880180358887 0.0 0.0 0.0 429
+430 0.00140118598937988 0.0 0.0 0.0 430
+431 0.0276179313659668 0.0299999999999994 0.0299999999999994 0.0 431
+432 0.00144100189208984 0.0 0.0 0.0 432
+433 0.00150609016418457 0.0 0.0 0.0 433
+434 0.0014500617980957 0.0 0.0 0.0 434
+435 0.00144720077514648 0.0100000000000007 0.0100000000000007 0.0 435
+436 0.00142598152160645 0.0 0.0 0.0 436
+437 0.00144004821777344 0.0 0.0 0.0 437
+438 0.00141215324401855 0.0 0.0 0.0 438
+439 0.00140690803527832 0.0 0.0 0.0 439
+440 0.00140905380249023 0.0 0.0 0.0 440
+441 0.00141191482543945 0.0 0.0 0.0 441
+442 0.00141382217407227 0.00999999999999979 0.00999999999999979 0.0 442
+443 0.00141382217407227 0.0 0.0 0.0 443
+444 0.00142979621887207 0.0 0.0 0.0 444
+445 0.00140786170959473 0.0 0.0 0.0 445
+446 0.00141787528991699 0.0 0.0 0.0 446
+447 0.00142502784729004 0.0 0.0 0.0 447
+448 0.00141716003417969 0.00999999999999979 0.00999999999999979 0.0 448
+449 0.00141692161560059 0.0 0.0 0.0 449
+450 0.00142502784729004 0.0 0.0 0.0 450
+451 0.00140690803527832 0.0 0.0 0.0 451
+452 0.00139808654785156 0.0 0.0 0.0 452
+453 0.00140094757080078 0.0 0.0 0.0 453
+454 0.00141501426696777 0.0 0.0 0.0 454
+455 0.00142598152160645 0.00999999999999979 0.00999999999999979 0.0 455
+456 0.00140595436096191 0.0 0.0 0.0 456
+457 0.00141096115112305 0.0 0.0 0.0 457
+458 0.00138306617736816 0.0 0.0 0.0 458
+459 0.00140500068664551 0.0 0.0 0.0 459
+460 0.00141096115112305 0.0 0.0 0.0 460
+461 0.0013880729675293 0.0 0.0 0.0 461
+462 0.00140094757080078 0.0100000000000007 0.0100000000000007 0.0 462
+463 0.00139594078063965 0.0 0.0 0.0 463
+464 0.00141310691833496 0.0 0.0 0.0 464
+465 0.00138282775878906 0.0 0.0 0.0 465
+466 0.00141596794128418 0.0 0.0 0.0 466
+467 0.00141692161560059 0.0 0.0 0.0 467
+468 0.00142002105712891 0.0 0.0 0.0 468
+469 0.00139999389648438 0.00999999999999979 0.00999999999999979 0.0 469
+470 0.00137901306152344 0.0 0.0 0.0 470
+471 0.00140595436096191 0.0 0.0 0.0 471
+472 0.0013880729675293 0.0 0.0 0.0 472
+473 0.00141310691833496 0.0 0.0 0.0 473
+474 0.0014040470123291 0.0 0.0 0.0 474
+475 0.00141406059265137 0.0 0.0 0.0 475
+476 0.00139713287353516 0.00999999999999979 0.00999999999999979 0.0 476
+477 0.00139307975769043 0.0 0.0 0.0 477
+478 0.00140786170959473 0.0 0.0 0.0 478
+479 0.00139784812927246 0.0 0.0 0.0 479
+480 0.00139784812927246 0.0 0.0 0.0 480
+481 0.00139999389648438 0.0 0.0 0.0 481
+482 0.00140190124511719 0.0 0.0 0.0 482
+483 0.00139594078063965 0.00999999999999979 0.00999999999999979 0.0 483
+484 0.0014188289642334 0.0 0.0 0.0 484
+485 0.00140810012817383 0.0 0.0 0.0 485
+486 0.00141596794128418 0.0 0.0 0.0 486
+487 0.0014030933380127 0.0 0.0 0.0 487
+488 0.00141596794128418 0.0 0.0 0.0 488
+489 0.00141811370849609 0.0 0.0 0.0 489
+490 0.00140094757080078 0.0100000000000007 0.0100000000000007 0.0 490
+491 0.00142717361450195 0.0 0.0 0.0 491
+492 0.00140190124511719 0.0 0.0 0.0 492
+493 0.0237669944763184 0.0199999999999996 0.0199999999999996 0.0 493
+494 0.00249719619750977 0.0 0.0 0.0 494
+495 0.00208711624145508 0.0 0.0 0.0 495
+496 0.00229597091674805 0.00999999999999979 0.00999999999999979 0.0 496
+497 0.00143194198608398 0.0 0.0 0.0 497
+498 0.00144100189208984 0.0 0.0 0.0 498
+499 0.00142002105712891 0.0 0.0 0.0 499
+500 0.00144791603088379 0.0 0.0 0.0 500
+501 0.00140190124511719 0.0 0.0 0.0 501
+502 0.00142192840576172 0.0 0.0 0.0 502
+503 0.00142502784729004 0.0100000000000007 0.0100000000000007 0.0 503
+504 0.0014350414276123 0.0 0.0 0.0 504
+505 0.00141811370849609 0.0 0.0 0.0 505
+506 0.00141811370849609 0.0 0.0 0.0 506
+507 0.00141596794128418 0.0 0.0 0.0 507
+508 0.00141501426696777 0.0 0.0 0.0 508
+509 0.00140094757080078 0.0 0.0 0.0 509
+510 0.00142502784729004 0.00999999999999979 0.00999999999999979 0.0 510
+511 0.0014350414276123 0.0 0.0 0.0 511
+512 0.00139403343200684 0.0 0.0 0.0 512
+513 0.00142598152160645 0.0 0.0 0.0 513
+514 0.00142598152160645 0.0 0.0 0.0 514
+515 0.00181007385253906 0.0 0.0 0.0 515
+516 0.00142097473144531 0.0 0.0 0.0 516
+517 0.0014030933380127 0.00999999999999979 0.00999999999999979 0.0 517
+518 0.00141310691833496 0.0 0.0 0.0 518
+519 0.00140595436096191 0.0 0.0 0.0 519
+520 0.00139999389648438 0.0 0.0 0.0 520
+521 0.00140881538391113 0.0 0.0 0.0 521
+522 0.00139498710632324 0.0 0.0 0.0 522
+523 0.00141406059265137 0.0 0.0 0.0 523
+524 0.00139307975769043 0.00999999999999979 0.00999999999999979 0.0 524
+525 0.0014040470123291 0.0 0.0 0.0 525
+526 0.00141501426696777 0.0 0.0 0.0 526
+527 0.00141716003417969 0.0 0.0 0.0 527
+528 0.00141501426696777 0.0 0.0 0.0 528
+529 0.00147104263305664 0.0 0.0 0.0 529
+530 0.00141096115112305 0.0 0.0 0.0 530
+531 0.00140213966369629 0.0100000000000007 0.0100000000000007 0.0 531
+532 0.00141406059265137 0.0 0.0 0.0 532
+533 0.00139904022216797 0.0 0.0 0.0 533
+534 0.00139403343200684 0.0 0.0 0.0 534
+535 0.00139713287353516 0.0 0.0 0.0 535
+536 0.00140786170959473 0.0 0.0 0.0 536
+537 0.00139403343200684 0.0 0.0 0.0 537
+538 0.00140714645385742 0.00999999999999979 0.00999999999999979 0.0 538
+539 0.00139093399047852 0.0 0.0 0.0 539
+540 0.00140094757080078 0.0 0.0 0.0 540
+541 0.00138711929321289 0.0 0.0 0.0 541
+542 0.00140500068664551 0.0 0.0 0.0 542
+543 0.00141406059265137 0.0 0.0 0.0 543
+544 0.0014030933380127 0.0 0.0 0.0 544
+545 0.00138497352600098 0.00999999999999979 0.00999999999999979 0.0 545
+546 0.00148582458496094 0.0 0.0 0.0 546
+547 0.00141191482543945 0.0 0.0 0.0 547
+548 0.00141119956970215 0.0 0.0 0.0 548
+549 0.00140690803527832 0.0 0.0 0.0 549
+550 0.00140881538391113 0.0 0.0 0.0 550
+551 0.00141286849975586 0.00999999999999979 0.00999999999999979 0.0 551
+552 0.00141286849975586 0.0 0.0 0.0 552
+553 0.00139021873474121 0.0 0.0 0.0 553
+554 0.0234880447387695 0.0200000000000005 0.0200000000000005 0.0 554
+555 0.00147581100463867 0.0 0.0 0.0 555
+556 0.00144290924072266 0.0 0.0 0.0 556
+557 0.00200700759887695 0.00999999999999979 0.00999999999999979 0.0 557
+558 0.00271010398864746 0.0 0.0 0.0 558
+559 0.00263786315917969 0.0 0.0 0.0 559
+560 0.00255584716796875 0.0 0.0 0.0 560
+561 0.0022728443145752 0.00999999999999979 0.00999999999999979 0.0 561
+562 0.0014340877532959 0.0 0.0 0.0 562
+563 0.00143599510192871 0.0 0.0 0.0 563
+564 0.00140905380249023 0.0 0.0 0.0 564
+565 0.00140786170959473 0.0 0.0 0.0 565
+566 0.00142693519592285 0.0 0.0 0.0 566
+567 0.00141596794128418 0.00999999999999979 0.00999999999999979 0.0 567
+568 0.00147199630737305 0.0 0.0 0.0 568
+569 0.00142502784729004 0.0 0.0 0.0 569
+570 0.00143003463745117 0.0 0.0 0.0 570
+571 0.00140595436096191 0.0 0.0 0.0 571
+572 0.00144600868225098 0.0 0.0 0.0 572
+573 0.00141096115112305 0.0 0.0 0.0 573
+574 0.00142717361450195 0.0100000000000007 0.0100000000000007 0.0 574
+575 0.0025019645690918 0.0 0.0 0.0 575
+576 0.00191497802734375 0.0 0.0 0.0 576
+577 0.00141119956970215 0.0 0.0 0.0 577
+578 0.00140690803527832 0.0 0.0 0.0 578
+579 0.00141501426696777 0.00999999999999979 0.00999999999999979 0.0 579
+580 0.00141692161560059 0.0 0.0 0.0 580
+581 0.00139212608337402 0.0 0.0 0.0 581
+582 0.00140810012817383 0.0 0.0 0.0 582
+583 0.00139307975769043 0.0 0.0 0.0 583
+584 0.00139498710632324 0.0 0.0 0.0 584
+585 0.0014030933380127 0.0 0.0 0.0 585
+586 0.0014030933380127 0.00999999999999979 0.00999999999999979 0.0 586
+587 0.00141096115112305 0.0 0.0 0.0 587
+588 0.00140500068664551 0.0 0.0 0.0 588
+589 0.00144505500793457 0.0 0.0 0.0 589
+590 0.00141191482543945 0.0 0.0 0.0 590
+591 0.00140213966369629 0.0 0.0 0.0 591
+592 0.00139594078063965 0.0 0.0 0.0 592
+593 0.00141096115112305 0.00999999999999979 0.00999999999999979 0.0 593
+594 0.00139093399047852 0.0 0.0 0.0 594
+595 0.00148797035217285 0.0 0.0 0.0 595
+596 0.00139999389648438 0.0 0.0 0.0 596
+597 0.00139689445495605 0.0 0.0 0.0 597
+598 0.00140094757080078 0.0 0.0 0.0 598
+599 0.00140786170959473 0.0 0.0 0.0 599
+600 0.00140810012817383 0.0100000000000007 0.0100000000000007 0.0 600
+601 0.00140810012817383 0.0 0.0 0.0 601
+602 0.00140500068664551 0.0 0.0 0.0 602
+603 0.00139093399047852 0.0 0.0 0.0 603
+604 0.00142192840576172 0.0 0.0 0.0 604
+605 0.00138998031616211 0.0 0.0 0.0 605
+606 0.00140213966369629 0.0 0.0 0.0 606
+607 0.00140285491943359 0.00999999999999979 0.00999999999999979 0.0 607
+608 0.00141000747680664 0.0 0.0 0.0 608
+609 0.00140190124511719 0.0 0.0 0.0 609
+610 0.00142097473144531 0.0 0.0 0.0 610
+611 0.00139689445495605 0.0 0.0 0.0 611
+612 0.00147509574890137 0.0 0.0 0.0 612
+613 0.00141000747680664 0.0 0.0 0.0 613
+614 0.00140285491943359 0.00999999999999979 0.00999999999999979 0.0 614
+615 0.00142002105712891 0.0 0.0 0.0 615
+616 0.0232539176940918 0.0200000000000005 0.0200000000000005 0.0 616
+617 0.00145983695983887 0.0 0.0 0.0 617
+618 0.00142908096313477 0.0 0.0 0.0 618
+619 0.00143790245056152 0.00999999999999979 0.00999999999999979 0.0 619
+620 0.00141000747680664 0.0 0.0 0.0 620
+621 0.00141692161560059 0.0 0.0 0.0 621
+622 0.00142216682434082 0.0 0.0 0.0 622
+623 0.00140905380249023 0.0 0.0 0.0 623
+624 0.00142598152160645 0.0 0.0 0.0 624
+625 0.00141096115112305 0.0 0.0 0.0 625
+626 0.00142097473144531 0.00999999999999979 0.00999999999999979 0.0 626
+627 0.00149297714233398 0.0 0.0 0.0 627
+628 0.0014348030090332 0.0 0.0 0.0 628
+629 0.00148200988769531 0.0 0.0 0.0 629
+630 0.0014040470123291 0.0 0.0 0.0 630
+631 0.00141596794128418 0.0 0.0 0.0 631
+632 0.00142216682434082 0.0 0.0 0.0 632
+633 0.00139999389648438 0.00999999999999979 0.00999999999999979 0.0 633
+634 0.00142693519592285 0.0 0.0 0.0 634
+635 0.00141692161560059 0.0 0.0 0.0 635
+636 0.00141501426696777 0.0 0.0 0.0 636
+637 0.00140976905822754 0.0 0.0 0.0 637
+638 0.00140500068664551 0.0 0.0 0.0 638
+639 0.00141787528991699 0.0 0.0 0.0 639
+640 0.0013880729675293 0.0100000000000007 0.0100000000000007 0.0 640
+641 0.00142812728881836 0.0 0.0 0.0 641
+642 0.0014040470123291 0.0 0.0 0.0 642
+643 0.0013880729675293 0.0 0.0 0.0 643
+644 0.00140810012817383 0.0 0.0 0.0 644
+645 0.00142192840576172 0.0 0.0 0.0 645
+646 0.00140810012817383 0.0 0.0 0.0 646
+647 0.00140190124511719 0.00999999999999979 0.00999999999999979 0.0 647
+648 0.00148701667785645 0.0 0.0 0.0 648
+649 0.0014040470123291 0.0 0.0 0.0 649
+650 0.00140094757080078 0.0 0.0 0.0 650
+651 0.00139904022216797 0.0 0.0 0.0 651
+652 0.00141811370849609 0.0 0.0 0.0 652
+653 0.00139403343200684 0.0 0.0 0.0 653
+654 0.00141191482543945 0.00999999999999979 0.00999999999999979 0.0 654
+655 0.00140500068664551 0.0 0.0 0.0 655
+656 0.00141096115112305 0.0 0.0 0.0 656
+657 0.00185894966125488 0.0 0.0 0.0 657
+658 0.00141286849975586 0.0 0.0 0.0 658
+659 0.00149917602539062 0.0 0.0 0.0 659
+660 0.00140190124511719 0.0 0.0 0.0 660
+661 0.00139188766479492 0.00999999999999979 0.00999999999999979 0.0 661
+662 0.00138711929321289 0.0 0.0 0.0 662
+663 0.00139904022216797 0.0 0.0 0.0 663
+664 0.00141596794128418 0.0 0.0 0.0 664
+665 0.00139212608337402 0.0 0.0 0.0 665
+666 0.00141191482543945 0.0 0.0 0.0 666
+667 0.00139403343200684 0.0 0.0 0.0 667
+668 0.00140905380249023 0.0100000000000007 0.0100000000000007 0.0 668
+669 0.00139307975769043 0.0 0.0 0.0 669
+670 0.00139999389648438 0.0 0.0 0.0 670
+671 0.00142002105712891 0.0 0.0 0.0 671
+672 0.00139904022216797 0.0 0.0 0.0 672
+673 0.00142097473144531 0.0 0.0 0.0 673
+674 0.00140500068664551 0.0 0.0 0.0 674
+675 0.00139594078063965 0.00999999999999979 0.00999999999999979 0.0 675
+676 0.00139284133911133 0.0 0.0 0.0 676
+677 0.0242998600006104 0.0199999999999996 0.0199999999999996 0.0 677
+678 0.00148987770080566 0.0 0.0 0.0 678
+679 0.00144290924072266 0.0 0.0 0.0 679
+680 0.00143098831176758 0.0100000000000007 0.0100000000000007 0.0 680
+681 0.00144410133361816 0.0 0.0 0.0 681
+682 0.00142598152160645 0.0 0.0 0.0 682
+683 0.00140094757080078 0.0 0.0 0.0 683
+684 0.00146293640136719 0.0 0.0 0.0 684
+685 0.00141811370849609 0.0 0.0 0.0 685
+686 0.00143098831176758 0.0 0.0 0.0 686
+687 0.00144100189208984 0.00999999999999979 0.00999999999999979 0.0 687
+688 0.00143003463745117 0.0 0.0 0.0 688
+689 0.00141406059265137 0.0 0.0 0.0 689
+690 0.00143194198608398 0.0 0.0 0.0 690
+691 0.0014040470123291 0.0 0.0 0.0 691
+692 0.00141191482543945 0.0 0.0 0.0 692
+693 0.00259590148925781 0.00999999999999979 0.00999999999999979 0.0 693
+694 0.00263714790344238 0.0 0.0 0.0 694
+695 0.00258207321166992 0.0 0.0 0.0 695
+696 0.00255298614501953 0.0 0.0 0.0 696
+697 0.00179100036621094 0.00999999999999979 0.00999999999999979 0.0 697
+698 0.00142312049865723 0.0 0.0 0.0 698
+699 0.00141215324401855 0.0 0.0 0.0 699
+700 0.00140094757080078 0.0 0.0 0.0 700
+701 0.00138998031616211 0.0 0.0 0.0 701
+702 0.00139999389648438 0.0 0.0 0.0 702
+703 0.00142312049865723 0.0 0.0 0.0 703
+704 0.00142812728881836 0.00999999999999979 0.00999999999999979 0.0 704
+705 0.00140690803527832 0.0 0.0 0.0 705
+706 0.00139999389648438 0.0 0.0 0.0 706
+707 0.00140500068664551 0.0 0.0 0.0 707
+708 0.00139498710632324 0.0 0.0 0.0 708
+709 0.00139498710632324 0.0 0.0 0.0 709
+710 0.0014030933380127 0.0 0.0 0.0 710
+711 0.00138497352600098 0.0100000000000007 0.0100000000000007 0.0 711
+712 0.00139498710632324 0.0 0.0 0.0 712
+713 0.00139904022216797 0.0 0.0 0.0 713
+714 0.00141000747680664 0.0 0.0 0.0 714
+715 0.00140118598937988 0.0 0.0 0.0 715
+716 0.00141406059265137 0.0 0.0 0.0 716
+717 0.00140094757080078 0.0 0.0 0.0 717
+718 0.00141787528991699 0.00999999999999979 0.00999999999999979 0.0 718
+719 0.00140714645385742 0.0 0.0 0.0 719
+720 0.00142097473144531 0.0 0.0 0.0 720
+721 0.0013880729675293 0.0 0.0 0.0 721
+722 0.00140094757080078 0.0 0.0 0.0 722
+723 0.0014190673828125 0.0 0.0 0.0 723
+724 0.00139117240905762 0.0 0.0 0.0 724
+725 0.00139784812927246 0.00999999999999979 0.00999999999999979 0.0 725
+726 0.00163793563842773 0.0 0.0 0.0 726
+727 0.00141406059265137 0.0 0.0 0.0 727
+728 0.00140500068664551 0.0 0.0 0.0 728
+729 0.00141692161560059 0.0 0.0 0.0 729
+730 0.00141000747680664 0.0 0.0 0.0 730
+731 0.00139594078063965 0.00999999999999979 0.00999999999999979 0.0 731
+732 0.00140595436096191 0.0 0.0 0.0 732
+733 0.00140881538391113 0.0 0.0 0.0 733
+734 0.00140500068664551 0.0 0.0 0.0 734
+735 0.00139904022216797 0.0 0.0 0.0 735
+736 0.00141787528991699 0.0 0.0 0.0 736
+737 0.00141406059265137 0.0 0.0 0.0 737
+738 0.00141000747680664 0.0100000000000007 0.0100000000000007 0.0 738
+739 0.0232431888580322 0.0199999999999996 0.0199999999999996 0.0 739
+740 0.00145602226257324 0.0 0.0 0.0 740
+741 0.00145196914672852 0.0 0.0 0.0 741
+742 0.00142693519592285 0.0 0.0 0.0 742
+743 0.00143599510192871 0.0 0.0 0.0 743
+744 0.00144100189208984 0.00999999999999979 0.00999999999999979 0.0 744
+745 0.00146389007568359 0.0 0.0 0.0 745
+746 0.00143003463745117 0.0 0.0 0.0 746
+747 0.00141501426696777 0.0 0.0 0.0 747
+748 0.00139808654785156 0.0 0.0 0.0 748
+749 0.00142097473144531 0.0 0.0 0.0 749
+750 0.00140905380249023 0.0 0.0 0.0 750
+751 0.00150108337402344 0.0100000000000007 0.0100000000000007 0.0 751
+752 0.00140714645385742 0.0 0.0 0.0 752
+753 0.00142908096313477 0.0 0.0 0.0 753
+754 0.0014040470123291 0.0 0.0 0.0 754
+755 0.00141501426696777 0.0 0.0 0.0 755
+756 0.00140094757080078 0.0 0.0 0.0 756
+757 0.00141215324401855 0.00999999999999979 0.00999999999999979 0.0 757
+758 0.00141000747680664 0.0 0.0 0.0 758
+759 0.00140714645385742 0.0 0.0 0.0 759
+760 0.00141096115112305 0.0 0.0 0.0 760
+761 0.00140213966369629 0.0 0.0 0.0 761
+762 0.0014188289642334 0.0 0.0 0.0 762
+763 0.00138497352600098 0.0 0.0 0.0 763
+764 0.00142192840576172 0.00999999999999979 0.00999999999999979 0.0 764
+765 0.00140380859375 0.0 0.0 0.0 765
+766 0.00153803825378418 0.0 0.0 0.0 766
+767 0.0013880729675293 0.0 0.0 0.0 767
+768 0.00141191482543945 0.0 0.0 0.0 768
+769 0.00139689445495605 0.0 0.0 0.0 769
+770 0.00144219398498535 0.0 0.0 0.0 770
+771 0.00145888328552246 0.00999999999999979 0.00999999999999979 0.0 771
+772 0.00142621994018555 0.0 0.0 0.0 772
+773 0.00138998031616211 0.0 0.0 0.0 773
+774 0.00141286849975586 0.0 0.0 0.0 774
+775 0.00140190124511719 0.0 0.0 0.0 775
+776 0.00139498710632324 0.0 0.0 0.0 776
+777 0.00141191482543945 0.0 0.0 0.0 777
+778 0.00138211250305176 0.0100000000000007 0.0100000000000007 0.0 778
+779 0.00141000747680664 0.0 0.0 0.0 779
+780 0.00139093399047852 0.0 0.0 0.0 780
+781 0.00139188766479492 0.0 0.0 0.0 781
+782 0.00139904022216797 0.0 0.0 0.0 782
+783 0.0013880729675293 0.0 0.0 0.0 783
+784 0.00139880180358887 0.0 0.0 0.0 784
+785 0.00137805938720703 0.00999999999999979 0.00999999999999979 0.0 785
+786 0.00141191482543945 0.0 0.0 0.0 786
+787 0.00139498710632324 0.0 0.0 0.0 787
+788 0.00141286849975586 0.0 0.0 0.0 788
+789 0.00140285491943359 0.0 0.0 0.0 789
+790 0.00140213966369629 0.0 0.0 0.0 790
+791 0.00139808654785156 0.0 0.0 0.0 791
+792 0.00141000747680664 0.00999999999999979 0.00999999999999979 0.0 792
+793 0.00142383575439453 0.0 0.0 0.0 793
+794 0.0014040470123291 0.0 0.0 0.0 794
+795 0.00141215324401855 0.0 0.0 0.0 795
+796 0.00140690803527832 0.0 0.0 0.0 796
+797 0.00139689445495605 0.0 0.0 0.0 797
+798 0.00139403343200684 0.0 0.0 0.0 798
+799 0.00141096115112305 0.00999999999999979 0.00999999999999979 0.0 799
+800 0.0231518745422363 0.0200000000000005 0.0200000000000005 0.0 800
+801 0.00148391723632812 0.0 0.0 0.0 801
+802 0.00144004821777344 0.0 0.0 0.0 802
+803 0.00144600868225098 0.0 0.0 0.0 803
+804 0.00148105621337891 0.00999999999999979 0.00999999999999979 0.0 804
+805 0.0014500617980957 0.0 0.0 0.0 805
+806 0.00141406059265137 0.0 0.0 0.0 806
+807 0.00140595436096191 0.0 0.0 0.0 807
+808 0.00142502784729004 0.0 0.0 0.0 808
+809 0.00140285491943359 0.0 0.0 0.0 809
+810 0.00142288208007812 0.0 0.0 0.0 810
+811 0.0014030933380127 0.00999999999999979 0.00999999999999979 0.0 811
+812 0.00139999389648438 0.0 0.0 0.0 812
+813 0.00141000747680664 0.0 0.0 0.0 813
+814 0.00140881538391113 0.0 0.0 0.0 814
+815 0.00143098831176758 0.0 0.0 0.0 815
+816 0.00140094757080078 0.0 0.0 0.0 816
+817 0.00143003463745117 0.0 0.0 0.0 817
+818 0.00140500068664551 0.0100000000000007 0.0100000000000007 0.0 818
+819 0.00142002105712891 0.0 0.0 0.0 819
+820 0.00141096115112305 0.0 0.0 0.0 820
+821 0.00142502784729004 0.0 0.0 0.0 821
+822 0.00141096115112305 0.0 0.0 0.0 822
+823 0.00140619277954102 0.0 0.0 0.0 823
+824 0.00139093399047852 0.0 0.0 0.0 824
+825 0.00139999389648438 0.00999999999999979 0.00999999999999979 0.0 825
+826 0.00139999389648438 0.0 0.0 0.0 826
+827 0.00140190124511719 0.0 0.0 0.0 827
+828 0.0014030933380127 0.0 0.0 0.0 828
+829 0.00139808654785156 0.0 0.0 0.0 829
+830 0.00140786170959473 0.0 0.0 0.0 830
+831 0.00171494483947754 0.0 0.0 0.0 831
+832 0.00259613990783691 0.0 0.0 0.0 832
+833 0.00256896018981934 0.0 0.0 0.0 833
+834 0.00258994102478027 0.0 0.0 0.0 834
+835 0.00195598602294922 0.00999999999999979 0.00999999999999979 0.0 835
+836 0.00141477584838867 0.0 0.0 0.0 836
+837 0.0014030933380127 0.0 0.0 0.0 837
+838 0.00140500068664551 0.0 0.0 0.0 838
+839 0.00138711929321289 0.0 0.0 0.0 839
+840 0.00139904022216797 0.0 0.0 0.0 840
+841 0.00139403343200684 0.0 0.0 0.0 841
+842 0.00141215324401855 0.00999999999999979 0.00999999999999979 0.0 842
+843 0.0014498233795166 0.0 0.0 0.0 843
+844 0.00139594078063965 0.0 0.0 0.0 844
+845 0.00139307975769043 0.0 0.0 0.0 845
+846 0.0013890266418457 0.0 0.0 0.0 846
+847 0.00141000747680664 0.0 0.0 0.0 847
+848 0.00138711929321289 0.0 0.0 0.0 848
+849 0.00221610069274902 0.0100000000000007 0.0100000000000007 0.0 849
+850 0.00145506858825684 0.0 0.0 0.0 850
+851 0.00141501426696777 0.0 0.0 0.0 851
+852 0.00145888328552246 0.0 0.0 0.0 852
+853 0.00140500068664551 0.0 0.0 0.0 853
+854 0.00139904022216797 0.0 0.0 0.0 854
+855 0.00137901306152344 0.0 0.0 0.0 855
+856 0.00144314765930176 0.00999999999999979 0.00999999999999979 0.0 856
+857 0.00139904022216797 0.0 0.0 0.0 857
+858 0.00142312049865723 0.0 0.0 0.0 858
+859 0.00139689445495605 0.0 0.0 0.0 859
+860 0.00140786170959473 0.0 0.0 0.0 860
+861 0.00139713287353516 0.0 0.0 0.0 861
+862 0.0231709480285645 0.0300000000000002 0.0300000000000002 0.0 862
+863 0.00148701667785645 0.0 0.0 0.0 863
+864 0.00143599510192871 0.0 0.0 0.0 864
+865 0.00144219398498535 0.0 0.0 0.0 865
+866 0.00142002105712891 0.0 0.0 0.0 866
+867 0.0014500617980957 0.0 0.0 0.0 867
+868 0.00142502784729004 0.00999999999999979 0.00999999999999979 0.0 868
+869 0.00141692161560059 0.0 0.0 0.0 869
+870 0.00142192840576172 0.0 0.0 0.0 870
+871 0.00142192840576172 0.0 0.0 0.0 871
+872 0.00141191482543945 0.0 0.0 0.0 872
+873 0.00143194198608398 0.0 0.0 0.0 873
+874 0.00142288208007812 0.0 0.0 0.0 874
+875 0.00142884254455566 0.00999999999999979 0.00999999999999979 0.0 875
+876 0.00160384178161621 0.0 0.0 0.0 876
+877 0.00264906883239746 0.0 0.0 0.0 877
+878 0.00261187553405762 0.0 0.0 0.0 878
+879 0.00243496894836426 0.00999999999999979 0.00999999999999979 0.0 879
+880 0.00259900093078613 0.0 0.0 0.0 880
+881 0.0026240348815918 0.0 0.0 0.0 881
+882 0.00248599052429199 0.0 0.0 0.0 882
+883 0.0024101734161377 0.0100000000000007 0.0100000000000007 0.0 883
+884 0.00142192840576172 0.0 0.0 0.0 884
+885 0.0014488697052002 0.0 0.0 0.0 885
+886 0.00140285491943359 0.0 0.0 0.0 886
+887 0.00140213966369629 0.0 0.0 0.0 887
+888 0.00141406059265137 0.0 0.0 0.0 888
+889 0.00139999389648438 0.0 0.0 0.0 889
+890 0.00140690803527832 0.00999999999999979 0.00999999999999979 0.0 890
+891 0.00139093399047852 0.0 0.0 0.0 891
+892 0.00140500068664551 0.0 0.0 0.0 892
+893 0.00140690803527832 0.0 0.0 0.0 893
+894 0.00141000747680664 0.0 0.0 0.0 894
+895 0.00140810012817383 0.0 0.0 0.0 895
+896 0.00139403343200684 0.0 0.0 0.0 896
+897 0.00140810012817383 0.00999999999999979 0.00999999999999979 0.0 897
+898 0.00140810012817383 0.0 0.0 0.0 898
+899 0.00143003463745117 0.0 0.0 0.0 899
+900 0.00141811370849609 0.0 0.0 0.0 900
+901 0.00142002105712891 0.0 0.0 0.0 901
+902 0.00138211250305176 0.0 0.0 0.0 902
+903 0.00141096115112305 0.00999999999999979 0.00999999999999979 0.0 903
+904 0.00140595436096191 0.0 0.0 0.0 904
+905 0.00140690803527832 0.0 0.0 0.0 905
+906 0.00141501426696777 0.0 0.0 0.0 906
+907 0.00139594078063965 0.0 0.0 0.0 907
+908 0.00142002105712891 0.0 0.0 0.0 908
+909 0.00139808654785156 0.0 0.0 0.0 909
+910 0.00140905380249023 0.0100000000000007 0.0100000000000007 0.0 910
+911 0.0014040470123291 0.0 0.0 0.0 911
+912 0.00139808654785156 0.0 0.0 0.0 912
+913 0.00141000747680664 0.0 0.0 0.0 913
+914 0.00140619277954102 0.0 0.0 0.0 914
+915 0.0014040470123291 0.0 0.0 0.0 915
+916 0.0014040470123291 0.0 0.0 0.0 916
+917 0.00141310691833496 0.00999999999999979 0.00999999999999979 0.0 917
+918 0.00147795677185059 0.0 0.0 0.0 918
+919 0.00141000747680664 0.0 0.0 0.0 919
+920 0.00140786170959473 0.0 0.0 0.0 920
+921 0.00141000747680664 0.0 0.0 0.0 921
+922 0.00140786170959473 0.0 0.0 0.0 922
+923 0.0234408378601074 0.0300000000000002 0.0300000000000002 0.0 923
+924 0.00142312049865723 0.0 0.0 0.0 924
+925 0.00144505500793457 0.0 0.0 0.0 925
+926 0.00144791603088379 0.0 0.0 0.0 926
+927 0.00144004821777344 0.0 0.0 0.0 927
+928 0.00142192840576172 0.0 0.0 0.0 928
+929 0.00143814086914062 0.00999999999999979 0.00999999999999979 0.0 929
+930 0.00141406059265137 0.0 0.0 0.0 930
+931 0.00141501426696777 0.0 0.0 0.0 931
+932 0.00142312049865723 0.0 0.0 0.0 932
+933 0.00141215324401855 0.0 0.0 0.0 933
+934 0.00143003463745117 0.0 0.0 0.0 934
+935 0.0014188289642334 0.0 0.0 0.0 935
+936 0.00142192840576172 0.00999999999999979 0.00999999999999979 0.0 936
+937 0.00142598152160645 0.0 0.0 0.0 937
+938 0.00143218040466309 0.0 0.0 0.0 938
+939 0.00140094757080078 0.0 0.0 0.0 939
+940 0.00141811370849609 0.0 0.0 0.0 940
+941 0.00142598152160645 0.0 0.0 0.0 941
+942 0.00143694877624512 0.0 0.0 0.0 942
+943 0.00146985054016113 0.00999999999999979 0.00999999999999979 0.0 943
+944 0.00139403343200684 0.0 0.0 0.0 944
+945 0.00141096115112305 0.0 0.0 0.0 945
+946 0.00140595436096191 0.0 0.0 0.0 946
+947 0.00140213966369629 0.0 0.0 0.0 947
+948 0.00139594078063965 0.0 0.0 0.0 948
+949 0.00140190124511719 0.0 0.0 0.0 949
+950 0.00140213966369629 0.0100000000000007 0.0100000000000007 0.0 950
+951 0.0014040470123291 0.0 0.0 0.0 951
+952 0.00139999389648438 0.0 0.0 0.0 952
+953 0.00139904022216797 0.0 0.0 0.0 953
+954 0.00139617919921875 0.0 0.0 0.0 954
+955 0.00141000747680664 0.0 0.0 0.0 955
+956 0.00141716003417969 0.0 0.0 0.0 956
+957 0.00139594078063965 0.00999999999999979 0.00999999999999979 0.0 957
+958 0.00141096115112305 0.0 0.0 0.0 958
+959 0.00139999389648438 0.0 0.0 0.0 959
+960 0.00141787528991699 0.0 0.0 0.0 960
+961 0.00139808654785156 0.0 0.0 0.0 961
+962 0.0014030933380127 0.0 0.0 0.0 962
+963 0.00140810012817383 0.0 0.0 0.0 963
+964 0.00203394889831543 0.00999999999999979 0.00999999999999979 0.0 964
+965 0.00265693664550781 0.0 0.0 0.0 965
+966 0.00261211395263672 0.0 0.0 0.0 966
+967 0.00254082679748535 0.0 0.0 0.0 967
+968 0.00202393531799316 0.00999999999999979 0.00999999999999979 0.0 968
+969 0.00142693519592285 0.0 0.0 0.0 969
+970 0.00139784812927246 0.0 0.0 0.0 970
+971 0.00140213966369629 0.0 0.0 0.0 971
+972 0.00139594078063965 0.0 0.0 0.0 972
+973 0.00141501426696777 0.0 0.0 0.0 973
+974 0.0014030933380127 0.00999999999999979 0.00999999999999979 0.0 974
+975 0.00144290924072266 0.0 0.0 0.0 975
+976 0.00140500068664551 0.0 0.0 0.0 976
+977 0.00140690803527832 0.0 0.0 0.0 977
+978 0.00142502784729004 0.0 0.0 0.0 978
+979 0.00141000747680664 0.0 0.0 0.0 979
+980 0.00141501426696777 0.0 0.0 0.0 980
+981 0.00140118598937988 0.0100000000000007 0.0100000000000007 0.0 981
+982 0.00142693519592285 0.0 0.0 0.0 982
+983 0.00141310691833496 0.0 0.0 0.0 983
+984 0.00140690803527832 0.0 0.0 0.0 984
+985 0.0233311653137207 0.0199999999999996 0.0199999999999996 0.0 985
+986 0.00148701667785645 0.00999999999999979 0.00999999999999979 0.0 986
+987 0.00144100189208984 0.0 0.0 0.0 987
+988 0.00140595436096191 0.0 0.0 0.0 988
+989 0.00144505500793457 0.0 0.0 0.0 989
+990 0.00142598152160645 0.0 0.0 0.0 990
+991 0.0014491081237793 0.0 0.0 0.0 991
+992 0.00139904022216797 0.0 0.0 0.0 992
+993 0.00142788887023926 0.0100000000000007 0.0100000000000007 0.0 993
+994 0.00141382217407227 0.0 0.0 0.0 994
+995 0.00141119956970215 0.0 0.0 0.0 995
+996 0.00139999389648438 0.0 0.0 0.0 996
+997 0.00142192840576172 0.0 0.0 0.0 997
+998 0.0014197826385498 0.0 0.0 0.0 998
+999 0.00142288208007812 0.0 0.0 0.0 999
+1000 0.00141811370849609 0.00999999999999979 0.00999999999999979 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat
new file mode 100644
index 000000000..238a8f3b7
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat
@@ -0,0 +1,900 @@
+#lag autocorrelation
+101 1.0
+102 0.00222153397099066
+103 -0.0143375943792822
+104 -0.0230145315894251
+105 -0.0272569948085685
+106 -0.0289478311233791
+107 -0.0239202547218024
+108 -0.0254569116577405
+109 -0.0204533758607008
+110 -0.0264699250769266
+111 -0.0247691307865804
+112 -0.0281656685433677
+113 -0.0282797510426555
+114 -0.0264980555156702
+115 -0.0264456484724888
+116 -0.027624326287035
+117 -0.0204913232518958
+118 -0.0136418899889287
+119 -0.0164287250050804
+120 -0.0160068899951543
+121 -0.0213508645203322
+122 -0.0261094503544549
+123 -0.0283361918761636
+124 -0.0221634425280319
+125 -0.0200377132134378
+126 -0.0158156288853482
+127 -0.0184937620769426
+128 -0.0167418191590156
+129 -0.0267897605444739
+130 -0.0277175604156327
+131 -0.0255031340290104
+132 -0.0259704766205717
+133 -0.026687135609607
+134 -0.0259098393314182
+135 -0.0257383295981194
+136 -0.0223218665246626
+137 -0.0237310896666623
+138 -0.0241241330086241
+139 -0.0289642979203642
+140 -0.0268317636147499
+141 -0.0245114013773254
+142 -0.0203659369554139
+143 0.0378050317430218
+144 0.426940829336361
+145 0.38796107377986
+146 0.0415547540823161
+147 -0.0195440376652659
+148 -0.0255053999646579
+149 -0.0275465915036962
+150 -0.0268562381835056
+151 -0.0234577846735018
+152 -0.0209532827400553
+153 -0.0189455488110332
+154 -0.02305883351641
+155 -0.0263771953757563
+156 -0.0280604279698784
+157 -0.0270717426772097
+158 -0.0246648903144108
+159 -0.0247175651482116
+160 -0.021051073568524
+161 -0.0163198388224076
+162 -0.0144235534240568
+163 -0.0136936717999382
+164 -0.01698846339106
+165 -0.0172619597265475
+166 -0.022224434827852
+167 -0.0219642323974638
+168 -0.0213243463149422
+169 -0.0192387869040187
+170 -0.0197178180625259
+171 -0.0247915784961403
+172 -0.0218270561892234
+173 -0.0262672996245232
+174 -0.024849965587679
+175 -0.0250252615288926
+176 -0.0251007165159392
+177 -0.0238806074688618
+178 -0.0238757651256144
+179 -0.0240426101294269
+180 -0.0234219466443065
+181 -0.0212602833600402
+182 -0.0229991714197526
+183 -0.0261227540349392
+184 -0.0221623986521011
+185 -0.0198657473347064
+186 0.036858247139314
+187 0.29256789370978
+188 0.217268577909927
+189 0.196770495691689
+190 0.094220865706204
+191 -0.0203791531848586
+192 -0.0242142425710697
+193 -0.0227327141359121
+194 -0.0219087131272295
+195 -0.0139180641371944
+196 -0.0165931483689415
+197 -0.0139691174427045
+198 -0.0250038332172815
+199 -0.0262538643545197
+200 -0.025280145240993
+201 -0.022716588551902
+202 -0.0229491126971064
+203 -0.020163745252957
+204 -0.0180649219211942
+205 -0.0174961232004392
+206 -0.0153752959032635
+207 -0.0151070882074296
+208 -0.0162636711403948
+209 -0.0213539658247787
+210 -0.0241878645706104
+211 -0.0233292145480391
+212 -0.0222792602366159
+213 -0.0200857928095336
+214 -0.0224102357962423
+215 -0.0200431331454358
+216 -0.0251386240282493
+217 -0.0217360075267156
+218 -0.0231247916814153
+219 -0.0236289558661022
+220 -0.022798275340034
+221 -0.022394916702971
+222 -0.0240641627722647
+223 -0.02767136777592
+224 -0.0188563255687053
+225 -0.0201523683449021
+226 -0.0196358949998781
+227 -0.0201572059848371
+228 -0.0180306969850485
+229 0.0330883208878215
+230 0.187053030884649
+231 0.180166992312632
+232 0.175193540635547
+233 0.0852511978178321
+234 0.0836036324945735
+235 -0.0180475894095978
+236 -0.0203965677916504
+237 -0.0234729155755235
+238 -0.0203967773857997
+239 -0.0168134546888542
+240 -0.0145823454491767
+241 -0.0182208080214287
+242 -0.0222702719218944
+243 -0.0245502962962475
+244 -0.0230701140380481
+245 -0.0205544743992634
+246 -0.0152766305199052
+247 -0.015660060910655
+248 -0.0182272831792615
+249 -0.0161416465628721
+250 -0.0138775731037607
+251 -0.0146059144127008
+252 -0.014851378459684
+253 -0.0174697076620558
+254 -0.020394504090619
+255 -0.020923051703186
+256 -0.0188690748415421
+257 -0.020691771573437
+258 -0.0180158099925264
+259 -0.025009300618942
+260 -0.0241656012183153
+261 -0.0201701986649696
+262 -0.0213418341591563
+263 -0.0212876158412719
+264 -0.0196613481631524
+265 -0.0224579972849258
+266 -0.0222709347842853
+267 -0.021839178151421
+268 -0.0181242059899927
+269 -0.0196595880691145
+270 -0.0176712734167537
+271 -0.0174037647691641
+272 0.0361609936559733
+273 0.136273065680629
+274 0.137142321378537
+275 0.119170985165791
+276 0.135128869617739
+277 0.0365729744317657
+278 0.0813532152332901
+279 -0.0164218823860774
+280 -0.0150012133117104
+281 -0.0180652264456629
+282 -0.0180223031364979
+283 -0.0146583895021702
+284 -0.0178385632762936
+285 -0.0183688063955637
+286 -0.0199104201945895
+287 -0.0209162045756424
+288 -0.0182424612671294
+289 -0.0102871995641823
+290 -0.0097194264103497
+291 -0.0166796622739482
+292 -0.0193090133043633
+293 -0.0109789304127889
+294 -0.0145511817849648
+295 -0.0159177263733151
+296 -0.0162297085566881
+297 -0.0160458825546633
+298 -0.0185277530735613
+299 -0.0201185134004853
+300 -0.0225767827149403
+301 -0.020600528590444
+302 -0.0178266254999198
+303 -0.0228272615104135
+304 -0.0188650304163709
+305 -0.0192512492130587
+306 -0.0198882781449453
+307 -0.018944580372254
+308 -0.0191976364453834
+309 -0.020380651922197
+310 -0.020008249388093
+311 -0.0199582696579672
+312 -0.016107489794778
+313 -0.0168857973840798
+314 -0.0159072805310197
+315 0.0337796643954297
+316 0.091400279956598
+317 0.128355772863555
+318 0.0811615095759163
+319 0.0770716694548368
+320 0.145070077843674
+321 -0.0188619341727165
+322 0.0799864438805513
+323 -0.0199478816959614
+324 -0.0210772723197886
+325 -0.0210646569907724
+326 -0.0200788443102393
+327 -0.0211662403279555
+328 -0.0167589827973132
+329 -0.0177459345163699
+330 -0.0176456584861234
+331 -0.0220878387663237
+332 -0.0138294678922046
+333 -0.00950860063270121
+334 -0.0127373100109087
+335 -0.0165386832541542
+336 -0.0182671925631197
+337 -0.0109720091878599
+338 -0.0142702474119185
+339 -0.0110379801788155
+340 -0.0154139924731546
+341 -0.0128889876019394
+342 -0.0173631353598641
+343 -0.0222795571128729
+344 -0.0201510823246637
+345 -0.014168231775332
+346 -0.0172988244822199
+347 -0.0166164172889096
+348 -0.0174591997875334
+349 -0.0178598488132696
+350 -0.0174148484681578
+351 -0.0181701494308226
+352 -0.0170602479756066
+353 -0.022860700637634
+354 -0.0186677124344551
+355 -0.0163631644839097
+356 -0.0150447805883455
+357 -0.0155934972805149
+358 0.0412705831487356
+359 0.0432271691160312
+360 0.134082054092421
+361 0.030429559359917
+362 0.128011199059957
+363 0.0290649669583617
+364 0.0977105919898357
+365 0.0268435678280154
+366 0.0353018054840323
+367 -0.0198055818066033
+368 -0.018378272291099
+369 -0.019916785016334
+370 -0.0205847247605069
+371 -0.0201224650176015
+372 -0.01627691948957
+373 -0.0153629187371632
+374 -0.0125002930105743
+375 -0.0160149273157025
+376 -0.0130459873232066
+377 -0.0117001449083753
+378 -0.0128253666323881
+379 -0.0149389076420028
+380 -0.0147672676170861
+381 -0.00941821935965455
+382 -0.00473688018446407
+383 -0.00808553215461901
+384 -0.0105108934303795
+385 -0.0155256488187373
+386 -0.0210836438529971
+387 -0.0194168403848756
+388 -0.0138959279148097
+389 -0.0167510111816621
+390 -0.0170725457918982
+391 -0.016150326422395
+392 -0.0187592561556726
+393 -0.0201368328637298
+394 -0.0171077907044443
+395 -0.0171103523390093
+396 -0.0182097163513887
+397 -0.0172423936894017
+398 -0.0146907180546899
+399 -0.0148205318166592
+400 -0.0144952560105946
+401 0.0391317015604062
+402 -0.00325045294442625
+403 0.135229844753472
+404 0.0339587870366385
+405 0.0833862815909146
+406 0.0775145154752597
+407 0.0288174710076017
+408 0.0542563755615635
+409 0.0810954683226646
+410 -0.017752492355491
+411 -0.0180579468812209
+412 -0.0189407872188061
+413 -0.0189713023163003
+414 -0.0189831714463216
+415 -0.0186956047569828
+416 -0.0188493030013216
+417 -0.0190954931073824
+418 -0.0189538951395989
+419 -0.0168159225101202
+420 -0.0149622277586486
+421 -0.0134585088118323
+422 -0.0107702264004257
+423 -0.0116881974906342
+424 -0.0135084097379996
+425 -0.0115600330212086
+426 -0.00385827806043179
+427 -0.00648046756427941
+428 -0.010678969741849
+429 -0.0174377994416611
+430 -0.0197415520446045
+431 -0.01387746808618
+432 -0.0142870555311067
+433 -0.0126167043533278
+434 -0.0145341368337345
+435 -0.0172588314742905
+436 -0.0192532464901077
+437 -0.0178888029842574
+438 -0.0149435002438141
+439 -0.0143499589296186
+440 -0.0113284320025856
+441 -0.0146907285452937
+442 -0.0118090676160861
+443 -0.0129550696231186
+444 -0.00943679479582223
+445 0.0410693940588715
+446 0.0981340063555525
+447 0.0301059977373294
+448 0.0798620238351765
+449 0.0399504241633469
+450 0.0799710609081107
+451 0.0375183260101038
+452 -0.0128846089593424
+453 0.093737068719454
+454 -0.0166488241943883
+455 -0.0171620322539306
+456 -0.0176681103949864
+457 -0.0177135709591161
+458 -0.0174025569142706
+459 -0.0176679666536122
+460 -0.0181412705139815
+461 -0.0178162340211567
+462 -0.0148661374954626
+463 -0.012878454938704
+464 -0.0136407519521233
+465 -0.0103957847636471
+466 -0.00908338367847883
+467 -0.0110136706236845
+468 -0.0121798225855914
+469 -0.00417292561751909
+470 -0.00307290764550916
+471 -0.00798497461616614
+472 -0.0111435895667381
+473 -0.0153727357774596
+474 -0.0130271532875312
+475 -0.0124190182516596
+476 -0.0084547082575317
+477 -0.00918576031696132
+478 -0.0162409259378339
+479 -0.018065492839516
+480 -0.0168355167430056
+481 -0.0140509731408616
+482 -0.0149035783683084
+483 -0.00931711982847588
+484 -0.014271656696945
+485 -0.0121711176661241
+486 -0.016804905268994
+487 -0.0104196286531009
+488 0.0383870537436679
+489 0.0552773935471216
+490 0.0345937652331171
+491 0.0813542198669446
+492 0.0363428500481453
+493 0.0402459628537269
+494 0.0880185317795738
+495 -0.0129023101613787
+496 0.0302552183198115
+497 0.0536535190947818
+498 -0.0156069516901892
+499 -0.0162156062091284
+500 -0.0162183722980474
+501 -0.0157747057135625
+502 -0.0166040466989765
+503 -0.0161608566990615
+504 -0.0167537182627031
+505 -0.0164722018431066
+506 -0.0143593770446019
+507 -0.012530817471516
+508 -0.0130107038316214
+509 -0.0127117424488491
+510 -0.0123582491090572
+511 -0.0143988077890034
+512 -0.0132043617399602
+513 -0.0121255066830081
+514 -0.00947286185269373
+515 -0.00465100530248661
+516 -0.0117788080303492
+517 -0.0130751296092514
+518 -0.0155036171011815
+519 -0.010643006695032
+520 -0.00739844298156769
+521 -0.0112412204699085
+522 -0.0161872155724303
+523 -0.0168989403333427
+524 -0.0153730958327368
+525 -0.0125043590711503
+526 -0.00940141758011818
+527 -0.00767975179438695
+528 -0.0109057442427293
+529 -0.0152170670171314
+530 -0.0148168636021302
+531 0.0536268084567977
+532 0.00159158256076242
+533 0.0395691988094227
+534 0.0851832556342331
+535 0.0404885336981451
+536 0.0359152408805565
+537 0.0400801815807958
+538 0.0426897422408288
+539 0.032487435819703
+540 0.0379746640301957
+541 -0.0114145850527779
+542 -0.0143266971158537
+543 -0.0144808626295274
+544 -0.0142835316361234
+545 -0.0144672980991767
+546 -0.0149347701157941
+547 -0.0147221461325212
+548 -0.0149340818843796
+549 -0.0149339646879691
+550 -0.0125515123976881
+551 -0.0106843909304337
+552 -0.0120477982033282
+553 -0.0107426813396423
+554 -0.0103781179386869
+555 -0.00980456885361171
+556 -0.0108064202489364
+557 -0.0121145826899896
+558 -0.00556810926546485
+559 -0.00930006259964903
+560 -0.00516953265688487
+561 -0.0103764487413688
+562 -0.0101531608339304
+563 -0.00918822426319678
+564 -0.0101644666934554
+565 -0.0112481176383032
+566 -0.0145127017542735
+567 -0.0147134045513878
+568 -0.0123144344086325
+569 -0.00570964879226978
+570 -0.0063187706922707
+571 -0.00374866158046794
+572 -0.013607724159013
+573 -0.0137804453374875
+574 -0.00939070104936453
+575 0.0423495547767671
+576 0.000209272987046017
+577 0.0880471222849516
+578 0.0385858128624645
+579 0.0396811891208319
+580 0.0353924058064461
+581 0.0495909051898724
+582 -0.0113155170664094
+583 0.0871168673380537
+584 -0.0115980451842322
+585 -0.0125526032386238
+586 -0.012561736194457
+587 -0.0122507426071209
+588 -0.0123064811043512
+589 -0.0121521641917975
+590 -0.0125333975284308
+591 -0.0130863343506295
+592 -0.0134314408515597
+593 -0.0107991754906669
+594 -0.00884398203252155
+595 -0.0100733336463772
+596 -0.00922955762602743
+597 -0.00949676131734901
+598 -0.0110224903229849
+599 -0.00991288650680148
+600 -0.00936825932623963
+601 -0.00980726528701717
+602 -0.00476664596953343
+603 -0.011430503413995
+604 -0.0113213354943102
+605 -0.0134064415109797
+606 -0.0126055847537459
+607 -0.0135083477615435
+608 -0.0113488370833923
+609 -0.0093156617098165
+610 -0.00976577466545605
+611 -0.0133363567698321
+612 -0.00759897085944556
+613 -0.00510037875494374
+614 -0.00408004384283288
+615 -0.00918160520147706
+616 -0.0108113236545845
+617 -0.0106231816617747
+618 -0.00758999243430865
+619 0.0435531551195662
+620 0.0520037268502813
+621 0.0439044539134388
+622 0.0386654726142954
+623 0.0394118644732992
+624 0.0449248987301056
+625 -0.00863719437291388
+626 0.0412392562292136
+627 0.0440129688249318
+628 -0.0101620925718705
+629 -0.0109600840877224
+630 -0.0112705053011257
+631 -0.0116301438053661
+632 -0.0113736455019991
+633 -0.0117661118641892
+634 -0.0113961495319145
+635 -0.0117740021837853
+636 -0.0117094958602983
+637 -0.00939366161371644
+638 -0.00755907350023703
+639 -0.00838658396126048
+640 -0.0074832135472603
+641 -0.00801205358318107
+642 -0.00624145194619799
+643 -0.0070240024426915
+644 -0.00834613473332137
+645 -0.00670243676363534
+646 -0.0106128186631781
+647 -0.0123852232161095
+648 -0.0124265826160123
+649 -0.0112567385689026
+650 -0.0126065730661914
+651 -0.0123854746644478
+652 -0.00987776546588025
+653 -0.00722003160503851
+654 -0.00380201074432189
+655 -0.00665072917336648
+656 -0.00528196776714817
+657 -0.00510807558151163
+658 -0.00811089821457131
+659 -0.00755766045240185
+660 -0.00919072675598614
+661 -0.00917820835177611
+662 0.0449751982709438
+663 0.00545567790804502
+664 0.047402752921981
+665 0.0446605853927159
+666 0.0383269966597984
+667 0.0485706532828867
+668 -0.00861899683875584
+669 0.036175649351787
+670 0.0495063574698606
+671 -0.00922596004976487
+672 -0.0101114415486753
+673 -0.00993735125464903
+674 -0.0100323503804273
+675 -0.0105460378506107
+676 -0.0101900492452311
+677 -0.0104909689537006
+678 -0.0106006916930028
+679 -0.0104312931865838
+680 -0.0103517278463301
+681 -0.00740828023970121
+682 -0.00544494861028685
+683 -0.00608611560648061
+684 -0.00534756025333046
+685 -0.0031542340646546
+686 -0.00508349746510613
+687 -0.00739762226897734
+688 -0.0053663959286737
+689 -0.00916557860646553
+690 -0.0110500156300869
+691 -0.00988205922376505
+692 -0.0109866472880073
+693 -0.0111866547046902
+694 -0.0111122786835176
+695 -0.0108203039490724
+696 -0.0102592902413053
+697 -0.0107873762797399
+698 -0.010503275107589
+699 -0.0107835661252666
+700 -0.00885386551992296
+701 -0.00913096053370505
+702 -0.006655207615153
+703 -0.00593455487034946
+704 -0.00427919054888438
+705 -0.007897096903017
+706 0.0490946252850488
+707 0.00815207966824887
+708 0.0473241399151052
+709 0.0451019841097689
+710 0.0479372536790981
+711 -0.00656127986315397
+712 0.0402549343925511
+713 0.0449105363109089
+714 -0.00775184190900309
+715 -0.00768054605133951
+716 -0.00839927750787529
+717 -0.00843853230017117
+718 -0.00790960738283612
+719 -0.0080103177775415
+720 -0.00742775541399996
+721 -0.00765629252098078
+722 -0.00799975093255115
+723 -0.00852792228057431
+724 -0.00869178550957608
+725 -0.00626674339877887
+726 -0.00412677151228354
+727 -0.0048446048963408
+728 -0.000902395625628718
+729 -0.000758143099110528
+730 -0.00408369870009201
+731 -0.00365498969615341
+732 -0.00766259847340275
+733 -0.00952428752243833
+734 -0.00944480113586648
+735 -0.00948862662694449
+736 -0.00966174451824508
+737 -0.00945600129424617
+738 -0.00943741727131444
+739 -0.00927951393185398
+740 -0.00928797610609347
+741 -0.0093286159789273
+742 -0.00765123775530771
+743 -0.00891136789083873
+744 -0.00940772724441718
+745 -0.00786456325355482
+746 -0.0047977712696699
+747 -0.00308223523552548
+748 0.000335699172084439
+749 -0.00143686229797692
+750 0.0513266950133769
+751 0.00563569816195414
+752 0.0477166719391144
+753 0.0538442014782216
+754 -0.0056982279416085
+755 0.0394329868140949
+756 0.0485711646307275
+757 -0.00685930745583302
+758 -0.0069941514632557
+759 -0.0066395137630499
+760 -0.00736962474522024
+761 -0.00752916655217279
+762 -0.00739785479449587
+763 -0.00756967688350672
+764 -0.00753735518588655
+765 -0.00780124181595982
+766 -0.0077216624864741
+767 -0.00784018338356136
+768 -0.00785468874319521
+769 -0.00421699574952483
+770 -0.00190288158223283
+771 -0.000206480072774308
+772 0.00141964253926074
+773 -4.28774976178744e-05
+774 -0.000986275524641414
+775 -0.00657709364993877
+776 -0.00833283088512488
+777 -0.00818951629006444
+778 -0.00836751926023713
+779 -0.00846989619881298
+780 -0.00820214471451413
+781 -0.00821893302874576
+782 -0.00796875201723603
+783 -0.00797370090373924
+784 -0.00777868495761638
+785 -0.00789699981214183
+786 -0.00815610674254451
+787 -0.00778049198735858
+788 -0.00818383133025141
+789 -0.00781336379026083
+790 -0.00682906252309473
+791 -0.00521347355977257
+792 -0.00500213245575373
+793 -0.00506883410260168
+794 0.0474518412366765
+795 0.00530982771618318
+796 0.0565700977023552
+797 -0.000392750407902867
+798 0.0453538486416986
+799 0.0476616389325516
+800 -0.00485863626421196
+801 -0.00525412195734806
+802 -0.00565503507026226
+803 -0.00551485423027977
+804 -0.00524396672704169
+805 -0.00590408701477556
+806 -0.00575508257342466
+807 -0.0058689006002845
+808 -0.00561694855307918
+809 -0.00612555234095552
+810 -0.00608574219510099
+811 -0.00564904015986621
+812 -0.00490660016533395
+813 -0.0046171197705464
+814 0.00177390652695689
+815 0.0035896881022546
+816 0.00161554733058578
+817 0.00437187124600963
+818 -0.000991588850557123
+819 -0.00478099352848916
+820 -0.00637007664471483
+821 -0.00627509734235782
+822 -0.00655857327658989
+823 -0.00656425755979379
+824 -0.00650927617188294
+825 -0.00650262457960547
+826 -0.00662413230967772
+827 -0.00657738252698944
+828 -0.00645476393708
+829 -0.00659463926044406
+830 -0.00649001643087145
+831 -0.00610360245952262
+832 -0.00578387897293013
+833 -0.00402985580826015
+834 -0.00406634314030596
+835 -0.00261501841642483
+836 -0.00301755910132054
+837 -0.00326543386600453
+838 0.0572941624786258
+839 0.00764310260634384
+840 0.00124989263445848
+841 0.0485617649608875
+842 0.0534245959427794
+843 -0.00365723487459394
+844 -0.00424930954244624
+845 -0.00447294923783986
+846 -0.0044749818394267
+847 -0.00464870339809727
+848 -0.00404145529364563
+849 -0.0047634223597755
+850 -0.00467301475043984
+851 -0.00482869667199491
+852 -0.00492239000387982
+853 -0.00463765006041817
+854 -0.0046895918656674
+855 -0.00469126659620766
+856 -0.00430815035273188
+857 -0.00128800088385523
+858 0.00267781615699824
+859 0.00356342242419808
+860 0.00436645666734667
+861 0.00184035931246651
+862 -0.000943211896465123
+863 -0.00341308542653818
+864 -0.00529528124001912
+865 -0.00542898683100493
+866 -0.00553749798487258
+867 -0.00551487806193758
+868 -0.00531561848433044
+869 -0.0053876668196608
+870 -0.00553192702900933
+871 -0.00563989142175504
+872 -0.00521799189299869
+873 -0.00553828490350608
+874 -0.00542860483166627
+875 -0.00537895256953826
+876 -0.00402015584547178
+877 -0.00377599406291178
+878 -0.00402869364355377
+879 -0.00251857216946617
+880 -0.00240522631583728
+881 -0.00231339313710883
+882 -0.00221867026914885
+883 0.0485842407165457
+884 0.00444090950886226
+885 0.052462247531025
+886 -0.00245866728272721
+887 -0.00219100298033388
+888 -0.00258850605081842
+889 -0.0027963562987193
+890 -0.00291992258910256
+891 -0.00299261604099267
+892 -0.00287127254000797
+893 -0.00289608069594768
+894 -0.00280812344627608
+895 -0.00270762901550325
+896 -0.00266975879125481
+897 -0.00220006592251856
+898 -0.00202466427043569
+899 0.0013412649013256
+900 0.00249450051103929
+901 0.00162230152238072
+902 0.00338232047570188
+903 -6.05925325718229e-05
+904 -0.00259194486873829
+905 -0.00291640344192111
+906 -0.00250008679719597
+907 -0.0028490159247303
+908 -0.00308392356343406
+909 -0.00315698199289235
+910 -0.00298811214364333
+911 -0.00314332876724667
+912 -0.0031949080511993
+913 -0.00322269110310181
+914 -0.00327914040255845
+915 -0.00328848900129892
+916 -0.00333752382027206
+917 -0.00309757512659634
+918 -0.00328479456404456
+919 -0.00212177476264958
+920 -0.00213301941637447
+921 -0.00216845672650316
+922 -0.00207541491244113
+923 -0.00207359226664921
+924 -0.000795789430015217
+925 -0.000779514662456165
+926 -0.000756465833443346
+927 0.0577265267706453
+928 0.00687785865649293
+929 -0.00083343873726207
+930 -0.00107719646114928
+931 -0.00108475651120658
+932 -0.00117127681410593
+933 -0.00122811644473185
+934 -0.00127607908277042
+935 -0.00131021310298656
+936 -0.0013179072335
+937 -0.00147237322207706
+938 -0.00138343425729852
+939 -0.00136475351227092
+940 -0.00143219923016344
+941 -0.00132045547517709
+942 -0.00124130927220743
+943 -0.00118457113968125
+944 -0.0011509753919375
+945 -0.000999222689811352
+946 -0.00117359451012239
+947 -0.00105429594479484
+948 -0.00122085082695325
+949 -0.00129578013904683
+950 -0.00102761415169174
+951 -0.00140096472953254
+952 -0.00139860939031699
+953 -0.00151498094704311
+954 -0.0014719650713445
+955 -0.00156023800835947
+956 -0.00160881766904741
+957 -0.00156225880303738
+958 -0.00163459726309757
+959 -0.00163126714870796
+960 -0.00165394472715442
+961 -5.20102850007659e-05
+962 -0.000181333021969587
+963 -0.000229410914437179
+964 -0.000271936329999531
+965 -0.000289225646672715
+966 -0.000264626695269327
+967 -0.000343743683778553
+968 0.00109579617257524
+969 0.00106253650901319
+970 0.00103053375796608
+971 0.000994475133650943
+972 0.00096219604797213
+973 0.000930291083643673
+974 0.00089629434032705
+975 0.000862706715224073
+976 0.000829567281721935
+977 0.000796368072697504
+978 0.000761767798271763
+979 0.000730769092014861
+980 0.000695768030599533
+981 0.000665093515571032
+982 0.000631804759496164
+983 0.000597688431802904
+984 0.000571043223397954
+985 0.00053621559120878
+986 0.0005056031461063
+987 0.000470414024698076
+988 0.000436113652307852
+989 0.000401280866025421
+990 0.000366892747802913
+991 0.000332558486017457
+992 0.00029776201514551
+993 0.000264088081422397
+994 0.000229570195953799
+995 0.000203049247782519
+996 0.000169032219339048
+997 0.000134474421245207
+998 0.000100377453607142
+999 6.59658062483004e-05
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat
new file mode 100644
index 000000000..619ef9845
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat
@@ -0,0 +1,901 @@
+#scatter real total user system repeat
+101 0.00208497047424316 0.0 0.0 0.0 101
+102 0.00208020210266113 0.0 0.0 0.0 102
+103 0.00206804275512695 0.0 0.0 0.0 103
+104 0.00207710266113281 0.0 0.0 0.0 104
+105 0.00206398963928223 0.00999999999999979 0.00999999999999979 0.0 105
+106 0.00206398963928223 0.0 0.0 0.0 106
+107 0.00208497047424316 0.0 0.0 0.0 107
+108 0.00206398963928223 0.0 0.0 0.0 108
+109 0.00207400321960449 0.0 0.0 0.0 109
+110 0.00206398963928223 0.0 0.0 0.0 110
+111 0.00205802917480469 0.0 0.0 0.0 111
+112 0.00207996368408203 0.0 0.0 0.0 112
+113 0.00207304954528809 0.0 0.0 0.0 113
+114 0.00206899642944336 0.00999999999999979 0.00999999999999979 0.0 114
+115 0.00207114219665527 0.0 0.0 0.0 115
+116 0.00212287902832031 0.0 0.0 0.0 116
+117 0.00205707550048828 0.0 0.0 0.0 117
+118 0.0020599365234375 0.0 0.0 0.0 118
+119 0.00206613540649414 0.0100000000000016 0.0100000000000016 0.0 119
+120 0.00205683708190918 0.0 0.0 0.0 120
+121 0.00205206871032715 0.0 0.0 0.0 121
+122 0.00204992294311523 0.0 0.0 0.0 122
+123 0.00208115577697754 0.0 0.0 0.0 123
+124 0.00205588340759277 0.00999999999999979 0.00999999999999979 0.0 124
+125 0.00207877159118652 0.0 0.0 0.0 125
+126 0.00207400321960449 0.0 0.0 0.0 126
+127 0.00206089019775391 0.0 0.0 0.0 127
+128 0.00205779075622559 0.00999999999999979 0.00999999999999979 0.0 128
+129 0.00205898284912109 0.0 0.0 0.0 129
+130 0.00206899642944336 0.0 0.0 0.0 130
+131 0.00204896926879883 0.0 0.0 0.0 131
+132 0.00209593772888184 0.0 0.0 0.0 132
+133 0.00208401679992676 0.00999999999999979 0.00999999999999979 0.0 133
+134 0.0276279449462891 0.0199999999999996 0.0199999999999996 0.0 134
+135 0.0021820068359375 0.00999999999999979 0.00999999999999979 0.0 135
+136 0.00213503837585449 0.0 0.0 0.0 136
+137 0.00211405754089355 0.0 0.0 0.0 137
+138 0.00212502479553223 0.0 0.0 0.0 138
+139 0.0020899772644043 0.0 0.0 0.0 139
+140 0.00207901000976562 0.00999999999999979 0.00999999999999979 0.0 140
+141 0.00206589698791504 0.0 0.0 0.0 141
+142 0.00207710266113281 0.0 0.0 0.0 142
+143 0.00205492973327637 0.0 0.0 0.0 143
+144 0.00208020210266113 0.0 0.0 0.0 144
+145 0.00206184387207031 0.00999999999999979 0.00999999999999979 0.0 145
+146 0.00208377838134766 0.0 0.0 0.0 146
+147 0.00206995010375977 0.0 0.0 0.0 147
+148 0.00206708908081055 0.0 0.0 0.0 148
+149 0.00207114219665527 0.0100000000000016 0.0100000000000016 0.0 149
+150 0.0020759105682373 0.0 0.0 0.0 150
+151 0.0021510124206543 0.0 0.0 0.0 151
+152 0.00207805633544922 0.0 0.0 0.0 152
+153 0.00206089019775391 0.0 0.0 0.0 153
+154 0.00206089019775391 0.00999999999999979 0.00999999999999979 0.0 154
+155 0.00207614898681641 0.0 0.0 0.0 155
+156 0.00205588340759277 0.0 0.0 0.0 156
+157 0.00206494331359863 0.0 0.0 0.0 157
+158 0.00280499458312988 0.00999999999999979 0.00999999999999979 0.0 158
+159 0.00453996658325195 0.0 0.0 0.0 159
+160 0.00369596481323242 0.0 0.0 0.0 160
+161 0.00410914421081543 0.00999999999999979 0.00999999999999979 0.0 161
+162 0.00381112098693848 0.0 0.0 0.0 162
+163 0.00235795974731445 0.0 0.0 0.0 163
+164 0.00209784507751465 0.0 0.0 0.0 164
+165 0.00204992294311523 0.00999999999999979 0.00999999999999979 0.0 165
+166 0.00204110145568848 0.0 0.0 0.0 166
+167 0.00205802917480469 0.0 0.0 0.0 167
+168 0.00205707550048828 0.0 0.0 0.0 168
+169 0.00208711624145508 0.0 0.0 0.0 169
+170 0.00208187103271484 0.00999999999999979 0.00999999999999979 0.0 170
+171 0.00205421447753906 0.0 0.0 0.0 171
+172 0.0020749568939209 0.0 0.0 0.0 172
+173 0.00210809707641602 0.0 0.0 0.0 173
+174 0.00206804275512695 0.00999999999999979 0.00999999999999979 0.0 174
+175 0.00205206871032715 0.0 0.0 0.0 175
+176 0.00207614898681641 0.0 0.0 0.0 176
+177 0.0020759105682373 0.0 0.0 0.0 177
+178 0.0242831707000732 0.0300000000000011 0.0300000000000011 0.0 178
+179 0.00222992897033691 0.0 0.0 0.0 179
+180 0.00214791297912598 0.0 0.0 0.0 180
+181 0.00211286544799805 0.0 0.0 0.0 181
+182 0.00209379196166992 0.0 0.0 0.0 182
+183 0.00209307670593262 0.0 0.0 0.0 183
+184 0.00218510627746582 0.0 0.0 0.0 184
+185 0.00206613540649414 0.0 0.0 0.0 185
+186 0.00207090377807617 0.0 0.0 0.0 186
+187 0.00206613540649414 0.00999999999999979 0.00999999999999979 0.0 187
+188 0.00206112861633301 0.0 0.0 0.0 188
+189 0.00206303596496582 0.0 0.0 0.0 189
+190 0.00205802917480469 0.0 0.0 0.0 190
+191 0.00206398963928223 0.0 0.0 0.0 191
+192 0.00210189819335938 0.00999999999999979 0.00999999999999979 0.0 192
+193 0.00206804275512695 0.0 0.0 0.0 193
+194 0.00206708908081055 0.0 0.0 0.0 194
+195 0.00206208229064941 0.0 0.0 0.0 195
+196 0.0020899772644043 0.0 0.0 0.0 196
+197 0.00205612182617188 0.00999999999999979 0.00999999999999979 0.0 197
+198 0.00205898284912109 0.0 0.0 0.0 198
+199 0.00208115577697754 0.0 0.0 0.0 199
+200 0.0020759105682373 0.0 0.0 0.0 200
+201 0.00205302238464355 0.00999999999999979 0.00999999999999979 0.0 201
+202 0.00206995010375977 0.0 0.0 0.0 202
+203 0.00206089019775391 0.0 0.0 0.0 203
+204 0.0020439624786377 0.0 0.0 0.0 204
+205 0.00207185745239258 0.0 0.0 0.0 205
+206 0.0020449161529541 0.00999999999999979 0.00999999999999979 0.0 206
+207 0.00223898887634277 0.0 0.0 0.0 207
+208 0.00205707550048828 0.0 0.0 0.0 208
+209 0.00206303596496582 0.0 0.0 0.0 209
+210 0.00205707550048828 0.0 0.0 0.0 210
+211 0.00204896926879883 0.0100000000000016 0.0100000000000016 0.0 211
+212 0.00204205513000488 0.0 0.0 0.0 212
+213 0.00211596488952637 0.0 0.0 0.0 213
+214 0.00206494331359863 0.0 0.0 0.0 214
+215 0.0020749568939209 0.0 0.0 0.0 215
+216 0.00206279754638672 0.00999999999999979 0.00999999999999979 0.0 216
+217 0.00206589698791504 0.0 0.0 0.0 217
+218 0.00207114219665527 0.0 0.0 0.0 218
+219 0.00208210945129395 0.0 0.0 0.0 219
+220 0.00207901000976562 0.00999999999999979 0.00999999999999979 0.0 220
+221 0.00207304954528809 0.0 0.0 0.0 221
+222 0.00209498405456543 0.0 0.0 0.0 222
+223 0.0286588668823242 0.0299999999999994 0.0299999999999994 0.0 223
+224 0.00219297409057617 0.0 0.0 0.0 224
+225 0.00214004516601562 0.0 0.0 0.0 225
+226 0.00212192535400391 0.00999999999999979 0.00999999999999979 0.0 226
+227 0.00208878517150879 0.0 0.0 0.0 227
+228 0.00208306312561035 0.0 0.0 0.0 228
+229 0.00206398963928223 0.0 0.0 0.0 229
+230 0.00207996368408203 0.0 0.0 0.0 230
+231 0.00206494331359863 0.00999999999999979 0.00999999999999979 0.0 231
+232 0.00206494331359863 0.0 0.0 0.0 232
+233 0.0020751953125 0.0 0.0 0.0 233
+234 0.00207805633544922 0.0 0.0 0.0 234
+235 0.00206494331359863 0.0 0.0 0.0 235
+236 0.00206398963928223 0.00999999999999979 0.00999999999999979 0.0 236
+237 0.0020749568939209 0.0 0.0 0.0 237
+238 0.00206494331359863 0.0 0.0 0.0 238
+239 0.00206494331359863 0.0 0.0 0.0 239
+240 0.00205492973327637 0.0 0.0 0.0 240
+241 0.00206518173217773 0.0100000000000016 0.0100000000000016 0.0 241
+242 0.00207686424255371 0.0 0.0 0.0 242
+243 0.00204920768737793 0.0 0.0 0.0 243
+244 0.00206398963928223 0.0 0.0 0.0 244
+245 0.00206184387207031 0.00999999999999979 0.00999999999999979 0.0 245
+246 0.00205397605895996 0.0 0.0 0.0 246
+247 0.00206804275512695 0.0 0.0 0.0 247
+248 0.00204014778137207 0.0 0.0 0.0 248
+249 0.00206995010375977 0.0 0.0 0.0 249
+250 0.00205802917480469 0.00999999999999979 0.00999999999999979 0.0 250
+251 0.00205612182617188 0.0 0.0 0.0 251
+252 0.0020439624786377 0.0 0.0 0.0 252
+253 0.00204610824584961 0.0 0.0 0.0 253
+254 0.00206518173217773 0.0 0.0 0.0 254
+255 0.00204300880432129 0.00999999999999979 0.00999999999999979 0.0 255
+256 0.00205802917480469 0.0 0.0 0.0 256
+257 0.0020759105682373 0.0 0.0 0.0 257
+258 0.00206303596496582 0.0 0.0 0.0 258
+259 0.00207281112670898 0.0 0.0 0.0 259
+260 0.00205898284912109 0.00999999999999979 0.00999999999999979 0.0 260
+261 0.00205898284912109 0.0 0.0 0.0 261
+262 0.00205683708190918 0.0 0.0 0.0 262
+263 0.00207901000976562 0.0 0.0 0.0 263
+264 0.00206780433654785 0.00999999999999979 0.00999999999999979 0.0 264
+265 0.00208497047424316 0.0 0.0 0.0 265
+266 0.00219416618347168 0.0 0.0 0.0 266
+267 0.024918794631958 0.0199999999999996 0.0199999999999996 0.0 267
+268 0.00214409828186035 0.0100000000000016 0.0100000000000016 0.0 268
+269 0.0021209716796875 0.0 0.0 0.0 269
+270 0.00211095809936523 0.0 0.0 0.0 270
+271 0.00207209587097168 0.0 0.0 0.0 271
+272 0.0020902156829834 0.00999999999999979 0.00999999999999979 0.0 272
+273 0.00208091735839844 0.0 0.0 0.0 273
+274 0.00206494331359863 0.0 0.0 0.0 274
+275 0.00207281112670898 0.0 0.0 0.0 275
+276 0.00205397605895996 0.0 0.0 0.0 276
+277 0.0020599365234375 0.00999999999999979 0.00999999999999979 0.0 277
+278 0.00206208229064941 0.0 0.0 0.0 278
+279 0.00205898284912109 0.0 0.0 0.0 279
+280 0.00207304954528809 0.0 0.0 0.0 280
+281 0.0020909309387207 0.0 0.0 0.0 281
+282 0.00206708908081055 0.00999999999999979 0.00999999999999979 0.0 282
+283 0.00206303596496582 0.0 0.0 0.0 283
+284 0.0020449161529541 0.0 0.0 0.0 284
+285 0.00206398963928223 0.0 0.0 0.0 285
+286 0.00204992294311523 0.0 0.0 0.0 286
+287 0.00205111503601074 0.00999999999999979 0.00999999999999979 0.0 287
+288 0.00205397605895996 0.0 0.0 0.0 288
+289 0.00206589698791504 0.0 0.0 0.0 289
+290 0.00206184387207031 0.0 0.0 0.0 290
+291 0.00207281112670898 0.00999999999999979 0.00999999999999979 0.0 291
+292 0.00205683708190918 0.0 0.0 0.0 292
+293 0.00205802917480469 0.0 0.0 0.0 293
+294 0.00206208229064941 0.0 0.0 0.0 294
+295 0.00205206871032715 0.0 0.0 0.0 295
+296 0.00206208229064941 0.00999999999999979 0.00999999999999979 0.0 296
+297 0.00205707550048828 0.0 0.0 0.0 297
+298 0.00207400321960449 0.0 0.0 0.0 298
+299 0.00205802917480469 0.0 0.0 0.0 299
+300 0.00205802917480469 0.0 0.0 0.0 300
+301 0.00207018852233887 0.00999999999999979 0.00999999999999979 0.0 301
+302 0.00206995010375977 0.0 0.0 0.0 302
+303 0.0021510124206543 0.0 0.0 0.0 303
+304 0.0020599365234375 0.0 0.0 0.0 304
+305 0.00206208229064941 0.0 0.0 0.0 305
+306 0.00221395492553711 0.0100000000000016 0.0100000000000016 0.0 306
+307 0.00210285186767578 0.0 0.0 0.0 307
+308 0.00223803520202637 0.0 0.0 0.0 308
+309 0.0020909309387207 0.0 0.0 0.0 309
+310 0.00207996368408203 0.00999999999999979 0.00999999999999979 0.0 310
+311 0.0255651473999023 0.0199999999999996 0.0199999999999996 0.0 311
+312 0.00424313545227051 0.00999999999999979 0.00999999999999979 0.0 312
+313 0.00345015525817871 0.0 0.0 0.0 313
+314 0.00213217735290527 0.0 0.0 0.0 314
+315 0.00210309028625488 0.0 0.0 0.0 315
+316 0.00207686424255371 0.00999999999999979 0.00999999999999979 0.0 316
+317 0.00207209587097168 0.0 0.0 0.0 317
+318 0.00213503837585449 0.0 0.0 0.0 318
+319 0.00294709205627441 0.0 0.0 0.0 319
+320 0.00207018852233887 0.00999999999999979 0.00999999999999979 0.0 320
+321 0.00208091735839844 0.0 0.0 0.0 321
+322 0.00208783149719238 0.0 0.0 0.0 322
+323 0.00208806991577148 0.0 0.0 0.0 323
+324 0.00208210945129395 0.0 0.0 0.0 324
+325 0.0020601749420166 0.00999999999999979 0.00999999999999979 0.0 325
+326 0.00206303596496582 0.0 0.0 0.0 326
+327 0.00205588340759277 0.0 0.0 0.0 327
+328 0.00206208229064941 0.0 0.0 0.0 328
+329 0.00205492973327637 0.0 0.0 0.0 329
+330 0.00205683708190918 0.00999999999999979 0.00999999999999979 0.0 330
+331 0.00205397605895996 0.0 0.0 0.0 331
+332 0.00206303596496582 0.0 0.0 0.0 332
+333 0.00205397605895996 0.0 0.0 0.0 333
+334 0.00205802917480469 0.0 0.0 0.0 334
+335 0.00204992294311523 0.0100000000000016 0.0100000000000016 0.0 335
+336 0.0020599365234375 0.0 0.0 0.0 336
+337 0.00216293334960938 0.0 0.0 0.0 337
+338 0.00204205513000488 0.0 0.0 0.0 338
+339 0.00208377838134766 0.00999999999999979 0.00999999999999979 0.0 339
+340 0.00212287902832031 0.0 0.0 0.0 340
+341 0.00205206871032715 0.0 0.0 0.0 341
+342 0.00207185745239258 0.0 0.0 0.0 342
+343 0.00206279754638672 0.0 0.0 0.0 343
+344 0.00204896926879883 0.00999999999999979 0.00999999999999979 0.0 344
+345 0.00205779075622559 0.0 0.0 0.0 345
+346 0.00207614898681641 0.0 0.0 0.0 346
+347 0.00204992294311523 0.0 0.0 0.0 347
+348 0.00206398963928223 0.0 0.0 0.0 348
+349 0.00206184387207031 0.00999999999999979 0.00999999999999979 0.0 349
+350 0.00206518173217773 0.0 0.0 0.0 350
+351 0.00207805633544922 0.0 0.0 0.0 351
+352 0.0020749568939209 0.0 0.0 0.0 352
+353 0.00208401679992676 0.0 0.0 0.0 353
+354 0.00214099884033203 0.00999999999999979 0.00999999999999979 0.0 354
+355 0.0242671966552734 0.0199999999999996 0.0199999999999996 0.0 355
+356 0.00216913223266602 0.0 0.0 0.0 356
+357 0.00213503837585449 0.00999999999999979 0.00999999999999979 0.0 357
+358 0.00212192535400391 0.0 0.0 0.0 358
+359 0.00210094451904297 0.0 0.0 0.0 359
+360 0.0020909309387207 0.0 0.0 0.0 360
+361 0.00209498405456543 0.0 0.0 0.0 361
+362 0.00208592414855957 0.0100000000000016 0.0100000000000016 0.0 362
+363 0.00206685066223145 0.0 0.0 0.0 363
+364 0.00205492973327637 0.0 0.0 0.0 364
+365 0.00207710266113281 0.0 0.0 0.0 365
+366 0.00207304954528809 0.0 0.0 0.0 366
+367 0.00205421447753906 0.0 0.0 0.0 367
+368 0.00206685066223145 0.0 0.0 0.0 368
+369 0.00206613540649414 0.0 0.0 0.0 369
+370 0.00255608558654785 0.0 0.0 0.0 370
+371 0.00206899642944336 0.00999999999999979 0.00999999999999979 0.0 371
+372 0.00216817855834961 0.0 0.0 0.0 372
+373 0.00214409828186035 0.0 0.0 0.0 373
+374 0.00205111503601074 0.0 0.0 0.0 374
+375 0.0020749568939209 0.0 0.0 0.0 375
+376 0.0020759105682373 0.00999999999999979 0.00999999999999979 0.0 376
+377 0.0020599365234375 0.0 0.0 0.0 377
+378 0.00207805633544922 0.0 0.0 0.0 378
+379 0.00205898284912109 0.0 0.0 0.0 379
+380 0.00205492973327637 0.0 0.0 0.0 380
+381 0.00205397605895996 0.00999999999999979 0.00999999999999979 0.0 381
+382 0.00205588340759277 0.0 0.0 0.0 382
+383 0.00204014778137207 0.0 0.0 0.0 383
+384 0.00204610824584961 0.0 0.0 0.0 384
+385 0.00206184387207031 0.0 0.0 0.0 385
+386 0.00203680992126465 0.00999999999999979 0.00999999999999979 0.0 386
+387 0.00206804275512695 0.0 0.0 0.0 387
+388 0.00205707550048828 0.0 0.0 0.0 388
+389 0.00206804275512695 0.0 0.0 0.0 389
+390 0.00206589698791504 0.00999999999999979 0.00999999999999979 0.0 390
+391 0.00206780433654785 0.0 0.0 0.0 391
+392 0.00206494331359863 0.0 0.0 0.0 392
+393 0.00206303596496582 0.0 0.0 0.0 393
+394 0.00204896926879883 0.0 0.0 0.0 394
+395 0.00207185745239258 0.00999999999999979 0.00999999999999979 0.0 395
+396 0.00207304954528809 0.0 0.0 0.0 396
+397 0.00208806991577148 0.0 0.0 0.0 397
+398 0.00208806991577148 0.0 0.0 0.0 398
+399 0.024277925491333 0.0300000000000011 0.0300000000000011 0.0 399
+400 0.00216102600097656 0.0 0.0 0.0 400
+401 0.00212621688842773 0.0 0.0 0.0 401
+402 0.00209689140319824 0.0 0.0 0.0 402
+403 0.00210285186767578 0.00999999999999979 0.00999999999999979 0.0 403
+404 0.00208210945129395 0.0 0.0 0.0 404
+405 0.00401806831359863 0.0 0.0 0.0 405
+406 0.00404691696166992 0.00999999999999979 0.00999999999999979 0.0 406
+407 0.00400710105895996 0.0 0.0 0.0 407
+408 0.00207805633544922 0.0 0.0 0.0 408
+409 0.00208497047424316 0.0 0.0 0.0 409
+410 0.0020751953125 0.00999999999999979 0.00999999999999979 0.0 410
+411 0.00208187103271484 0.0 0.0 0.0 411
+412 0.00213217735290527 0.0 0.0 0.0 412
+413 0.00207400321960449 0.0 0.0 0.0 413
+414 0.00206208229064941 0.0 0.0 0.0 414
+415 0.00206613540649414 0.00999999999999979 0.00999999999999979 0.0 415
+416 0.00204205513000488 0.0 0.0 0.0 416
+417 0.00208091735839844 0.0 0.0 0.0 417
+418 0.00227904319763184 0.0 0.0 0.0 418
+419 0.00206899642944336 0.00999999999999979 0.00999999999999979 0.0 419
+420 0.00207114219665527 0.0 0.0 0.0 420
+421 0.00207090377807617 0.0 0.0 0.0 421
+422 0.00204086303710938 0.0 0.0 0.0 422
+423 0.00205683708190918 0.0 0.0 0.0 423
+424 0.00205421447753906 0.00999999999999979 0.00999999999999979 0.0 424
+425 0.00205588340759277 0.0 0.0 0.0 425
+426 0.0020439624786377 0.0 0.0 0.0 426
+427 0.00203394889831543 0.0 0.0 0.0 427
+428 0.0020599365234375 0.0 0.0 0.0 428
+429 0.00205612182617188 0.0100000000000016 0.0100000000000016 0.0 429
+430 0.00206303596496582 0.0 0.0 0.0 430
+431 0.00206899642944336 0.0 0.0 0.0 431
+432 0.00206804275512695 0.0 0.0 0.0 432
+433 0.00212502479553223 0.0 0.0 0.0 433
+434 0.00207805633544922 0.00999999999999979 0.00999999999999979 0.0 434
+435 0.00205397605895996 0.0 0.0 0.0 435
+436 0.00214004516601562 0.0 0.0 0.0 436
+437 0.0020451545715332 0.0 0.0 0.0 437
+438 0.0020599365234375 0.00999999999999979 0.00999999999999979 0.0 438
+439 0.00207805633544922 0.0 0.0 0.0 439
+440 0.00207304954528809 0.0 0.0 0.0 440
+441 0.00207090377807617 0.0 0.0 0.0 441
+442 0.0238261222839355 0.0299999999999994 0.0299999999999994 0.0 442
+443 0.00229191780090332 0.0 0.0 0.0 443
+444 0.00225210189819336 0.0 0.0 0.0 444
+445 0.00214314460754395 0.0 0.0 0.0 445
+446 0.00211405754089355 0.0 0.0 0.0 446
+447 0.0021059513092041 0.00999999999999979 0.00999999999999979 0.0 447
+448 0.00212502479553223 0.0 0.0 0.0 448
+449 0.00215005874633789 0.0 0.0 0.0 449
+450 0.00206708908081055 0.0 0.0 0.0 450
+451 0.00206208229064941 0.00999999999999979 0.00999999999999979 0.0 451
+452 0.00206995010375977 0.0 0.0 0.0 452
+453 0.00207304954528809 0.0 0.0 0.0 453
+454 0.00208711624145508 0.0 0.0 0.0 454
+455 0.00207400321960449 0.0 0.0 0.0 455
+456 0.00205802917480469 0.0100000000000016 0.0100000000000016 0.0 456
+457 0.00207400321960449 0.0 0.0 0.0 457
+458 0.00209999084472656 0.0 0.0 0.0 458
+459 0.00374412536621094 0.0 0.0 0.0 459
+460 0.00207614898681641 0.0 0.0 0.0 460
+461 0.00207996368408203 0.00999999999999979 0.00999999999999979 0.0 461
+462 0.00205206871032715 0.0 0.0 0.0 462
+463 0.00207209587097168 0.0 0.0 0.0 463
+464 0.00206708908081055 0.0 0.0 0.0 464
+465 0.00206398963928223 0.0 0.0 0.0 465
+466 0.00205302238464355 0.00999999999999979 0.00999999999999979 0.0 466
+467 0.00206995010375977 0.0 0.0 0.0 467
+468 0.00209617614746094 0.0 0.0 0.0 468
+469 0.00206899642944336 0.0 0.0 0.0 469
+470 0.0020451545715332 0.0 0.0 0.0 470
+471 0.00206589698791504 0.00999999999999979 0.00999999999999979 0.0 471
+472 0.0020442008972168 0.0 0.0 0.0 472
+473 0.00206089019775391 0.0 0.0 0.0 473
+474 0.00205492973327637 0.0 0.0 0.0 474
+475 0.00206708908081055 0.0 0.0 0.0 475
+476 0.00205087661743164 0.00999999999999979 0.00999999999999979 0.0 476
+477 0.00206589698791504 0.0 0.0 0.0 477
+478 0.00207209587097168 0.0 0.0 0.0 478
+479 0.00204992294311523 0.0 0.0 0.0 479
+480 0.00207209587097168 0.00999999999999979 0.00999999999999979 0.0 480
+481 0.0020599365234375 0.0 0.0 0.0 481
+482 0.00206613540649414 0.0 0.0 0.0 482
+483 0.00205898284912109 0.0 0.0 0.0 483
+484 0.00209403038024902 0.0 0.0 0.0 484
+485 0.00207710266113281 0.00999999999999979 0.00999999999999979 0.0 485
+486 0.0239040851593018 0.0200000000000014 0.0200000000000014 0.0 486
+487 0.00222492218017578 0.0 0.0 0.0 487
+488 0.00213289260864258 0.0 0.0 0.0 488
+489 0.0021212100982666 0.00999999999999979 0.00999999999999979 0.0 489
+490 0.0021059513092041 0.0 0.0 0.0 490
+491 0.00208616256713867 0.0 0.0 0.0 491
+492 0.00208687782287598 0.0 0.0 0.0 492
+493 0.00207901000976562 0.0 0.0 0.0 493
+494 0.00206494331359863 0.00999999999999979 0.00999999999999979 0.0 494
+495 0.00204300880432129 0.0 0.0 0.0 495
+496 0.00206112861633301 0.0 0.0 0.0 496
+497 0.00206708908081055 0.0 0.0 0.0 497
+498 0.0030369758605957 0.00999999999999979 0.00999999999999979 0.0 498
+499 0.00405597686767578 0.0 0.0 0.0 499
+500 0.00401997566223145 0.0 0.0 0.0 500
+501 0.0026099681854248 0.00999999999999979 0.00999999999999979 0.0 501
+502 0.00206303596496582 0.0 0.0 0.0 502
+503 0.00206589698791504 0.0 0.0 0.0 503
+504 0.00206708908081055 0.0 0.0 0.0 504
+505 0.00212311744689941 0.00999999999999979 0.00999999999999979 0.0 505
+506 0.00225090980529785 0.0 0.0 0.0 506
+507 0.00206089019775391 0.0 0.0 0.0 507
+508 0.00205683708190918 0.0 0.0 0.0 508
+509 0.00205397605895996 0.0 0.0 0.0 509
+510 0.00206184387207031 0.00999999999999979 0.00999999999999979 0.0 510
+511 0.00205707550048828 0.0 0.0 0.0 511
+512 0.00204896926879883 0.0 0.0 0.0 512
+513 0.00204920768737793 0.0 0.0 0.0 513
+514 0.00206398963928223 0.0 0.0 0.0 514
+515 0.00204992294311523 0.00999999999999979 0.00999999999999979 0.0 515
+516 0.00204110145568848 0.0 0.0 0.0 516
+517 0.00205183029174805 0.0 0.0 0.0 517
+518 0.00206089019775391 0.0 0.0 0.0 518
+519 0.00207400321960449 0.00999999999999979 0.00999999999999979 0.0 519
+520 0.00206184387207031 0.0 0.0 0.0 520
+521 0.00205802917480469 0.0 0.0 0.0 521
+522 0.00205802917480469 0.0 0.0 0.0 522
+523 0.00206112861633301 0.0 0.0 0.0 523
+524 0.00215315818786621 0.0100000000000016 0.0100000000000016 0.0 524
+525 0.0020451545715332 0.0 0.0 0.0 525
+526 0.00207614898681641 0.0 0.0 0.0 526
+527 0.00208091735839844 0.0 0.0 0.0 527
+528 0.00208616256713867 0.0 0.0 0.0 528
+529 0.00211095809936523 0.00999999999999979 0.00999999999999979 0.0 529
+530 0.0298140048980713 0.0299999999999994 0.0299999999999994 0.0 530
+531 0.00220298767089844 0.0 0.0 0.0 531
+532 0.00216102600097656 0.0 0.0 0.0 532
+533 0.00211501121520996 0.0 0.0 0.0 533
+534 0.00208687782287598 0.00999999999999979 0.00999999999999979 0.0 534
+535 0.0021059513092041 0.0 0.0 0.0 535
+536 0.00210785865783691 0.0 0.0 0.0 536
+537 0.0020749568939209 0.0 0.0 0.0 537
+538 0.00207400321960449 0.0 0.0 0.0 538
+539 0.00206589698791504 0.00999999999999979 0.00999999999999979 0.0 539
+540 0.00211691856384277 0.0 0.0 0.0 540
+541 0.00208401679992676 0.0 0.0 0.0 541
+542 0.00206995010375977 0.0 0.0 0.0 542
+543 0.00206995010375977 0.0 0.0 0.0 543
+544 0.00207996368408203 0.00999999999999979 0.00999999999999979 0.0 544
+545 0.00206589698791504 0.0 0.0 0.0 545
+546 0.00207996368408203 0.0 0.0 0.0 546
+547 0.00207018852233887 0.0 0.0 0.0 547
+548 0.00206899642944336 0.0 0.0 0.0 548
+549 0.00207304954528809 0.0100000000000016 0.0100000000000016 0.0 549
+550 0.00206708908081055 0.0 0.0 0.0 550
+551 0.00209689140319824 0.0 0.0 0.0 551
+552 0.0020749568939209 0.0 0.0 0.0 552
+553 0.00207400321960449 0.00999999999999979 0.00999999999999979 0.0 553
+554 0.00207400321960449 0.0 0.0 0.0 554
+555 0.0020449161529541 0.0 0.0 0.0 555
+556 0.00207209587097168 0.0 0.0 0.0 556
+557 0.00205898284912109 0.0 0.0 0.0 557
+558 0.00214600563049316 0.00999999999999979 0.00999999999999979 0.0 558
+559 0.00205612182617188 0.0 0.0 0.0 559
+560 0.00207901000976562 0.0 0.0 0.0 560
+561 0.00205612182617188 0.0 0.0 0.0 561
+562 0.00205707550048828 0.0 0.0 0.0 562
+563 0.00205397605895996 0.00999999999999979 0.00999999999999979 0.0 563
+564 0.00207209587097168 0.0 0.0 0.0 564
+565 0.0020599365234375 0.0 0.0 0.0 565
+566 0.00208687782287598 0.0 0.0 0.0 566
+567 0.00206708908081055 0.00999999999999979 0.00999999999999979 0.0 567
+568 0.00205397605895996 0.0 0.0 0.0 568
+569 0.00206995010375977 0.0 0.0 0.0 569
+570 0.00204896926879883 0.0 0.0 0.0 570
+571 0.00208187103271484 0.0 0.0 0.0 571
+572 0.00207901000976562 0.00999999999999979 0.00999999999999979 0.0 572
+573 0.0231339931488037 0.0199999999999996 0.0199999999999996 0.0 573
+574 0.00312709808349609 0.0 0.0 0.0 574
+575 0.00215601921081543 0.0 0.0 0.0 575
+576 0.00213813781738281 0.0100000000000016 0.0100000000000016 0.0 576
+577 0.00209593772888184 0.0 0.0 0.0 577
+578 0.00209403038024902 0.0 0.0 0.0 578
+579 0.00207901000976562 0.0 0.0 0.0 579
+580 0.00208401679992676 0.0 0.0 0.0 580
+581 0.00207114219665527 0.0 0.0 0.0 581
+582 0.00207710266113281 0.0 0.0 0.0 582
+583 0.00206685066223145 0.0 0.0 0.0 583
+584 0.00206184387207031 0.0 0.0 0.0 584
+585 0.00205588340759277 0.00999999999999979 0.00999999999999979 0.0 585
+586 0.0020751953125 0.0 0.0 0.0 586
+587 0.00206303596496582 0.0 0.0 0.0 587
+588 0.00206303596496582 0.0 0.0 0.0 588
+589 0.00205612182617188 0.0 0.0 0.0 589
+590 0.00207281112670898 0.00999999999999979 0.00999999999999979 0.0 590
+591 0.00385499000549316 0.0 0.0 0.0 591
+592 0.00404191017150879 0.0 0.0 0.0 592
+593 0.00359702110290527 0.00999999999999979 0.00999999999999979 0.0 593
+594 0.0020909309387207 0.0 0.0 0.0 594
+595 0.00204992294311523 0.0 0.0 0.0 595
+596 0.0020909309387207 0.0 0.0 0.0 596
+597 0.0020749568939209 0.00999999999999979 0.00999999999999979 0.0 597
+598 0.00209784507751465 0.0 0.0 0.0 598
+599 0.00205683708190918 0.0 0.0 0.0 599
+600 0.00203394889831543 0.0 0.0 0.0 600
+601 0.00205302238464355 0.0 0.0 0.0 601
+602 0.00205016136169434 0.00999999999999979 0.00999999999999979 0.0 602
+603 0.0020599365234375 0.0 0.0 0.0 603
+604 0.00205111503601074 0.0 0.0 0.0 604
+605 0.00206780433654785 0.0 0.0 0.0 605
+606 0.00204992294311523 0.00999999999999979 0.00999999999999979 0.0 606
+607 0.00206804275512695 0.0 0.0 0.0 607
+608 0.0020439624786377 0.0 0.0 0.0 608
+609 0.00205683708190918 0.0 0.0 0.0 609
+610 0.00210785865783691 0.0 0.0 0.0 610
+611 0.00206685066223145 0.00999999999999979 0.00999999999999979 0.0 611
+612 0.00205206871032715 0.0 0.0 0.0 612
+613 0.00204706192016602 0.0 0.0 0.0 613
+614 0.00208616256713867 0.0 0.0 0.0 614
+615 0.00210213661193848 0.0 0.0 0.0 615
+616 0.0239150524139404 0.0300000000000011 0.0300000000000011 0.0 616
+617 0.00241804122924805 0.0 0.0 0.0 617
+618 0.00215888023376465 0.0 0.0 0.0 618
+619 0.00210809707641602 0.00999999999999979 0.00999999999999979 0.0 619
+620 0.00209403038024902 0.0 0.0 0.0 620
+621 0.00210905075073242 0.0 0.0 0.0 621
+622 0.00210404396057129 0.0 0.0 0.0 622
+623 0.00208401679992676 0.0 0.0 0.0 623
+624 0.00205111503601074 0.00999999999999979 0.00999999999999979 0.0 624
+625 0.00206303596496582 0.0 0.0 0.0 625
+626 0.0020599365234375 0.0 0.0 0.0 626
+627 0.00207400321960449 0.0 0.0 0.0 627
+628 0.0020759105682373 0.0 0.0 0.0 628
+629 0.00206995010375977 0.00999999999999979 0.00999999999999979 0.0 629
+630 0.0021660327911377 0.0 0.0 0.0 630
+631 0.00207710266113281 0.0 0.0 0.0 631
+632 0.00208401679992676 0.0 0.0 0.0 632
+633 0.00205492973327637 0.0 0.0 0.0 633
+634 0.00207018852233887 0.00999999999999979 0.00999999999999979 0.0 634
+635 0.00204586982727051 0.0 0.0 0.0 635
+636 0.00205898284912109 0.0 0.0 0.0 636
+637 0.0029301643371582 0.0 0.0 0.0 637
+638 0.00209999084472656 0.00999999999999979 0.00999999999999979 0.0 638
+639 0.00206685066223145 0.0 0.0 0.0 639
+640 0.00207400321960449 0.0 0.0 0.0 640
+641 0.00206184387207031 0.0 0.0 0.0 641
+642 0.00205183029174805 0.0 0.0 0.0 642
+643 0.0020592212677002 0.0100000000000016 0.0100000000000016 0.0 643
+644 0.00204300880432129 0.0 0.0 0.0 644
+645 0.00207090377807617 0.0 0.0 0.0 645
+646 0.00207710266113281 0.0 0.0 0.0 646
+647 0.00206089019775391 0.00999999999999979 0.00999999999999979 0.0 647
+648 0.00205516815185547 0.0 0.0 0.0 648
+649 0.0020599365234375 0.0 0.0 0.0 649
+650 0.00206398963928223 0.0 0.0 0.0 650
+651 0.00206279754638672 0.0 0.0 0.0 651
+652 0.00206804275512695 0.00999999999999979 0.00999999999999979 0.0 652
+653 0.00206804275512695 0.0 0.0 0.0 653
+654 0.00207209587097168 0.0 0.0 0.0 654
+655 0.00206518173217773 0.0 0.0 0.0 655
+656 0.00206589698791504 0.0 0.0 0.0 656
+657 0.00209808349609375 0.00999999999999979 0.00999999999999979 0.0 657
+658 0.00213718414306641 0.0 0.0 0.0 658
+659 0.00212907791137695 0.0 0.0 0.0 659
+660 0.0242199897766113 0.0199999999999996 0.0199999999999996 0.0 660
+661 0.00217413902282715 0.0 0.0 0.0 661
+662 0.00212502479553223 0.0 0.0 0.0 662
+663 0.0021059513092041 0.0 0.0 0.0 663
+664 0.0020909309387207 0.0 0.0 0.0 664
+665 0.00208711624145508 0.00999999999999979 0.00999999999999979 0.0 665
+666 0.00214982032775879 0.0 0.0 0.0 666
+667 0.00213503837585449 0.0 0.0 0.0 667
+668 0.00210404396057129 0.0 0.0 0.0 668
+669 0.00216293334960938 0.0 0.0 0.0 669
+670 0.00207996368408203 0.0100000000000016 0.0100000000000016 0.0 670
+671 0.00222396850585938 0.0 0.0 0.0 671
+672 0.00205898284912109 0.0 0.0 0.0 672
+673 0.00205397605895996 0.0 0.0 0.0 673
+674 0.00206708908081055 0.00999999999999979 0.00999999999999979 0.0 674
+675 0.00205898284912109 0.0 0.0 0.0 675
+676 0.00207400321960449 0.0 0.0 0.0 676
+677 0.0020599365234375 0.0 0.0 0.0 677
+678 0.00206208229064941 0.0 0.0 0.0 678
+679 0.00206589698791504 0.00999999999999979 0.00999999999999979 0.0 679
+680 0.00203895568847656 0.0 0.0 0.0 680
+681 0.00205302238464355 0.0 0.0 0.0 681
+682 0.00205397605895996 0.0 0.0 0.0 682
+683 0.0020599365234375 0.0 0.0 0.0 683
+684 0.00207614898681641 0.00999999999999979 0.00999999999999979 0.0 684
+685 0.00306200981140137 0.0 0.0 0.0 685
+686 0.00403904914855957 0.0 0.0 0.0 686
+687 0.00366306304931641 0.00999999999999979 0.00999999999999979 0.0 687
+688 0.00224184989929199 0.0 0.0 0.0 688
+689 0.00207114219665527 0.0 0.0 0.0 689
+690 0.00205707550048828 0.0 0.0 0.0 690
+691 0.00207996368408203 0.00999999999999979 0.00999999999999979 0.0 691
+692 0.00224709510803223 0.0 0.0 0.0 692
+693 0.00273489952087402 0.0 0.0 0.0 693
+694 0.00208401679992676 0.0 0.0 0.0 694
+695 0.00205206871032715 0.00999999999999979 0.00999999999999979 0.0 695
+696 0.00206899642944336 0.0 0.0 0.0 696
+697 0.00205492973327637 0.0 0.0 0.0 697
+698 0.00207281112670898 0.0 0.0 0.0 698
+699 0.00207114219665527 0.0 0.0 0.0 699
+700 0.00206804275512695 0.00999999999999979 0.00999999999999979 0.0 700
+701 0.00208711624145508 0.0 0.0 0.0 701
+702 0.0020899772644043 0.0 0.0 0.0 702
+703 0.0264170169830322 0.0300000000000011 0.0300000000000011 0.0 703
+704 0.00216817855834961 0.0 0.0 0.0 704
+705 0.00217700004577637 0.0 0.0 0.0 705
+706 0.00212311744689941 0.0 0.0 0.0 706
+707 0.0021059513092041 0.0 0.0 0.0 707
+708 0.00207686424255371 0.00999999999999979 0.00999999999999979 0.0 708
+709 0.00207686424255371 0.0 0.0 0.0 709
+710 0.00207209587097168 0.0 0.0 0.0 710
+711 0.00206804275512695 0.0 0.0 0.0 711
+712 0.00208497047424316 0.0 0.0 0.0 712
+713 0.00206303596496582 0.00999999999999979 0.00999999999999979 0.0 713
+714 0.00206899642944336 0.0 0.0 0.0 714
+715 0.00206398963928223 0.0 0.0 0.0 715
+716 0.00207996368408203 0.0 0.0 0.0 716
+717 0.00206804275512695 0.00999999999999979 0.00999999999999979 0.0 717
+718 0.00205397605895996 0.0 0.0 0.0 718
+719 0.00206899642944336 0.0 0.0 0.0 719
+720 0.00207686424255371 0.0 0.0 0.0 720
+721 0.00207400321960449 0.0 0.0 0.0 721
+722 0.00207614898681641 0.00999999999999979 0.00999999999999979 0.0 722
+723 0.00206184387207031 0.0 0.0 0.0 723
+724 0.00207996368408203 0.0 0.0 0.0 724
+725 0.00208902359008789 0.0 0.0 0.0 725
+726 0.00206303596496582 0.0 0.0 0.0 726
+727 0.00204992294311523 0.00999999999999979 0.00999999999999979 0.0 727
+728 0.00205898284912109 0.0 0.0 0.0 728
+729 0.00204992294311523 0.0 0.0 0.0 729
+730 0.00204205513000488 0.0 0.0 0.0 730
+731 0.00205898284912109 0.0 0.0 0.0 731
+732 0.00206422805786133 0.00999999999999979 0.00999999999999979 0.0 732
+733 0.00205898284912109 0.0 0.0 0.0 733
+734 0.00205111503601074 0.0 0.0 0.0 734
+735 0.00208902359008789 0.0 0.0 0.0 735
+736 0.00207805633544922 0.0100000000000016 0.0100000000000016 0.0 736
+737 0.00207400321960449 0.0 0.0 0.0 737
+738 0.00205492973327637 0.0 0.0 0.0 738
+739 0.0020751953125 0.0 0.0 0.0 739
+740 0.00207400321960449 0.0 0.0 0.0 740
+741 0.00206089019775391 0.00999999999999979 0.00999999999999979 0.0 741
+742 0.00254416465759277 0.0 0.0 0.0 742
+743 0.00206899642944336 0.0 0.0 0.0 743
+744 0.00208902359008789 0.0 0.0 0.0 744
+745 0.00208783149719238 0.0 0.0 0.0 745
+746 0.0239109992980957 0.0299999999999994 0.0299999999999994 0.0 746
+747 0.00231599807739258 0.0 0.0 0.0 747
+748 0.00217008590698242 0.0 0.0 0.0 748
+749 0.00211906433105469 0.0 0.0 0.0 749
+750 0.00209808349609375 0.00999999999999979 0.00999999999999979 0.0 750
+751 0.00207805633544922 0.0 0.0 0.0 751
+752 0.00208497047424316 0.0 0.0 0.0 752
+753 0.00206589698791504 0.0 0.0 0.0 753
+754 0.00207901000976562 0.00999999999999979 0.00999999999999979 0.0 754
+755 0.00206089019775391 0.0 0.0 0.0 755
+756 0.00207114219665527 0.0 0.0 0.0 756
+757 0.0020759105682373 0.0 0.0 0.0 757
+758 0.00206613540649414 0.0 0.0 0.0 758
+759 0.00204706192016602 0.00999999999999979 0.00999999999999979 0.0 759
+760 0.00205898284912109 0.0 0.0 0.0 760
+761 0.0020749568939209 0.0 0.0 0.0 761
+762 0.00206208229064941 0.0 0.0 0.0 762
+763 0.00206804275512695 0.0 0.0 0.0 763
+764 0.00213193893432617 0.0100000000000016 0.0100000000000016 0.0 764
+765 0.00206494331359863 0.0 0.0 0.0 765
+766 0.00205707550048828 0.0 0.0 0.0 766
+767 0.00206589698791504 0.0 0.0 0.0 767
+768 0.00207901000976562 0.00999999999999979 0.00999999999999979 0.0 768
+769 0.00204682350158691 0.0 0.0 0.0 769
+770 0.00206899642944336 0.0 0.0 0.0 770
+771 0.00208497047424316 0.0 0.0 0.0 771
+772 0.00206398963928223 0.0 0.0 0.0 772
+773 0.00205683708190918 0.00999999999999979 0.00999999999999979 0.0 773
+774 0.00205397605895996 0.0 0.0 0.0 774
+775 0.00206184387207031 0.0 0.0 0.0 775
+776 0.00205206871032715 0.0 0.0 0.0 776
+777 0.00205802917480469 0.0 0.0 0.0 777
+778 0.00281596183776855 0.00999999999999979 0.00999999999999979 0.0 778
+779 0.00403189659118652 0.0 0.0 0.0 779
+780 0.00367498397827148 0.0 0.0 0.0 780
+781 0.00383210182189941 0.00999999999999979 0.00999999999999979 0.0 781
+782 0.00206995010375977 0.0 0.0 0.0 782
+783 0.00206804275512695 0.0 0.0 0.0 783
+784 0.00208091735839844 0.00999999999999979 0.00999999999999979 0.0 784
+785 0.00210189819335938 0.0 0.0 0.0 785
+786 0.00206494331359863 0.0 0.0 0.0 786
+787 0.00209212303161621 0.0 0.0 0.0 787
+788 0.00208687782287598 0.0 0.0 0.0 788
+789 0.0249569416046143 0.0299999999999994 0.0299999999999994 0.0 789
+790 0.00217914581298828 0.0 0.0 0.0 790
+791 0.00213813781738281 0.0 0.0 0.0 791
+792 0.00213003158569336 0.0100000000000016 0.0100000000000016 0.0 792
+793 0.00212001800537109 0.0 0.0 0.0 793
+794 0.00209903717041016 0.0 0.0 0.0 794
+795 0.0021519660949707 0.0 0.0 0.0 795
+796 0.0020749568939209 0.0 0.0 0.0 796
+797 0.00205802917480469 0.00999999999999979 0.00999999999999979 0.0 797
+798 0.00208711624145508 0.0 0.0 0.0 798
+799 0.00205707550048828 0.0 0.0 0.0 799
+800 0.00207114219665527 0.0 0.0 0.0 800
+801 0.00207710266113281 0.0 0.0 0.0 801
+802 0.00207400321960449 0.00999999999999979 0.00999999999999979 0.0 802
+803 0.00207686424255371 0.0 0.0 0.0 803
+804 0.00207185745239258 0.0 0.0 0.0 804
+805 0.00206398963928223 0.0 0.0 0.0 805
+806 0.00205898284912109 0.0 0.0 0.0 806
+807 0.00205302238464355 0.00999999999999979 0.00999999999999979 0.0 807
+808 0.00205397605895996 0.0 0.0 0.0 808
+809 0.00205206871032715 0.0 0.0 0.0 809
+810 0.00205111503601074 0.0 0.0 0.0 810
+811 0.0020749568939209 0.00999999999999979 0.00999999999999979 0.0 811
+812 0.00206279754638672 0.0 0.0 0.0 812
+813 0.00205302238464355 0.0 0.0 0.0 813
+814 0.00204801559448242 0.0 0.0 0.0 814
+815 0.00205302238464355 0.0 0.0 0.0 815
+816 0.00206995010375977 0.00999999999999979 0.00999999999999979 0.0 816
+817 0.00208091735839844 0.0 0.0 0.0 817
+818 0.00214910507202148 0.0 0.0 0.0 818
+819 0.00205802917480469 0.0 0.0 0.0 819
+820 0.00217890739440918 0.0 0.0 0.0 820
+821 0.00206398963928223 0.00999999999999979 0.00999999999999979 0.0 821
+822 0.00204706192016602 0.0 0.0 0.0 822
+823 0.00205111503601074 0.0 0.0 0.0 823
+824 0.00206804275512695 0.0 0.0 0.0 824
+825 0.00206089019775391 0.00999999999999979 0.00999999999999979 0.0 825
+826 0.00207018852233887 0.0 0.0 0.0 826
+827 0.00208306312561035 0.0 0.0 0.0 827
+828 0.00205206871032715 0.0 0.0 0.0 828
+829 0.00206398963928223 0.0 0.0 0.0 829
+830 0.00209403038024902 0.0100000000000016 0.0100000000000016 0.0 830
+831 0.00208497047424316 0.0 0.0 0.0 831
+832 0.023939847946167 0.0199999999999996 0.0199999999999996 0.0 832
+833 0.00230288505554199 0.0 0.0 0.0 833
+834 0.0021669864654541 0.00999999999999979 0.00999999999999979 0.0 834
+835 0.00211286544799805 0.0 0.0 0.0 835
+836 0.0021059513092041 0.0 0.0 0.0 836
+837 0.00207304954528809 0.0 0.0 0.0 837
+838 0.0020749568939209 0.0 0.0 0.0 838
+839 0.00204682350158691 0.00999999999999979 0.00999999999999979 0.0 839
+840 0.00207400321960449 0.0 0.0 0.0 840
+841 0.0020592212677002 0.0 0.0 0.0 841
+842 0.00206589698791504 0.0 0.0 0.0 842
+843 0.00207114219665527 0.00999999999999979 0.00999999999999979 0.0 843
+844 0.00207304954528809 0.0 0.0 0.0 844
+845 0.00208091735839844 0.0 0.0 0.0 845
+846 0.00206303596496582 0.0 0.0 0.0 846
+847 0.00208115577697754 0.0 0.0 0.0 847
+848 0.00204992294311523 0.00999999999999979 0.00999999999999979 0.0 848
+849 0.00209403038024902 0.0 0.0 0.0 849
+850 0.00208497047424316 0.0 0.0 0.0 850
+851 0.00206804275512695 0.0 0.0 0.0 851
+852 0.00207209587097168 0.0 0.0 0.0 852
+853 0.0020599365234375 0.00999999999999979 0.00999999999999979 0.0 853
+854 0.0021519660949707 0.0 0.0 0.0 854
+855 0.00205707550048828 0.0 0.0 0.0 855
+856 0.00204801559448242 0.0 0.0 0.0 856
+857 0.00205111503601074 0.0100000000000016 0.0100000000000016 0.0 857
+858 0.00204992294311523 0.0 0.0 0.0 858
+859 0.00207304954528809 0.0 0.0 0.0 859
+860 0.00205898284912109 0.0 0.0 0.0 860
+861 0.00205802917480469 0.0 0.0 0.0 861
+862 0.00205397605895996 0.00999999999999979 0.00999999999999979 0.0 862
+863 0.00206089019775391 0.0 0.0 0.0 863
+864 0.00206780433654785 0.0 0.0 0.0 864
+865 0.00206708908081055 0.0 0.0 0.0 865
+866 0.00214815139770508 0.0 0.0 0.0 866
+867 0.00205397605895996 0.00999999999999979 0.00999999999999979 0.0 867
+868 0.00206112861633301 0.0 0.0 0.0 868
+869 0.00206589698791504 0.0 0.0 0.0 869
+870 0.00207686424255371 0.0 0.0 0.0 870
+871 0.00206613540649414 0.0 0.0 0.0 871
+872 0.00345492362976074 0.00999999999999979 0.00999999999999979 0.0 872
+873 0.00410318374633789 0.0 0.0 0.0 873
+874 0.00406002998352051 0.00999999999999979 0.00999999999999979 0.0 874
+875 0.0259261131286621 0.0199999999999996 0.0199999999999996 0.0 875
+876 0.00219607353210449 0.0 0.0 0.0 876
+877 0.00211405754089355 0.00999999999999979 0.00999999999999979 0.0 877
+878 0.00212407112121582 0.0 0.0 0.0 878
+879 0.00208306312561035 0.0 0.0 0.0 879
+880 0.00209808349609375 0.0 0.0 0.0 880
+881 0.00233793258666992 0.0 0.0 0.0 881
+882 0.00206804275512695 0.00999999999999979 0.00999999999999979 0.0 882
+883 0.0020759105682373 0.0 0.0 0.0 883
+884 0.00209188461303711 0.0 0.0 0.0 884
+885 0.00206899642944336 0.0 0.0 0.0 885
+886 0.00205397605895996 0.0100000000000016 0.0100000000000016 0.0 886
+887 0.00205588340759277 0.0 0.0 0.0 887
+888 0.00216484069824219 0.0 0.0 0.0 888
+889 0.00208091735839844 0.0 0.0 0.0 889
+890 0.0020751953125 0.0 0.0 0.0 890
+891 0.00336885452270508 0.00999999999999979 0.00999999999999979 0.0 891
+892 0.00415396690368652 0.0 0.0 0.0 892
+893 0.0037381649017334 0.00999999999999979 0.00999999999999979 0.0 893
+894 0.00412487983703613 0.0 0.0 0.0 894
+895 0.00375986099243164 0.0 0.0 0.0 895
+896 0.00278496742248535 0.00999999999999979 0.00999999999999979 0.0 896
+897 0.00209403038024902 0.0 0.0 0.0 897
+898 0.00205516815185547 0.0 0.0 0.0 898
+899 0.00205516815185547 0.0 0.0 0.0 899
+900 0.00203704833984375 0.0 0.0 0.0 900
+901 0.0020599365234375 0.00999999999999979 0.00999999999999979 0.0 901
+902 0.00205421447753906 0.0 0.0 0.0 902
+903 0.0020599365234375 0.0 0.0 0.0 903
+904 0.00206089019775391 0.0 0.0 0.0 904
+905 0.00207686424255371 0.00999999999999979 0.00999999999999979 0.0 905
+906 0.00207209587097168 0.0 0.0 0.0 906
+907 0.00205898284912109 0.0 0.0 0.0 907
+908 0.00206112861633301 0.0 0.0 0.0 908
+909 0.00209903717041016 0.0 0.0 0.0 909
+910 0.00206708908081055 0.00999999999999979 0.00999999999999979 0.0 910
+911 0.00206804275512695 0.0 0.0 0.0 911
+912 0.00206804275512695 0.0 0.0 0.0 912
+913 0.00207805633544922 0.0 0.0 0.0 913
+914 0.00206613540649414 0.0 0.0 0.0 914
+915 0.00205707550048828 0.00999999999999979 0.00999999999999979 0.0 915
+916 0.00208497047424316 0.0 0.0 0.0 916
+917 0.00207996368408203 0.0 0.0 0.0 917
+918 0.0248808860778809 0.0300000000000011 0.0300000000000011 0.0 918
+919 0.00217318534851074 0.0 0.0 0.0 919
+920 0.00228309631347656 0.0 0.0 0.0 920
+921 0.00214815139770508 0.0 0.0 0.0 921
+922 0.00209498405456543 0.0 0.0 0.0 922
+923 0.00209903717041016 0.00999999999999979 0.00999999999999979 0.0 923
+924 0.00206685066223145 0.0 0.0 0.0 924
+925 0.00208783149719238 0.0 0.0 0.0 925
+926 0.0020751953125 0.0 0.0 0.0 926
+927 0.0020599365234375 0.00999999999999979 0.00999999999999979 0.0 927
+928 0.00206398963928223 0.0 0.0 0.0 928
+929 0.00207400321960449 0.0 0.0 0.0 929
+930 0.00224184989929199 0.0 0.0 0.0 930
+931 0.00207209587097168 0.0 0.0 0.0 931
+932 0.00207114219665527 0.00999999999999979 0.00999999999999979 0.0 932
+933 0.00206995010375977 0.0 0.0 0.0 933
+934 0.00206613540649414 0.0 0.0 0.0 934
+935 0.00207114219665527 0.0 0.0 0.0 935
+936 0.00207901000976562 0.0 0.0 0.0 936
+937 0.00206494331359863 0.00999999999999979 0.00999999999999979 0.0 937
+938 0.0020751953125 0.0 0.0 0.0 938
+939 0.00211882591247559 0.0 0.0 0.0 939
+940 0.00212502479553223 0.0 0.0 0.0 940
+941 0.00206303596496582 0.0 0.0 0.0 941
+942 0.00205111503601074 0.00999999999999979 0.00999999999999979 0.0 942
+943 0.00204205513000488 0.0 0.0 0.0 943
+944 0.00206303596496582 0.0 0.0 0.0 944
+945 0.00205516815185547 0.0 0.0 0.0 945
+946 0.00206208229064941 0.0100000000000016 0.0100000000000016 0.0 946
+947 0.00205683708190918 0.0 0.0 0.0 947
+948 0.00204181671142578 0.0 0.0 0.0 948
+949 0.00206589698791504 0.0 0.0 0.0 949
+950 0.0020451545715332 0.0 0.0 0.0 950
+951 0.00209593772888184 0.00999999999999979 0.00999999999999979 0.0 951
+952 0.00205802917480469 0.0 0.0 0.0 952
+953 0.0020751953125 0.0 0.0 0.0 953
+954 0.00205492973327637 0.0 0.0 0.0 954
+955 0.00206303596496582 0.0 0.0 0.0 955
+956 0.00206112861633301 0.00999999999999979 0.00999999999999979 0.0 956
+957 0.00208592414855957 0.0 0.0 0.0 957
+958 0.00208497047424316 0.0 0.0 0.0 958
+959 0.00207114219665527 0.0 0.0 0.0 959
+960 0.0264370441436768 0.0299999999999994 0.0299999999999994 0.0 960
+961 0.00537300109863281 0.0 0.0 0.0 961
+962 0.00217485427856445 0.0 0.0 0.0 962
+963 0.00213003158569336 0.0 0.0 0.0 963
+964 0.00212383270263672 0.0 0.0 0.0 964
+965 0.0021059513092041 0.0 0.0 0.0 965
+966 0.0020909309387207 0.0 0.0 0.0 966
+967 0.00208091735839844 0.00999999999999979 0.00999999999999979 0.0 967
+968 0.00207018852233887 0.0 0.0 0.0 968
+969 0.00207185745239258 0.0 0.0 0.0 969
+970 0.00205111503601074 0.0 0.0 0.0 970
+971 0.00208306312561035 0.0 0.0 0.0 971
+972 0.00212502479553223 0.00999999999999979 0.00999999999999979 0.0 972
+973 0.00206995010375977 0.0 0.0 0.0 973
+974 0.0020749568939209 0.0 0.0 0.0 974
+975 0.0020749568939209 0.0 0.0 0.0 975
+976 0.00205898284912109 0.0 0.0 0.0 976
+977 0.00207304954528809 0.0100000000000016 0.0100000000000016 0.0 977
+978 0.00208806991577148 0.0 0.0 0.0 978
+979 0.00207090377807617 0.0 0.0 0.0 979
+980 0.00214314460754395 0.0 0.0 0.0 980
+981 0.00208497047424316 0.00999999999999979 0.00999999999999979 0.0 981
+982 0.00206112861633301 0.0 0.0 0.0 982
+983 0.00220704078674316 0.0 0.0 0.0 983
+984 0.00206184387207031 0.0 0.0 0.0 984
+985 0.00206589698791504 0.0 0.0 0.0 985
+986 0.00204014778137207 0.00999999999999979 0.00999999999999979 0.0 986
+987 0.00205302238464355 0.0 0.0 0.0 987
+988 0.00204801559448242 0.0 0.0 0.0 988
+989 0.0020439624786377 0.0 0.0 0.0 989
+990 0.00206494331359863 0.0 0.0 0.0 990
+991 0.00205516815185547 0.00999999999999979 0.00999999999999979 0.0 991
+992 0.0020599365234375 0.0 0.0 0.0 992
+993 0.00205802917480469 0.0 0.0 0.0 993
+994 0.0021820068359375 0.0 0.0 0.0 994
+995 0.00206708908081055 0.0 0.0 0.0 995
+996 0.00205802917480469 0.00999999999999979 0.00999999999999979 0.0 996
+997 0.00205183029174805 0.0 0.0 0.0 997
+998 0.00205588340759277 0.0 0.0 0.0 998
+999 0.00207781791687012 0.0 0.0 0.0 999
+1000 0.00205588340759277 0.0 0.0 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat
new file mode 100644
index 000000000..d7d948705
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.00528996763305527
+3 -0.0138044594871689
+4 -0.0208681851283985
+5 -0.0229957953064787
+6 -0.0234292596261009
+7 -0.0233334130282492
+8 -0.0241516165777752
+9 -0.0241644202341525
+10 -0.0231287425073633
+11 -0.0221175625393535
+12 -0.0186101437936229
+13 -0.0156353533961561
+14 -0.0188403159027361
+15 -0.0180504812480117
+16 -0.0217450273227108
+17 -0.0247063596763229
+18 -0.022001265884962
+19 -0.0178556473266542
+20 -0.0204164647356919
+21 -0.0182966079953989
+22 -0.0211862321337847
+23 -0.0194789850013599
+24 -0.0177742253841285
+25 -0.0092503749482194
+26 -0.00746819898929803
+27 -0.00487803332820888
+28 -0.00735913264216409
+29 -0.0094394794377043
+30 -0.0102366066065294
+31 -0.0111156180663134
+32 -0.0157818671782769
+33 -0.0168016431622766
+34 -0.0163332307175096
+35 -0.0175436530212509
+36 -0.0223712161905215
+37 -0.0219314894935517
+38 -0.0227830748204048
+39 -0.0193824105679253
+40 -0.0204213811978047
+41 -0.0174876805960081
+42 -0.0192426282967821
+43 -0.0191023286022659
+44 -0.024469189862908
+45 -0.0248594429598138
+46 -0.024075293188514
+47 -0.0231590035654209
+48 -0.0226253872291486
+49 -0.0224682138682447
+50 -0.0218129103220923
+51 -0.0192654328544414
+52 -0.0147320037081153
+53 0.272452233337269
+54 0.435015820040845
+55 0.200430320069216
+56 -0.017516322722285
+57 -0.0206134354119561
+58 -0.0216729701700104
+59 -0.0218336495632955
+60 -0.0220087456364863
+61 -0.0221961766164921
+62 -0.0220196148858699
+63 -0.0196199273707057
+64 -0.0175555144594074
+65 -0.0157115875281919
+66 -0.0178703168441715
+67 -0.020014167059419
+68 -0.0226085951821202
+69 -0.0214388900491651
+70 -0.0226874815779736
+71 -0.0209263363718717
+72 -0.0186668218529576
+73 -0.0190861172260196
+74 -0.0165844428487903
+75 -0.0183297192997319
+76 -0.0196886608427949
+77 -0.0172252505382256
+78 -0.0127282633379294
+79 -0.0118674197279215
+80 -0.00761080829361313
+81 -0.00745049886576533
+82 -0.00437801934505245
+83 -0.00530855529011354
+84 -0.00941286938636584
+85 -0.0107154791645881
+86 -0.015323870013456
+87 -0.012519266967711
+88 -0.0149736969801129
+89 -0.021651681277203
+90 -0.0230618749379273
+91 -0.0168683483705937
+92 -0.0192914563246245
+93 -0.0149596795587543
+94 -0.0156422337243361
+95 -0.0212673261015622
+96 -0.021939557403789
+97 -0.0201423837801739
+98 -0.0236606423193213
+99 -0.0214696557426392
+100 -0.0224265353446497
+101 -0.0214300874958868
+102 -0.0215321124434072
+103 -0.0196750526265947
+104 -0.0164815420539262
+105 0.153451795677057
+106 0.152304917983925
+107 0.269683604711283
+108 0.163866062031231
+109 0.0917700861184397
+110 -0.0154344686250538
+111 -0.0160009187714221
+112 -0.0181194294640359
+113 -0.0198996862071363
+114 -0.0210940088036923
+115 -0.0202294695724758
+116 -0.0201134577323488
+117 -0.0176142238854856
+118 -0.0179934480509661
+119 -0.0184941333999111
+120 -0.0209217833739569
+121 -0.0193706489699845
+122 -0.0212596356685163
+123 -0.0193402304952815
+124 -0.0168126115507807
+125 -0.0168285157052044
+126 -0.0178485073702407
+127 -0.0153236968353027
+128 -0.0172450763888923
+129 -0.0181958874426915
+130 -0.019599041433368
+131 -0.012097521583517
+132 -0.0144122698713183
+133 -0.0132513281935601
+134 -0.00875555666212923
+135 -0.00361627820509766
+136 -0.000259967785037514
+137 -0.00805847419201842
+138 -0.012649535174109
+139 -0.0145979054471083
+140 -0.0107561179136776
+141 -0.0136228025301689
+142 -0.0159619507661417
+143 -0.0191425909401178
+144 -0.0163101158814417
+145 -0.012129043859938
+146 -0.0151299875018323
+147 -0.0203386298647967
+148 -0.0209988316244983
+149 -0.0219068901698134
+150 -0.0224671072591489
+151 -0.0170418184704867
+152 -0.0201957214089058
+153 -0.0205846116271679
+154 -0.0199413534929481
+155 -0.0179691672443825
+156 -0.0150768539756268
+157 0.0995215742652554
+158 0.0981837663624077
+159 0.0931229461077249
+160 0.21175246910869
+161 0.105079528542058
+162 0.0913032756563397
+163 0.0339528356592639
+164 -0.0182805568898494
+165 -0.0193574268532822
+166 -0.019701338364763
+167 -0.0189643836934548
+168 -0.0188745629207454
+169 -0.0165737067851004
+170 -0.0158076140033874
+171 -0.0161004869746426
+172 -0.0195930716982896
+173 -0.0182623379689477
+174 -0.0200811074454518
+175 -0.0187342710910368
+176 -0.0166229225659487
+177 -0.0167237872378271
+178 -0.0201685104197428
+179 -0.0165324418353769
+180 -0.0129150606429465
+181 -0.0169169105724671
+182 -0.017078473759628
+183 -0.018127591763309
+184 -0.0112307423687399
+185 -0.0134591703948938
+186 -0.0122816446332828
+187 -0.0167129471183761
+188 -0.00633335732749837
+189 -0.00217094534395089
+190 -0.003176289001772
+191 -0.0057871656139901
+192 -0.0115873213117581
+193 -0.00896702930637471
+194 -0.0120418100687928
+195 -0.0123921707383441
+196 -0.0172084711453154
+197 -0.0152400714377606
+198 -0.0111285496578555
+199 -0.0142340919577057
+200 -0.0192937621671048
+201 -0.0197880163686053
+202 -0.020849567081396
+203 -0.0198406262700084
+204 -0.0194104738114594
+205 -0.0148131274163057
+206 -0.0192079248734278
+207 -0.0187094339560537
+208 -0.0190732730711229
+209 0.0361934269621865
+210 0.0870917883041551
+211 0.0444891209616575
+212 0.0955027397552937
+213 0.154654506121038
+214 0.102102013193298
+215 0.0494447139937405
+216 0.0904567636647291
+217 -0.0152749334062708
+218 -0.0146608967815647
+219 -0.0147668855748172
+220 -0.0156264119143688
+221 -0.0169494608304957
+222 -0.0174532100041555
+223 -0.0180837899501967
+224 -0.0182277488931129
+225 -0.0161001752368341
+226 -0.0184991832755056
+227 -0.016936119098065
+228 -0.0148320934940219
+229 -0.015273255697935
+230 -0.0182123818891898
+231 -0.0138871665097331
+232 -0.0127350570541541
+233 -0.011100664599431
+234 -0.0138609863092704
+235 -0.0175586417976635
+236 -0.0148120796895902
+237 -0.01123198970569
+238 -0.00918469713802285
+239 -0.0144957683440811
+240 -0.0150294602056943
+241 -0.00892087391044469
+242 -0.0074976007380235
+243 -0.00500305299854478
+244 -0.0041320746296184
+245 -0.00691667857012371
+246 -0.00750372968060234
+247 -0.0107390437617496
+248 -0.0107754591390794
+249 -0.0174172611999561
+250 -0.0074172610106474
+251 -0.0112726180927846
+252 -0.0128024469916435
+253 -0.0177232020585621
+254 -0.0182539224409683
+255 -0.0178084592664765
+256 -0.0179231847033095
+257 -0.0176658037985606
+258 -0.0130046634117232
+259 -0.0176477704146573
+260 -0.0172408298470646
+261 -0.0173835849314203
+262 0.0885923665459635
+263 0.0358142986092356
+264 0.0500197172082544
+265 0.0969438699174651
+266 0.0998188153355495
+267 0.100534469863311
+268 0.0434275152967989
+269 0.0463586746755651
+270 0.0357679483900484
+271 -0.0163390926804664
+272 -0.0166539709796274
+273 -0.0166872870497804
+274 -0.017774068427573
+275 -0.01744643501098
+276 -0.0170706050536218
+277 -0.0147966340538359
+278 -0.0178408200541161
+279 -0.0149580558209695
+280 -0.0131592631424661
+281 -0.0131550961874815
+282 -0.0170541425549732
+283 -0.0136965468472329
+284 -0.0127321644242889
+285 -0.013612710529614
+286 -0.0110213426857256
+287 -0.0173230618274653
+288 -0.0169456472401162
+289 -0.0137220306520902
+290 -0.00961119036236773
+291 -0.00803307600491271
+292 -0.0130753503992976
+293 -0.010061738788462
+294 -0.0128263508570457
+295 -0.00871944477256595
+296 -0.0110828266355735
+297 -0.00145913051022751
+298 -0.00503831545783849
+299 -0.00613255184823567
+300 -0.00317532255742617
+301 -0.0110344422659596
+302 -0.0133994629637518
+303 -0.00711499446473252
+304 -0.00989738058293298
+305 -0.011298222554831
+306 -0.0163568500491007
+307 -0.0172224634424476
+308 -0.016917507184404
+309 -0.0169070421736616
+310 -0.0163226499986189
+311 -0.016000223795697
+312 -0.0128559262318566
+313 -0.0163027746090817
+314 0.0367233579233198
+315 0.0342463768168967
+316 0.0392659770656562
+317 0.0503244855684373
+318 0.106836752186508
+319 0.0428611079691666
+320 0.0947673606581728
+321 0.0404266507177676
+322 0.0422539004134698
+323 0.046712070413077
+324 -0.01386005988438
+325 -0.0129602628678002
+326 -0.0128410216627282
+327 -0.013938492679744
+328 -0.0142137469756705
+329 -0.0135606375602427
+330 -0.0147616165618841
+331 -0.0152730174282578
+332 -0.0157757882742451
+333 -0.0159444484008054
+334 -0.0159291528868275
+335 -0.0125715321584254
+336 -0.0113945717528155
+337 -0.0126919884793404
+338 -0.0120634295155063
+339 -0.0132222456876789
+340 -0.0149011205134109
+341 -0.0112134307887339
+342 -0.00765611064427073
+343 -0.00812543527107914
+344 -0.0116729541542833
+345 -0.00968419876956315
+346 -0.0121532305148415
+347 -0.0128180241822045
+348 -0.0111731767567057
+349 -0.0110495088050017
+350 -0.00474012274853909
+351 -0.0037753856041303
+352 -0.00712557226243535
+353 -0.00254605671801213
+354 -0.00896555258188561
+355 -0.0111612047310962
+356 -0.00590533525415532
+357 -0.00840289962801529
+358 -0.0101831986911947
+359 -0.0147234273517197
+360 -0.0144572278847782
+361 -0.0153686584343928
+362 -0.0152089345642079
+363 -0.0151495230806089
+364 -0.0137849851202231
+365 -0.0104713526164238
+366 -0.0148077561021853
+367 0.0376152434167216
+368 0.0388904481596711
+369 0.0403627453868288
+370 0.0513758553433587
+371 0.107917898362666
+372 -0.00798200125691471
+373 0.093360263223118
+374 0.0414198673418266
+375 0.0393249984524126
+376 0.0385926575483875
+377 -0.0144476804559933
+378 -0.0139841878291661
+379 -0.0139656533470585
+380 -0.0141040067753594
+381 -0.014560155301369
+382 -0.0135420823152173
+383 -0.0145222675144676
+384 -0.014460155395546
+385 -0.0139959464489686
+386 -0.0138565068907983
+387 -0.0107326956886409
+388 -0.0110916304860035
+389 -0.0103687114713454
+390 -0.0109128112118145
+391 -0.0116952906973984
+392 -0.0135898535414944
+393 -0.0111540378855234
+394 -0.0103451114918221
+395 -0.00764288243223634
+396 -0.0111929653049535
+397 -0.00834039400762986
+398 -0.0122045257479647
+399 -0.00873973826972888
+400 -0.0110201500772717
+401 -0.00961579587076197
+402 -0.0131269667654366
+403 -0.00727683817981296
+404 -0.00189532678702501
+405 -0.0069679001311242
+406 -0.001107723493968
+407 -0.0032276027306313
+408 -0.00832965485216551
+409 -0.00619183401785534
+410 -0.00411170215472319
+411 -0.00737621873809235
+412 -0.0127249132834817
+413 -0.012360725256073
+414 -0.0139619534335789
+415 -0.0141106553759734
+416 -0.0133572727396227
+417 -0.0136325555164283
+418 -0.00934211074118071
+419 -0.0138978954665086
+420 0.0419144448041395
+421 0.0398516060966593
+422 0.0412341286880762
+423 0.0638570301312163
+424 0.0510869302001157
+425 0.0457777338184318
+426 0.0404413480661733
+427 0.03921924550858
+428 0.0407807393162245
+429 0.0390318225210268
+430 -0.0131869917758382
+431 -0.0131264891895899
+432 -0.0122572780353557
+433 -0.0113077056806523
+434 -0.00997101803890706
+435 -0.00912977714210345
+436 -0.0107250321456603
+437 -0.0114964596837888
+438 -0.0124446657069589
+439 -0.0132452844526251
+440 -0.0134871442198044
+441 -0.0134721722474661
+442 -0.0129760608103375
+443 -0.0135083529746117
+444 -0.00963739106708388
+445 -0.00960193173592791
+446 -0.00868490827989549
+447 -0.00562468586891634
+448 -0.00853085467733999
+449 -0.00565929471677666
+450 -0.011223863255388
+451 -0.00966138501976315
+452 -0.0090354154607024
+453 -0.00713189903764993
+454 -0.011915762088822
+455 -0.0119958054757221
+456 -0.00993992005512065
+457 -0.00969020982773293
+458 -0.00823692240018265
+459 -0.000762137019254547
+460 -0.0020574939054943
+461 -0.00301533448841631
+462 -0.0048914231194836
+463 -0.00351910868759082
+464 -0.00684827660431788
+465 -0.0116186865393049
+466 -0.011300766713872
+467 -0.0125877507082846
+468 -0.0122940688703853
+469 -0.0117006004743094
+470 -0.0120808872890787
+471 -0.0079558659705616
+472 -0.0121146783942612
+473 0.0430539568135278
+474 0.0413747171665245
+475 0.0523499660199948
+476 0.0583608476822571
+477 -0.00619124151362362
+478 0.100261603489863
+479 -0.0115737946916181
+480 0.0410488267232732
+481 0.0394584957178085
+482 0.0409791183648626
+483 -0.0114608582351028
+484 -0.0105762029046014
+485 -0.0107944072761537
+486 -0.0112852025771194
+487 -0.0117263968065824
+488 -0.0110523616082281
+489 -0.0119497692898177
+490 -0.0116197924803783
+491 -0.0118402671059512
+492 -0.011897810344265
+493 -0.0118894488668558
+494 -0.0119264743252911
+495 -0.0114690161171001
+496 -0.00731323308517564
+497 -0.00809920804780606
+498 -0.00742970488647833
+499 -0.00511857473147858
+500 -0.00847898987161735
+501 -0.00820255817878669
+502 -0.0114261236985163
+503 -0.0115203134210467
+504 -0.00860290050483073
+505 -0.00826598998994287
+506 -0.00724980855887389
+507 -0.0115572629089065
+508 -0.0102803597313671
+509 -0.00869596301166451
+510 -0.00845394207419729
+511 -0.0117046810178094
+512 -0.00179199508390725
+513 -0.00107544976391358
+514 3.80706993328397e-05
+515 -0.000596554636898724
+516 -0.00357817525748314
+517 -0.00275478226050938
+518 -0.00770597808246832
+519 -0.00966201636724091
+520 -0.0101235465897374
+521 -0.0101536171271843
+522 -0.011155833269644
+523 -0.0110476185961753
+524 -0.00669564292913809
+525 -0.0110511552401975
+526 0.0440369068608864
+527 0.0512502905452455
+528 0.0486364491522985
+529 -0.00947573738593063
+530 0.0556902385103537
+531 0.048793011831808
+532 0.0459173634094269
+533 -0.0106409633397968
+534 0.0407992456018877
+535 0.039174303444095
+536 -0.0108360842113073
+537 -0.0100788835149665
+538 -0.010254912645359
+539 -0.0100259263673741
+540 -0.00990611735032563
+541 -0.0094032789969041
+542 -0.00950843747839274
+543 -0.00845625372492551
+544 -0.00866941515320219
+545 -0.00846124322850009
+546 -0.00914497373023597
+547 -0.00993847480108134
+548 -0.0075404949330402
+549 -0.0105738813921492
+550 -0.00995220250924118
+551 -0.00737345302781976
+552 -0.00705109912188471
+553 -0.00701139365327054
+554 -0.0100844014809053
+555 -0.00967040948412226
+556 -0.00555743993134012
+557 -0.00567368083508669
+558 -0.00579497136824869
+559 -0.00863244150774459
+560 -0.00886461549077306
+561 -0.0071079244280313
+562 -0.00724638263714693
+563 -0.0106271670963377
+564 -0.011037491565844
+565 -0.00536963936657175
+566 -0.00611090090733861
+567 -0.0028887251775724
+568 -0.00191043898745117
+569 -0.00127008538342651
+570 -0.00355834410328823
+571 -0.00455486576193576
+572 -0.00787475936794373
+573 -0.00788070911313194
+574 -0.0095868651265576
+575 -0.00951475112345576
+576 -0.0093743009207885
+577 -0.00547534007201022
+578 -0.00937228540429001
+579 0.0550319460420979
+580 0.0480645516151382
+581 -0.00734599404058905
+582 0.0460830024666069
+583 0.0576848767980736
+584 -0.00479751472149516
+585 0.0476440575581396
+586 0.0440509543394544
+587 -0.0092326530313669
+588 0.0416175571960497
+589 -0.0085697744475703
+590 -0.00849597671001137
+591 -0.00868661526356155
+592 -0.00914985829952541
+593 -0.00899659236078795
+594 -0.00852948984142705
+595 -0.00914967236793954
+596 -0.00874291045968585
+597 -0.00901928709184545
+598 -0.00893752387862559
+599 -0.00891224538068911
+600 -0.00651845952670981
+601 -0.00883751161943683
+602 -0.0089038138028028
+603 -0.00557038586902196
+604 -0.00528015885880997
+605 -0.00549258943084052
+606 -0.00885043870546068
+607 -0.00888233763605627
+608 -0.00534145902438052
+609 -0.00549755365130086
+610 -0.00543696053556694
+611 -0.00822523019438649
+612 -0.00872078038906415
+613 -0.00768752566683437
+614 -0.00581778171379135
+615 -0.00582391899839174
+616 -0.00928453417405443
+617 -0.00967264668427969
+618 -0.00459002993915674
+619 -0.005950987566855
+620 -0.00566913223974097
+621 -0.00449639995945585
+622 0.000563029103117738
+623 -0.000478567451764753
+624 -0.00478545037303475
+625 -0.00138436078321331
+626 -0.00658049012770183
+627 -0.00727390808805458
+628 -0.00826948198171915
+629 -0.00802863304649895
+630 -0.00440359258641195
+631 -0.00781572985833776
+632 0.0467875647495199
+633 -0.0075634487605479
+634 0.0452825901031108
+635 0.047802503065829
+636 -0.00771441065516206
+637 0.0579827980967365
+638 -0.00344424350631554
+639 0.0474617155307238
+640 0.0443214745845027
+641 -0.00763674418359978
+642 -0.00783330048033026
+643 -0.00741506274953657
+644 -0.00766182032871294
+645 -0.00746333175586923
+646 -0.00774981281309243
+647 -0.00721405105565235
+648 -0.00748309956829258
+649 -0.00693846930808117
+650 -0.00687260605509018
+651 -0.00680305016519336
+652 -0.00392232393463165
+653 -0.00596409981793424
+654 -0.00637091532208361
+655 -0.0070021295658497
+656 -0.00745369558153276
+657 -0.00748127195784389
+658 -0.00764575146706985
+659 -0.00720638844475823
+660 -0.00404423858223977
+661 -0.00405994477085238
+662 -0.00403357383109679
+663 -0.00648614706767544
+664 -0.00685104080751668
+665 -0.0055280793955573
+666 -0.00315266716147567
+667 -0.00289308426512229
+668 -0.0072907609350431
+669 -0.00778772320057429
+670 -0.00488230712792173
+671 -0.00428235797819206
+672 -0.00192624881716949
+673 -0.00690255454554318
+674 -0.00713932385460058
+675 -0.00190412691550018
+676 -0.00393717929429579
+677 -0.00322818496016548
+678 -0.00243123536539799
+679 -0.00325588623994424
+680 -0.00538550295619236
+681 -0.00569794784977527
+682 -0.00289248819958694
+683 -0.00674738254274132
+684 -0.00654327601801023
+685 -0.00642602661328291
+686 0.0487750013526658
+687 0.047351094119514
+688 -0.00634438713740084
+689 0.0483969866326635
+690 -0.00631126189370909
+691 0.0575822184504765
+692 -0.00221791722280226
+693 0.0478438468160886
+694 -0.00601391341772256
+695 -0.0056575420242112
+696 -0.00594331685758806
+697 -0.00602482896673149
+698 -0.00605358459658212
+699 -0.00573917550488335
+700 -0.00612440997777024
+701 -0.00585399571222659
+702 -0.00621035443994097
+703 -0.00577194218906833
+704 -0.00613669297980652
+705 -0.00603898494035611
+706 -0.00619657263267714
+707 -0.00631266537086359
+708 -0.00624176954936451
+709 -0.006493542110829
+710 -0.00641811359085571
+711 -0.00580520415695734
+712 -0.00254464054715768
+713 -0.00229049693565925
+714 -0.00260111893418342
+715 -0.00527998866629625
+716 -0.00580492472038456
+717 -0.00465763013855649
+718 -0.00291794763769027
+719 -0.0026170818255646
+720 -0.00635539773199271
+721 -0.00671950951784405
+722 -0.00681695170475915
+723 -0.00342054050102763
+724 -0.00275560859414933
+725 -0.000438510861243582
+726 -0.00560480727876819
+727 -0.0041561152883926
+728 -0.00600365300527431
+729 -0.00265123271948093
+730 -0.00264290423293351
+731 -0.00282174940291308
+732 -0.00138157106781404
+733 -0.00215366901979637
+734 -0.00419250836135037
+735 -0.000767184920404968
+736 -0.00550222672199026
+737 -0.00539179599992564
+738 -0.00519932278664982
+739 0.0503886317719632
+740 -0.00520071436244274
+741 0.0475171927490064
+742 -0.0054330140398667
+743 0.047917953696494
+744 -0.00493698211328358
+745 0.0578078065249347
+746 -0.00102406638326662
+747 -0.00351464407443385
+748 -0.00471808955799036
+749 -0.00466085562121167
+750 -0.00504216853601972
+751 -0.00491478851728083
+752 -0.00511582115647942
+753 -0.00510690407002076
+754 -0.00467115492125063
+755 -0.00507292488280625
+756 -0.00469600377226158
+757 -0.00479060778969928
+758 -0.00466814567292629
+759 -0.00459391587926426
+760 -0.00459367283047094
+761 -0.00456390630082813
+762 -0.00455517712581946
+763 -0.00444580816383878
+764 -0.00414375346682848
+765 -0.00462598085672905
+766 -0.00499924843048424
+767 -0.00393636209693802
+768 -0.00456718162991524
+769 -0.00323237519329591
+770 -0.00148778939855011
+771 -0.00156596659778741
+772 -0.00512915993874979
+773 -0.00492227748379505
+774 -0.00510090567121982
+775 -0.00134085402411959
+776 -0.000327698557656855
+777 -8.39604799222434e-05
+778 -0.00353180377704261
+779 -0.000884661451432567
+780 -0.00538269466798041
+781 -0.00550165919535478
+782 -0.00474894345489591
+783 -0.00166595007800424
+784 -0.00164486517145988
+785 -0.0035315332501745
+786 -0.00381711953376717
+787 0.000511414240780713
+788 -0.00386876867596389
+789 -0.00388546637330086
+790 -0.00381782963314221
+791 -0.00381978862023741
+792 -0.00375421982535356
+793 0.0509990813856318
+794 -0.00381674314240938
+795 0.0477092429318382
+796 -0.00346493764501739
+797 0.0486187069130531
+798 -0.00339231221033292
+799 -0.00372220200580609
+800 -0.00287181937082116
+801 -0.00282120299186121
+802 -0.00303246455350132
+803 -0.00274260094361711
+804 -0.00310003295922211
+805 -0.00318965584106337
+806 -0.0031124174327327
+807 -0.00296156129101724
+808 -0.00261410724164222
+809 -0.00304904712449122
+810 -0.00281829350522029
+811 -0.00334413423907794
+812 -0.00324558699946082
+813 -0.00321794842161168
+814 -0.00321688033495476
+815 -0.00315375940221917
+816 -0.00336252254507409
+817 -0.00338748787969201
+818 -0.0034301958497396
+819 -0.00328180304356289
+820 -0.00258348401263859
+821 -0.00151860018638174
+822 0.000385489721472849
+823 0.000485212390458467
+824 -0.00320045213749609
+825 -0.00360387425612046
+826 -0.00368875452847038
+827 -0.000252971173092802
+828 0.000274558167106639
+829 0.000415225492461183
+830 -0.00244928117799424
+831 -0.00157932593327874
+832 -0.00367396988363851
+833 -0.00159554367802162
+834 -0.00368044170833197
+835 -0.00381051495784578
+836 -0.00324391585440044
+837 8.26736255865406e-05
+838 0.000153133563221676
+839 0.00199072719691019
+840 -0.00225648039461718
+841 -0.00274833553045294
+842 -0.0025524575347716
+843 -0.00266988934954553
+844 -0.00255016712114302
+845 -0.00249982952647676
+846 -0.00252451553899371
+847 0.0509521741597566
+848 -0.00203584084600686
+849 0.0482575025076935
+850 -0.00222502592695146
+851 -0.00243295457553993
+852 -0.00170644617880928
+853 -0.00187578228348824
+854 -0.00189936420623392
+855 -0.00181014970183154
+856 -0.0019587407113103
+857 -0.00203035618973669
+858 -0.00200647352201275
+859 -0.00193357132846691
+860 -0.00203929593752837
+861 -0.00206047244950508
+862 -0.00172974796194137
+863 -0.00222152628496213
+864 -0.00176469161067378
+865 -0.00214628615471073
+866 -0.00223274820098944
+867 -0.00192609654692526
+868 -0.00160052707734799
+869 -0.00117491475685682
+870 -0.00172104022111683
+871 -0.00197669922228011
+872 -0.00200394021725799
+873 -0.00221174196880852
+874 -0.00214414888155639
+875 -0.0022418657462635
+876 -0.00224815601970618
+877 -0.00217548907899938
+878 -0.00219023215478833
+879 0.00103657148517733
+880 0.00170021752346762
+881 0.00176856581251282
+882 -0.00119486637524174
+883 -0.000182189717262493
+884 -0.00231669994116794
+885 -0.00235562044940596
+886 -0.00240760288834928
+887 -0.000369271736430893
+888 -0.00246106212268728
+889 -0.00248445436295954
+890 -0.00240055220436233
+891 0.00124694319822849
+892 -0.00238841299541467
+893 -0.00120964260603448
+894 -0.00108173638550143
+895 -0.00126617766611188
+896 -0.00126735332683995
+897 -0.00132493094338301
+898 -0.00127297814761722
+899 -0.00107541591903143
+900 -0.00078859473755685
+901 0.0515056301543915
+902 -0.000768818460590909
+903 -0.00107659176705549
+904 -0.000363324073519261
+905 -0.000435897358878675
+906 -0.000440171834594805
+907 -0.000337150215603847
+908 -0.000521457828934685
+909 -0.000601509879478592
+910 -0.000562536656253432
+911 -0.000540431206158033
+912 -0.000585521045810499
+913 -0.000647443311740879
+914 -0.000652572655245648
+915 -0.000754504564741441
+916 -0.00026111034852018
+917 -0.000614503803880769
+918 -0.00028306248528981
+919 -0.00062103454712342
+920 -0.00080789702501966
+921 -0.000857347553194396
+922 -0.000973273096392423
+923 -0.00071891921707499
+924 -0.000852123727546584
+925 -0.000908061110978231
+926 -0.000897846447493529
+927 -0.00107192184892616
+928 -0.00103558075120389
+929 -0.000858383868863735
+930 -0.00100410240556484
+931 0.00217861450591949
+932 0.00284094109416015
+933 0.00290236058075264
+934 -4.67766974110993e-06
+935 -0.00115598145065964
+936 -0.00115889264986191
+937 -0.00120477520403814
+938 -0.0011160907820447
+939 -0.00122108572337335
+940 -0.00129438459340121
+941 -0.0012642472236683
+942 -0.00112755293175713
+943 0.00267094176933998
+944 -0.00127265229053917
+945 -0.00128120069665366
+946 -0.00125730796622217
+947 -0.000161188927728071
+948 -0.00018709473550969
+949 -0.000202988378879946
+950 -0.000298277929635308
+951 -0.000228270818099919
+952 -0.000234161898233589
+953 -0.00026231090883195
+954 -0.000188222581526064
+955 -3.12448503073219e-05
+956 0.000717016504105383
+957 0.000690863879115161
+958 0.000699560885968165
+959 0.000642085039518387
+960 0.000647697652791968
+961 0.000599074112689629
+962 0.000575154175297893
+963 0.000549298287923788
+964 0.000516895100767751
+965 0.000505782209635087
+966 0.000468256937777253
+967 0.000443201508212851
+968 0.000422857688527172
+969 0.000396172202507289
+970 0.000378968023322664
+971 0.000356781808907751
+972 0.000335281879557104
+973 0.000318039116828582
+974 0.00029453308441855
+975 0.000267951475057331
+976 0.000246035263474985
+977 0.000289581453389937
+978 0.000348007228990331
+979 0.00040460593179165
+980 0.000411143906352345
+981 0.000381827800477813
+982 0.000355749114743507
+983 0.000330472553418517
+984 0.000310675137741401
+985 0.000285966709056265
+986 0.000261731425090165
+987 0.000237012405074174
+988 0.000215826766435867
+989 0.000273446389041168
+990 0.000248883730962565
+991 0.000224615155659346
+992 0.000200129222402582
+993 0.000177275060030199
+994 0.00015277663830548
+995 0.000128527059295642
+996 0.000102904910816061
+997 8.05504321850845e-05
+998 5.85820006378074e-05
+999 3.63637004327478e-05
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat
new file mode 100644
index 000000000..8844c14e0
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.00191903114318848 0.0 0.0 0.0 1
+2 0.00184082984924316 0.0 0.0 0.0 2
+3 0.00179791450500488 0.0 0.0 0.0 3
+4 0.00180506706237793 0.0100000000000016 0.0100000000000016 0.0 4
+5 0.00179386138916016 0.0 0.0 0.0 5
+6 0.00174307823181152 0.0 0.0 0.0 6
+7 0.00177001953125 0.0 0.0 0.0 7
+8 0.00175905227661133 0.0 0.0 0.0 8
+9 0.00177288055419922 0.00999999999999801 0.00999999999999801 0.0 9
+10 0.00176692008972168 0.0 0.0 0.0 10
+11 0.00176906585693359 0.0 0.0 0.0 11
+12 0.0017549991607666 0.0 0.0 0.0 12
+13 0.00345110893249512 0.0 0.0 0.0 13
+14 0.0018010139465332 0.0100000000000016 0.0100000000000016 0.0 14
+15 0.0017697811126709 0.0 0.0 0.0 15
+16 0.00174093246459961 0.0 0.0 0.0 16
+17 0.00175905227661133 0.0 0.0 0.0 17
+18 0.00176501274108887 0.0 0.0 0.0 18
+19 0.00176501274108887 0.0 0.0 0.0 19
+20 0.00175905227661133 0.00999999999999801 0.00999999999999801 0.0 20
+21 0.00173807144165039 0.0 0.0 0.0 21
+22 0.00222587585449219 0.0 0.0 0.0 22
+23 0.00347685813903809 0.0 0.0 0.0 23
+24 0.00342988967895508 0.0100000000000016 0.0100000000000016 0.0 24
+25 0.00312495231628418 0.0 0.0 0.0 25
+26 0.00174784660339355 0.0 0.0 0.0 26
+27 0.00174403190612793 0.0 0.0 0.0 27
+28 0.00174093246459961 0.0100000000000016 0.0100000000000016 0.0 28
+29 0.00173211097717285 0.0 0.0 0.0 29
+30 0.00176692008972168 0.0 0.0 0.0 30
+31 0.00176620483398438 0.0 0.0 0.0 31
+32 0.00179195404052734 0.0 0.0 0.0 32
+33 0.0017549991607666 0.0 0.0 0.0 33
+34 0.00172591209411621 0.0 0.0 0.0 34
+35 0.00174117088317871 0.0 0.0 0.0 35
+36 0.00173783302307129 0.0 0.0 0.0 36
+37 0.00174689292907715 0.0 0.0 0.0 37
+38 0.00173211097717285 0.0 0.0 0.0 38
+39 0.00174999237060547 0.0100000000000016 0.0100000000000016 0.0 39
+40 0.00176692008972168 0.0 0.0 0.0 40
+41 0.00172901153564453 0.0 0.0 0.0 41
+42 0.00174593925476074 0.0 0.0 0.0 42
+43 0.00175309181213379 0.0 0.0 0.0 43
+44 0.00175905227661133 0.0 0.0 0.0 44
+45 0.00176715850830078 0.00999999999999801 0.00999999999999801 0.0 45
+46 0.00174784660339355 0.0 0.0 0.0 46
+47 0.0017399787902832 0.0 0.0 0.0 47
+48 0.00174307823181152 0.0 0.0 0.0 48
+49 0.00180912017822266 0.0 0.0 0.0 49
+50 0.00175309181213379 0.0100000000000016 0.0100000000000016 0.0 50
+51 0.0017399787902832 0.0 0.0 0.0 51
+52 0.00176811218261719 0.0 0.0 0.0 52
+53 0.00176596641540527 0.0 0.0 0.0 53
+54 0.00189590454101562 0.0 0.0 0.0 54
+55 0.024507999420166 0.0299999999999976 0.0299999999999976 0.0 55
+56 0.00197005271911621 0.0 0.0 0.0 56
+57 0.00185298919677734 0.0 0.0 0.0 57
+58 0.00178289413452148 0.0 0.0 0.0 58
+59 0.00177383422851562 0.0 0.0 0.0 59
+60 0.00178122520446777 0.0100000000000016 0.0100000000000016 0.0 60
+61 0.00177597999572754 0.0 0.0 0.0 61
+62 0.00182914733886719 0.0 0.0 0.0 62
+63 0.00176692008972168 0.0 0.0 0.0 63
+64 0.00177502632141113 0.0 0.0 0.0 64
+65 0.00175118446350098 0.0100000000000016 0.0100000000000016 0.0 65
+66 0.00176286697387695 0.0 0.0 0.0 66
+67 0.00175809860229492 0.0 0.0 0.0 67
+68 0.00176095962524414 0.0 0.0 0.0 68
+69 0.0017540454864502 0.0 0.0 0.0 69
+70 0.00175094604492188 0.0 0.0 0.0 70
+71 0.00176000595092773 0.00999999999999801 0.00999999999999801 0.0 71
+72 0.00174784660339355 0.0 0.0 0.0 72
+73 0.00272703170776367 0.0 0.0 0.0 73
+74 0.00178098678588867 0.0 0.0 0.0 74
+75 0.0017540454864502 0.0 0.0 0.0 75
+76 0.00175595283508301 0.0100000000000016 0.0100000000000016 0.0 76
+77 0.00174784660339355 0.0 0.0 0.0 77
+78 0.00176095962524414 0.0 0.0 0.0 78
+79 0.00175094604492188 0.0 0.0 0.0 79
+80 0.00174617767333984 0.0 0.0 0.0 80
+81 0.00176286697387695 0.00999999999999801 0.00999999999999801 0.0 81
+82 0.00174784660339355 0.0 0.0 0.0 82
+83 0.0017402172088623 0.0 0.0 0.0 83
+84 0.00174093246459961 0.0 0.0 0.0 84
+85 0.00174880027770996 0.0 0.0 0.0 85
+86 0.00174283981323242 0.0 0.0 0.0 86
+87 0.0017549991607666 0.0100000000000016 0.0100000000000016 0.0 87
+88 0.00175690650939941 0.0 0.0 0.0 88
+89 0.0017390251159668 0.0 0.0 0.0 89
+90 0.0017399787902832 0.0 0.0 0.0 90
+91 0.00176286697387695 0.0 0.0 0.0 91
+92 0.00174093246459961 0.00999999999999801 0.00999999999999801 0.0 92
+93 0.00173306465148926 0.0 0.0 0.0 93
+94 0.00173091888427734 0.0 0.0 0.0 94
+95 0.00175118446350098 0.0 0.0 0.0 95
+96 0.00173187255859375 0.0 0.0 0.0 96
+97 0.00177407264709473 0.0 0.0 0.0 97
+98 0.00174498558044434 0.0100000000000016 0.0100000000000016 0.0 98
+99 0.00173783302307129 0.0 0.0 0.0 99
+100 0.00174283981323242 0.0 0.0 0.0 100
+101 0.0017549991607666 0.0 0.0 0.0 101
+102 0.00173020362854004 0.0 0.0 0.0 102
+103 0.00172805786132812 0.0 0.0 0.0 103
+104 0.00174784660339355 0.0 0.0 0.0 104
+105 0.00175786018371582 0.0 0.0 0.0 105
+106 0.00176501274108887 0.0 0.0 0.0 106
+107 0.00174784660339355 0.0 0.0 0.0 107
+108 0.00176095962524414 0.0 0.0 0.0 108
+109 0.0247871875762939 0.0299999999999976 0.0299999999999976 0.0 109
+110 0.0018157958984375 0.0 0.0 0.0 110
+111 0.00183296203613281 0.0 0.0 0.0 111
+112 0.00179004669189453 0.0 0.0 0.0 112
+113 0.00177502632141113 0.0100000000000016 0.0100000000000016 0.0 113
+114 0.00177502632141113 0.0 0.0 0.0 114
+115 0.00174498558044434 0.0 0.0 0.0 115
+116 0.00174808502197266 0.0 0.0 0.0 116
+117 0.00175595283508301 0.0 0.0 0.0 117
+118 0.00174808502197266 0.00999999999999801 0.00999999999999801 0.0 118
+119 0.00177216529846191 0.0 0.0 0.0 119
+120 0.0017540454864502 0.0 0.0 0.0 120
+121 0.00176286697387695 0.0 0.0 0.0 121
+122 0.00176787376403809 0.0 0.0 0.0 122
+123 0.00175905227661133 0.0 0.0 0.0 123
+124 0.0017549991607666 0.0100000000000016 0.0100000000000016 0.0 124
+125 0.00174403190612793 0.0 0.0 0.0 125
+126 0.00174903869628906 0.0 0.0 0.0 126
+127 0.00180387496948242 0.0 0.0 0.0 127
+128 0.00177502632141113 0.0 0.0 0.0 128
+129 0.00175595283508301 0.00999999999999801 0.00999999999999801 0.0 129
+130 0.00174903869628906 0.0 0.0 0.0 130
+131 0.00176501274108887 0.0 0.0 0.0 131
+132 0.00191903114318848 0.0 0.0 0.0 132
+133 0.0034480094909668 0.0 0.0 0.0 133
+134 0.00341916084289551 0.0100000000000016 0.0100000000000016 0.0 134
+135 0.00260114669799805 0.0 0.0 0.0 135
+136 0.00203084945678711 0.0 0.0 0.0 136
+137 0.00176596641540527 0.0 0.0 0.0 137
+138 0.00175189971923828 0.0100000000000016 0.0100000000000016 0.0 138
+139 0.00176119804382324 0.0 0.0 0.0 139
+140 0.00174784660339355 0.0 0.0 0.0 140
+141 0.00173783302307129 0.0 0.0 0.0 141
+142 0.00179481506347656 0.0 0.0 0.0 142
+143 0.00173401832580566 0.00999999999999801 0.00999999999999801 0.0 143
+144 0.00175189971923828 0.0 0.0 0.0 144
+145 0.00174188613891602 0.0 0.0 0.0 145
+146 0.0017549991607666 0.0 0.0 0.0 146
+147 0.00174808502197266 0.0 0.0 0.0 147
+148 0.00174498558044434 0.0 0.0 0.0 148
+149 0.00174307823181152 0.0100000000000016 0.0100000000000016 0.0 149
+150 0.00175595283508301 0.0 0.0 0.0 150
+151 0.0017549991607666 0.0 0.0 0.0 151
+152 0.00174403190612793 0.0 0.0 0.0 152
+153 0.00174808502197266 0.0 0.0 0.0 153
+154 0.00174403190612793 0.0 0.0 0.0 154
+155 0.00183796882629395 0.00999999999999801 0.00999999999999801 0.0 155
+156 0.00176095962524414 0.0 0.0 0.0 156
+157 0.0017399787902832 0.0 0.0 0.0 157
+158 0.00181007385253906 0.0 0.0 0.0 158
+159 0.00175905227661133 0.0 0.0 0.0 159
+160 0.00177717208862305 0.0100000000000016 0.0100000000000016 0.0 160
+161 0.00175380706787109 0.0 0.0 0.0 161
+162 0.00177097320556641 0.0 0.0 0.0 162
+163 0.0254480838775635 0.0199999999999996 0.0199999999999996 0.0 163
+164 0.00185108184814453 0.00999999999999801 0.00999999999999801 0.0 164
+165 0.00188708305358887 0.0 0.0 0.0 165
+166 0.00177788734436035 0.0 0.0 0.0 166
+167 0.00183510780334473 0.0 0.0 0.0 167
+168 0.00177812576293945 0.0 0.0 0.0 168
+169 0.00177502632141113 0.0100000000000016 0.0100000000000016 0.0 169
+170 0.00174593925476074 0.0 0.0 0.0 170
+171 0.00176692008972168 0.0 0.0 0.0 171
+172 0.00175786018371582 0.0 0.0 0.0 172
+173 0.00176501274108887 0.0 0.0 0.0 173
+174 0.0018000602722168 0.0100000000000016 0.0100000000000016 0.0 174
+175 0.00176095962524414 0.0 0.0 0.0 175
+176 0.00175714492797852 0.0 0.0 0.0 176
+177 0.00174999237060547 0.0 0.0 0.0 177
+178 0.00176191329956055 0.0 0.0 0.0 178
+179 0.00175786018371582 0.0 0.0 0.0 179
+180 0.00174117088317871 0.00999999999999801 0.00999999999999801 0.0 180
+181 0.00177001953125 0.0 0.0 0.0 181
+182 0.00176095962524414 0.0 0.0 0.0 182
+183 0.00174903869628906 0.0 0.0 0.0 183
+184 0.00174093246459961 0.0 0.0 0.0 184
+185 0.00174307823181152 0.0 0.0 0.0 185
+186 0.00175595283508301 0.0100000000000016 0.0100000000000016 0.0 186
+187 0.00175189971923828 0.0 0.0 0.0 187
+188 0.00173711776733398 0.0 0.0 0.0 188
+189 0.00221514701843262 0.0 0.0 0.0 189
+190 0.00177502632141113 0.0 0.0 0.0 190
+191 0.00176811218261719 0.00999999999999801 0.00999999999999801 0.0 191
+192 0.00185799598693848 0.0 0.0 0.0 192
+193 0.00174903869628906 0.0 0.0 0.0 193
+194 0.00174379348754883 0.0 0.0 0.0 194
+195 0.0017399787902832 0.0 0.0 0.0 195
+196 0.00173401832580566 0.0100000000000016 0.0100000000000016 0.0 196
+197 0.00172996520996094 0.0 0.0 0.0 197
+198 0.00173401832580566 0.0 0.0 0.0 198
+199 0.00182390213012695 0.0 0.0 0.0 199
+200 0.00174784660339355 0.0 0.0 0.0 200
+201 0.0017549991607666 0.0 0.0 0.0 201
+202 0.00174307823181152 0.00999999999999801 0.00999999999999801 0.0 202
+203 0.00172710418701172 0.0 0.0 0.0 203
+204 0.00174283981323242 0.0 0.0 0.0 204
+205 0.00174999237060547 0.0 0.0 0.0 205
+206 0.00174093246459961 0.0 0.0 0.0 206
+207 0.00173616409301758 0.0 0.0 0.0 207
+208 0.00174903869628906 0.0100000000000016 0.0100000000000016 0.0 208
+209 0.00177407264709473 0.0 0.0 0.0 209
+210 0.00176286697387695 0.0 0.0 0.0 210
+211 0.00174903869628906 0.0 0.0 0.0 211
+212 0.00173807144165039 0.0 0.0 0.0 212
+213 0.00173020362854004 0.0100000000000016 0.0100000000000016 0.0 213
+214 0.00177502632141113 0.0 0.0 0.0 214
+215 0.00175309181213379 0.0 0.0 0.0 215
+216 0.00175595283508301 0.0 0.0 0.0 216
+217 0.0257258415222168 0.0299999999999976 0.0299999999999976 0.0 217
+218 0.00183296203613281 0.0 0.0 0.0 218
+219 0.00183606147766113 0.0 0.0 0.0 219
+220 0.0017850399017334 0.0 0.0 0.0 220
+221 0.00177097320556641 0.0 0.0 0.0 221
+222 0.00177097320556641 0.0100000000000016 0.0100000000000016 0.0 222
+223 0.00174808502197266 0.0 0.0 0.0 223
+224 0.00177216529846191 0.0 0.0 0.0 224
+225 0.0017549991607666 0.0 0.0 0.0 225
+226 0.00176095962524414 0.0 0.0 0.0 226
+227 0.00178098678588867 0.00999999999999801 0.00999999999999801 0.0 227
+228 0.00174188613891602 0.0 0.0 0.0 228
+229 0.0017540454864502 0.0 0.0 0.0 229
+230 0.00176477432250977 0.0 0.0 0.0 230
+231 0.00176191329956055 0.0 0.0 0.0 231
+232 0.00174713134765625 0.0 0.0 0.0 232
+233 0.00176095962524414 0.0100000000000016 0.0100000000000016 0.0 233
+234 0.00174903869628906 0.0 0.0 0.0 234
+235 0.0017549991607666 0.0 0.0 0.0 235
+236 0.00177001953125 0.0 0.0 0.0 236
+237 0.00174093246459961 0.0 0.0 0.0 237
+238 0.00174379348754883 0.0 0.0 0.0 238
+239 0.0017390251159668 0.00999999999999801 0.00999999999999801 0.0 239
+240 0.00175213813781738 0.0 0.0 0.0 240
+241 0.00174117088317871 0.0 0.0 0.0 241
+242 0.00341701507568359 0.0 0.0 0.0 242
+243 0.00347495079040527 0.0100000000000016 0.0100000000000016 0.0 243
+244 0.00339508056640625 0.0 0.0 0.0 244
+245 0.00204801559448242 0.0 0.0 0.0 245
+246 0.00174903869628906 0.0 0.0 0.0 246
+247 0.00174903869628906 0.0100000000000016 0.0100000000000016 0.0 247
+248 0.00174283981323242 0.0 0.0 0.0 248
+249 0.00176382064819336 0.0 0.0 0.0 249
+250 0.00179600715637207 0.0 0.0 0.0 250
+251 0.00175380706787109 0.0 0.0 0.0 251
+252 0.00175976753234863 0.00999999999999801 0.00999999999999801 0.0 252
+253 0.00174188613891602 0.0 0.0 0.0 253
+254 0.00174808502197266 0.0 0.0 0.0 254
+255 0.00175690650939941 0.0 0.0 0.0 255
+256 0.00173091888427734 0.0 0.0 0.0 256
+257 0.00175213813781738 0.0 0.0 0.0 257
+258 0.00174498558044434 0.0100000000000016 0.0100000000000016 0.0 258
+259 0.00174999237060547 0.0 0.0 0.0 259
+260 0.00175094604492188 0.0 0.0 0.0 260
+261 0.00177097320556641 0.0 0.0 0.0 261
+262 0.00174283981323242 0.0 0.0 0.0 262
+263 0.00174999237060547 0.00999999999999801 0.00999999999999801 0.0 263
+264 0.00174713134765625 0.0 0.0 0.0 264
+265 0.00174212455749512 0.0 0.0 0.0 265
+266 0.00174498558044434 0.0 0.0 0.0 266
+267 0.00180602073669434 0.0 0.0 0.0 267
+268 0.00176906585693359 0.0 0.0 0.0 268
+269 0.00176382064819336 0.0100000000000016 0.0100000000000016 0.0 269
+270 0.0255179405212402 0.0199999999999996 0.0199999999999996 0.0 270
+271 0.00179314613342285 0.0 0.0 0.0 271
+272 0.00182604789733887 0.00999999999999801 0.00999999999999801 0.0 272
+273 0.00179910659790039 0.0 0.0 0.0 273
+274 0.00179505348205566 0.0 0.0 0.0 274
+275 0.00176811218261719 0.0 0.0 0.0 275
+276 0.00177192687988281 0.0 0.0 0.0 276
+277 0.00177478790283203 0.0 0.0 0.0 277
+278 0.00176596641540527 0.0100000000000016 0.0100000000000016 0.0 278
+279 0.0020899772644043 0.0 0.0 0.0 279
+280 0.00182890892028809 0.0 0.0 0.0 280
+281 0.00177597999572754 0.0 0.0 0.0 281
+282 0.0018761157989502 0.0 0.0 0.0 282
+283 0.00176405906677246 0.0100000000000016 0.0100000000000016 0.0 283
+284 0.00177693367004395 0.0 0.0 0.0 284
+285 0.00175094604492188 0.0 0.0 0.0 285
+286 0.00176000595092773 0.0 0.0 0.0 286
+287 0.00176095962524414 0.0 0.0 0.0 287
+288 0.00176715850830078 0.0 0.0 0.0 288
+289 0.0017549991607666 0.00999999999999801 0.00999999999999801 0.0 289
+290 0.00177216529846191 0.0 0.0 0.0 290
+291 0.00175881385803223 0.0 0.0 0.0 291
+292 0.00177502632141113 0.0 0.0 0.0 292
+293 0.00174999237060547 0.0 0.0 0.0 293
+294 0.00176000595092773 0.0100000000000016 0.0100000000000016 0.0 294
+295 0.00173807144165039 0.0 0.0 0.0 295
+296 0.00174999237060547 0.0 0.0 0.0 296
+297 0.00174212455749512 0.0 0.0 0.0 297
+298 0.0017549991607666 0.0 0.0 0.0 298
+299 0.00174713134765625 0.0 0.0 0.0 299
+300 0.00174784660339355 0.00999999999999801 0.00999999999999801 0.0 300
+301 0.00174403190612793 0.0 0.0 0.0 301
+302 0.00175905227661133 0.0 0.0 0.0 302
+303 0.00174713134765625 0.0 0.0 0.0 303
+304 0.00293898582458496 0.0 0.0 0.0 304
+305 0.00175619125366211 0.0100000000000016 0.0100000000000016 0.0 305
+306 0.00176787376403809 0.0 0.0 0.0 306
+307 0.00173401832580566 0.0 0.0 0.0 307
+308 0.00176095962524414 0.0 0.0 0.0 308
+309 0.00177383422851562 0.0 0.0 0.0 309
+310 0.00175189971923828 0.0 0.0 0.0 310
+311 0.00173211097717285 0.00999999999999801 0.00999999999999801 0.0 311
+312 0.00173211097717285 0.0 0.0 0.0 312
+313 0.00175786018371582 0.0 0.0 0.0 313
+314 0.0017549991607666 0.0 0.0 0.0 314
+315 0.00180292129516602 0.0 0.0 0.0 315
+316 0.00176787376403809 0.0100000000000016 0.0100000000000016 0.0 316
+317 0.00175714492797852 0.0 0.0 0.0 317
+318 0.00177097320556641 0.0 0.0 0.0 318
+319 0.00173711776733398 0.0 0.0 0.0 319
+320 0.00174307823181152 0.0 0.0 0.0 320
+321 0.00177502632141113 0.0 0.0 0.0 321
+322 0.00176501274108887 0.0100000000000016 0.0100000000000016 0.0 322
+323 0.00177407264709473 0.0 0.0 0.0 323
+324 0.0253810882568359 0.0199999999999996 0.0199999999999996 0.0 324
+325 0.00182509422302246 0.00999999999999801 0.00999999999999801 0.0 325
+326 0.00184917449951172 0.0 0.0 0.0 326
+327 0.0018160343170166 0.0 0.0 0.0 327
+328 0.00176692008972168 0.0 0.0 0.0 328
+329 0.00176501274108887 0.0 0.0 0.0 329
+330 0.00177097320556641 0.0 0.0 0.0 330
+331 0.00176906585693359 0.0100000000000016 0.0100000000000016 0.0 331
+332 0.00175690650939941 0.0 0.0 0.0 332
+333 0.00176906585693359 0.0 0.0 0.0 333
+334 0.00173497200012207 0.0 0.0 0.0 334
+335 0.00176095962524414 0.0 0.0 0.0 335
+336 0.00176286697387695 0.00999999999999801 0.00999999999999801 0.0 336
+337 0.00176382064819336 0.0 0.0 0.0 337
+338 0.00174379348754883 0.0 0.0 0.0 338
+339 0.00174808502197266 0.0 0.0 0.0 339
+340 0.00175595283508301 0.0 0.0 0.0 340
+341 0.0017540454864502 0.0 0.0 0.0 341
+342 0.00174903869628906 0.0100000000000016 0.0100000000000016 0.0 342
+343 0.00172686576843262 0.0 0.0 0.0 343
+344 0.00175786018371582 0.0 0.0 0.0 344
+345 0.00181317329406738 0.0 0.0 0.0 345
+346 0.00176692008972168 0.0 0.0 0.0 346
+347 0.00175213813781738 0.00999999999999801 0.00999999999999801 0.0 347
+348 0.00172591209411621 0.0 0.0 0.0 348
+349 0.00174093246459961 0.0 0.0 0.0 349
+350 0.00202202796936035 0.0 0.0 0.0 350
+351 0.00346088409423828 0.0 0.0 0.0 351
+352 0.00342106819152832 0.0100000000000016 0.0100000000000016 0.0 352
+353 0.0033118724822998 0.0 0.0 0.0 353
+354 0.00195193290710449 0.0 0.0 0.0 354
+355 0.00175690650939941 0.0100000000000016 0.0100000000000016 0.0 355
+356 0.00174379348754883 0.0 0.0 0.0 356
+357 0.00174283981323242 0.0 0.0 0.0 357
+358 0.00174880027770996 0.0 0.0 0.0 358
+359 0.00177788734436035 0.0 0.0 0.0 359
+360 0.00173401832580566 0.0 0.0 0.0 360
+361 0.00173687934875488 0.00999999999999801 0.00999999999999801 0.0 361
+362 0.00174403190612793 0.0 0.0 0.0 362
+363 0.00174999237060547 0.0 0.0 0.0 363
+364 0.00173592567443848 0.0 0.0 0.0 364
+365 0.00175094604492188 0.0 0.0 0.0 365
+366 0.00174188613891602 0.0 0.0 0.0 366
+367 0.00175118446350098 0.0100000000000016 0.0100000000000016 0.0 367
+368 0.00175595283508301 0.0 0.0 0.0 368
+369 0.00174403190612793 0.0 0.0 0.0 369
+370 0.0017387866973877 0.0 0.0 0.0 370
+371 0.00177192687988281 0.0 0.0 0.0 371
+372 0.00177907943725586 0.00999999999999801 0.00999999999999801 0.0 372
+373 0.00174903869628906 0.0 0.0 0.0 373
+374 0.00176215171813965 0.0 0.0 0.0 374
+375 0.0023951530456543 0.0 0.0 0.0 375
+376 0.00357913970947266 0.0100000000000016 0.0100000000000016 0.0 376
+377 0.0294489860534668 0.0199999999999996 0.0199999999999996 0.0 377
+378 0.00180578231811523 0.00999999999999801 0.00999999999999801 0.0 378
+379 0.00181698799133301 0.0 0.0 0.0 379
+380 0.00183391571044922 0.0 0.0 0.0 380
+381 0.00181293487548828 0.0 0.0 0.0 381
+382 0.00175809860229492 0.0 0.0 0.0 382
+383 0.00176405906677246 0.0100000000000016 0.0100000000000016 0.0 383
+384 0.00176000595092773 0.0 0.0 0.0 384
+385 0.00175809860229492 0.0 0.0 0.0 385
+386 0.00177288055419922 0.0 0.0 0.0 386
+387 0.00175285339355469 0.0 0.0 0.0 387
+388 0.00175595283508301 0.0 0.0 0.0 388
+389 0.00177502632141113 0.0100000000000016 0.0100000000000016 0.0 389
+390 0.00174903869628906 0.0 0.0 0.0 390
+391 0.00176215171813965 0.0 0.0 0.0 391
+392 0.00174903869628906 0.0 0.0 0.0 392
+393 0.00174307823181152 0.0 0.0 0.0 393
+394 0.00177812576293945 0.00999999999999801 0.00999999999999801 0.0 394
+395 0.00176596641540527 0.0 0.0 0.0 395
+396 0.00178003311157227 0.0 0.0 0.0 396
+397 0.0017390251159668 0.0 0.0 0.0 397
+398 0.00174999237060547 0.0 0.0 0.0 398
+399 0.00174307823181152 0.0 0.0 0.0 399
+400 0.00176191329956055 0.0100000000000016 0.0100000000000016 0.0 400
+401 0.0017549991607666 0.0 0.0 0.0 401
+402 0.00173592567443848 0.0 0.0 0.0 402
+403 0.00173401832580566 0.0 0.0 0.0 403
+404 0.00176095962524414 0.0 0.0 0.0 404
+405 0.00174689292907715 0.00999999999999801 0.00999999999999801 0.0 405
+406 0.00176000595092773 0.0 0.0 0.0 406
+407 0.00172615051269531 0.0 0.0 0.0 407
+408 0.00174188613891602 0.0 0.0 0.0 408
+409 0.00174283981323242 0.0 0.0 0.0 409
+410 0.0017540454864502 0.0 0.0 0.0 410
+411 0.00174403190612793 0.0100000000000016 0.0100000000000016 0.0 411
+412 0.00172901153564453 0.0 0.0 0.0 412
+413 0.00173282623291016 0.0 0.0 0.0 413
+414 0.00174880027770996 0.0 0.0 0.0 414
+415 0.0017549991607666 0.0 0.0 0.0 415
+416 0.00173091888427734 0.00999999999999801 0.00999999999999801 0.0 416
+417 0.00174999237060547 0.0 0.0 0.0 417
+418 0.00184798240661621 0.0 0.0 0.0 418
+419 0.00175118446350098 0.0 0.0 0.0 419
+420 0.00173497200012207 0.0 0.0 0.0 420
+421 0.00173807144165039 0.0 0.0 0.0 421
+422 0.00174903869628906 0.0100000000000016 0.0100000000000016 0.0 422
+423 0.00174093246459961 0.0 0.0 0.0 423
+424 0.00177288055419922 0.0 0.0 0.0 424
+425 0.00176000595092773 0.0 0.0 0.0 425
+426 0.00174880027770996 0.0 0.0 0.0 426
+427 0.00173187255859375 0.0 0.0 0.0 427
+428 0.00179195404052734 0.0100000000000016 0.0100000000000016 0.0 428
+429 0.00175309181213379 0.0 0.0 0.0 429
+430 0.0253579616546631 0.0199999999999996 0.0199999999999996 0.0 430
+431 0.0018010139465332 0.00999999999999801 0.00999999999999801 0.0 431
+432 0.00183796882629395 0.0 0.0 0.0 432
+433 0.00179314613342285 0.0 0.0 0.0 433
+434 0.00180387496948242 0.0 0.0 0.0 434
+435 0.00178289413452148 0.0 0.0 0.0 435
+436 0.00178003311157227 0.0100000000000016 0.0100000000000016 0.0 436
+437 0.00177001953125 0.0 0.0 0.0 437
+438 0.00175285339355469 0.0 0.0 0.0 438
+439 0.00176405906677246 0.0 0.0 0.0 439
+440 0.00176501274108887 0.0 0.0 0.0 440
+441 0.00173497200012207 0.0 0.0 0.0 441
+442 0.00176215171813965 0.00999999999999801 0.00999999999999801 0.0 442
+443 0.00176000595092773 0.0 0.0 0.0 443
+444 0.0017390251159668 0.0 0.0 0.0 444
+445 0.00175714492797852 0.0 0.0 0.0 445
+446 0.00178098678588867 0.0 0.0 0.0 446
+447 0.00176286697387695 0.0 0.0 0.0 447
+448 0.00175595283508301 0.0100000000000016 0.0100000000000016 0.0 448
+449 0.00177097320556641 0.0 0.0 0.0 449
+450 0.00175905227661133 0.0 0.0 0.0 450
+451 0.00175595283508301 0.0 0.0 0.0 451
+452 0.00177693367004395 0.0 0.0 0.0 452
+453 0.00174999237060547 0.00999999999999801 0.00999999999999801 0.0 453
+454 0.00175595283508301 0.0 0.0 0.0 454
+455 0.00176191329956055 0.0 0.0 0.0 455
+456 0.00175094604492188 0.0 0.0 0.0 456
+457 0.00329685211181641 0.0 0.0 0.0 457
+458 0.00347805023193359 0.0100000000000016 0.0100000000000016 0.0 458
+459 0.00338196754455566 0.0 0.0 0.0 459
+460 0.00222587585449219 0.0 0.0 0.0 460
+461 0.00174784660339355 0.0100000000000016 0.0100000000000016 0.0 461
+462 0.00176715850830078 0.0 0.0 0.0 462
+463 0.00176501274108887 0.0 0.0 0.0 463
+464 0.00172901153564453 0.0 0.0 0.0 464
+465 0.00177407264709473 0.0 0.0 0.0 465
+466 0.00175309181213379 0.0 0.0 0.0 466
+467 0.00176095962524414 0.00999999999999801 0.00999999999999801 0.0 467
+468 0.00174403190612793 0.0 0.0 0.0 468
+469 0.00172996520996094 0.0 0.0 0.0 469
+470 0.00175285339355469 0.0 0.0 0.0 470
+471 0.00176000595092773 0.0 0.0 0.0 471
+472 0.00176119804382324 0.0100000000000016 0.0100000000000016 0.0 472
+473 0.00173187255859375 0.0 0.0 0.0 473
+474 0.00172281265258789 0.0 0.0 0.0 474
+475 0.00175905227661133 0.0 0.0 0.0 475
+476 0.00175714492797852 0.0 0.0 0.0 476
+477 0.00174093246459961 0.0 0.0 0.0 477
+478 0.00176501274108887 0.00999999999999801 0.00999999999999801 0.0 478
+479 0.00173497200012207 0.0 0.0 0.0 479
+480 0.00174593925476074 0.0 0.0 0.0 480
+481 0.00177001953125 0.0 0.0 0.0 481
+482 0.00177097320556641 0.0 0.0 0.0 482
+483 0.0255038738250732 0.0300000000000011 0.0300000000000011 0.0 483
+484 0.00180983543395996 0.0 0.0 0.0 484
+485 0.00182580947875977 0.0 0.0 0.0 485
+486 0.00181293487548828 0.0 0.0 0.0 486
+487 0.00178980827331543 0.00999999999999801 0.00999999999999801 0.0 487
+488 0.00177001953125 0.0 0.0 0.0 488
+489 0.00174784660339355 0.0 0.0 0.0 489
+490 0.00177311897277832 0.0 0.0 0.0 490
+491 0.00178694725036621 0.0 0.0 0.0 491
+492 0.00176596641540527 0.0100000000000016 0.0100000000000016 0.0 492
+493 0.00175786018371582 0.0 0.0 0.0 493
+494 0.00176286697387695 0.0 0.0 0.0 494
+495 0.00174117088317871 0.0 0.0 0.0 495
+496 0.0017540454864502 0.0 0.0 0.0 496
+497 0.00176811218261719 0.0 0.0 0.0 497
+498 0.00176405906677246 0.0100000000000016 0.0100000000000016 0.0 498
+499 0.00175595283508301 0.0 0.0 0.0 499
+500 0.00183701515197754 0.0 0.0 0.0 500
+501 0.00176692008972168 0.0 0.0 0.0 501
+502 0.00178289413452148 0.0 0.0 0.0 502
+503 0.00176692008972168 0.00999999999999801 0.00999999999999801 0.0 503
+504 0.00175595283508301 0.0 0.0 0.0 504
+505 0.00173616409301758 0.0 0.0 0.0 505
+506 0.00208091735839844 0.0 0.0 0.0 506
+507 0.00292181968688965 0.0 0.0 0.0 507
+508 0.00174379348754883 0.0 0.0 0.0 508
+509 0.00174093246459961 0.0100000000000016 0.0100000000000016 0.0 509
+510 0.00175595283508301 0.0 0.0 0.0 510
+511 0.00174808502197266 0.0 0.0 0.0 511
+512 0.00172805786132812 0.0 0.0 0.0 512
+513 0.00174903869628906 0.0 0.0 0.0 513
+514 0.00177097320556641 0.00999999999999801 0.00999999999999801 0.0 514
+515 0.0017540454864502 0.0 0.0 0.0 515
+516 0.00173282623291016 0.0 0.0 0.0 516
+517 0.00174498558044434 0.0 0.0 0.0 517
+518 0.00174188613891602 0.0 0.0 0.0 518
+519 0.00176811218261719 0.0 0.0 0.0 519
+520 0.00173711776733398 0.0100000000000016 0.0100000000000016 0.0 520
+521 0.00175690650939941 0.0 0.0 0.0 521
+522 0.00173592567443848 0.0 0.0 0.0 522
+523 0.0017390251159668 0.0 0.0 0.0 523
+524 0.00174903869628906 0.0 0.0 0.0 524
+525 0.00175881385803223 0.00999999999999801 0.00999999999999801 0.0 525
+526 0.00173497200012207 0.0 0.0 0.0 526
+527 0.00173616409301758 0.0 0.0 0.0 527
+528 0.00175189971923828 0.0 0.0 0.0 528
+529 0.00174403190612793 0.0 0.0 0.0 529
+530 0.00174903869628906 0.0 0.0 0.0 530
+531 0.00175595283508301 0.0100000000000016 0.0100000000000016 0.0 531
+532 0.00174307823181152 0.0 0.0 0.0 532
+533 0.00174999237060547 0.0 0.0 0.0 533
+534 0.00178980827331543 0.0 0.0 0.0 534
+535 0.00175809860229492 0.0 0.0 0.0 535
+536 0.025597095489502 0.0300000000000011 0.0300000000000011 0.0 536
+537 0.00178790092468262 0.0 0.0 0.0 537
+538 0.00197505950927734 0.0 0.0 0.0 538
+539 0.00181388854980469 0.0 0.0 0.0 539
+540 0.00177693367004395 0.00999999999999801 0.00999999999999801 0.0 540
+541 0.00177311897277832 0.0 0.0 0.0 541
+542 0.00185203552246094 0.0 0.0 0.0 542
+543 0.00176501274108887 0.0 0.0 0.0 543
+544 0.00176501274108887 0.0 0.0 0.0 544
+545 0.00176405906677246 0.0100000000000016 0.0100000000000016 0.0 545
+546 0.00176405906677246 0.0 0.0 0.0 546
+547 0.00174093246459961 0.0 0.0 0.0 547
+548 0.00175905227661133 0.0 0.0 0.0 548
+549 0.00177407264709473 0.0 0.0 0.0 549
+550 0.00176215171813965 0.0 0.0 0.0 550
+551 0.00174903869628906 0.00999999999999801 0.00999999999999801 0.0 551
+552 0.00175595283508301 0.0 0.0 0.0 552
+553 0.00174593925476074 0.0 0.0 0.0 553
+554 0.00176787376403809 0.0 0.0 0.0 554
+555 0.00176000595092773 0.0 0.0 0.0 555
+556 0.00175380706787109 0.0100000000000016 0.0100000000000016 0.0 556
+557 0.00174593925476074 0.0 0.0 0.0 557
+558 0.00173807144165039 0.0 0.0 0.0 558
+559 0.00180602073669434 0.0 0.0 0.0 559
+560 0.00174808502197266 0.0 0.0 0.0 560
+561 0.00174093246459961 0.0 0.0 0.0 561
+562 0.00177311897277832 0.00999999999999801 0.00999999999999801 0.0 562
+563 0.00174212455749512 0.0 0.0 0.0 563
+564 0.00174498558044434 0.0 0.0 0.0 564
+565 0.00191402435302734 0.0 0.0 0.0 565
+566 0.00347208976745605 0.0100000000000016 0.0100000000000016 0.0 566
+567 0.00344085693359375 0.0 0.0 0.0 567
+568 0.00338578224182129 0.0 0.0 0.0 568
+569 0.00339102745056152 0.0100000000000016 0.0100000000000016 0.0 569
+570 0.00190401077270508 0.0 0.0 0.0 570
+571 0.00175905227661133 0.0 0.0 0.0 571
+572 0.00177097320556641 0.0 0.0 0.0 572
+573 0.00176215171813965 0.0 0.0 0.0 573
+574 0.0017249584197998 0.0 0.0 0.0 574
+575 0.00174903869628906 0.00999999999999801 0.00999999999999801 0.0 575
+576 0.00174593925476074 0.0 0.0 0.0 576
+577 0.0017399787902832 0.0 0.0 0.0 577
+578 0.00174498558044434 0.0 0.0 0.0 578
+579 0.00174689292907715 0.0 0.0 0.0 579
+580 0.00175118446350098 0.0100000000000016 0.0100000000000016 0.0 580
+581 0.00174307823181152 0.0 0.0 0.0 581
+582 0.00175380706787109 0.0 0.0 0.0 582
+583 0.00175690650939941 0.0 0.0 0.0 583
+584 0.00174403190612793 0.0 0.0 0.0 584
+585 0.00174903869628906 0.0 0.0 0.0 585
+586 0.00176000595092773 0.00999999999999801 0.00999999999999801 0.0 586
+587 0.00176596641540527 0.0 0.0 0.0 587
+588 0.00175595283508301 0.0 0.0 0.0 588
+589 0.0243070125579834 0.0199999999999996 0.0199999999999996 0.0 589
+590 0.00179505348205566 0.0100000000000016 0.0100000000000016 0.0 590
+591 0.00179696083068848 0.0 0.0 0.0 591
+592 0.0018000602722168 0.0 0.0 0.0 592
+593 0.00178909301757812 0.0 0.0 0.0 593
+594 0.00181698799133301 0.0 0.0 0.0 594
+595 0.00178003311157227 0.00999999999999801 0.00999999999999801 0.0 595
+596 0.00175619125366211 0.0 0.0 0.0 596
+597 0.0017540454864502 0.0 0.0 0.0 597
+598 0.00177407264709473 0.0 0.0 0.0 598
+599 0.00177502632141113 0.0 0.0 0.0 599
+600 0.00176692008972168 0.0 0.0 0.0 600
+601 0.00175690650939941 0.0100000000000016 0.0100000000000016 0.0 601
+602 0.00173401832580566 0.0 0.0 0.0 602
+603 0.00175213813781738 0.0 0.0 0.0 603
+604 0.00176692008972168 0.0 0.0 0.0 604
+605 0.00175189971923828 0.0 0.0 0.0 605
+606 0.00176692008972168 0.0100000000000016 0.0100000000000016 0.0 606
+607 0.00175595283508301 0.0 0.0 0.0 607
+608 0.00176811218261719 0.0 0.0 0.0 608
+609 0.00176787376403809 0.0 0.0 0.0 609
+610 0.00177121162414551 0.0 0.0 0.0 610
+611 0.00175094604492188 0.0 0.0 0.0 611
+612 0.00174713134765625 0.00999999999999801 0.00999999999999801 0.0 612
+613 0.00174403190612793 0.0 0.0 0.0 613
+614 0.00173211097717285 0.0 0.0 0.0 614
+615 0.0017859935760498 0.0 0.0 0.0 615
+616 0.00175309181213379 0.0 0.0 0.0 616
+617 0.00174784660339355 0.0 0.0 0.0 617
+618 0.00174903869628906 0.0 0.0 0.0 618
+619 0.00175714492797852 0.0 0.0 0.0 619
+620 0.0022280216217041 0.0 0.0 0.0 620
+621 0.00176501274108887 0.0 0.0 0.0 621
+622 0.00176191329956055 0.0 0.0 0.0 622
+623 0.00185799598693848 0.00999999999999801 0.00999999999999801 0.0 623
+624 0.00174689292907715 0.0 0.0 0.0 624
+625 0.00174689292907715 0.0 0.0 0.0 625
+626 0.0017249584197998 0.0 0.0 0.0 626
+627 0.00173401832580566 0.0 0.0 0.0 627
+628 0.00175118446350098 0.0100000000000016 0.0100000000000016 0.0 628
+629 0.00173401832580566 0.0 0.0 0.0 629
+630 0.00174593925476074 0.0 0.0 0.0 630
+631 0.00174593925476074 0.0 0.0 0.0 631
+632 0.00174689292907715 0.0 0.0 0.0 632
+633 0.00175905227661133 0.0 0.0 0.0 633
+634 0.00177001953125 0.00999999999999801 0.00999999999999801 0.0 634
+635 0.00174403190612793 0.0 0.0 0.0 635
+636 0.00185108184814453 0.0 0.0 0.0 636
+637 0.00174403190612793 0.0 0.0 0.0 637
+638 0.00175023078918457 0.0 0.0 0.0 638
+639 0.00177407264709473 0.0100000000000016 0.0100000000000016 0.0 639
+640 0.00174403190612793 0.0 0.0 0.0 640
+641 0.00175714492797852 0.0 0.0 0.0 641
+642 0.0244560241699219 0.0199999999999996 0.0199999999999996 0.0 642
+643 0.00182914733886719 0.0100000000000016 0.0100000000000016 0.0 643
+644 0.00178813934326172 0.0 0.0 0.0 644
+645 0.00177693367004395 0.0 0.0 0.0 645
+646 0.00177192687988281 0.0 0.0 0.0 646
+647 0.00177478790283203 0.0 0.0 0.0 647
+648 0.00176906585693359 0.0 0.0 0.0 648
+649 0.00176787376403809 0.00999999999999801 0.00999999999999801 0.0 649
+650 0.00174212455749512 0.0 0.0 0.0 650
+651 0.00175595283508301 0.0 0.0 0.0 651
+652 0.00176286697387695 0.0 0.0 0.0 652
+653 0.00176095962524414 0.0 0.0 0.0 653
+654 0.00177597999572754 0.0100000000000016 0.0100000000000016 0.0 654
+655 0.00177288055419922 0.0 0.0 0.0 655
+656 0.00175118446350098 0.0 0.0 0.0 656
+657 0.00175309181213379 0.0 0.0 0.0 657
+658 0.0017540454864502 0.0 0.0 0.0 658
+659 0.0017549991607666 0.0 0.0 0.0 659
+660 0.00176215171813965 0.00999999999999801 0.00999999999999801 0.0 660
+661 0.00176692008972168 0.0 0.0 0.0 661
+662 0.00175619125366211 0.0 0.0 0.0 662
+663 0.00177288055419922 0.0 0.0 0.0 663
+664 0.00176310539245605 0.0 0.0 0.0 664
+665 0.00175189971923828 0.0 0.0 0.0 665
+666 0.00175094604492188 0.0100000000000016 0.0100000000000016 0.0 666
+667 0.00175189971923828 0.0 0.0 0.0 667
+668 0.00175905227661133 0.0 0.0 0.0 668
+669 0.00175690650939941 0.0 0.0 0.0 669
+670 0.00174903869628906 0.0 0.0 0.0 670
+671 0.00176382064819336 0.00999999999999801 0.00999999999999801 0.0 671
+672 0.00174307823181152 0.0 0.0 0.0 672
+673 0.00174117088317871 0.0 0.0 0.0 673
+674 0.00176906585693359 0.0 0.0 0.0 674
+675 0.00325989723205566 0.0 0.0 0.0 675
+676 0.00345802307128906 0.0100000000000016 0.0100000000000016 0.0 676
+677 0.0026400089263916 0.0 0.0 0.0 677
+678 0.00176692008972168 0.0 0.0 0.0 678
+679 0.00268101692199707 0.0100000000000016 0.0100000000000016 0.0 679
+680 0.00180482864379883 0.0 0.0 0.0 680
+681 0.00174808502197266 0.0 0.0 0.0 681
+682 0.00174283981323242 0.0 0.0 0.0 682
+683 0.00176095962524414 0.0 0.0 0.0 683
+684 0.00176095962524414 0.0 0.0 0.0 684
+685 0.00175595283508301 0.00999999999999801 0.00999999999999801 0.0 685
+686 0.00175094604492188 0.0 0.0 0.0 686
+687 0.00176477432250977 0.0 0.0 0.0 687
+688 0.00176000595092773 0.0 0.0 0.0 688
+689 0.00176906585693359 0.0 0.0 0.0 689
+690 0.00177502632141113 0.0100000000000016 0.0100000000000016 0.0 690
+691 0.00174808502197266 0.0 0.0 0.0 691
+692 0.00178909301757812 0.0 0.0 0.0 692
+693 0.00177693367004395 0.0 0.0 0.0 693
+694 0.0252690315246582 0.0299999999999976 0.0299999999999976 0.0 694
+695 0.00181198120117188 0.0 0.0 0.0 695
+696 0.00185799598693848 0.0 0.0 0.0 696
+697 0.00180315971374512 0.0 0.0 0.0 697
+698 0.00178194046020508 0.0 0.0 0.0 698
+699 0.00178718566894531 0.0100000000000016 0.0100000000000016 0.0 699
+700 0.00174593925476074 0.0 0.0 0.0 700
+701 0.00177192687988281 0.0 0.0 0.0 701
+702 0.00177216529846191 0.0 0.0 0.0 702
+703 0.00174808502197266 0.0 0.0 0.0 703
+704 0.00176882743835449 0.0 0.0 0.0 704
+705 0.0017540454864502 0.00999999999999801 0.00999999999999801 0.0 705
+706 0.00174403190612793 0.0 0.0 0.0 706
+707 0.00177288055419922 0.0 0.0 0.0 707
+708 0.00177001953125 0.0 0.0 0.0 708
+709 0.00176310539245605 0.0 0.0 0.0 709
+710 0.00175690650939941 0.0 0.0 0.0 710
+711 0.00179791450500488 0.0100000000000016 0.0100000000000016 0.0 711
+712 0.00183296203613281 0.0 0.0 0.0 712
+713 0.00177001953125 0.0 0.0 0.0 713
+714 0.00175595283508301 0.0 0.0 0.0 714
+715 0.00175189971923828 0.0 0.0 0.0 715
+716 0.00174713134765625 0.0 0.0 0.0 716
+717 0.00175809860229492 0.0100000000000016 0.0100000000000016 0.0 717
+718 0.00182104110717773 0.0 0.0 0.0 718
+719 0.0017399787902832 0.0 0.0 0.0 719
+720 0.00173497200012207 0.0 0.0 0.0 720
+721 0.00173783302307129 0.0 0.0 0.0 721
+722 0.0017399787902832 0.00999999999999801 0.00999999999999801 0.0 722
+723 0.00175285339355469 0.0 0.0 0.0 723
+724 0.00173282623291016 0.0 0.0 0.0 724
+725 0.00175213813781738 0.0 0.0 0.0 725
+726 0.00174498558044434 0.0 0.0 0.0 726
+727 0.00174093246459961 0.0 0.0 0.0 727
+728 0.00177121162414551 0.0100000000000016 0.0100000000000016 0.0 728
+729 0.00174903869628906 0.0 0.0 0.0 729
+730 0.00175690650939941 0.0 0.0 0.0 730
+731 0.00173711776733398 0.0 0.0 0.0 731
+732 0.0017399787902832 0.0 0.0 0.0 732
+733 0.00176596641540527 0.00999999999999801 0.00999999999999801 0.0 733
+734 0.00175619125366211 0.0 0.0 0.0 734
+735 0.00173687934875488 0.0 0.0 0.0 735
+736 0.00176000595092773 0.0 0.0 0.0 736
+737 0.00175714492797852 0.0 0.0 0.0 737
+738 0.00174689292907715 0.0 0.0 0.0 738
+739 0.00174689292907715 0.0100000000000016 0.0100000000000016 0.0 739
+740 0.00175309181213379 0.0 0.0 0.0 740
+741 0.00175189971923828 0.0 0.0 0.0 741
+742 0.00175881385803223 0.0 0.0 0.0 742
+743 0.00175189971923828 0.0 0.0 0.0 743
+744 0.00178813934326172 0.00999999999999801 0.00999999999999801 0.0 744
+745 0.00172710418701172 0.0 0.0 0.0 745
+746 0.00175690650939941 0.0 0.0 0.0 746
+747 0.0253231525421143 0.0200000000000031 0.0200000000000031 0.0 747
+748 0.00182986259460449 0.00999999999999801 0.00999999999999801 0.0 748
+749 0.00179004669189453 0.0 0.0 0.0 749
+750 0.00179314613342285 0.0 0.0 0.0 750
+751 0.00178098678588867 0.0 0.0 0.0 751
+752 0.00178003311157227 0.0 0.0 0.0 752
+753 0.00176811218261719 0.0100000000000016 0.0100000000000016 0.0 753
+754 0.00174283981323242 0.0 0.0 0.0 754
+755 0.00176811218261719 0.0 0.0 0.0 755
+756 0.00175881385803223 0.0 0.0 0.0 756
+757 0.00174784660339355 0.0 0.0 0.0 757
+758 0.00175905227661133 0.0 0.0 0.0 758
+759 0.00177812576293945 0.00999999999999801 0.00999999999999801 0.0 759
+760 0.00174689292907715 0.0 0.0 0.0 760
+761 0.00183987617492676 0.0 0.0 0.0 761
+762 0.0017549991607666 0.0 0.0 0.0 762
+763 0.00175786018371582 0.0 0.0 0.0 763
+764 0.00175380706787109 0.0100000000000016 0.0100000000000016 0.0 764
+765 0.00176501274108887 0.0 0.0 0.0 765
+766 0.00175690650939941 0.0 0.0 0.0 766
+767 0.00174498558044434 0.0 0.0 0.0 767
+768 0.0017549991607666 0.0 0.0 0.0 768
+769 0.00175714492797852 0.0 0.0 0.0 769
+770 0.00176405906677246 0.00999999999999801 0.00999999999999801 0.0 770
+771 0.00174999237060547 0.0 0.0 0.0 771
+772 0.00174689292907715 0.0 0.0 0.0 772
+773 0.00174999237060547 0.0 0.0 0.0 773
+774 0.0017387866973877 0.0 0.0 0.0 774
+775 0.00175309181213379 0.0 0.0 0.0 775
+776 0.0017399787902832 0.0100000000000016 0.0100000000000016 0.0 776
+777 0.00179791450500488 0.0 0.0 0.0 777
+778 0.00174188613891602 0.0 0.0 0.0 778
+779 0.00172996520996094 0.0 0.0 0.0 779
+780 0.00173211097717285 0.0 0.0 0.0 780
+781 0.00176191329956055 0.00999999999999801 0.00999999999999801 0.0 781
+782 0.00174999237060547 0.0 0.0 0.0 782
+783 0.00173711776733398 0.0 0.0 0.0 783
+784 0.00174212455749512 0.0 0.0 0.0 784
+785 0.00317001342773438 0.0 0.0 0.0 785
+786 0.00347280502319336 0.0100000000000016 0.0100000000000016 0.0 786
+787 0.00329899787902832 0.0 0.0 0.0 787
+788 0.00238609313964844 0.0 0.0 0.0 788
+789 0.00221085548400879 0.0100000000000016 0.0100000000000016 0.0 789
+790 0.00175285339355469 0.0 0.0 0.0 790
+791 0.00175309181213379 0.0 0.0 0.0 791
+792 0.00172901153564453 0.0 0.0 0.0 792
+793 0.00179696083068848 0.0 0.0 0.0 793
+794 0.00175285339355469 0.0 0.0 0.0 794
+795 0.00173783302307129 0.00999999999999801 0.00999999999999801 0.0 795
+796 0.00177001953125 0.0 0.0 0.0 796
+797 0.00176811218261719 0.0 0.0 0.0 797
+798 0.00175595283508301 0.0 0.0 0.0 798
+799 0.0301520824432373 0.0300000000000011 0.0300000000000011 0.0 799
+800 0.00359296798706055 0.00999999999999801 0.00999999999999801 0.0 800
+801 0.00265407562255859 0.0 0.0 0.0 801
+802 0.00182509422302246 0.0 0.0 0.0 802
+803 0.00179409980773926 0.0 0.0 0.0 803
+804 0.00177407264709473 0.0 0.0 0.0 804
+805 0.00176787376403809 0.0100000000000016 0.0100000000000016 0.0 805
+806 0.00177907943725586 0.0 0.0 0.0 806
+807 0.00176310539245605 0.0 0.0 0.0 807
+808 0.00176811218261719 0.0 0.0 0.0 808
+809 0.00174808502197266 0.0 0.0 0.0 809
+810 0.00175714492797852 0.00999999999999801 0.00999999999999801 0.0 810
+811 0.00174784660339355 0.0 0.0 0.0 811
+812 0.00178885459899902 0.0 0.0 0.0 812
+813 0.00174999237060547 0.0 0.0 0.0 813
+814 0.00176811218261719 0.0 0.0 0.0 814
+815 0.00174999237060547 0.0 0.0 0.0 815
+816 0.00175595283508301 0.0100000000000016 0.0100000000000016 0.0 816
+817 0.00176000595092773 0.0 0.0 0.0 817
+818 0.00177288055419922 0.0 0.0 0.0 818
+819 0.00176095962524414 0.0 0.0 0.0 819
+820 0.0017390251159668 0.0 0.0 0.0 820
+821 0.00179696083068848 0.0 0.0 0.0 821
+822 0.00174283981323242 0.0100000000000016 0.0100000000000016 0.0 822
+823 0.00174713134765625 0.0 0.0 0.0 823
+824 0.00175189971923828 0.0 0.0 0.0 824
+825 0.00175094604492188 0.0 0.0 0.0 825
+826 0.00173616409301758 0.0 0.0 0.0 826
+827 0.00174093246459961 0.00999999999999801 0.00999999999999801 0.0 827
+828 0.00174617767333984 0.0 0.0 0.0 828
+829 0.00174188613891602 0.0 0.0 0.0 829
+830 0.00173592567443848 0.0 0.0 0.0 830
+831 0.0017240047454834 0.0 0.0 0.0 831
+832 0.00176095962524414 0.0 0.0 0.0 832
+833 0.00174713134765625 0.0100000000000016 0.0100000000000016 0.0 833
+834 0.00175094604492188 0.0 0.0 0.0 834
+835 0.00173807144165039 0.0 0.0 0.0 835
+836 0.00176715850830078 0.0 0.0 0.0 836
+837 0.00174093246459961 0.0 0.0 0.0 837
+838 0.00176000595092773 0.00999999999999801 0.00999999999999801 0.0 838
+839 0.00174498558044434 0.0 0.0 0.0 839
+840 0.00174689292907715 0.0 0.0 0.0 840
+841 0.00177502632141113 0.0 0.0 0.0 841
+842 0.00175309181213379 0.0 0.0 0.0 842
+843 0.00175213813781738 0.0 0.0 0.0 843
+844 0.00175905227661133 0.0100000000000016 0.0100000000000016 0.0 844
+845 0.0017249584197998 0.0 0.0 0.0 845
+846 0.00174999237060547 0.0 0.0 0.0 846
+847 0.00175309181213379 0.0 0.0 0.0 847
+848 0.00177311897277832 0.0 0.0 0.0 848
+849 0.00175309181213379 0.00999999999999801 0.00999999999999801 0.0 849
+850 0.00175595283508301 0.0 0.0 0.0 850
+851 0.0253610610961914 0.0200000000000031 0.0200000000000031 0.0 851
+852 0.0018308162689209 0.0 0.0 0.0 852
+853 0.00182509422302246 0.00999999999999801 0.00999999999999801 0.0 853
+854 0.00179100036621094 0.0 0.0 0.0 854
+855 0.0018000602722168 0.0 0.0 0.0 855
+856 0.00175809860229492 0.0 0.0 0.0 856
+857 0.00182390213012695 0.0 0.0 0.0 857
+858 0.00175285339355469 0.0100000000000016 0.0100000000000016 0.0 858
+859 0.00172996520996094 0.0 0.0 0.0 859
+860 0.00173521041870117 0.0 0.0 0.0 860
+861 0.00176787376403809 0.0 0.0 0.0 861
+862 0.00175380706787109 0.0 0.0 0.0 862
+863 0.00174999237060547 0.0 0.0 0.0 863
+864 0.00177502632141113 0.00999999999999801 0.00999999999999801 0.0 864
+865 0.0017549991607666 0.0 0.0 0.0 865
+866 0.00175905227661133 0.0 0.0 0.0 866
+867 0.00177693367004395 0.0 0.0 0.0 867
+868 0.00178217887878418 0.0 0.0 0.0 868
+869 0.00177478790283203 0.0100000000000016 0.0100000000000016 0.0 869
+870 0.00176405906677246 0.0 0.0 0.0 870
+871 0.00176191329956055 0.0 0.0 0.0 871
+872 0.00175213813781738 0.0 0.0 0.0 872
+873 0.00175690650939941 0.0 0.0 0.0 873
+874 0.00174093246459961 0.0 0.0 0.0 874
+875 0.0017399787902832 0.00999999999999801 0.00999999999999801 0.0 875
+876 0.00173616409301758 0.0 0.0 0.0 876
+877 0.00174808502197266 0.0 0.0 0.0 877
+878 0.0017390251159668 0.0 0.0 0.0 878
+879 0.00174403190612793 0.0 0.0 0.0 879
+880 0.00173091888427734 0.0 0.0 0.0 880
+881 0.00175786018371582 0.0100000000000016 0.0100000000000016 0.0 881
+882 0.00173306465148926 0.0 0.0 0.0 882
+883 0.0017399787902832 0.0 0.0 0.0 883
+884 0.00173783302307129 0.0 0.0 0.0 884
+885 0.00172281265258789 0.0 0.0 0.0 885
+886 0.00175690650939941 0.0 0.0 0.0 886
+887 0.00173497200012207 0.00999999999999801 0.00999999999999801 0.0 887
+888 0.00175094604492188 0.0 0.0 0.0 888
+889 0.00172090530395508 0.0 0.0 0.0 889
+890 0.00198698043823242 0.0 0.0 0.0 890
+891 0.00344991683959961 0.0100000000000016 0.0100000000000016 0.0 891
+892 0.00345301628112793 0.0 0.0 0.0 892
+893 0.00206422805786133 0.0 0.0 0.0 893
+894 0.00191783905029297 0.0 0.0 0.0 894
+895 0.00174188613891602 0.0 0.0 0.0 895
+896 0.00173401832580566 0.0100000000000016 0.0100000000000016 0.0 896
+897 0.00175094604492188 0.0 0.0 0.0 897
+898 0.00176310539245605 0.0 0.0 0.0 898
+899 0.00176095962524414 0.0 0.0 0.0 899
+900 0.00181198120117188 0.0 0.0 0.0 900
+901 0.00175094604492188 0.00999999999999801 0.00999999999999801 0.0 901
+902 0.00177597999572754 0.0 0.0 0.0 902
+903 0.0245981216430664 0.0199999999999996 0.0199999999999996 0.0 903
+904 0.00182318687438965 0.0 0.0 0.0 904
+905 0.00179600715637207 0.0100000000000016 0.0100000000000016 0.0 905
+906 0.00179409980773926 0.0 0.0 0.0 906
+907 0.00178408622741699 0.0 0.0 0.0 907
+908 0.00177407264709473 0.0 0.0 0.0 908
+909 0.00176501274108887 0.0 0.0 0.0 909
+910 0.00176596641540527 0.0 0.0 0.0 910
+911 0.00175595283508301 0.00999999999999801 0.00999999999999801 0.0 911
+912 0.00176596641540527 0.0 0.0 0.0 912
+913 0.00176501274108887 0.0 0.0 0.0 913
+914 0.00175809860229492 0.0 0.0 0.0 914
+915 0.00176405906677246 0.0 0.0 0.0 915
+916 0.00176191329956055 0.0100000000000016 0.0100000000000016 0.0 916
+917 0.00175619125366211 0.0 0.0 0.0 917
+918 0.00175690650939941 0.0 0.0 0.0 918
+919 0.00175189971923828 0.0 0.0 0.0 919
+920 0.0017540454864502 0.0 0.0 0.0 920
+921 0.0017540454864502 0.0 0.0 0.0 921
+922 0.00176119804382324 0.00999999999999801 0.00999999999999801 0.0 922
+923 0.00176095962524414 0.0 0.0 0.0 923
+924 0.00176215171813965 0.0 0.0 0.0 924
+925 0.00173592567443848 0.0 0.0 0.0 925
+926 0.00174307823181152 0.0 0.0 0.0 926
+927 0.00173401832580566 0.0100000000000016 0.0100000000000016 0.0 927
+928 0.00174999237060547 0.0 0.0 0.0 928
+929 0.0017399787902832 0.0 0.0 0.0 929
+930 0.0017399787902832 0.0 0.0 0.0 930
+931 0.00177502632141113 0.0 0.0 0.0 931
+932 0.00175309181213379 0.0 0.0 0.0 932
+933 0.00174713134765625 0.0100000000000016 0.0100000000000016 0.0 933
+934 0.00172519683837891 0.0 0.0 0.0 934
+935 0.00182008743286133 0.0 0.0 0.0 935
+936 0.00175094604492188 0.0 0.0 0.0 936
+937 0.00175213813781738 0.0 0.0 0.0 937
+938 0.0017549991607666 0.00999999999999801 0.00999999999999801 0.0 938
+939 0.00175881385803223 0.0 0.0 0.0 939
+940 0.00176215171813965 0.0 0.0 0.0 940
+941 0.00270485877990723 0.0 0.0 0.0 941
+942 0.00175213813781738 0.0 0.0 0.0 942
+943 0.0017399787902832 0.0100000000000016 0.0100000000000016 0.0 943
+944 0.00174307823181152 0.0 0.0 0.0 944
+945 0.00173497200012207 0.0 0.0 0.0 945
+946 0.00174999237060547 0.0 0.0 0.0 946
+947 0.00175690650939941 0.0 0.0 0.0 947
+948 0.00176095962524414 0.0 0.0 0.0 948
+949 0.00173807144165039 0.00999999999999801 0.00999999999999801 0.0 949
+950 0.00175690650939941 0.0 0.0 0.0 950
+951 0.0017390251159668 0.0 0.0 0.0 951
+952 0.00178313255310059 0.0 0.0 0.0 952
+953 0.00176692008972168 0.0 0.0 0.0 953
+954 0.00176501274108887 0.0 0.0 0.0 954
+955 0.0254151821136475 0.0199999999999996 0.0199999999999996 0.0 955
+956 0.0018460750579834 0.0 0.0 0.0 956
+957 0.00177717208862305 0.0 0.0 0.0 957
+958 0.00177192687988281 0.0100000000000016 0.0100000000000016 0.0 958
+959 0.00177407264709473 0.0 0.0 0.0 959
+960 0.00177311897277832 0.0 0.0 0.0 960
+961 0.00176906585693359 0.0 0.0 0.0 961
+962 0.00176501274108887 0.0 0.0 0.0 962
+963 0.00174212455749512 0.00999999999999801 0.00999999999999801 0.0 963
+964 0.00176310539245605 0.0 0.0 0.0 964
+965 0.00176095962524414 0.0 0.0 0.0 965
+966 0.00175905227661133 0.0 0.0 0.0 966
+967 0.00174999237060547 0.0 0.0 0.0 967
+968 0.00176811218261719 0.0 0.0 0.0 968
+969 0.00175189971923828 0.0100000000000016 0.0100000000000016 0.0 969
+970 0.00194287300109863 0.0 0.0 0.0 970
+971 0.0017540454864502 0.0 0.0 0.0 971
+972 0.0019228458404541 0.0 0.0 0.0 972
+973 0.00176405906677246 0.0 0.0 0.0 973
+974 0.0017549991607666 0.00999999999999801 0.00999999999999801 0.0 974
+975 0.00176310539245605 0.0 0.0 0.0 975
+976 0.00173807144165039 0.0 0.0 0.0 976
+977 0.00182604789733887 0.0 0.0 0.0 977
+978 0.0017399787902832 0.0 0.0 0.0 978
+979 0.0017540454864502 0.0 0.0 0.0 979
+980 0.0017697811126709 0.0100000000000016 0.0100000000000016 0.0 980
+981 0.0017390251159668 0.0 0.0 0.0 981
+982 0.00175285339355469 0.0 0.0 0.0 982
+983 0.00174880027770996 0.0 0.0 0.0 983
+984 0.00176095962524414 0.0 0.0 0.0 984
+985 0.00176501274108887 0.00999999999999801 0.00999999999999801 0.0 985
+986 0.00175094604492188 0.0 0.0 0.0 986
+987 0.0017390251159668 0.0 0.0 0.0 987
+988 0.00174808502197266 0.0 0.0 0.0 988
+989 0.0017540454864502 0.0 0.0 0.0 989
+990 0.00174307823181152 0.0 0.0 0.0 990
+991 0.00172710418701172 0.0100000000000016 0.0100000000000016 0.0 991
+992 0.00177597999572754 0.0 0.0 0.0 992
+993 0.00174903869628906 0.0 0.0 0.0 993
+994 0.0017402172088623 0.0 0.0 0.0 994
+995 0.00173187255859375 0.0 0.0 0.0 995
+996 0.00175690650939941 0.0 0.0 0.0 996
+997 0.00175213813781738 0.00999999999999801 0.00999999999999801 0.0 997
+998 0.0017549991607666 0.0 0.0 0.0 998
+999 0.00175094604492188 0.0 0.0 0.0 999
+1000 0.00175905227661133 0.0 0.0 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log
new file mode 100644
index 000000000..47b0c7fa8
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log
@@ -0,0 +1,261 @@
+========================== 2009-04-01T16:53:42 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'GeneratorBenchmarkExt' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+GeneratorBenchmarkExt#generator_fast:
+ real total user system
+sum 1.818191528 1.840000000 1.830000000 0.010000000
+min 0.001368999 0.000000000 0.000000000 0.000000000
+std- -0.000870656 -0.002702580 -0.002705600 -0.000306228
+mean 0.001818192 0.001840000 0.001830000 0.000010000
+std+ 0.004507039 0.006382580 0.006365600 0.000326228
+max 0.026389122 0.030000000 0.030000000 0.010000000
+std 0.002688848 0.004542580 0.004535600 0.000316228
+std% 147.885830391 246.879359662 247.847020509 3162.277660168
+harm 0.001475231 nan nan nan
+geo 0.001529059 0.000000000 0.000000000 0.000000000
+q1 0.001397133 0.000000000 0.000000000 0.000000000
+med 0.001406908 0.000000000 0.000000000 0.000000000
+q3 0.001425028 0.000000000 0.000000000 0.000000000
+ 1000 549.99706 0.001818192
+ calls calls/sec secs/call
+
+ 0.02514 -|
+ 0.02264 -|*
+ 0.02013 -|
+ 0.01763 -|
+ 0.01513 -|
+ 0.01263 -|
+ 0.01013 -|
+ 0.00762 -|
+ 0.00512 -|
+ 0.00262 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00141, iqr=0.00003, factor=3.00):
+high=63 very_high=132
+
+Ljung-Box statistics: q=15.00353 (alpha=0.05, df=50).
+0.00000 < 0.95000 => No autocorrelation was detected.
+
+GeneratorBenchmarkExt#generator_fast:
+ real total user system
+sum 1.826970100 1.830000000 1.820000000 0.010000000
+min 0.001377106 0.000000000 0.000000000 0.000000000
+std- -0.000992693 -0.002749527 -0.002708588 -0.000306228
+mean 0.001826970 0.001830000 0.001820000 0.000010000
+std+ 0.004646633 0.006409527 0.006348588 0.000326228
+max 0.027617931 0.030000000 0.030000000 0.010000000
+std 0.002819663 0.004579527 0.004528588 0.000316228
+std% 154.335471491 250.247404066 248.823509412 3162.277660168
+harm 0.001469225 nan nan nan
+geo 0.001522946 0.000000000 0.000000000 0.000000000
+q1 0.001402140 0.000000000 0.000000000 0.000000000
+med 0.001411915 0.000000000 0.000000000 0.000000000
+q3 0.001425982 0.000000000 0.000000000 0.000000000
+ 1000 547.35433 0.001826970
+ calls calls/sec secs/call
+
+ 0.02631 -|
+ 0.02368 -|*
+ 0.02106 -|
+ 0.01843 -|
+ 0.01581 -|
+ 0.01319 -|
+ 0.01056 -|
+ 0.00794 -|
+ 0.00531 -|
+ 0.00269 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00141, iqr=0.00002, factor=3.00):
+high=84 very_high=91
+
+Ljung-Box statistics: q=13.47105 (alpha=0.05, df=50).
+0.00000 < 0.95000 => No autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+-------------------------------------------------------------------------------
+
+This first run is only for warmup.
+GeneratorBenchmarkExt#generator_pretty:
+ real total user system
+sum 2.625656843 2.590000000 2.580000000 0.010000000
+min 0.002025127 0.000000000 0.000000000 0.000000000
+std- -0.000656844 -0.002684440 -0.002689855 -0.000306228
+mean 0.002625657 0.002590000 0.002580000 0.000010000
+std+ 0.005908158 0.007864440 0.007849855 0.000326228
+max 0.028638124 0.030000000 0.030000000 0.010000000
+std 0.003282501 0.005274440 0.005269855 0.000316228
+std% 125.016381076 203.646340853 204.257944451 3162.277660168
+harm 0.002154247 nan nan nan
+geo 0.002239052 0.000000000 0.000000000 0.000000000
+q1 0.002051830 0.000000000 0.000000000 0.000000000
+med 0.002062082 0.000000000 0.000000000 0.000000000
+q3 0.002082050 0.000000000 0.000000000 0.000000000
+ 1000 380.85708 0.002625657
+ calls calls/sec secs/call
+
+ 0.02731 -|
+ 0.02465 -|*
+ 0.02198 -|
+ 0.01932 -|
+ 0.01666 -|
+ 0.01400 -|
+ 0.01134 -|
+ 0.00868 -|
+ 0.00602 -|
+ 0.00336 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00206, iqr=0.00003, factor=3.00):
+high=98 very_high=107
+
+Ljung-Box statistics: q=349.53704 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+GeneratorBenchmarkExt#generator_pretty:
+ real total user system
+sum 2.399331093 2.360000000 2.360000000 0.000000000
+min 0.002033949 0.000000000 0.000000000 0.000000000
+std- -0.000767217 -0.002736080 -0.002736080 0.000000000
+mean 0.002665923 0.002622222 0.002622222 0.000000000
+std+ 0.006099064 0.007980525 0.007980525 0.000000000
+max 0.029814005 0.030000000 0.030000000 0.000000000
+std 0.003433140 0.005358303 0.005358303 0.000000000
+std% 128.778658745 204.342051806 204.342051806 nan
+harm 0.002164550 nan nan nan
+geo 0.002253865 0.000000000 0.000000000 0.000000000
+q1 0.002059937 0.000000000 0.000000000 0.000000000
+med 0.002071142 0.000000000 0.000000000 0.000000000
+q3 0.002090931 0.000000000 0.000000000 0.000000000
+ 900 375.10455 0.002665923
+ calls calls/sec secs/call
+
+ 0.02843 -|
+ 0.02565 -|*
+ 0.02287 -|
+ 0.02009 -|
+ 0.01731 -|
+ 0.01453 -|
+ 0.01176 -|
+ 0.00898 -|
+ 0.00620 -|
+ 0.00342 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00207, iqr=0.00003, factor=3.00):
+high=89 very_high=86
+
+Ljung-Box statistics: q=342.52637 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+Truncated initial 100 measurements: 1000 -> 900 (-10.00%).
+-------------------------------------------------------------------------------
+
+This first run is only for warmup.
+GeneratorBenchmarkExt#generator_safe:
+ real total user system
+sum 2.218419790 2.210000000 2.210000000 0.000000000
+min 0.001708984 0.000000000 0.000000000 0.000000000
+std- -0.000607850 -0.002484458 -0.002484458 0.000000000
+mean 0.002218420 0.002210000 0.002210000 0.000000000
+std+ 0.005044690 0.006904458 0.006904458 0.000000000
+max 0.026993036 0.030000000 0.030000000 0.000000000
+std 0.002826270 0.004694458 0.004694458 0.000000000
+std% 127.400134370 212.418923782 212.418923782 nan
+harm 0.001839661 nan nan nan
+geo 0.001909029 0.000000000 0.000000000 0.000000000
+q1 0.001738071 0.000000000 0.000000000 0.000000000
+med 0.001749992 0.000000000 0.000000000 0.000000000
+q3 0.001769066 0.000000000 0.000000000 0.000000000
+ 1000 450.77131 0.002218420
+ calls calls/sec secs/call
+
+ 0.02573 -|
+ 0.02320 -|
+ 0.02067 -|
+ 0.01814 -|
+ 0.01562 -|
+ 0.01309 -|
+ 0.01056 -|
+ 0.00803 -|
+ 0.00550 -|
+ 0.00297 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00175, iqr=0.00003, factor=3.00):
+high=58 very_high=129
+
+Ljung-Box statistics: q=24.03262 (alpha=0.05, df=50).
+0.00070 < 0.95000 => No autocorrelation was detected.
+
+GeneratorBenchmarkExt#generator_safe:
+ real total user system
+sum 2.252413511 2.250000000 2.250000000 0.000000000
+min 0.001720905 0.000000000 0.000000000 0.000000000
+std- -0.000940042 -0.002634809 -0.002634809 0.000000000
+mean 0.002252414 0.002250000 0.002250000 0.000000000
+std+ 0.005444869 0.007134809 0.007134809 0.000000000
+max 0.030152082 0.030000000 0.030000000 0.000000000
+std 0.003192455 0.004884809 0.004884809 0.000000000
+std% 141.734856492 217.102633117 217.102633117 nan
+harm 0.001827244 nan nan nan
+geo 0.001895755 0.000000000 0.000000000 0.000000000
+q1 0.001747131 0.000000000 0.000000000 0.000000000
+med 0.001757145 0.000000000 0.000000000 0.000000000
+q3 0.001773119 0.000000000 0.000000000 0.000000000
+ 1000 443.96821 0.002252414
+ calls calls/sec secs/call
+
+ 0.02873 -|
+ 0.02589 -|*
+ 0.02304 -|
+ 0.02020 -|
+ 0.01736 -|
+ 0.01451 -|
+ 0.01167 -|
+ 0.00883 -|
+ 0.00599 -|
+ 0.00314 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00176, iqr=0.00003, factor=3.00):
+high=92 very_high=86
+
+Ljung-Box statistics: q=19.23732 (alpha=0.05, df=50).
+0.00003 < 0.95000 => No autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:54:07 CEST ===========================
+
+Comparing times (call_time_mean):
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+ 547.354332608 ( real) -> 1.459x
+ 0.001826970
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+ 443.968212317 ( real) -> 1.184x
+ 0.002252414
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+ 375.104545883 ( real) -> 1.000x
+ 0.002665923
+ calls/sec ( time) -> speed covers
+ secs/call
+
+Comparing times (call_time_median):
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+ 708.258020939 ( real) -> 1.467x
+ 0.001411915
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+ 569.105020353 ( real) -> 1.179x
+ 0.001757145
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+ 482.825371244 ( real) -> 1.000x
+ 0.002071142
+ calls/sec ( time) -> speed covers
+ secs/call
+===============================================================================
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_fast.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat'.
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_pretty.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat'.
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_safe.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat'.
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat
new file mode 100644
index 000000000..39516bce4
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.170725652741942
+3 -0.173770301666704
+4 -0.172897166156851
+5 -0.168221269286136
+6 -0.177979259169647
+7 0.175910550703494
+8 0.631061265876843
+9 -0.174719948437131
+10 -0.177293593621048
+11 -0.162698942321747
+12 -0.171029777522503
+13 -0.170296229667321
+14 0.528563135577363
+15 0.275831998572987
+16 -0.174813658667011
+17 -0.172093562954041
+18 -0.168544068156987
+19 -0.166590813818547
+20 -0.0638221070309873
+21 0.650522478992019
+22 0.0331509662336747
+23 -0.168760953941647
+24 -0.16341752594627
+25 -0.170818893187341
+26 -0.164732529292879
+27 0.162214061245849
+28 0.522886471249678
+29 -0.0702164490631389
+30 -0.170342702198113
+31 -0.161403416617991
+32 -0.166099481459981
+33 -0.11599356123736
+34 0.35515929301799
+35 0.320772083044373
+36 -0.117685112181583
+37 -0.169070189028916
+38 -0.159958239256153
+39 -0.159435335479438
+40 0.0319527022003592
+41 0.371475859420178
+42 0.175271663512744
+43 -0.138959890894007
+44 -0.163896984335847
+45 -0.169727435298396
+46 -0.13197665874304
+47 0.187359182943715
+48 0.291819477747683
+49 0.0816643898170594
+50 -0.150240775423654
+51 -0.150195661024305
+52 -0.165928012119222
+53 -0.0320978556096035
+54 0.221655302405546
+55 0.235675757438344
+56 0.0104091592019151
+57 -0.167146434535141
+58 -0.155117513175394
+59 -0.149297587622335
+60 0.0872938227826692
+61 0.203748825546551
+62 0.168550083168428
+63 -0.0396707902562578
+64 -0.158563031820387
+65 -0.159836689037633
+66 -0.0768666234623447
+67 0.148975157851596
+68 0.145123374753783
+69 0.133851392533958
+70 -0.0813691125651875
+71 -0.161000844437348
+72 -0.154719980109192
+73 0.0319631482416382
+74 0.130803526405489
+75 0.134803263091346
+76 0.0725284180216342
+77 -0.105199055037918
+78 -0.156074876537289
+79 -0.107946871185683
+80 0.0836764513383004
+81 0.114802110172454
+82 0.120184125868115
+83 0.0219557508902663
+84 -0.126340081403489
+85 -0.161799956489859
+86 -0.0125672540754974
+87 0.0971048482927368
+88 0.0787545812186751
+89 0.0948238873807684
+90 0.000719292583179628
+91 -0.14238726433046
+92 -0.123547942883664
+93 0.045691368088177
+94 0.0816329437452033
+95 0.0514248553628602
+96 0.079680652824934
+97 -0.0425865734879474
+98 -0.149657706603128
+99 -0.0482568721456359
+100 0.0598246932377812
+101 0.0730073630022969
+102 0.0493194581087269
+103 0.0614638905886062
+104 -0.0747784996077696
+105 -0.134762851026629
+106 0.0150375208487961
+107 0.0471753592749379
+108 0.0292261702954045
+109 0.0584126489508255
+110 0.0274065618881429
+111 -0.0923629805791867
+112 -0.0808051188610178
+113 0.0376068323578018
+114 0.0442243395389739
+115 0.0126091810820727
+116 0.0555017080552345
+117 -0.00777360178104387
+118 -0.0945093162279043
+119 -0.022038518955775
+120 0.0281685224822615
+121 0.0360696788220002
+122 0.00713767841566683
+123 0.0421452289712879
+124 -0.0237791430411877
+125 -0.0742603410791366
+126 0.00647409977150723
+127 0.023633020622411
+128 0.0112812718354579
+129 0.0206308476010651
+130 0.0255893471032846
+131 -0.0412520741546623
+132 -0.0335271150442982
+133 0.0103042519486441
+134 0.0216752613460992
+135 -0.0178133510217017
+136 0.0272498700028734
+137 0.016136487618036
+138 -0.0397127191558659
+139 0.000486023489007977
+140 0.00602879598312952
+141 0.0137117482424303
+142 -0.0239000113030396
+143 0.0256815555012877
+144 -0.00060378060179975
+145 -0.00976477458386044
+146 -0.00471952290156136
+147 0.00287226670988194
+148 -0.00739404113874663
+149 -0.00811924231656889
+150 0.0201609109752059
+151 0.00972768702895235
+152 0.000848772862832347
+153 -0.00315419376588145
+154 0.00325411212387319
+155 -0.0317897669469223
+156 0.00942578451848677
+157 -0.00114487370622857
+158 0.0316193613529631
+159 -0.0029035071383654
+160 -0.00961310004099253
+161 -0.00376402041194372
+162 -0.0304203576913082
+163 0.0040586071587507
+164 0.0181183011617105
+165 0.0289277830257262
+166 -0.00204748582187099
+167 -0.00833532939960483
+168 -0.0179545373314343
+169 -0.0281067596140224
+170 0.00621739022305282
+171 0.020061720611003
+172 0.0441951153685219
+173 -0.016767863675634
+174 -0.00891142478547904
+175 -0.034295757242845
+176 -0.016919846890981
+177 0.00444867679830856
+178 0.057088732705068
+179 0.01772144393744
+180 -0.0115305384915719
+181 -0.0214068916539082
+182 -0.0361142387382199
+183 -0.013268832313842
+184 0.010553526981677
+185 0.0641530212355029
+186 0.00531141736458679
+187 -0.0129434128279975
+188 -0.0288767748585849
+189 -0.0325395473006688
+190 -0.013236712565576
+191 0.0408115115996002
+192 0.0564202212852658
+193 -0.00419580869937261
+194 -0.0240043584548271
+195 -0.0410661026884763
+196 -0.0308430649531645
+197 -0.00193671234656414
+198 0.0574028584211738
+199 0.0464705207875104
+200 0.00131591241415564
+201 -0.0376248928893234
+202 -0.03907610654102
+203 -0.0270477565328025
+204 0.0208038841462715
+205 0.0713903559954449
+206 0.0172971300646441
+207 -0.0158722320069745
+208 -0.0368888763339713
+209 -0.0453718730430625
+210 -0.0217822862730174
+211 0.0539702430257461
+212 0.0523602401531812
+213 0.0209143114178913
+214 -0.0355801431609542
+215 -0.0377942204568278
+216 -0.0425711559012913
+217 -0.00707645512821953
+218 0.0728667936636181
+219 0.0361207184120543
+220 0.0128571335027956
+221 -0.0500603421741668
+222 -0.0391402365626237
+223 -0.0338696993621202
+224 0.0225822360602949
+225 0.0582954334884232
+226 0.0343772287798159
+227 0.000189606884889642
+228 -0.0526391089870516
+229 -0.0433107479511685
+230 -0.0222872074614468
+231 0.0506022312295133
+232 0.0475294709603697
+233 0.033409950599465
+234 -0.0396552908405006
+235 -0.0416731652109144
+236 -0.0376644416284466
+237 -0.0120295884760736
+238 0.0667676774080548
+239 0.0397241548411963
+240 0.0242686882994478
+241 -0.0511926472771689
+242 -0.0406717091383664
+243 -0.0294526606762824
+244 0.0122100601151817
+245 0.0582087173478016
+246 0.0279608706883549
+247 0.00958023333135808
+248 -0.0607734282446654
+249 -0.0326785608605117
+250 -0.0170207233666544
+251 0.0461938078567918
+252 0.0336445218462931
+253 0.0452208779230127
+254 -0.0303944318761255
+255 -0.0494219498376225
+256 -0.0318543144076625
+257 -0.00927701052965794
+258 0.0537742147750351
+259 0.0349392754231259
+260 0.0230828975637977
+261 -0.0377907249695523
+262 -0.0429055961196646
+263 -0.017728080300272
+264 0.000424042692478759
+265 0.0472551057914617
+266 0.0405778077745205
+267 -0.00156836352007451
+268 -0.0419460412931724
+269 -0.0345431630170736
+270 -0.0143420878981143
+271 0.0187023906658354
+272 0.0418900285241672
+273 0.0405074017275708
+274 -0.0190108947516174
+275 -0.0546041853190452
+276 -0.0171268537791246
+277 -0.0128446606789693
+278 0.0395381045567008
+279 0.0310776255240069
+280 0.0407363391562478
+281 -0.033091514570131
+282 -0.0503175108683564
+283 -0.022772349202314
+284 0.00530849685544454
+285 0.0324464330192744
+286 0.0465351961365909
+287 -0.00328476076139341
+288 -0.0300758395541426
+289 -0.0371777756744481
+290 -0.00431509980873169
+291 0.00608435003025785
+292 0.037638330575397
+293 0.0407716145244858
+294 -0.0176308532927816
+295 -0.0455722533058368
+296 -0.0254868606225217
+297 -0.00176448336443634
+298 0.015401834338667
+299 0.0470736363973921
+300 0.0286385461989055
+301 -0.02407787658874
+302 -0.0462179062100874
+303 -0.00954285257082467
+304 0.00223496307580496
+305 0.019441609399508
+306 0.0376394897901893
+307 0.0152437430866642
+308 -0.0312285316173427
+309 -0.0450095093247238
+310 0.00405494429487151
+311 -0.000906366188112425
+312 0.0342390932524035
+313 0.0351096044622525
+314 -0.0067200598875223
+315 -0.0344931951944617
+316 -0.0250051604191116
+317 -0.0079099140627721
+318 0.0136877534761663
+319 0.0470111495216969
+320 0.004066298860697
+321 -0.0106091011767897
+322 -0.035535335618417
+323 -0.00900628798721377
+324 -0.00437923810369414
+325 0.0183021198298254
+326 0.031707051659253
+327 0.0156128127338416
+328 -0.0272783407707802
+329 -0.036001647799748
+330 0.00528671926612521
+331 -0.000290217242915226
+332 0.0353019065669182
+333 0.00464723527656522
+334 0.00460168685380347
+335 -0.0215595994261557
+336 -0.0299493415452654
+337 -0.0034698093249361
+338 0.0165266322772037
+339 0.0315139059204056
+340 0.00362648192318334
+341 -0.00491801854061831
+342 -0.0231228284017189
+343 -0.0113129015126025
+344 -0.00300665710172655
+345 0.0130130997144332
+346 0.0223950145161189
+347 0.00202583064367953
+348 -0.0102668124711821
+349 -0.0253546874115718
+350 0.00644442693633731
+351 0.000780453480952724
+352 0.0284887918984724
+353 -0.00595281685205509
+354 0.0120132555793013
+355 -0.0181922031950026
+356 -0.0248881070928514
+357 -0.00242385809089605
+358 0.0194092079332272
+359 0.0144215071404531
+360 0.00612726395169545
+361 -0.00573485213524349
+362 -0.0117678537517965
+363 -0.0132866019915077
+364 -0.00168434348341747
+365 0.0210258042234829
+366 0.00299710982573773
+367 7.02933284912932e-05
+368 -0.00141527364094497
+369 -0.0174837658027455
+370 -0.00530972905386562
+371 0.00289284688712308
+372 0.0269088067868297
+373 -0.00857711045394559
+374 0.000634286012527533
+375 -0.00732827217084004
+376 -0.0129999392900683
+377 -0.00620543176764517
+378 0.0219005305671357
+379 0.00951579849769713
+380 -0.00156577259219444
+381 0.00334210346592974
+382 -0.0168913201522477
+383 -0.0140750807027531
+384 0.0026387459171992
+385 0.0167243976144324
+386 0.000401824368635554
+387 0.00494540377378665
+388 -0.0079650110757071
+389 -0.000153543070488744
+390 -0.0157596554184165
+391 0.00960203655959764
+392 0.0194333180320067
+393 -0.00698081626697105
+394 -0.00616259455878436
+395 -0.00885431917148208
+396 -0.000823472402578178
+397 -0.014306329807885
+398 0.0323044170275812
+399 -0.00116363767533424
+400 -0.00613094977576676
+401 0.00681272285172057
+402 -0.0120741370386856
+403 -0.00393525989936848
+404 0.00143625779594446
+405 0.0112941876899105
+406 0.00621416024416119
+407 -0.00715834709108978
+408 0.00349330341606058
+409 -0.0134328785266322
+410 -0.00983212957457947
+411 0.0170214269071715
+412 0.00768534801684557
+413 -0.00433253762066253
+414 0.00328760101068126
+415 -0.011902725027492
+416 0.0037433377806999
+417 -0.016429583975757
+418 0.0253614932452271
+419 0.00105507602999118
+420 -0.00501259523808327
+421 -0.0068805657075317
+422 -0.00611319813056072
+423 0.00133925647011242
+424 0.000593265112355031
+425 0.00636014210120566
+426 0.0100866038838847
+427 -0.0104562933845484
+428 -0.000506041760930212
+429 -0.003202190801565
+430 -0.00228403340255738
+431 0.00854908376124406
+432 0.00387003653786829
+433 -0.00478285696403202
+434 -0.00768626474153872
+435 0.00703888513154693
+436 -0.00944179389034701
+437 -0.001876043961929
+438 0.0164444486588937
+439 0.00420632904477211
+440 -0.0113129379390227
+441 -0.00359559614450257
+442 -0.00109952765661056
+443 0.0151360003108556
+444 -0.0154475593718288
+445 0.00602211025479499
+446 -0.000307234590538632
+447 0.0046588142745641
+448 -0.0126455787204799
+449 0.0111520432278555
+450 0.00974700164306953
+451 -0.0123611400743472
+452 0.0108946760123822
+453 -0.00120669950156729
+454 -0.0150988572259806
+455 0.00502353890121031
+456 0.00408149023215052
+457 0.00586521360666165
+458 -0.0102923932626118
+459 0.00382025608487933
+460 0.00255550573549941
+461 -0.00783828310549662
+462 0.00508824500063238
+463 0.0084446428666135
+464 -0.00872612495616409
+465 -0.0010875359595666
+466 0.00346175022973811
+467 -0.00495327642022978
+468 0.00325169084183052
+469 -0.00463312556182376
+470 0.0118854909647327
+471 -0.0171003407134582
+472 0.0123260637207544
+473 -0.00447510748083252
+474 -0.00707845418496072
+475 0.00755386113965643
+476 -0.00100076346057804
+477 0.00860719536195919
+478 -0.0136737162109966
+479 0.00711613796353955
+480 0.00622875998269613
+481 -0.0117802696216559
+482 0.00817288034030646
+483 -0.00010669129241017
+484 -0.00352870547469094
+485 -0.0041443261121201
+486 -0.000910571304832122
+487 0.00615718849758809
+488 0.00143910833275321
+489 -0.00107559220444337
+490 0.00356082962826646
+491 -0.00897791292059391
+492 0.00527546492556289
+493 0.00302276031439837
+494 -0.0139577905696164
+495 0.0153490659756607
+496 -0.00912850078466119
+497 0.000879808460620783
+498 0.000984936175184538
+499 0.0024123778693579
+500 0.00264304134465302
+501 -0.0020232636751576
+502 0.00551353717784557
+503 -0.00415080354514971
+504 -0.00545916667181435
+505 -0.00274028317951399
+506 0.00692379605051298
+507 0.00616679327772537
+508 -0.0103279571217553
+509 0.00599342336739776
+510 -0.00152316676140798
+511 -0.00167286162288039
+512 -0.00131993101685522
+513 0.0025282491153862
+514 -0.0017542373384818
+515 0.0105600742581342
+516 -0.0132267654750864
+517 0.00283731663919629
+518 -0.00266741199361332
+519 0.00157444027950648
+520 0.00420858755299597
+521 -0.00658258017129261
+522 0.00508600113202915
+523 -0.00598002733029911
+524 -0.000368464512649264
+525 0.00317302663744126
+526 0.00115765014094958
+527 0.00267985546857361
+528 -5.46265185716715e-05
+529 -0.0020009411803283
+530 0.00486700543717424
+531 -0.00895876165620023
+532 -0.00299164146372051
+533 0.00312859041046786
+534 0.00209406747343818
+535 0.00673942768658441
+536 -0.0080409196789959
+537 0.00240456617470404
+538 -0.00873512083231826
+539 0.0131577627923678
+540 -0.00665539290143677
+541 0.00346454545303284
+542 0.0035973446316873
+543 -0.00868085967804022
+544 -0.00333236624454644
+545 -0.000196442609818114
+546 0.00024806978901623
+547 0.00902390850008458
+548 0.00455805912058593
+549 -0.0021927440377309
+550 -0.00266277815142354
+551 -0.00688313353751191
+552 0.00853131376210095
+553 -0.00393842096864295
+554 -0.00523274211550968
+555 0.0169329221829408
+556 -0.0127945093367028
+557 -0.00072480763790979
+558 -0.00747843149724429
+559 0.0098746166146274
+560 -0.00240342067223121
+561 0.00696610332249864
+562 -0.00223635183687814
+563 -0.00541969587447053
+564 0.000337137313027405
+565 -0.00633065126280832
+566 0.00910870585819199
+567 -0.00455095051161683
+568 0.0151312578540391
+569 -0.0138690307629985
+570 0.00185264574846404
+571 -0.00664259858046173
+572 -0.00312306915210339
+573 0.0115985176835154
+574 -0.00759201236341693
+575 0.0123033300962974
+576 -0.0116628565174072
+577 0.00192424927530433
+578 -0.00508184861795511
+579 0.00510239186439487
+580 0.0086553620645795
+581 -0.00172738282515301
+582 -0.0021965366527628
+583 -0.00611685505872929
+584 -0.00193581230608064
+585 -0.00107517411193112
+586 0.00446964598329358
+587 -0.000130069247618965
+588 0.0106723190798826
+589 -0.00893242845988889
+590 -0.00281814645132135
+591 -0.00320913741145263
+592 0.00122039092287541
+593 0.0131068648072679
+594 -0.0156363425833423
+595 0.0163402377490577
+596 -0.0178296060018707
+597 0.00292057772226031
+598 0.0026057160047535
+599 -0.0056620372273394
+600 0.0221246161887441
+601 -0.0124193991673087
+602 0.0116954284234103
+603 -0.0182733365810819
+604 0.00268681939875375
+605 0.000740456981363333
+606 0.00452604181556726
+607 0.00480547630796285
+608 -0.00481203219844089
+609 -0.00358228345456814
+610 0.00284875874479068
+611 -0.00700099168490112
+612 0.00572849008389633
+613 0.0009937821532389
+614 0.00731073451366145
+615 0.00170654591193711
+616 -0.0139804622453969
+617 -0.00443468421233479
+618 0.00531823173567082
+619 -0.00198161915266415
+620 0.0150254959665873
+621 -0.00831801965928389
+622 0.00172646514060601
+623 -0.00862060723221882
+624 -0.00433533060780036
+625 0.00756501714009114
+626 -0.00135836313194754
+627 0.00932877978173298
+628 0.00124802151466854
+629 -0.00395113636252646
+630 -0.00485990513214748
+631 -0.00663176926963557
+632 -0.0010820412567438
+633 0.0133592195871343
+634 -0.00141240259407419
+635 0.00139234037081884
+636 -0.00360777343366459
+637 -0.0045878817789227
+638 -0.00220204565644013
+639 0.00147686629423844
+640 0.00543470252168979
+641 0.0105896351713388
+642 -0.00973902671101576
+643 -0.00668023801257986
+644 -0.00936843265363968
+645 0.0089634651091583
+646 3.84562452729655e-05
+647 0.00384580055961138
+648 0.0229816090537144
+649 -0.0184332961015907
+650 -0.00529759065480934
+651 -0.0066870495503683
+652 0.00225769689469144
+653 0.0102460370689819
+654 0.00338482338024052
+655 0.00379747442016746
+656 -0.00712302572663179
+657 -0.0114322113895202
+658 -0.00273386445516078
+659 0.00553489607050495
+660 0.00837690540674999
+661 0.00940739102513669
+662 -0.0053486413343748
+663 -0.00315193594161813
+664 -0.0105647918156018
+665 -0.00691297631409873
+666 0.0142090509210798
+667 -0.000975698964492755
+668 0.0132255885174397
+669 -0.00325960303321359
+670 -0.006651275593499
+671 -0.0192763045572716
+672 0.00410496738893783
+673 0.00865425824492816
+674 0.0074519049626705
+675 0.00640440261542484
+676 -0.00248884860489984
+677 -0.0175933146891799
+678 -0.00288003343042402
+679 0.00834623453163345
+680 -0.00449041088509132
+681 0.0232105507895105
+682 -0.00534719486763679
+683 -0.00392566304421506
+684 -0.0192148623617993
+685 -0.00286039387718507
+686 0.0169363828012178
+687 -0.00383913263684977
+688 0.0147166901415108
+689 -0.00527685630258491
+690 -0.00534763716897078
+691 -0.013028036623984
+692 0.00109856360189917
+693 0.00429859241906058
+694 0.0110770507839361
+695 0.00389958466319795
+696 -0.00500164744078786
+697 -0.00580430434909617
+698 -0.0175348619428549
+699 0.018367710926664
+700 -0.00285520470226993
+701 0.0191604505372293
+702 -0.00572139870349262
+703 -0.00245556604337348
+704 -0.0107607119705179
+705 -0.00773541821274989
+706 0.00425886688313039
+707 0.00803784819561882
+708 0.0116278126911605
+709 -0.00361748710592387
+710 -0.0039055675458961
+711 -0.0187689003370071
+712 0.00721078757871366
+713 -0.00118844249034332
+714 0.0125434153334007
+715 0.0101599061260829
+716 -0.00351197692479239
+717 -0.0123155660331183
+718 -0.0108643040658882
+719 0.00554949017948381
+720 0.00257600141246878
+721 0.00621936965849692
+722 0.0147249169696155
+723 -0.0117208865566673
+724 -0.0123019859554356
+725 -0.00803010597732602
+726 0.00658862562929511
+727 0.00614064100015319
+728 0.008551217239909
+729 0.0136644617518446
+730 -0.015679112924688
+731 -0.0164762866576538
+732 -0.00450956642363176
+733 0.00672813330266014
+734 0.0163514096475234
+735 0.00144257368405246
+736 0.00632093496019618
+737 -0.0144540308342644
+738 -0.0116512949908104
+739 -0.00303930205795109
+740 0.00684139171029531
+741 0.0157237606456902
+742 0.00173826522952491
+743 0.00162052201072558
+744 -0.0225327170375728
+745 -0.00244349662721446
+746 -0.00369988442043602
+747 0.020606075524278
+748 0.00234950019819143
+749 0.00933962911886964
+750 -0.00497392363419004
+751 -0.0191622234756475
+752 0.00152935854260608
+753 -0.00746413948201927
+754 0.0210618579576008
+755 0.00337450745565617
+756 0.0116901903545899
+757 -0.0211051168455275
+758 -0.0116996994412557
+759 -0.00384503529844727
+760 0.0106920319592258
+761 0.00606434563857974
+762 0.0109288893744588
+763 0.0065913741548423
+764 -0.024843059360248
+765 -0.00145794491644285
+766 -0.015899201893062
+767 0.0293737522747255
+768 0.000429876419139015
+769 0.0117737352022464
+770 -0.011804032635419
+771 -0.0160558691300165
+772 -0.00680765187518244
+773 0.00115856328840688
+774 0.016936256215249
+775 0.00599154100809263
+776 0.00618605288716798
+777 -0.0133717924580297
+778 -0.00856753018227533
+779 -0.0122498868461665
+780 0.0184368989458328
+781 0.00826995605347898
+782 -0.00370110797731906
+783 0.00766740753297887
+784 -0.0106558949199266
+785 -0.0145918234070912
+786 0.00262754124009611
+787 0.00732095805793885
+788 0.0141175867672096
+789 0.000917093953717164
+790 -0.00610693085809193
+791 -0.00263724165375204
+792 -0.0223403739509282
+793 0.0155086188394132
+794 -0.000414907985012158
+795 0.00818366497095633
+796 0.00390922245137539
+797 0.000518897249907908
+798 -0.0114231682864646
+799 -0.0131434185021701
+800 0.0106325516600345
+801 0.00726206049320438
+802 0.011973193565835
+803 -0.0117164916752715
+804 0.00837431504618953
+805 -0.0176484202352301
+806 -0.00242926974706211
+807 0.00617275793654123
+808 0.00157428575173083
+809 0.0140869636480763
+810 -0.00799595335938592
+811 -0.00145797624072917
+812 -0.0163218480242698
+813 0.0102032846601359
+814 0.00334029936869413
+815 0.00596774673469088
+816 -0.00191679139866682
+817 0.00111982507739117
+818 -0.00466131055412295
+819 -0.009977558947507
+820 0.0070518233255565
+821 -0.00235106334091928
+822 0.0135818413020524
+823 -0.0124536640788948
+824 0.00961249011142124
+825 -0.012067111031695
+826 0.000746163532116685
+827 -0.000618612461237987
+828 0.00932264378392892
+829 -0.00138865174580641
+830 -0.0026558878506514
+831 0.0039382752792092
+832 -0.00629021025673958
+833 -0.00703454327061739
+834 0.000852556936383089
+835 0.0170439482297759
+836 -0.0100201779805253
+837 0.00412500179406067
+838 -0.00228249593639731
+839 0.00340179323986006
+840 -0.0152704223182198
+841 0.0106042546349877
+842 0.00124240796525085
+843 0.000187170197715872
+844 -0.00396092509138278
+845 0.00476886425336974
+846 -0.00278502915166355
+847 -0.0105600821274784
+848 0.0187548308543433
+849 -0.0101103834519274
+850 0.00609860589988799
+851 -0.00970023587707483
+852 0.0175534712886796
+853 -0.0150157009573689
+854 0.000240696590543887
+855 0.00334623999363693
+856 0.000756223924502869
+857 -0.0019111813337376
+858 -0.000465320516901212
+859 0.0102121697808577
+860 -0.0119235594699214
+861 -0.000513039517075994
+862 7.13470533304221e-05
+863 0.00602093194270405
+864 -0.00562228912014448
+865 0.00897532104113402
+866 0.00135722877208738
+867 -0.0107137791823794
+868 0.000349804975704247
+869 0.00196275441326171
+870 -0.00207881051818241
+871 -0.00504133443326138
+872 0.01798662824207
+873 -0.00512468690960391
+874 -0.00936398567940176
+875 -0.00350357584735409
+876 0.00844402907196902
+877 -0.00535212289603013
+878 0.00359477004645202
+879 0.0100259050577573
+880 -0.00448613112164086
+881 -0.00772718523343422
+882 -0.00407471844508272
+883 0.00258842651253074
+884 -0.00497542569393132
+885 0.0140374940981116
+886 0.00485938827108293
+887 -0.00522635448674892
+888 -0.00995747147865195
+889 0.00286884969081893
+890 -0.00263726932721365
+891 0.00281869362544293
+892 0.00413911124089107
+893 0.00641299274583358
+894 -0.00461483322781905
+895 -0.00973466510643417
+896 -0.00244121423716433
+897 -0.00187439261201581
+898 0.0167254251905489
+899 -0.00323557017026858
+900 0.0070698910566062
+901 -0.00984192453152891
+902 -0.00745285112891651
+903 -0.00156488511331396
+904 0.00648910969501878
+905 0.00778960101933796
+906 -0.00110773006555918
+907 0.00797123926504478
+908 -0.0172915924405978
+909 -0.00567453921434972
+910 -0.00093198227439079
+911 0.017699519362806
+912 -0.000318037037700945
+913 -0.000901743764017103
+914 0.00248888283323065
+915 -0.0142481225576747
+916 -0.00627435836721236
+917 0.00855187280647071
+918 0.0105572049962355
+919 0.000583931991033486
+920 -4.30556267490633e-05
+921 -0.0045108941062306
+922 -0.0133739157611831
+923 -0.00313115415898723
+924 0.0189188436677887
+925 0.00153514138422627
+926 0.00103320993409772
+927 0.00112288481924235
+928 -0.00928188326624581
+929 -0.0129274841698096
+930 0.00498882941992066
+931 0.0128685052672079
+932 0.00095422558746866
+933 0.00287762148255505
+934 -0.00475028532754077
+935 -0.00822865912701703
+936 -0.00757218985298937
+937 0.0125664162380766
+938 0.00270238634995215
+939 0.00302457671529668
+940 0.00428294440890637
+941 -0.00899111620928394
+942 -0.0110893993806093
+943 0.00141333596146868
+944 0.00563271971888788
+945 0.00411002278120649
+946 0.00615934836425166
+947 -0.00174830591696001
+948 -0.00690959640532146
+949 -0.00762102396102174
+950 0.00236971536529725
+951 0.00460497853674718
+952 0.00598101123225428
+953 0.00706347780702416
+954 -0.0072207235025214
+955 -0.00731160125486541
+956 -0.00624993042258776
+957 0.00302766462338833
+958 0.00586320595091301
+959 0.00757297545746186
+960 0.000503174678108187
+961 -0.00664203641468952
+962 -0.00405954777539984
+963 -0.00594873760338403
+964 0.00307617052361439
+965 0.00775330844648307
+966 0.00843784117689838
+967 -0.00583155486504129
+968 -0.00522157454280821
+969 -0.00285538010476946
+970 -0.00558783047918071
+971 0.00390712343424286
+972 0.00929413763014091
+973 0.00249794635456826
+974 -0.00403614631431915
+975 -0.00252223207691292
+976 -0.00372319999128239
+977 -0.00468425218841592
+978 0.00588461196845991
+979 0.0101947594770192
+980 -0.00382374940790093
+981 -0.00256280880770612
+982 -0.00238724745188651
+983 -0.00254031623097892
+984 -0.00349304284255843
+985 0.00656620792235621
+986 0.0047392335299334
+987 -0.00245644332451687
+988 -0.000949186258308068
+989 -0.00204517319399663
+990 -0.00117348041470723
+991 -0.00165335740901138
+992 0.00532507797594932
+993 -0.00112887412444135
+994 -0.00102507341491478
+995 -0.000239825549954329
+996 -0.000229034611702856
+997 -0.00048382116878178
+998 -0.000558954253318938
+999 0.000343539178586105
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat
new file mode 100644
index 000000000..9c717bb66
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.0163400173187256 0.00999999999999091 0.00999999999999091 0.0 1
+2 0.0159189701080322 0.00999999999999091 0.00999999999999091 0.0 2
+3 0.0164740085601807 0.0200000000000102 0.0200000000000102 0.0 3
+4 0.0157279968261719 0.00999999999999091 0.00999999999999091 0.0 4
+5 0.0157220363616943 0.0200000000000102 0.0200000000000102 0.0 5
+6 0.0156500339508057 0.00999999999999091 0.00999999999999091 0.0 6
+7 0.0407540798187256 0.0499999999999829 0.0499999999999829 0.0 7
+8 0.0177309513092041 0.0100000000000193 0.0100000000000193 0.0 8
+9 0.0160109996795654 0.0199999999999818 0.0199999999999818 0.0 9
+10 0.0159001350402832 0.0100000000000193 0.0100000000000193 0.0 10
+11 0.0192539691925049 0.0199999999999818 0.0199999999999818 0.0 11
+12 0.0170741081237793 0.0200000000000102 0.0200000000000102 0.0 12
+13 0.0155148506164551 0.0200000000000102 0.0200000000000102 0.0 13
+14 0.0416128635406494 0.039999999999992 0.039999999999992 0.0 14
+15 0.0161120891571045 0.00999999999999091 0.00999999999999091 0.0 15
+16 0.0159459114074707 0.0200000000000102 0.0200000000000102 0.0 16
+17 0.0158929824829102 0.0200000000000102 0.0200000000000102 0.0 17
+18 0.0158240795135498 0.00999999999999091 0.00999999999999091 0.0 18
+19 0.0156450271606445 0.0199999999999818 0.0199999999999818 0.0 19
+20 0.0159389972686768 0.0100000000000193 0.0100000000000193 0.0 20
+21 0.0409190654754639 0.039999999999992 0.039999999999992 0.0 21
+22 0.0160489082336426 0.0200000000000102 0.0200000000000102 0.0 22
+23 0.0169320106506348 0.0199999999999818 0.0199999999999818 0.0 23
+24 0.0198559761047363 0.0200000000000102 0.0200000000000102 0.0 24
+25 0.0158309936523438 0.00999999999999091 0.00999999999999091 0.0 25
+26 0.0156970024108887 0.0200000000000102 0.0200000000000102 0.0 26
+27 0.0156750679016113 0.0200000000000102 0.0200000000000102 0.0 27
+28 0.0406918525695801 0.039999999999992 0.039999999999992 0.0 28
+29 0.0161190032958984 0.00999999999999091 0.00999999999999091 0.0 29
+30 0.0162358283996582 0.0200000000000102 0.0200000000000102 0.0 30
+31 0.0158340930938721 0.00999999999999091 0.00999999999999091 0.0 31
+32 0.0157299041748047 0.0200000000000102 0.0200000000000102 0.0 32
+33 0.0156428813934326 0.0199999999999818 0.0199999999999818 0.0 33
+34 0.0156571865081787 0.0100000000000193 0.0100000000000193 0.0 34
+35 0.0409109592437744 0.039999999999992 0.039999999999992 0.0 35
+36 0.0192060470581055 0.0200000000000102 0.0200000000000102 0.0 36
+37 0.0160908699035645 0.0199999999999818 0.0199999999999818 0.0 37
+38 0.0158319473266602 0.0100000000000193 0.0100000000000193 0.0 38
+39 0.0157558917999268 0.0199999999999818 0.0199999999999818 0.0 39
+40 0.0158040523529053 0.0200000000000102 0.0200000000000102 0.0 40
+41 0.0156400203704834 0.00999999999999091 0.00999999999999091 0.0 41
+42 0.0408070087432861 0.0400000000000205 0.0400000000000205 0.0 42
+43 0.0159420967102051 0.0199999999999818 0.0199999999999818 0.0 43
+44 0.0159668922424316 0.00999999999999091 0.00999999999999091 0.0 44
+45 0.0213000774383545 0.0300000000000011 0.0300000000000011 0.0 45
+46 0.0170960426330566 0.0100000000000193 0.0100000000000193 0.0 46
+47 0.0160157680511475 0.0199999999999818 0.0199999999999818 0.0 47
+48 0.0156497955322266 0.0100000000000193 0.0100000000000193 0.0 48
+49 0.0446329116821289 0.0499999999999829 0.0499999999999829 0.0 49
+50 0.016150951385498 0.0200000000000102 0.0200000000000102 0.0 50
+51 0.0159158706665039 0.00999999999999091 0.00999999999999091 0.0 51
+52 0.0157129764556885 0.0200000000000102 0.0200000000000102 0.0 52
+53 0.0165328979492188 0.00999999999999091 0.00999999999999091 0.0 53
+54 0.0156497955322266 0.0200000000000102 0.0200000000000102 0.0 54
+55 0.0156981945037842 0.0200000000000102 0.0200000000000102 0.0 55
+56 0.0412800312042236 0.039999999999992 0.039999999999992 0.0 56
+57 0.0159571170806885 0.00999999999999091 0.00999999999999091 0.0 57
+58 0.015887975692749 0.0200000000000102 0.0200000000000102 0.0 58
+59 0.0158159732818604 0.00999999999999091 0.00999999999999091 0.0 59
+60 0.0156238079071045 0.0200000000000102 0.0200000000000102 0.0 60
+61 0.0156691074371338 0.0199999999999818 0.0199999999999818 0.0 61
+62 0.0447931289672852 0.0400000000000205 0.0400000000000205 0.0 62
+63 0.0160729885101318 0.0199999999999818 0.0199999999999818 0.0 63
+64 0.016963005065918 0.0100000000000193 0.0100000000000193 0.0 64
+65 0.015869140625 0.0199999999999818 0.0199999999999818 0.0 65
+66 0.0158119201660156 0.0200000000000102 0.0200000000000102 0.0 66
+67 0.0156521797180176 0.00999999999999091 0.00999999999999091 0.0 67
+68 0.0156309604644775 0.0200000000000102 0.0200000000000102 0.0 68
+69 0.0406920909881592 0.039999999999992 0.039999999999992 0.0 69
+70 0.0161399841308594 0.00999999999999091 0.00999999999999091 0.0 70
+71 0.0160379409790039 0.0200000000000102 0.0200000000000102 0.0 71
+72 0.0158870220184326 0.0200000000000102 0.0200000000000102 0.0 72
+73 0.0157949924468994 0.00999999999999091 0.00999999999999091 0.0 73
+74 0.019942045211792 0.0200000000000102 0.0200000000000102 0.0 74
+75 0.0156691074371338 0.0199999999999818 0.0199999999999818 0.0 75
+76 0.0406370162963867 0.0400000000000205 0.0400000000000205 0.0 76
+77 0.0160510540008545 0.00999999999999091 0.00999999999999091 0.0 77
+78 0.0159440040588379 0.0200000000000102 0.0200000000000102 0.0 78
+79 0.0159609317779541 0.0199999999999818 0.0199999999999818 0.0 79
+80 0.0160808563232422 0.0100000000000193 0.0100000000000193 0.0 80
+81 0.0156311988830566 0.0199999999999818 0.0199999999999818 0.0 81
+82 0.0157270431518555 0.00999999999999091 0.00999999999999091 0.0 82
+83 0.041240930557251 0.0500000000000114 0.0500000000000114 0.0 83
+84 0.0165321826934814 0.00999999999999091 0.00999999999999091 0.0 84
+85 0.0159039497375488 0.0200000000000102 0.0200000000000102 0.0 85
+86 0.0183000564575195 0.0200000000000102 0.0200000000000102 0.0 86
+87 0.0168759822845459 0.00999999999999091 0.00999999999999091 0.0 87
+88 0.0156400203704834 0.0200000000000102 0.0200000000000102 0.0 88
+89 0.0156240463256836 0.00999999999999091 0.00999999999999091 0.0 89
+90 0.0415260791778564 0.0500000000000114 0.0500000000000114 0.0 90
+91 0.0159800052642822 0.00999999999999091 0.00999999999999091 0.0 91
+92 0.0159440040588379 0.0200000000000102 0.0200000000000102 0.0 92
+93 0.0158178806304932 0.00999999999999091 0.00999999999999091 0.0 93
+94 0.0157041549682617 0.0199999999999818 0.0199999999999818 0.0 94
+95 0.0200591087341309 0.0200000000000102 0.0200000000000102 0.0 95
+96 0.018794059753418 0.0200000000000102 0.0200000000000102 0.0 96
+97 0.0408840179443359 0.039999999999992 0.039999999999992 0.0 97
+98 0.0196928977966309 0.0200000000000102 0.0200000000000102 0.0 98
+99 0.016610860824585 0.0199999999999818 0.0199999999999818 0.0 99
+100 0.0157420635223389 0.0100000000000193 0.0100000000000193 0.0 100
+101 0.015739917755127 0.0199999999999818 0.0199999999999818 0.0 101
+102 0.015592098236084 0.0100000000000193 0.0100000000000193 0.0 102
+103 0.0156228542327881 0.0199999999999818 0.0199999999999818 0.0 103
+104 0.0417301654815674 0.0400000000000205 0.0400000000000205 0.0 104
+105 0.015916109085083 0.0199999999999818 0.0199999999999818 0.0 105
+106 0.0158488750457764 0.00999999999999091 0.00999999999999091 0.0 106
+107 0.015733003616333 0.0200000000000102 0.0200000000000102 0.0 107
+108 0.0156040191650391 0.00999999999999091 0.00999999999999091 0.0 108
+109 0.0155818462371826 0.0200000000000102 0.0200000000000102 0.0 109
+110 0.041733980178833 0.039999999999992 0.039999999999992 0.0 110
+111 0.0190949440002441 0.0200000000000102 0.0200000000000102 0.0 111
+112 0.0159502029418945 0.0200000000000102 0.0200000000000102 0.0 112
+113 0.015855073928833 0.00999999999999091 0.00999999999999091 0.0 113
+114 0.0161051750183105 0.0200000000000102 0.0200000000000102 0.0 114
+115 0.0168948173522949 0.0199999999999818 0.0199999999999818 0.0 115
+116 0.0157649517059326 0.0100000000000193 0.0100000000000193 0.0 116
+117 0.0404441356658936 0.039999999999992 0.039999999999992 0.0 117
+118 0.0158331394195557 0.0199999999999818 0.0199999999999818 0.0 118
+119 0.0158309936523438 0.0100000000000193 0.0100000000000193 0.0 119
+120 0.0155770778656006 0.0199999999999818 0.0199999999999818 0.0 120
+121 0.0154340267181396 0.0100000000000193 0.0100000000000193 0.0 121
+122 0.0155458450317383 0.0199999999999818 0.0199999999999818 0.0 122
+123 0.0156569480895996 0.0200000000000102 0.0200000000000102 0.0 123
+124 0.0447821617126465 0.0499999999999829 0.039999999999992 0.01 124
+125 0.0162930488586426 0.0200000000000102 0.0200000000000102 0.0 125
+126 0.0159821510314941 0.00999999999999091 0.00999999999999091 0.0 126
+127 0.0158350467681885 0.0200000000000102 0.0200000000000102 0.0 127
+128 0.0157771110534668 0.00999999999999091 0.00999999999999091 0.0 128
+129 0.0155949592590332 0.0200000000000102 0.0200000000000102 0.0 129
+130 0.015751838684082 0.0200000000000102 0.0200000000000102 0.0 130
+131 0.0409200191497803 0.039999999999992 0.039999999999992 0.0 131
+132 0.0159509181976318 0.00999999999999091 0.00999999999999091 0.0 132
+133 0.0159890651702881 0.0200000000000102 0.0200000000000102 0.0 133
+134 0.015902042388916 0.00999999999999091 0.00999999999999091 0.0 134
+135 0.0158298015594482 0.0200000000000102 0.0200000000000102 0.0 135
+136 0.0156691074371338 0.0199999999999818 0.0199999999999818 0.0 136
+137 0.0194599628448486 0.0200000000000102 0.0200000000000102 0.0 137
+138 0.0408408641815186 0.039999999999992 0.039999999999992 0.0 138
+139 0.0161910057067871 0.0100000000000193 0.0100000000000193 0.0 139
+140 0.0158939361572266 0.0199999999999818 0.0199999999999818 0.0 140
+141 0.0157690048217773 0.0100000000000193 0.0100000000000193 0.0 141
+142 0.0156970024108887 0.0199999999999818 0.0199999999999818 0.0 142
+143 0.015625 0.0200000000000102 0.0200000000000102 0.0 143
+144 0.0156629085540771 0.00999999999999091 0.00999999999999091 0.0 144
+145 0.0474429130554199 0.0500000000000114 0.0500000000000114 0.0 145
+146 0.0159988403320312 0.0199999999999818 0.0199999999999818 0.0 146
+147 0.0159039497375488 0.0100000000000193 0.0100000000000193 0.0 147
+148 0.0157449245452881 0.0199999999999818 0.0199999999999818 0.0 148
+149 0.0188858509063721 0.0200000000000102 0.0200000000000102 0.0 149
+150 0.0156919956207275 0.00999999999999091 0.00999999999999091 0.0 150
+151 0.0404269695281982 0.0400000000000205 0.0400000000000205 0.0 151
+152 0.0160980224609375 0.0199999999999818 0.0199999999999818 0.0 152
+153 0.0167350769042969 0.0200000000000102 0.0200000000000102 0.0 153
+154 0.0159759521484375 0.00999999999999091 0.00999999999999091 0.0 154
+155 0.0158588886260986 0.0200000000000102 0.0200000000000102 0.0 155
+156 0.01568603515625 0.00999999999999091 0.00999999999999091 0.0 156
+157 0.0156669616699219 0.0200000000000102 0.0200000000000102 0.0 157
+158 0.0405089855194092 0.039999999999992 0.039999999999992 0.0 158
+159 0.0160729885101318 0.0200000000000102 0.0200000000000102 0.0 159
+160 0.0159640312194824 0.00999999999999091 0.00999999999999091 0.0 160
+161 0.0188910961151123 0.0200000000000102 0.0200000000000102 0.0 161
+162 0.0166840553283691 0.0199999999999818 0.0199999999999818 0.0 162
+163 0.0156660079956055 0.0100000000000193 0.0100000000000193 0.0 163
+164 0.0156950950622559 0.0199999999999818 0.0199999999999818 0.0 164
+165 0.0416688919067383 0.0400000000000205 0.0400000000000205 0.0 165
+166 0.0159718990325928 0.0199999999999818 0.0199999999999818 0.0 166
+167 0.0159449577331543 0.0100000000000193 0.0100000000000193 0.0 167
+168 0.0157949924468994 0.0199999999999818 0.0199999999999818 0.0 168
+169 0.0157520771026611 0.00999999999999091 0.00999999999999091 0.0 169
+170 0.0157308578491211 0.0200000000000102 0.0200000000000102 0.0 170
+171 0.0156319141387939 0.0200000000000102 0.0200000000000102 0.0 171
+172 0.0406780242919922 0.039999999999992 0.039999999999992 0.0 172
+173 0.0182578563690186 0.00999999999999091 0.00999999999999091 0.0 173
+174 0.0166499614715576 0.0200000000000102 0.0200000000000102 0.0 174
+175 0.0157749652862549 0.0200000000000102 0.0200000000000102 0.0 175
+176 0.0156049728393555 0.00999999999999091 0.00999999999999091 0.0 176
+177 0.0155508518218994 0.0200000000000102 0.0200000000000102 0.0 177
+178 0.0155460834503174 0.00999999999999091 0.00999999999999091 0.0 178
+179 0.0410678386688232 0.0500000000000114 0.0500000000000114 0.0 179
+180 0.0161750316619873 0.00999999999999091 0.00999999999999091 0.0 180
+181 0.0159769058227539 0.0199999999999818 0.0199999999999818 0.0 181
+182 0.0157239437103271 0.0100000000000193 0.0100000000000193 0.0 182
+183 0.0155858993530273 0.0199999999999818 0.0199999999999818 0.0 183
+184 0.0157029628753662 0.0100000000000193 0.0100000000000193 0.0 184
+185 0.0406639575958252 0.0499999999999829 0.0499999999999829 0.0 185
+186 0.020313024520874 0.0200000000000102 0.0200000000000102 0.0 186
+187 0.0159680843353271 0.00999999999999091 0.00999999999999091 0.0 187
+188 0.0159218311309814 0.0200000000000102 0.0200000000000102 0.0 188
+189 0.0158710479736328 0.00999999999999091 0.00999999999999091 0.0 189
+190 0.0158529281616211 0.0200000000000102 0.0200000000000102 0.0 190
+191 0.0155730247497559 0.0200000000000102 0.0200000000000102 0.0 191
+192 0.0405440330505371 0.039999999999992 0.039999999999992 0.0 192
+193 0.0161638259887695 0.00999999999999091 0.00999999999999091 0.0 193
+194 0.0165688991546631 0.0200000000000102 0.0200000000000102 0.0 194
+195 0.0231571197509766 0.0199999999999818 0.0199999999999818 0.0 195
+196 0.0159261226654053 0.0200000000000102 0.0200000000000102 0.0 196
+197 0.015887975692749 0.00999999999999091 0.00999999999999091 0.0 197
+198 0.0156550407409668 0.0200000000000102 0.0200000000000102 0.0 198
+199 0.0435981750488281 0.039999999999992 0.039999999999992 0.0 199
+200 0.0159139633178711 0.0200000000000102 0.0200000000000102 0.0 200
+201 0.0158441066741943 0.00999999999999091 0.00999999999999091 0.0 201
+202 0.0157480239868164 0.0200000000000102 0.0200000000000102 0.0 202
+203 0.0163719654083252 0.0200000000000102 0.0200000000000102 0.0 203
+204 0.0156970024108887 0.00999999999999091 0.00999999999999091 0.0 204
+205 0.01556396484375 0.0200000000000102 0.0200000000000102 0.0 205
+206 0.0408110618591309 0.039999999999992 0.039999999999992 0.0 206
+207 0.0159599781036377 0.0199999999999818 0.0199999999999818 0.0 207
+208 0.0159690380096436 0.0100000000000193 0.0100000000000193 0.0 208
+209 0.0159268379211426 0.0199999999999818 0.0199999999999818 0.0 209
+210 0.0157289505004883 0.0100000000000193 0.0100000000000193 0.0 210
+211 0.0156691074371338 0.0199999999999818 0.0199999999999818 0.0 211
+212 0.0189340114593506 0.0200000000000102 0.0200000000000102 0.0 212
+213 0.0407509803771973 0.039999999999992 0.039999999999992 0.0 213
+214 0.0168440341949463 0.0200000000000102 0.0200000000000102 0.0 214
+215 0.0158839225769043 0.00999999999999091 0.00999999999999091 0.0 215
+216 0.0157129764556885 0.0200000000000102 0.0200000000000102 0.0 216
+217 0.0155618190765381 0.00999999999999091 0.00999999999999091 0.0 217
+218 0.0155580043792725 0.0200000000000102 0.0200000000000102 0.0 218
+219 0.0405669212341309 0.039999999999992 0.039999999999992 0.0 219
+220 0.0161259174346924 0.0200000000000102 0.0200000000000102 0.0 220
+221 0.0161309242248535 0.00999999999999091 0.00999999999999091 0.0 221
+222 0.0159680843353271 0.0200000000000102 0.0200000000000102 0.0 222
+223 0.0159029960632324 0.00999999999999091 0.00999999999999091 0.0 223
+224 0.0187640190124512 0.0200000000000102 0.0200000000000102 0.0 224
+225 0.0158958435058594 0.0199999999999818 0.0199999999999818 0.0 225
+226 0.0405712127685547 0.0400000000000205 0.0400000000000205 0.0 226
+227 0.0160939693450928 0.0199999999999818 0.0199999999999818 0.0 227
+228 0.0159199237823486 0.0100000000000193 0.0100000000000193 0.0 228
+229 0.0160150527954102 0.0199999999999818 0.0199999999999818 0.0 229
+230 0.0161042213439941 0.0100000000000193 0.0100000000000193 0.0 230
+231 0.0156550407409668 0.0199999999999818 0.0199999999999818 0.0 231
+232 0.0155539512634277 0.00999999999999091 0.00999999999999091 0.0 232
+233 0.0406229496002197 0.0500000000000114 0.0500000000000114 0.0 233
+234 0.0177409648895264 0.00999999999999091 0.00999999999999091 0.0 234
+235 0.0160009860992432 0.0200000000000102 0.0200000000000102 0.0 235
+236 0.0169141292572021 0.00999999999999091 0.00999999999999091 0.0 236
+237 0.0185301303863525 0.0200000000000102 0.0200000000000102 0.0 237
+238 0.0156500339508057 0.0200000000000102 0.0200000000000102 0.0 238
+239 0.0157279968261719 0.00999999999999091 0.00999999999999091 0.0 239
+240 0.041100025177002 0.0500000000000114 0.0500000000000114 0.0 240
+241 0.0159239768981934 0.00999999999999091 0.00999999999999091 0.0 241
+242 0.0158870220184326 0.0200000000000102 0.0200000000000102 0.0 242
+243 0.0157818794250488 0.00999999999999091 0.00999999999999091 0.0 243
+244 0.0156459808349609 0.0199999999999818 0.0199999999999818 0.0 244
+245 0.0205349922180176 0.0200000000000102 0.0200000000000102 0.0 245
+246 0.0176489353179932 0.0200000000000102 0.0200000000000102 0.0 246
+247 0.0406951904296875 0.039999999999992 0.039999999999992 0.0 247
+248 0.0161759853363037 0.00999999999999091 0.00999999999999091 0.0 248
+249 0.0186100006103516 0.0200000000000102 0.0200000000000102 0.0 249
+250 0.0158610343933105 0.0200000000000102 0.0200000000000102 0.0 250
+251 0.0157759189605713 0.00999999999999091 0.00999999999999091 0.0 251
+252 0.0157499313354492 0.0200000000000102 0.0200000000000102 0.0 252
+253 0.0412969589233398 0.039999999999992 0.039999999999992 0.0 253
+254 0.0160319805145264 0.0200000000000102 0.0200000000000102 0.0 254
+255 0.0159080028533936 0.00999999999999091 0.00999999999999091 0.0 255
+256 0.01580810546875 0.0199999999999818 0.0199999999999818 0.0 256
+257 0.0157821178436279 0.0200000000000102 0.0200000000000102 0.0 257
+258 0.015578031539917 0.00999999999999091 0.00999999999999091 0.0 258
+259 0.0155758857727051 0.0200000000000102 0.0200000000000102 0.0 259
+260 0.0406520366668701 0.039999999999992 0.039999999999992 0.0 260
+261 0.0193078517913818 0.0200000000000102 0.0200000000000102 0.0 261
+262 0.0160150527954102 0.00999999999999091 0.00999999999999091 0.0 262
+263 0.015920877456665 0.0200000000000102 0.0200000000000102 0.0 263
+264 0.0161728858947754 0.0200000000000102 0.0200000000000102 0.0 264
+265 0.0163869857788086 0.00999999999999091 0.00999999999999091 0.0 265
+266 0.0156819820404053 0.0200000000000102 0.0200000000000102 0.0 266
+267 0.0407660007476807 0.039999999999992 0.039999999999992 0.0 267
+268 0.015861988067627 0.00999999999999091 0.00999999999999091 0.0 268
+269 0.015887975692749 0.0200000000000102 0.0200000000000102 0.0 269
+270 0.0157639980316162 0.0199999999999818 0.0199999999999818 0.0 270
+271 0.0156021118164062 0.0100000000000193 0.0100000000000193 0.0 271
+272 0.0162060260772705 0.0199999999999818 0.0199999999999818 0.0 272
+273 0.0156650543212891 0.0100000000000193 0.0100000000000193 0.0 273
+274 0.0440959930419922 0.0499999999999829 0.0499999999999829 0.0 274
+275 0.0158300399780273 0.0100000000000193 0.0100000000000193 0.0 275
+276 0.0157949924468994 0.0199999999999818 0.0199999999999818 0.0 276
+277 0.0157911777496338 0.0200000000000102 0.0200000000000102 0.0 277
+278 0.0155570507049561 0.00999999999999091 0.00999999999999091 0.0 278
+279 0.0156610012054443 0.0200000000000102 0.0200000000000102 0.0 279
+280 0.015800952911377 0.00999999999999091 0.00999999999999091 0.0 280
+281 0.041050910949707 0.039999999999992 0.039999999999992 0.0 281
+282 0.0158300399780273 0.0200000000000102 0.0200000000000102 0.0 282
+283 0.0173659324645996 0.0200000000000102 0.0200000000000102 0.0 283
+284 0.0157661437988281 0.00999999999999091 0.00999999999999091 0.0 284
+285 0.0156910419464111 0.0200000000000102 0.0200000000000102 0.0 285
+286 0.0156378746032715 0.00999999999999091 0.00999999999999091 0.0 286
+287 0.0446128845214844 0.0500000000000114 0.0500000000000114 0.0 287
+288 0.0160419940948486 0.00999999999999091 0.00999999999999091 0.0 288
+289 0.0161609649658203 0.0200000000000102 0.0200000000000102 0.0 289
+290 0.0157930850982666 0.00999999999999091 0.00999999999999091 0.0 290
+291 0.0157232284545898 0.0200000000000102 0.0200000000000102 0.0 291
+292 0.0155608654022217 0.0199999999999818 0.0199999999999818 0.0 292
+293 0.0156910419464111 0.0100000000000193 0.0100000000000193 0.0 293
+294 0.0463647842407227 0.0499999999999829 0.0499999999999829 0.0 294
+295 0.0179910659790039 0.0200000000000102 0.0200000000000102 0.0 295
+296 0.0158979892730713 0.00999999999999091 0.00999999999999091 0.0 296
+297 0.0157630443572998 0.0200000000000102 0.0200000000000102 0.0 297
+298 0.0156371593475342 0.00999999999999091 0.00999999999999091 0.0 298
+299 0.0191469192504883 0.0200000000000102 0.0200000000000102 0.0 299
+300 0.0167911052703857 0.0199999999999818 0.0199999999999818 0.0 300
+301 0.0407388210296631 0.0400000000000205 0.0400000000000205 0.0 301
+302 0.0159130096435547 0.0199999999999818 0.0199999999999818 0.0 302
+303 0.0166409015655518 0.0100000000000193 0.0100000000000193 0.0 303
+304 0.0158700942993164 0.0199999999999818 0.0199999999999818 0.0 304
+305 0.0156099796295166 0.0200000000000102 0.0200000000000102 0.0 305
+306 0.0155818462371826 0.00999999999999091 0.00999999999999091 0.0 306
+307 0.0156898498535156 0.0200000000000102 0.0200000000000102 0.0 307
+308 0.0406138896942139 0.039999999999992 0.039999999999992 0.0 308
+309 0.0159690380096436 0.00999999999999091 0.00999999999999091 0.0 309
+310 0.0157949924468994 0.0200000000000102 0.0200000000000102 0.0 310
+311 0.0166599750518799 0.00999999999999091 0.00999999999999091 0.0 311
+312 0.0184519290924072 0.0200000000000102 0.0200000000000102 0.0 312
+313 0.0156970024108887 0.0200000000000102 0.0200000000000102 0.0 313
+314 0.0414550304412842 0.039999999999992 0.039999999999992 0.0 314
+315 0.0159659385681152 0.0200000000000102 0.0200000000000102 0.0 315
+316 0.015855073928833 0.00999999999999091 0.00999999999999091 0.0 316
+317 0.0157890319824219 0.0200000000000102 0.0200000000000102 0.0 317
+318 0.0157499313354492 0.00999999999999091 0.00999999999999091 0.0 318
+319 0.0157718658447266 0.0199999999999818 0.0199999999999818 0.0 319
+320 0.0155758857727051 0.0200000000000102 0.0200000000000102 0.0 320
+321 0.0406579971313477 0.039999999999992 0.039999999999992 0.0 321
+322 0.0160129070281982 0.0100000000000193 0.0100000000000193 0.0 322
+323 0.0166339874267578 0.0199999999999818 0.0199999999999818 0.0 323
+324 0.020615816116333 0.0200000000000102 0.0200000000000102 0.0 324
+325 0.016042947769165 0.0200000000000102 0.0200000000000102 0.0 325
+326 0.0157880783081055 0.00999999999999091 0.00999999999999091 0.0 326
+327 0.0156471729278564 0.0200000000000102 0.0200000000000102 0.0 327
+328 0.0406618118286133 0.039999999999992 0.039999999999992 0.0 328
+329 0.0161919593811035 0.00999999999999091 0.00999999999999091 0.0 329
+330 0.0158429145812988 0.0200000000000102 0.0200000000000102 0.0 330
+331 0.0157439708709717 0.0199999999999818 0.0199999999999818 0.0 331
+332 0.0156080722808838 0.0100000000000193 0.0100000000000193 0.0 332
+333 0.0156378746032715 0.0199999999999818 0.0199999999999818 0.0 333
+334 0.015779972076416 0.0100000000000193 0.0100000000000193 0.0 334
+335 0.0407891273498535 0.039999999999992 0.039999999999992 0.0 335
+336 0.0195779800415039 0.0200000000000102 0.0200000000000102 0.0 336
+337 0.0160758495330811 0.0199999999999818 0.0199999999999818 0.0 337
+338 0.0156791210174561 0.0200000000000102 0.0200000000000102 0.0 338
+339 0.015733003616333 0.00999999999999091 0.00999999999999091 0.0 339
+340 0.0158100128173828 0.0200000000000102 0.0200000000000102 0.0 340
+341 0.0405211448669434 0.039999999999992 0.039999999999992 0.0 341
+342 0.0158991813659668 0.0100000000000193 0.0100000000000193 0.0 342
+343 0.0157461166381836 0.0199999999999818 0.0199999999999818 0.0 343
+344 0.0166110992431641 0.0200000000000102 0.0200000000000102 0.0 344
+345 0.0219199657440186 0.0199999999999818 0.0199999999999818 0.0 345
+346 0.0155389308929443 0.0100000000000193 0.0100000000000193 0.0 346
+347 0.0156941413879395 0.0199999999999818 0.0199999999999818 0.0 347
+348 0.0439140796661377 0.0400000000000205 0.0400000000000205 0.0 348
+349 0.016746997833252 0.0199999999999818 0.0199999999999818 0.0 349
+350 0.0159060955047607 0.0200000000000102 0.0200000000000102 0.0 350
+351 0.0158212184906006 0.00999999999999091 0.00999999999999091 0.0 351
+352 0.0157208442687988 0.0200000000000102 0.0200000000000102 0.0 352
+353 0.0156140327453613 0.00999999999999091 0.00999999999999091 0.0 353
+354 0.0168178081512451 0.0200000000000102 0.0200000000000102 0.0 354
+355 0.0407528877258301 0.039999999999992 0.039999999999992 0.0 355
+356 0.0157878398895264 0.0200000000000102 0.0200000000000102 0.0 356
+357 0.0157828330993652 0.00999999999999091 0.00999999999999091 0.0 357
+358 0.0156841278076172 0.0200000000000102 0.0200000000000102 0.0 358
+359 0.0156099796295166 0.00999999999999091 0.00999999999999091 0.0 359
+360 0.015535831451416 0.0200000000000102 0.0200000000000102 0.0 360
+361 0.0171799659729004 0.0199999999999818 0.0199999999999818 0.0 361
+362 0.044562816619873 0.0400000000000205 0.0400000000000205 0.0 362
+363 0.0159769058227539 0.0199999999999818 0.0199999999999818 0.0 363
+364 0.0167310237884521 0.0100000000000193 0.0100000000000193 0.0 364
+365 0.0156519412994385 0.0199999999999818 0.0199999999999818 0.0 365
+366 0.015625 0.0200000000000102 0.0200000000000102 0.0 366
+367 0.0161309242248535 0.00999999999999091 0.00999999999999091 0.0 367
+368 0.0406661033630371 0.039999999999992 0.039999999999992 0.0 368
+369 0.016185998916626 0.0200000000000102 0.0200000000000102 0.0 369
+370 0.0159850120544434 0.00999999999999091 0.00999999999999091 0.0 370
+371 0.0159509181976318 0.0200000000000102 0.0200000000000102 0.0 371
+372 0.015861988067627 0.0200000000000102 0.0200000000000102 0.0 372
+373 0.0157780647277832 0.00999999999999091 0.00999999999999091 0.0 373
+374 0.019244909286499 0.0200000000000102 0.0200000000000102 0.0 374
+375 0.0423779487609863 0.039999999999992 0.039999999999992 0.0 375
+376 0.0160589218139648 0.0200000000000102 0.0200000000000102 0.0 376
+377 0.0159640312194824 0.0199999999999818 0.0199999999999818 0.0 377
+378 0.0158970355987549 0.0100000000000193 0.0100000000000193 0.0 378
+379 0.0158810615539551 0.0199999999999818 0.0199999999999818 0.0 379
+380 0.0159378051757812 0.0100000000000193 0.0100000000000193 0.0 380
+381 0.0156619548797607 0.0199999999999818 0.0199999999999818 0.0 381
+382 0.0407819747924805 0.039999999999992 0.039999999999992 0.0 382
+383 0.0159389972686768 0.0200000000000102 0.0200000000000102 0.0 383
+384 0.0160889625549316 0.00999999999999091 0.00999999999999091 0.0 384
+385 0.0158150196075439 0.0200000000000102 0.0200000000000102 0.0 385
+386 0.0164110660552979 0.0200000000000102 0.0200000000000102 0.0 386
+387 0.0180950164794922 0.00999999999999091 0.00999999999999091 0.0 387
+388 0.0157089233398438 0.0200000000000102 0.0200000000000102 0.0 388
+389 0.0411288738250732 0.039999999999992 0.039999999999992 0.0 389
+390 0.0159080028533936 0.0200000000000102 0.0200000000000102 0.0 390
+391 0.0158810615539551 0.00999999999999091 0.00999999999999091 0.0 391
+392 0.0157151222229004 0.0200000000000102 0.0200000000000102 0.0 392
+393 0.0156629085540771 0.00999999999999091 0.00999999999999091 0.0 393
+394 0.0157067775726318 0.0199999999999818 0.0199999999999818 0.0 394
+395 0.0479769706726074 0.0500000000000114 0.0500000000000114 0.0 395
+396 0.01609206199646 0.00999999999999091 0.00999999999999091 0.0 396
+397 0.0158951282501221 0.0200000000000102 0.0200000000000102 0.0 397
+398 0.0161418914794922 0.00999999999999091 0.00999999999999091 0.0 398
+399 0.0201709270477295 0.0200000000000102 0.0200000000000102 0.0 399
+400 0.0157439708709717 0.0100000000000193 0.0100000000000193 0.0 400
+401 0.0157320499420166 0.0199999999999818 0.0199999999999818 0.0 401
+402 0.0412960052490234 0.0400000000000205 0.0400000000000205 0.0 402
+403 0.0162639617919922 0.00999999999999091 0.00999999999999091 0.0 403
+404 0.0161092281341553 0.0200000000000102 0.0200000000000102 0.0 404
+405 0.0159099102020264 0.0199999999999818 0.0199999999999818 0.0 405
+406 0.0157670974731445 0.00999999999999091 0.00999999999999091 0.0 406
+407 0.0156850814819336 0.0200000000000102 0.0200000000000102 0.0 407
+408 0.0156769752502441 0.00999999999999091 0.00999999999999091 0.0 408
+409 0.0408320426940918 0.0400000000000205 0.0400000000000205 0.0 409
+410 0.0158789157867432 0.0199999999999818 0.0199999999999818 0.0 410
+411 0.0202319622039795 0.0200000000000102 0.0200000000000102 0.0 411
+412 0.0158510208129883 0.0200000000000102 0.0200000000000102 0.0 412
+413 0.0156679153442383 0.00999999999999091 0.00999999999999091 0.0 413
+414 0.0159661769866943 0.0200000000000102 0.0200000000000102 0.0 414
+415 0.0161230564117432 0.00999999999999091 0.00999999999999091 0.0 415
+416 0.0410380363464355 0.0500000000000114 0.0500000000000114 0.0 416
+417 0.0158960819244385 0.00999999999999091 0.00999999999999091 0.0 417
+418 0.0158650875091553 0.0199999999999818 0.0199999999999818 0.0 418
+419 0.0157840251922607 0.0100000000000193 0.0100000000000193 0.0 419
+420 0.0155539512634277 0.0199999999999818 0.0199999999999818 0.0 420
+421 0.0157678127288818 0.0100000000000193 0.0100000000000193 0.0 421
+422 0.0412240028381348 0.0499999999999829 0.0499999999999829 0.0 422
+423 0.0191640853881836 0.0100000000000193 0.0100000000000193 0.0 423
+424 0.0165059566497803 0.0199999999999818 0.0199999999999818 0.0 424
+425 0.0159070491790771 0.0200000000000102 0.0200000000000102 0.0 425
+426 0.0158569812774658 0.00999999999999091 0.00999999999999091 0.0 426
+427 0.0156240463256836 0.0200000000000102 0.0200000000000102 0.0 427
+428 0.0156888961791992 0.00999999999999091 0.00999999999999091 0.0 428
+429 0.0410318374633789 0.0500000000000114 0.0500000000000114 0.0 429
+430 0.0159420967102051 0.00999999999999091 0.00999999999999091 0.0 430
+431 0.0159289836883545 0.0200000000000102 0.0200000000000102 0.0 431
+432 0.0157718658447266 0.00999999999999091 0.00999999999999091 0.0 432
+433 0.0156440734863281 0.0200000000000102 0.0200000000000102 0.0 433
+434 0.0156459808349609 0.00999999999999091 0.00999999999999091 0.0 434
+435 0.0156629085540771 0.0200000000000102 0.0200000000000102 0.0 435
+436 0.043510913848877 0.039999999999992 0.039999999999992 0.0 436
+437 0.0160140991210938 0.0200000000000102 0.0200000000000102 0.0 437
+438 0.015984058380127 0.0199999999999818 0.0199999999999818 0.0 438
+439 0.0160889625549316 0.0100000000000193 0.0100000000000193 0.0 439
+440 0.0160849094390869 0.0199999999999818 0.0199999999999818 0.0 440
+441 0.015700101852417 0.0100000000000193 0.0100000000000193 0.0 441
+442 0.0157110691070557 0.0199999999999818 0.0199999999999818 0.0 442
+443 0.0212619304656982 0.0199999999999818 0.0199999999999818 0.0 443
+444 0.0226690769195557 0.0200000000000102 0.0200000000000102 0.0 444
+445 0.0157680511474609 0.0200000000000102 0.0200000000000102 0.0 445
+446 0.015690803527832 0.00999999999999091 0.00999999999999091 0.0 446
+447 0.015653133392334 0.0200000000000102 0.0200000000000102 0.0 447
+448 0.0156688690185547 0.0199999999999818 0.0199999999999818 0.0 448
+449 0.0439548492431641 0.0400000000000205 0.0400000000000205 0.0 449
+450 0.0160410404205322 0.0199999999999818 0.0199999999999818 0.0 450
+451 0.0159320831298828 0.0100000000000193 0.0100000000000193 0.0 451
+452 0.0157608985900879 0.0199999999999818 0.0199999999999818 0.0 452
+453 0.0166118144989014 0.0100000000000193 0.0100000000000193 0.0 453
+454 0.0155959129333496 0.0199999999999818 0.0199999999999818 0.0 454
+455 0.0157961845397949 0.0200000000000102 0.0200000000000102 0.0 455
+456 0.0407929420471191 0.039999999999992 0.039999999999992 0.0 456
+457 0.0160069465637207 0.00999999999999091 0.00999999999999091 0.0 457
+458 0.015955924987793 0.0200000000000102 0.0200000000000102 0.0 458
+459 0.015923023223877 0.0200000000000102 0.0200000000000102 0.0 459
+460 0.0157721042633057 0.00999999999999091 0.00999999999999091 0.0 460
+461 0.0170860290527344 0.0200000000000102 0.0200000000000102 0.0 461
+462 0.0182251930236816 0.0199999999999818 0.0199999999999818 0.0 462
+463 0.0413410663604736 0.0400000000000205 0.0400000000000205 0.0 463
+464 0.0165669918060303 0.00999999999999091 0.00999999999999091 0.0 464
+465 0.0159049034118652 0.0200000000000102 0.0200000000000102 0.0 465
+466 0.0158209800720215 0.0199999999999818 0.0199999999999818 0.0 466
+467 0.0156691074371338 0.0100000000000193 0.0100000000000193 0.0 467
+468 0.0155670642852783 0.0199999999999818 0.0199999999999818 0.0 468
+469 0.0407600402832031 0.039999999999992 0.039999999999992 0.0 469
+470 0.0160460472106934 0.0100000000000193 0.0100000000000193 0.0 470
+471 0.0159029960632324 0.0199999999999818 0.0199999999999818 0.0 471
+472 0.0159380435943604 0.0200000000000102 0.0200000000000102 0.0 472
+473 0.0165109634399414 0.00999999999999091 0.00999999999999091 0.0 473
+474 0.0189468860626221 0.0200000000000102 0.0200000000000102 0.0 474
+475 0.0156781673431396 0.0200000000000102 0.0200000000000102 0.0 475
+476 0.0406448841094971 0.039999999999992 0.039999999999992 0.0 476
+477 0.0160341262817383 0.00999999999999091 0.00999999999999091 0.0 477
+478 0.0160388946533203 0.0200000000000102 0.0200000000000102 0.0 478
+479 0.0163199901580811 0.0200000000000102 0.0200000000000102 0.0 479
+480 0.0158259868621826 0.00999999999999091 0.00999999999999091 0.0 480
+481 0.0156810283660889 0.0199999999999818 0.0199999999999818 0.0 481
+482 0.0157148838043213 0.0100000000000193 0.0100000000000193 0.0 482
+483 0.0412290096282959 0.039999999999992 0.039999999999992 0.0 483
+484 0.0160889625549316 0.0200000000000102 0.0200000000000102 0.0 484
+485 0.0160059928894043 0.0199999999999818 0.0199999999999818 0.0 485
+486 0.0181820392608643 0.0200000000000102 0.0200000000000102 0.0 486
+487 0.0166311264038086 0.00999999999999091 0.00999999999999091 0.0 487
+488 0.0156669616699219 0.0200000000000102 0.0200000000000102 0.0 488
+489 0.0157821178436279 0.00999999999999091 0.00999999999999091 0.0 489
+490 0.0410869121551514 0.0400000000000205 0.0400000000000205 0.0 490
+491 0.0159239768981934 0.0199999999999818 0.0199999999999818 0.0 491
+492 0.0158579349517822 0.0200000000000102 0.0200000000000102 0.0 492
+493 0.0157217979431152 0.00999999999999091 0.00999999999999091 0.0 493
+494 0.021359920501709 0.0200000000000102 0.0200000000000102 0.0 494
+495 0.0177481174468994 0.0199999999999818 0.0199999999999818 0.0 495
+496 0.0405080318450928 0.0400000000000205 0.0400000000000205 0.0 496
+497 0.0161361694335938 0.0199999999999818 0.0199999999999818 0.0 497
+498 0.0198690891265869 0.0200000000000102 0.0200000000000102 0.0 498
+499 0.0160260200500488 0.00999999999999091 0.00999999999999091 0.0 499
+500 0.0157639980316162 0.0200000000000102 0.0200000000000102 0.0 500
+501 0.0156447887420654 0.0200000000000102 0.0200000000000102 0.0 501
+502 0.0156769752502441 0.00999999999999091 0.00999999999999091 0.0 502
+503 0.0437228679656982 0.039999999999992 0.039999999999992 0.0 503
+504 0.0161030292510986 0.0200000000000102 0.0200000000000102 0.0 504
+505 0.016016960144043 0.0199999999999818 0.0199999999999818 0.0 505
+506 0.0158760547637939 0.0100000000000193 0.0100000000000193 0.0 506
+507 0.01578688621521 0.0199999999999818 0.0199999999999818 0.0 507
+508 0.0156271457672119 0.0100000000000193 0.0100000000000193 0.0 508
+509 0.0157058238983154 0.0199999999999818 0.0199999999999818 0.0 509
+510 0.0442900657653809 0.0400000000000205 0.0400000000000205 0.0 510
+511 0.017132043838501 0.0199999999999818 0.0199999999999818 0.0 511
+512 0.0159881114959717 0.0200000000000102 0.0200000000000102 0.0 512
+513 0.0160439014434814 0.00999999999999091 0.00999999999999091 0.0 513
+514 0.0164890289306641 0.0200000000000102 0.0200000000000102 0.0 514
+515 0.0156888961791992 0.0200000000000102 0.0200000000000102 0.0 515
+516 0.040363073348999 0.039999999999992 0.039999999999992 0.0 516
+517 0.0161979198455811 0.00999999999999091 0.00999999999999091 0.0 517
+518 0.0159780979156494 0.0200000000000102 0.0200000000000102 0.0 518
+519 0.0159690380096436 0.00999999999999091 0.00999999999999091 0.0 519
+520 0.015887975692749 0.0200000000000102 0.0200000000000102 0.0 520
+521 0.0156509876251221 0.0199999999999818 0.0199999999999818 0.0 521
+522 0.0156340599060059 0.0100000000000193 0.0100000000000193 0.0 522
+523 0.0451259613037109 0.0499999999999829 0.0499999999999829 0.0 523
+524 0.0159039497375488 0.0100000000000193 0.0100000000000193 0.0 524
+525 0.0158360004425049 0.0199999999999818 0.0199999999999818 0.0 525
+526 0.0157630443572998 0.0100000000000193 0.0100000000000193 0.0 526
+527 0.0156168937683105 0.0199999999999818 0.0199999999999818 0.0 527
+528 0.0156149864196777 0.0200000000000102 0.0200000000000102 0.0 528
+529 0.015984058380127 0.00999999999999091 0.00999999999999091 0.0 529
+530 0.040830135345459 0.039999999999992 0.039999999999992 0.0 530
+531 0.0160219669342041 0.0200000000000102 0.0200000000000102 0.0 531
+532 0.015923023223877 0.0200000000000102 0.0200000000000102 0.0 532
+533 0.0159180164337158 0.00999999999999091 0.00999999999999091 0.0 533
+534 0.0157890319824219 0.0200000000000102 0.0200000000000102 0.0 534
+535 0.0156989097595215 0.00999999999999091 0.00999999999999091 0.0 535
+536 0.043813943862915 0.0500000000000114 0.0500000000000114 0.0 536
+537 0.0161550045013428 0.00999999999999091 0.00999999999999091 0.0 537
+538 0.0161418914794922 0.0200000000000102 0.0200000000000102 0.0 538
+539 0.016010046005249 0.00999999999999091 0.00999999999999091 0.0 539
+540 0.015833854675293 0.0100000000000193 0.0100000000000193 0.0 540
+541 0.0156919956207275 0.0199999999999818 0.0199999999999818 0.0 541
+542 0.0156600475311279 0.0100000000000193 0.0100000000000193 0.0 542
+543 0.0471100807189941 0.0499999999999829 0.0499999999999829 0.0 543
+544 0.0160348415374756 0.0200000000000102 0.0200000000000102 0.0 544
+545 0.0160539150238037 0.00999999999999091 0.00999999999999091 0.0 545
+546 0.0158519744873047 0.0200000000000102 0.0200000000000102 0.0 546
+547 0.0158119201660156 0.00999999999999091 0.00999999999999091 0.0 547
+548 0.0178709030151367 0.0200000000000102 0.0200000000000102 0.0 548
+549 0.0169069766998291 0.0199999999999818 0.0199999999999818 0.0 549
+550 0.0407388210296631 0.0400000000000205 0.0400000000000205 0.0 550
+551 0.0159931182861328 0.0199999999999818 0.0199999999999818 0.0 551
+552 0.0167689323425293 0.0100000000000193 0.0100000000000193 0.0 552
+553 0.015841007232666 0.0199999999999818 0.0199999999999818 0.0 553
+554 0.0158300399780273 0.0100000000000193 0.0100000000000193 0.0 554
+555 0.0156581401824951 0.0199999999999818 0.0199999999999818 0.0 555
+556 0.0406780242919922 0.039999999999992 0.039999999999992 0.0 556
+557 0.0162060260772705 0.0200000000000102 0.0200000000000102 0.0 557
+558 0.0160999298095703 0.00999999999999091 0.00999999999999091 0.0 558
+559 0.0159580707550049 0.0200000000000102 0.0200000000000102 0.0 559
+560 0.0159261226654053 0.00999999999999091 0.00999999999999091 0.0 560
+561 0.0199720859527588 0.0200000000000102 0.0200000000000102 0.0 561
+562 0.0157170295715332 0.0200000000000102 0.0200000000000102 0.0 562
+563 0.041780948638916 0.039999999999992 0.039999999999992 0.0 563
+564 0.0160281658172607 0.0200000000000102 0.0200000000000102 0.0 564
+565 0.0160350799560547 0.00999999999999091 0.00999999999999091 0.0 565
+566 0.0158600807189941 0.0200000000000102 0.0200000000000102 0.0 566
+567 0.0157890319824219 0.0199999999999818 0.0199999999999818 0.0 567
+568 0.01568603515625 0.00999999999999091 0.00999999999999091 0.0 568
+569 0.0157349109649658 0.0200000000000102 0.0200000000000102 0.0 569
+570 0.0407240390777588 0.039999999999992 0.039999999999992 0.0 570
+571 0.0159690380096436 0.0100000000000193 0.0100000000000193 0.0 571
+572 0.0166740417480469 0.0199999999999818 0.0199999999999818 0.0 572
+573 0.0183789730072021 0.0200000000000102 0.0200000000000102 0.0 573
+574 0.0158569812774658 0.0200000000000102 0.0200000000000102 0.0 574
+575 0.0156340599060059 0.00999999999999091 0.00999999999999091 0.0 575
+576 0.0408451557159424 0.039999999999992 0.039999999999992 0.0 576
+577 0.0160448551177979 0.0200000000000102 0.0200000000000102 0.0 577
+578 0.0162789821624756 0.00999999999999091 0.00999999999999091 0.0 578
+579 0.0159311294555664 0.0200000000000102 0.0200000000000102 0.0 579
+580 0.0158848762512207 0.0199999999999818 0.0199999999999818 0.0 580
+581 0.0157999992370605 0.0100000000000193 0.0100000000000193 0.0 581
+582 0.0156741142272949 0.0199999999999818 0.0199999999999818 0.0 582
+583 0.0409140586853027 0.0400000000000205 0.0400000000000205 0.0 583
+584 0.0159211158752441 0.0199999999999818 0.0199999999999818 0.0 584
+585 0.0184950828552246 0.0100000000000193 0.0100000000000193 0.0 585
+586 0.0168490409851074 0.0199999999999818 0.0199999999999818 0.0 586
+587 0.0156459808349609 0.0200000000000102 0.0200000000000102 0.0 587
+588 0.0156338214874268 0.00999999999999091 0.00999999999999091 0.0 588
+589 0.0159139633178711 0.0200000000000102 0.0200000000000102 0.0 589
+590 0.0407509803771973 0.039999999999992 0.039999999999992 0.0 590
+591 0.0159850120544434 0.0100000000000193 0.0100000000000193 0.0 591
+592 0.0159389972686768 0.0199999999999818 0.0199999999999818 0.0 592
+593 0.0213720798492432 0.0200000000000102 0.0200000000000102 0.0 593
+594 0.0177850723266602 0.0199999999999818 0.0199999999999818 0.0 594
+595 0.0157310962677002 0.0200000000000102 0.0200000000000102 0.0 595
+596 0.0403420925140381 0.039999999999992 0.039999999999992 0.0 596
+597 0.0190529823303223 0.0200000000000102 0.0200000000000102 0.0 597
+598 0.0169448852539062 0.00999999999999091 0.00999999999999091 0.0 598
+599 0.0159680843353271 0.0200000000000102 0.0200000000000102 0.0 599
+600 0.0158801078796387 0.00999999999999091 0.00999999999999091 0.0 600
+601 0.0156979560852051 0.0200000000000102 0.0200000000000102 0.0 601
+602 0.0156271457672119 0.0200000000000102 0.0200000000000102 0.0 602
+603 0.0415568351745605 0.039999999999992 0.039999999999992 0.0 603
+604 0.0159718990325928 0.00999999999999091 0.00999999999999091 0.0 604
+605 0.0159180164337158 0.0200000000000102 0.0200000000000102 0.0 605
+606 0.0158648490905762 0.0199999999999818 0.0199999999999818 0.0 606
+607 0.0156810283660889 0.0100000000000193 0.0100000000000193 0.0 607
+608 0.0156228542327881 0.0199999999999818 0.0199999999999818 0.0 608
+609 0.0157201290130615 0.0100000000000193 0.0100000000000193 0.0 609
+610 0.0439960956573486 0.0499999999999829 0.0499999999999829 0.0 610
+611 0.0160610675811768 0.0100000000000193 0.0100000000000193 0.0 611
+612 0.0161979198455811 0.0199999999999818 0.0199999999999818 0.0 612
+613 0.0165619850158691 0.0200000000000102 0.0200000000000102 0.0 613
+614 0.0157890319824219 0.00999999999999091 0.00999999999999091 0.0 614
+615 0.0156469345092773 0.0200000000000102 0.0200000000000102 0.0 615
+616 0.0402541160583496 0.039999999999992 0.039999999999992 0.0 616
+617 0.0161638259887695 0.00999999999999091 0.00999999999999091 0.0 617
+618 0.0160119533538818 0.0200000000000102 0.0200000000000102 0.0 618
+619 0.0159289836883545 0.0200000000000102 0.0200000000000102 0.0 619
+620 0.0159239768981934 0.00999999999999091 0.00999999999999091 0.0 620
+621 0.0156819820404053 0.0200000000000102 0.0200000000000102 0.0 621
+622 0.0163209438323975 0.00999999999999091 0.00999999999999091 0.0 622
+623 0.0430841445922852 0.0500000000000114 0.0500000000000114 0.0 623
+624 0.0160331726074219 0.00999999999999091 0.00999999999999091 0.0 624
+625 0.0159151554107666 0.0200000000000102 0.0200000000000102 0.0 625
+626 0.0158572196960449 0.00999999999999091 0.00999999999999091 0.0 626
+627 0.0157380104064941 0.0100000000000193 0.0100000000000193 0.0 627
+628 0.015657901763916 0.0199999999999818 0.0199999999999818 0.0 628
+629 0.016016960144043 0.0100000000000193 0.0100000000000193 0.0 629
+630 0.0407459735870361 0.039999999999992 0.039999999999992 0.0 630
+631 0.0159480571746826 0.0199999999999818 0.0199999999999818 0.0 631
+632 0.0159869194030762 0.0200000000000102 0.0200000000000102 0.0 632
+633 0.0159099102020264 0.00999999999999091 0.00999999999999091 0.0 633
+634 0.0157899856567383 0.0200000000000102 0.0200000000000102 0.0 634
+635 0.0156879425048828 0.00999999999999091 0.00999999999999091 0.0 635
+636 0.0428619384765625 0.0500000000000114 0.0500000000000114 0.0 636
+637 0.0161869525909424 0.00999999999999091 0.00999999999999091 0.0 637
+638 0.0162138938903809 0.0200000000000102 0.0200000000000102 0.0 638
+639 0.0158801078796387 0.00999999999999091 0.00999999999999091 0.0 639
+640 0.0158560276031494 0.0200000000000102 0.0200000000000102 0.0 640
+641 0.0156440734863281 0.00999999999999091 0.00999999999999091 0.0 641
+642 0.0156350135803223 0.0200000000000102 0.0200000000000102 0.0 642
+643 0.047083854675293 0.0499999999999829 0.0499999999999829 0.0 643
+644 0.0159060955047607 0.0100000000000193 0.0100000000000193 0.0 644
+645 0.0158288478851318 0.0199999999999818 0.0199999999999818 0.0 645
+646 0.0157370567321777 0.0200000000000102 0.0200000000000102 0.0 646
+647 0.0155889987945557 0.00999999999999091 0.00999999999999091 0.0 647
+648 0.0187828540802002 0.0200000000000102 0.0200000000000102 0.0 648
+649 0.0158119201660156 0.0200000000000102 0.0200000000000102 0.0 649
+650 0.0408198833465576 0.039999999999992 0.039999999999992 0.0 650
+651 0.0160138607025146 0.00999999999999091 0.00999999999999091 0.0 651
+652 0.0169661045074463 0.0200000000000102 0.0200000000000102 0.0 652
+653 0.0158448219299316 0.0200000000000102 0.0200000000000102 0.0 653
+654 0.0157639980316162 0.00999999999999091 0.00999999999999091 0.0 654
+655 0.0156838893890381 0.0199999999999818 0.0199999999999818 0.0 655
+656 0.0403389930725098 0.0400000000000205 0.0400000000000205 0.0 656
+657 0.0161681175231934 0.00999999999999091 0.00999999999999091 0.0 657
+658 0.015963077545166 0.0200000000000102 0.0200000000000102 0.0 658
+659 0.0159058570861816 0.0199999999999818 0.0199999999999818 0.0 659
+660 0.0177428722381592 0.0100000000000193 0.0100000000000193 0.0 660
+661 0.0171470642089844 0.0199999999999818 0.0199999999999818 0.0 661
+662 0.015761137008667 0.0200000000000102 0.0200000000000102 0.0 662
+663 0.0421710014343262 0.039999999999992 0.039999999999992 0.0 663
+664 0.0159869194030762 0.0100000000000193 0.0100000000000193 0.0 664
+665 0.0158960819244385 0.0199999999999818 0.0199999999999818 0.0 665
+666 0.0158309936523438 0.0200000000000102 0.0200000000000102 0.0 666
+667 0.0156588554382324 0.00999999999999091 0.00999999999999091 0.0 667
+668 0.0155930519104004 0.0200000000000102 0.0200000000000102 0.0 668
+669 0.0157339572906494 0.00999999999999091 0.00999999999999091 0.0 669
+670 0.0408949851989746 0.039999999999992 0.039999999999992 0.0 670
+671 0.0166690349578857 0.0200000000000102 0.0200000000000102 0.0 671
+672 0.015967845916748 0.0200000000000102 0.0200000000000102 0.0 672
+673 0.0183408260345459 0.0199999999999818 0.0199999999999818 0.0 673
+674 0.0157818794250488 0.0100000000000193 0.0100000000000193 0.0 674
+675 0.0156641006469727 0.0199999999999818 0.0199999999999818 0.0 675
+676 0.0403289794921875 0.0400000000000205 0.0400000000000205 0.0 676
+677 0.0160641670227051 0.00999999999999091 0.00999999999999091 0.0 677
+678 0.0162630081176758 0.0200000000000102 0.0200000000000102 0.0 678
+679 0.0158939361572266 0.0199999999999818 0.0199999999999818 0.0 679
+680 0.0158121585845947 0.00999999999999091 0.00999999999999091 0.0 680
+681 0.0155899524688721 0.0200000000000102 0.0200000000000102 0.0 681
+682 0.0156369209289551 0.00999999999999091 0.00999999999999091 0.0 682
+683 0.0411529541015625 0.0400000000000205 0.0400000000000205 0.0 683
+684 0.0160119533538818 0.0199999999999818 0.0199999999999818 0.0 684
+685 0.0188088417053223 0.0200000000000102 0.0200000000000102 0.0 685
+686 0.0159080028533936 0.0200000000000102 0.0200000000000102 0.0 686
+687 0.0157148838043213 0.00999999999999091 0.00999999999999091 0.0 687
+688 0.0155959129333496 0.0200000000000102 0.0200000000000102 0.0 688
+689 0.0412189960479736 0.039999999999992 0.039999999999992 0.0 689
+690 0.015995979309082 0.00999999999999091 0.00999999999999091 0.0 690
+691 0.0159540176391602 0.0200000000000102 0.0200000000000102 0.0 691
+692 0.015949010848999 0.0199999999999818 0.0199999999999818 0.0 692
+693 0.0234458446502686 0.0200000000000102 0.0200000000000102 0.0 693
+694 0.0157320499420166 0.0200000000000102 0.0200000000000102 0.0 694
+695 0.0157339572906494 0.00999999999999091 0.00999999999999091 0.0 695
+696 0.0404260158538818 0.039999999999992 0.039999999999992 0.0 696
+697 0.0190789699554443 0.0200000000000102 0.0200000000000102 0.0 697
+698 0.0159289836883545 0.0200000000000102 0.0200000000000102 0.0 698
+699 0.0157830715179443 0.00999999999999091 0.00999999999999091 0.0 699
+700 0.0156319141387939 0.0200000000000102 0.0200000000000102 0.0 700
+701 0.01556396484375 0.00999999999999091 0.00999999999999091 0.0 701
+702 0.0156660079956055 0.0200000000000102 0.0200000000000102 0.0 702
+703 0.0413651466369629 0.039999999999992 0.039999999999992 0.0 703
+704 0.0159580707550049 0.0199999999999818 0.0199999999999818 0.0 704
+705 0.0158989429473877 0.0100000000000193 0.0100000000000193 0.0 705
+706 0.0158150196075439 0.0199999999999818 0.0199999999999818 0.0 706
+707 0.0156781673431396 0.0100000000000193 0.0100000000000193 0.0 707
+708 0.0156269073486328 0.0199999999999818 0.0199999999999818 0.0 708
+709 0.041424036026001 0.0400000000000205 0.0400000000000205 0.0 709
+710 0.0184199810028076 0.0199999999999818 0.0199999999999818 0.0 710
+711 0.0159978866577148 0.0200000000000102 0.0200000000000102 0.0 711
+712 0.0160419940948486 0.00999999999999091 0.00999999999999091 0.0 712
+713 0.016589879989624 0.0200000000000102 0.0200000000000102 0.0 713
+714 0.0156559944152832 0.0200000000000102 0.0200000000000102 0.0 714
+715 0.0157039165496826 0.00999999999999091 0.00999999999999091 0.0 715
+716 0.0408508777618408 0.039999999999992 0.039999999999992 0.0 716
+717 0.0159609317779541 0.0200000000000102 0.0200000000000102 0.0 717
+718 0.0159869194030762 0.00999999999999091 0.00999999999999091 0.0 718
+719 0.0159101486206055 0.0200000000000102 0.0200000000000102 0.0 719
+720 0.0156970024108887 0.0199999999999818 0.0199999999999818 0.0 720
+721 0.0155429840087891 0.0100000000000193 0.0100000000000193 0.0 721
+722 0.0163400173187256 0.0199999999999818 0.0199999999999818 0.0 722
+723 0.0429699420928955 0.0400000000000205 0.0400000000000205 0.0 723
+724 0.0160400867462158 0.0199999999999818 0.0199999999999818 0.0 724
+725 0.0159778594970703 0.0100000000000193 0.0100000000000193 0.0 725
+726 0.015826940536499 0.0199999999999818 0.0199999999999818 0.0 726
+727 0.0156888961791992 0.0100000000000193 0.0100000000000193 0.0 727
+728 0.0159649848937988 0.0199999999999818 0.0199999999999818 0.0 728
+729 0.0405631065368652 0.039999999999992 0.039999999999992 0.0 729
+730 0.0161111354827881 0.0200000000000102 0.0200000000000102 0.0 730
+731 0.0158760547637939 0.00999999999999091 0.00999999999999091 0.0 731
+732 0.0159549713134766 0.0200000000000102 0.0200000000000102 0.0 732
+733 0.0157599449157715 0.00999999999999091 0.00999999999999091 0.0 733
+734 0.0157549381256104 0.0200000000000102 0.0200000000000102 0.0 734
+735 0.0156841278076172 0.0200000000000102 0.0200000000000102 0.0 735
+736 0.0429198741912842 0.039999999999992 0.039999999999992 0.0 736
+737 0.0159552097320557 0.0200000000000102 0.0200000000000102 0.0 737
+738 0.016150951385498 0.00999999999999091 0.00999999999999091 0.0 738
+739 0.0157721042633057 0.0200000000000102 0.0200000000000102 0.0 739
+740 0.0156459808349609 0.00999999999999091 0.00999999999999091 0.0 740
+741 0.0156309604644775 0.0200000000000102 0.0200000000000102 0.0 741
+742 0.0458109378814697 0.039999999999992 0.039999999999992 0.0 742
+743 0.0170071125030518 0.0199999999999818 0.0199999999999818 0.0 743
+744 0.0160090923309326 0.0200000000000102 0.0200000000000102 0.0 744
+745 0.0158901214599609 0.00999999999999091 0.00999999999999091 0.0 745
+746 0.0158569812774658 0.0200000000000102 0.0200000000000102 0.0 746
+747 0.0156040191650391 0.0200000000000102 0.0200000000000102 0.0 747
+748 0.0188460350036621 0.00999999999999091 0.00999999999999091 0.0 748
+749 0.0407531261444092 0.0500000000000114 0.0500000000000114 0.0 749
+750 0.0160620212554932 0.00999999999999091 0.00999999999999091 0.0 750
+751 0.0160109996795654 0.0200000000000102 0.0200000000000102 0.0 751
+752 0.0167930126190186 0.00999999999999091 0.00999999999999091 0.0 752
+753 0.0158519744873047 0.0200000000000102 0.0200000000000102 0.0 753
+754 0.0157589912414551 0.0199999999999818 0.0199999999999818 0.0 754
+755 0.0156669616699219 0.00999999999999091 0.00999999999999091 0.0 755
+756 0.0408079624176025 0.0400000000000205 0.0400000000000205 0.0 756
+757 0.0160200595855713 0.0199999999999818 0.0199999999999818 0.0 757
+758 0.015981912612915 0.0100000000000193 0.0100000000000193 0.0 758
+759 0.0158510208129883 0.0199999999999818 0.0199999999999818 0.0 759
+760 0.0184319019317627 0.0200000000000102 0.0200000000000102 0.0 760
+761 0.0160219669342041 0.0200000000000102 0.0200000000000102 0.0 761
+762 0.0413029193878174 0.039999999999992 0.039999999999992 0.0 762
+763 0.0162460803985596 0.00999999999999091 0.00999999999999091 0.0 763
+764 0.0159189701080322 0.0200000000000102 0.0200000000000102 0.0 764
+765 0.0158321857452393 0.00999999999999091 0.00999999999999091 0.0 765
+766 0.0157649517059326 0.0200000000000102 0.0200000000000102 0.0 766
+767 0.0156459808349609 0.0199999999999818 0.0199999999999818 0.0 767
+768 0.0156371593475342 0.0100000000000193 0.0100000000000193 0.0 768
+769 0.042356014251709 0.039999999999992 0.039999999999992 0.0 769
+770 0.0159518718719482 0.0200000000000102 0.0200000000000102 0.0 770
+771 0.0165510177612305 0.0199999999999818 0.0199999999999818 0.0 771
+772 0.0166161060333252 0.0100000000000193 0.0100000000000193 0.0 772
+773 0.0192360877990723 0.0199999999999818 0.0199999999999818 0.0 773
+774 0.0156729221343994 0.0200000000000102 0.0200000000000102 0.0 774
+775 0.0404140949249268 0.039999999999992 0.039999999999992 0.0 775
+776 0.0159680843353271 0.0100000000000193 0.0100000000000193 0.0 776
+777 0.0160880088806152 0.0199999999999818 0.0199999999999818 0.0 777
+778 0.0158729553222656 0.0200000000000102 0.0200000000000102 0.0 778
+779 0.0157761573791504 0.00999999999999091 0.00999999999999091 0.0 779
+780 0.0156121253967285 0.0200000000000102 0.0200000000000102 0.0 780
+781 0.0156919956207275 0.00999999999999091 0.00999999999999091 0.0 781
+782 0.0405950546264648 0.039999999999992 0.039999999999992 0.0 782
+783 0.0157918930053711 0.0200000000000102 0.0200000000000102 0.0 783
+784 0.0157120227813721 0.0200000000000102 0.0200000000000102 0.0 784
+785 0.018751859664917 0.00999999999999091 0.00999999999999091 0.0 785
+786 0.0155041217803955 0.0200000000000102 0.0200000000000102 0.0 786
+787 0.0158028602600098 0.0199999999999818 0.0199999999999818 0.0 787
+788 0.0158569812774658 0.0100000000000193 0.0100000000000193 0.0 788
+789 0.0412540435791016 0.039999999999992 0.039999999999992 0.0 789
+790 0.0160260200500488 0.0200000000000102 0.0200000000000102 0.0 790
+791 0.0159499645233154 0.0199999999999818 0.0199999999999818 0.0 791
+792 0.019320011138916 0.00999999999999091 0.00999999999999091 0.0 792
+793 0.0201430320739746 0.0200000000000102 0.0200000000000102 0.0 793
+794 0.0157289505004883 0.0200000000000102 0.0200000000000102 0.0 794
+795 0.0402889251708984 0.039999999999992 0.039999999999992 0.0 795
+796 0.0161571502685547 0.0200000000000102 0.0200000000000102 0.0 796
+797 0.0203540325164795 0.0199999999999818 0.0199999999999818 0.0 797
+798 0.0160300731658936 0.0100000000000193 0.0100000000000193 0.0 798
+799 0.0157592296600342 0.0199999999999818 0.0199999999999818 0.0 799
+800 0.0156340599060059 0.0200000000000102 0.0200000000000102 0.0 800
+801 0.0156660079956055 0.00999999999999091 0.00999999999999091 0.0 801
+802 0.0413990020751953 0.0400000000000205 0.0400000000000205 0.0 802
+803 0.0160489082336426 0.0199999999999818 0.0199999999999818 0.0 803
+804 0.0158998966217041 0.00999999999999091 0.00999999999999091 0.0 804
+805 0.0157411098480225 0.0200000000000102 0.0200000000000102 0.0 805
+806 0.01564621925354 0.0200000000000102 0.0200000000000102 0.0 806
+807 0.0156128406524658 0.00999999999999091 0.00999999999999091 0.0 807
+808 0.0405199527740479 0.039999999999992 0.039999999999992 0.0 808
+809 0.0189261436462402 0.0200000000000102 0.0200000000000102 0.0 809
+810 0.0164599418640137 0.0200000000000102 0.0200000000000102 0.0 810
+811 0.0159981250762939 0.00999999999999091 0.00999999999999091 0.0 811
+812 0.0159931182861328 0.0200000000000102 0.0200000000000102 0.0 812
+813 0.0164968967437744 0.0199999999999818 0.0199999999999818 0.0 813
+814 0.0156979560852051 0.0100000000000193 0.0100000000000193 0.0 814
+815 0.0407021045684814 0.039999999999992 0.039999999999992 0.0 815
+816 0.0162220001220703 0.0199999999999818 0.0199999999999818 0.0 816
+817 0.0161950588226318 0.0200000000000102 0.0200000000000102 0.0 817
+818 0.016150951385498 0.00999999999999091 0.00999999999999091 0.0 818
+819 0.0162560939788818 0.0200000000000102 0.0200000000000102 0.0 819
+820 0.0156610012054443 0.00999999999999091 0.00999999999999091 0.0 820
+821 0.0164270401000977 0.0200000000000102 0.0200000000000102 0.0 821
+822 0.0451018810272217 0.0500000000000114 0.0500000000000114 0.0 822
+823 0.0159950256347656 0.00999999999999091 0.00999999999999091 0.0 823
+824 0.015963077545166 0.0200000000000102 0.0200000000000102 0.0 824
+825 0.0158100128173828 0.00999999999999091 0.00999999999999091 0.0 825
+826 0.0157589912414551 0.0200000000000102 0.0200000000000102 0.0 826
+827 0.0156979560852051 0.00999999999999091 0.00999999999999091 0.0 827
+828 0.0408341884613037 0.0499999999999829 0.0499999999999829 0.0 828
+829 0.0160629749298096 0.0100000000000193 0.0100000000000193 0.0 829
+830 0.015963077545166 0.0199999999999818 0.0199999999999818 0.0 830
+831 0.0164670944213867 0.0100000000000193 0.0100000000000193 0.0 831
+832 0.0157999992370605 0.0199999999999818 0.0199999999999818 0.0 832
+833 0.0158040523529053 0.0200000000000102 0.0200000000000102 0.0 833
+834 0.0157339572906494 0.00999999999999091 0.00999999999999091 0.0 834
+835 0.0431559085845947 0.0400000000000205 0.0400000000000205 0.0 835
+836 0.0160439014434814 0.00999999999999091 0.00999999999999091 0.0 836
+837 0.0160748958587646 0.0200000000000102 0.0200000000000102 0.0 837
+838 0.015887975692749 0.00999999999999091 0.00999999999999091 0.0 838
+839 0.0156698226928711 0.0200000000000102 0.0200000000000102 0.0 839
+840 0.01568603515625 0.00999999999999091 0.00999999999999091 0.0 840
+841 0.044741153717041 0.0500000000000114 0.0500000000000114 0.0 841
+842 0.018258810043335 0.0199999999999818 0.0199999999999818 0.0 842
+843 0.0159640312194824 0.0100000000000193 0.0100000000000193 0.0 843
+844 0.0158689022064209 0.0199999999999818 0.0199999999999818 0.0 844
+845 0.0158030986785889 0.0200000000000102 0.0200000000000102 0.0 845
+846 0.0156970024108887 0.00999999999999091 0.00999999999999091 0.0 846
+847 0.0167360305786133 0.0200000000000102 0.0200000000000102 0.0 847
+848 0.0449869632720947 0.039999999999992 0.039999999999992 0.0 848
+849 0.0159621238708496 0.0200000000000102 0.0200000000000102 0.0 849
+850 0.0158789157867432 0.0200000000000102 0.0200000000000102 0.0 850
+851 0.0166089534759521 0.00999999999999091 0.00999999999999091 0.0 851
+852 0.0156459808349609 0.0200000000000102 0.0200000000000102 0.0 852
+853 0.0158588886260986 0.00999999999999091 0.00999999999999091 0.0 853
+854 0.0406129360198975 0.039999999999992 0.039999999999992 0.0 854
+855 0.0159440040588379 0.0200000000000102 0.0200000000000102 0.0 855
+856 0.0158100128173828 0.0199999999999818 0.0199999999999818 0.0 856
+857 0.0157890319824219 0.0100000000000193 0.0100000000000193 0.0 857
+858 0.015923023223877 0.0199999999999818 0.0199999999999818 0.0 858
+859 0.0155861377716064 0.0100000000000193 0.0100000000000193 0.0 859
+860 0.0188548564910889 0.0199999999999818 0.0199999999999818 0.0 860
+861 0.0412931442260742 0.0400000000000205 0.0400000000000205 0.0 861
+862 0.0165369510650635 0.0199999999999818 0.0199999999999818 0.0 862
+863 0.0160419940948486 0.0200000000000102 0.0200000000000102 0.0 863
+864 0.0164439678192139 0.00999999999999091 0.00999999999999091 0.0 864
+865 0.0157101154327393 0.0200000000000102 0.0200000000000102 0.0 865
+866 0.0156807899475098 0.00999999999999091 0.00999999999999091 0.0 866
+867 0.0156638622283936 0.0200000000000102 0.0200000000000102 0.0 867
+868 0.040902853012085 0.039999999999992 0.039999999999992 0.0 868
+869 0.0159800052642822 0.0200000000000102 0.0200000000000102 0.0 869
+870 0.0166110992431641 0.00999999999999091 0.00999999999999091 0.0 870
+871 0.017413854598999 0.0200000000000102 0.0200000000000102 0.0 871
+872 0.0192930698394775 0.0199999999999818 0.0199999999999818 0.0 872
+873 0.0160510540008545 0.0100000000000193 0.0100000000000193 0.0 873
+874 0.0406858921051025 0.0499999999999829 0.0499999999999829 0.0 874
+875 0.0160770416259766 0.0100000000000193 0.0100000000000193 0.0 875
+876 0.0161919593811035 0.0199999999999818 0.0199999999999818 0.0 876
+877 0.015955924987793 0.0100000000000193 0.0100000000000193 0.0 877
+878 0.0158419609069824 0.0199999999999818 0.0199999999999818 0.0 878
+879 0.0157468318939209 0.0200000000000102 0.0200000000000102 0.0 879
+880 0.0157167911529541 0.00999999999999091 0.00999999999999091 0.0 880
+881 0.040755033493042 0.039999999999992 0.039999999999992 0.0 881
+882 0.0160150527954102 0.0200000000000102 0.0200000000000102 0.0 882
+883 0.0159170627593994 0.00999999999999091 0.00999999999999091 0.0 883
+884 0.0180459022521973 0.0200000000000102 0.0200000000000102 0.0 884
+885 0.01603102684021 0.0200000000000102 0.0200000000000102 0.0 885
+886 0.0156559944152832 0.00999999999999091 0.00999999999999091 0.0 886
+887 0.040722131729126 0.039999999999992 0.039999999999992 0.0 887
+888 0.0161468982696533 0.0200000000000102 0.0200000000000102 0.0 888
+889 0.0159561634063721 0.0200000000000102 0.0200000000000102 0.0 889
+890 0.0158951282501221 0.00999999999999091 0.00999999999999091 0.0 890
+891 0.0195560455322266 0.0199999999999818 0.0199999999999818 0.0 891
+892 0.0194118022918701 0.0200000000000102 0.0200000000000102 0.0 892
+893 0.0158801078796387 0.0200000000000102 0.0200000000000102 0.0 893
+894 0.0406708717346191 0.039999999999992 0.039999999999992 0.0 894
+895 0.0159239768981934 0.00999999999999091 0.00999999999999091 0.0 895
+896 0.0185558795928955 0.0200000000000102 0.0200000000000102 0.0 896
+897 0.0165250301361084 0.0200000000000102 0.0200000000000102 0.0 897
+898 0.0156872272491455 0.00999999999999091 0.00999999999999091 0.0 898
+899 0.0156629085540771 0.0200000000000102 0.0200000000000102 0.0 899
+900 0.0411269664764404 0.039999999999992 0.039999999999992 0.0 900
+901 0.0161049365997314 0.0200000000000102 0.0200000000000102 0.0 901
+902 0.0159130096435547 0.00999999999999091 0.00999999999999091 0.0 902
+903 0.0158100128173828 0.0199999999999818 0.0199999999999818 0.0 903
+904 0.0157549381256104 0.0200000000000102 0.0200000000000102 0.0 904
+905 0.0155808925628662 0.00999999999999091 0.00999999999999091 0.0 905
+906 0.0157089233398438 0.0200000000000102 0.0200000000000102 0.0 906
+907 0.040733814239502 0.039999999999992 0.039999999999992 0.0 907
+908 0.0157508850097656 0.0100000000000193 0.0100000000000193 0.0 908
+909 0.0190198421478271 0.0199999999999818 0.0199999999999818 0.0 909
+910 0.0157220363616943 0.0200000000000102 0.0200000000000102 0.0 910
+911 0.0156431198120117 0.00999999999999091 0.00999999999999091 0.0 911
+912 0.0163240432739258 0.0200000000000102 0.0200000000000102 0.0 912
+913 0.0405840873718262 0.039999999999992 0.039999999999992 0.0 913
+914 0.0158839225769043 0.0200000000000102 0.0200000000000102 0.0 914
+915 0.0158710479736328 0.00999999999999091 0.00999999999999091 0.0 915
+916 0.0157589912414551 0.0200000000000102 0.0200000000000102 0.0 916
+917 0.0157959461212158 0.00999999999999091 0.00999999999999091 0.0 917
+918 0.0156550407409668 0.0200000000000102 0.0200000000000102 0.0 918
+919 0.0157132148742676 0.0199999999999818 0.0199999999999818 0.0 919
+920 0.0412201881408691 0.0400000000000205 0.0400000000000205 0.0 920
+921 0.0189180374145508 0.0199999999999818 0.0199999999999818 0.0 921
+922 0.0160009860992432 0.0100000000000193 0.0100000000000193 0.0 922
+923 0.0156481266021729 0.0199999999999818 0.0199999999999818 0.0 923
+924 0.0155301094055176 0.0100000000000193 0.0100000000000193 0.0 924
+925 0.015531063079834 0.0199999999999818 0.0199999999999818 0.0 925
+926 0.0156428813934326 0.0200000000000102 0.0200000000000102 0.0 926
+927 0.0410211086273193 0.039999999999992 0.039999999999992 0.0 927
+928 0.0159690380096436 0.00999999999999091 0.00999999999999091 0.0 928
+929 0.0158920288085938 0.0200000000000102 0.0200000000000102 0.0 929
+930 0.0157539844512939 0.00999999999999091 0.00999999999999091 0.0 930
+931 0.0157601833343506 0.0200000000000102 0.0200000000000102 0.0 931
+932 0.0157170295715332 0.0200000000000102 0.0200000000000102 0.0 932
+933 0.041064977645874 0.039999999999992 0.039999999999992 0.0 933
+934 0.0186421871185303 0.0200000000000102 0.0200000000000102 0.0 934
+935 0.0160388946533203 0.00999999999999091 0.00999999999999091 0.0 935
+936 0.0158660411834717 0.0200000000000102 0.0200000000000102 0.0 936
+937 0.0163609981536865 0.00999999999999091 0.00999999999999091 0.0 937
+938 0.0156807899475098 0.0200000000000102 0.0200000000000102 0.0 938
+939 0.0157260894775391 0.0199999999999818 0.0199999999999818 0.0 939
+940 0.0416240692138672 0.039999999999992 0.039999999999992 0.0 940
+941 0.0218920707702637 0.0200000000000102 0.0200000000000102 0.0 941
+942 0.015984058380127 0.0200000000000102 0.0200000000000102 0.0 942
+943 0.0157361030578613 0.00999999999999091 0.00999999999999091 0.0 943
+944 0.015678882598877 0.0200000000000102 0.0200000000000102 0.0 944
+945 0.0157279968261719 0.00999999999999091 0.00999999999999091 0.0 945
+946 0.0436809062957764 0.0500000000000114 0.0500000000000114 0.0 946
+947 0.016185998916626 0.00999999999999091 0.00999999999999091 0.0 947
+948 0.0159549713134766 0.0200000000000102 0.0200000000000102 0.0 948
+949 0.015841007232666 0.00999999999999091 0.00999999999999091 0.0 949
+950 0.0157299041748047 0.0200000000000102 0.0200000000000102 0.0 950
+951 0.0167520046234131 0.0199999999999818 0.0199999999999818 0.0 951
+952 0.0157999992370605 0.0100000000000193 0.0100000000000193 0.0 952
+953 0.0407941341400146 0.039999999999992 0.039999999999992 0.0 953
+954 0.0159251689910889 0.0199999999999818 0.0199999999999818 0.0 954
+955 0.0158488750457764 0.0100000000000193 0.0100000000000193 0.0 955
+956 0.0157351493835449 0.0199999999999818 0.0199999999999818 0.0 956
+957 0.0157461166381836 0.0100000000000193 0.0100000000000193 0.0 957
+958 0.0157830715179443 0.00999999999999091 0.00999999999999091 0.0 958
+959 0.0440328121185303 0.0400000000000205 0.0400000000000205 0.0 959
+960 0.0163891315460205 0.0199999999999818 0.0199999999999818 0.0 960
+961 0.0172231197357178 0.0200000000000102 0.0200000000000102 0.0 961
+962 0.0159628391265869 0.00999999999999091 0.00999999999999091 0.0 962
+963 0.0158162117004395 0.0200000000000102 0.0200000000000102 0.0 963
+964 0.0156660079956055 0.0200000000000102 0.0200000000000102 0.0 964
+965 0.0156989097595215 0.00999999999999091 0.00999999999999091 0.0 965
+966 0.0409789085388184 0.039999999999992 0.039999999999992 0.0 966
+967 0.0159859657287598 0.0200000000000102 0.0200000000000102 0.0 967
+968 0.0158331394195557 0.00999999999999091 0.00999999999999091 0.0 968
+969 0.0157871246337891 0.0200000000000102 0.0200000000000102 0.0 969
+970 0.0163278579711914 0.0199999999999818 0.0199999999999818 0.0 970
+971 0.0156929492950439 0.0100000000000193 0.0100000000000193 0.0 971
+972 0.0429351329803467 0.039999999999992 0.039999999999992 0.0 972
+973 0.0161349773406982 0.0100000000000193 0.0100000000000193 0.0 973
+974 0.0159289836883545 0.0199999999999818 0.0199999999999818 0.0 974
+975 0.0159060955047607 0.0100000000000193 0.0100000000000193 0.0 975
+976 0.0160870552062988 0.0199999999999818 0.0199999999999818 0.0 976
+977 0.0157091617584229 0.0100000000000193 0.0100000000000193 0.0 977
+978 0.0156669616699219 0.00999999999999091 0.00999999999999091 0.0 978
+979 0.0407209396362305 0.039999999999992 0.039999999999992 0.0 979
+980 0.0159940719604492 0.0200000000000102 0.0200000000000102 0.0 980
+981 0.0158989429473877 0.00999999999999091 0.00999999999999091 0.0 981
+982 0.0158960819244385 0.0200000000000102 0.0200000000000102 0.0 982
+983 0.0157449245452881 0.0200000000000102 0.0200000000000102 0.0 983
+984 0.0183939933776855 0.00999999999999091 0.00999999999999091 0.0 984
+985 0.0408549308776855 0.039999999999992 0.039999999999992 0.0 985
+986 0.016895055770874 0.0200000000000102 0.0200000000000102 0.0 986
+987 0.0159039497375488 0.0200000000000102 0.0200000000000102 0.0 987
+988 0.0158200263977051 0.00999999999999091 0.00999999999999091 0.0 988
+989 0.0157120227813721 0.0200000000000102 0.0200000000000102 0.0 989
+990 0.0156378746032715 0.00999999999999091 0.00999999999999091 0.0 990
+991 0.0228080749511719 0.0300000000000011 0.0300000000000011 0.0 991
+992 0.0409870147705078 0.039999999999992 0.039999999999992 0.0 992
+993 0.0157871246337891 0.00999999999999091 0.00999999999999091 0.0 993
+994 0.0158090591430664 0.0200000000000102 0.0200000000000102 0.0 994
+995 0.0157351493835449 0.0200000000000102 0.0200000000000102 0.0 995
+996 0.0185980796813965 0.00999999999999091 0.00999999999999091 0.0 996
+997 0.0160398483276367 0.0100000000000193 0.0100000000000193 0.0 997
+998 0.0404281616210938 0.039999999999992 0.039999999999992 0.0 998
+999 0.0159862041473389 0.0200000000000102 0.0200000000000102 0.0 999
+1000 0.0166270732879639 0.00999999999999091 0.00999999999999091 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat
new file mode 100644
index 000000000..465df2005
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.157087197207005
+3 -0.179374358706398
+4 -0.172816500237501
+5 -0.172100634304929
+6 -0.18168246758723
+7 0.131584075287582
+8 0.679752237368679
+9 -0.163860297278845
+10 -0.170882707294366
+11 -0.166375603226363
+12 -0.174254444639597
+13 -0.173888868337232
+14 0.433940412821542
+15 0.373069309028039
+16 -0.171649802572127
+17 -0.169200630892492
+18 -0.166138159457362
+19 -0.1739364332791
+20 -0.127425006116119
+21 0.638263694934923
+22 0.12818251876092
+23 -0.175688598458062
+24 -0.170582005696374
+25 -0.165295475640757
+26 -0.177492415685482
+27 0.0465831397893705
+28 0.599451138773896
+29 -0.00135765066794861
+30 -0.177033357980592
+31 -0.16635596602023
+32 -0.166602977483835
+33 -0.178673562542768
+34 0.266392442433904
+35 0.432387768599705
+36 -0.0637700252002599
+37 -0.158118264958072
+38 -0.154561138423435
+39 -0.168429948675986
+40 -0.0994325786160257
+41 0.367997918823535
+42 0.290384046265292
+43 -0.11116281208171
+44 -0.175373024280893
+45 -0.160272110090895
+46 -0.164805593524448
+47 0.0550278238782237
+48 0.351023276202299
+49 0.189193346917991
+50 -0.138321616409331
+51 -0.174504050225761
+52 -0.161113173550488
+53 -0.152964238493074
+54 0.191038921821061
+55 0.288997249517505
+56 0.112554121399719
+57 -0.149706886466374
+58 -0.170685450581499
+59 -0.160759706621769
+60 -0.0696049681599959
+61 0.233811635314305
+62 0.22571473291272
+63 0.0469231721057327
+64 -0.157850957680934
+65 -0.16305911351091
+66 -0.156231122634058
+67 0.0491468744009525
+68 0.211267819802324
+69 0.187107177066929
+70 -0.0139870239184726
+71 -0.170483645145253
+72 -0.155686290284564
+73 -0.103000811390189
+74 0.138570030181668
+75 0.173843340323656
+76 0.143423232074103
+77 -0.0485241530965123
+78 -0.17395256767516
+79 -0.152395667614926
+80 -0.0364997518056447
+81 0.131378028895852
+82 0.157204475464315
+83 0.107865380703487
+84 -0.0772032951733248
+85 -0.168140171271818
+86 -0.144858575319744
+87 0.0510940822285813
+88 0.124231830951662
+89 0.116480579259527
+90 0.0733005231661278
+91 -0.103673077903456
+92 -0.163789078187485
+93 -0.0843697533408863
+94 0.0927359518979788
+95 0.0900559027837676
+96 0.104664222340361
+97 0.0382789156324802
+98 -0.128374408331222
+99 -0.15642261126302
+100 -0.00667308165088894
+101 0.0851277709144437
+102 0.0836018530451663
+103 0.0884188000954497
+104 0.00709279611310642
+105 -0.144660181300486
+106 -0.138143070220052
+107 0.0562816525685598
+108 0.0595077406929604
+109 0.0867173037785974
+110 0.0826832811453164
+111 -0.0160964251569884
+112 -0.155747087099804
+113 -0.0673832956811193
+114 0.0555412723389198
+115 0.0535188804439087
+116 0.0598230946420233
+117 0.0535276678974355
+118 -0.0458652924354906
+119 -0.153114302912901
+120 0.00982696548054891
+121 0.046672474075762
+122 0.0376959986943637
+123 0.0573772097995026
+124 0.0291609863119664
+125 -0.0720491385088587
+126 -0.119574247127328
+127 0.0398229760968292
+128 0.0368708833970769
+129 0.0378810523621832
+130 0.0440552599869543
+131 0.0168785446700554
+132 -0.100876176445281
+133 -0.0522667691021854
+134 0.036471105657028
+135 0.0215593152266718
+136 0.0332088835541183
+137 0.0406116641053865
+138 -0.000575792803151212
+139 -0.110182879489659
+140 0.0119148280486452
+141 0.0103606549224577
+142 0.0174203821210768
+143 0.0264660206850527
+144 0.0279556175958258
+145 -0.0101677743859891
+146 -0.0714378616054869
+147 0.0268904165103586
+148 0.0197546838971675
+149 0.0020125342918206
+150 0.0208048892753844
+151 0.0177433252225432
+152 -0.0412629401386729
+153 -0.0331295172833144
+154 0.0185158552578208
+155 0.0109488606569471
+156 0.00829546562841099
+157 0.0193950108790453
+158 0.00363009909349868
+159 -0.0424508741873948
+160 0.00483444603011959
+161 0.00251257763944739
+162 -0.0027291007330315
+163 0.00583978101322954
+164 0.0119526210929789
+165 0.00202945630944433
+166 -0.0133120914217794
+167 -0.0012297645717332
+168 0.00270288118433543
+169 -0.00541306317192281
+170 0.00344801669308451
+171 -7.06221686644991e-05
+172 -0.0128411948649165
+173 0.0258140753965777
+174 -0.00838152285590955
+175 0.00457554209144489
+176 -0.0212504244136124
+177 0.00405744330785776
+178 0.00109889713027893
+179 -0.00653340121943499
+180 0.0251074943438506
+181 0.00390303260107667
+182 -0.00701005779107689
+183 -0.0065141088117886
+184 -0.00279230972823837
+185 -0.00416383972424965
+186 0.0262707341683331
+187 0.00819057184579269
+188 -0.00340288166837825
+189 -0.0143930625406389
+190 -0.0253314001312743
+191 -0.00185836549539233
+192 0.00104764466063349
+193 0.0539677516048275
+194 -0.0100541189143094
+195 -0.00921746463253617
+196 -0.0149462313841975
+197 -0.0188238663657463
+198 -0.0175064441267539
+199 0.020760922122737
+200 0.0554307275152524
+201 -0.0148112905353319
+202 -0.0127466158713358
+203 -0.0243021923478065
+204 -0.0209159713475539
+205 -0.0114124320328544
+206 0.0397229436097326
+207 0.0456075315085741
+208 -0.0215007018820454
+209 -0.0144624346486559
+210 -0.0322330130568126
+211 -0.00825272885493334
+212 -0.0149224222346792
+213 0.0682032593962929
+214 0.0121011513942831
+215 -0.0169882789240117
+216 -0.0149704075424761
+217 -0.0387466974669077
+218 -0.00399663244288092
+219 0.017199112436661
+220 0.0760951670626158
+221 0.000771488467078772
+222 -0.0299297731350407
+223 -0.00961973831748005
+224 -0.0472117112712389
+225 -0.0172398450528946
+226 0.0399982487996819
+227 0.0668906972411487
+228 -0.0195152172068293
+229 -0.0118748121155119
+230 -0.0328125031882784
+231 -0.0308080129381723
+232 -0.0122390206650683
+233 0.0689451191829333
+234 0.029994234380722
+235 -0.0160522469025481
+236 -0.0138652708623251
+237 -0.0507286056559315
+238 -0.0108444844897431
+239 -0.000749122945858211
+240 0.0707991870940562
+241 0.0267001298657314
+242 -0.0303467049269583
+243 -0.0132703522046187
+244 -0.0519324123908225
+245 -0.020827887860283
+246 0.035011894574258
+247 0.071041404155295
+248 0.00264333590518284
+249 -0.0324109538103439
+250 -0.0173917664974712
+251 -0.0488496793294092
+252 -0.0141041170429656
+253 0.0508320887854303
+254 0.0750173132102245
+255 -0.0141435331710239
+256 -0.0149919228080718
+257 -0.0363809443035875
+258 -0.044180318575384
+259 0.0137303280992071
+260 0.0453890157170559
+261 0.0499450703384104
+262 -0.0214405609870375
+263 -0.0171265875233509
+264 -0.0483467081512779
+265 -0.0238039375745267
+266 0.0297704275693148
+267 0.0477795017107822
+268 0.0306806785398672
+269 -0.0241732516868213
+270 -0.0232177034439842
+271 -0.0561919945895127
+272 -0.0121383708530614
+273 0.0383380316167486
+274 0.0692068597048456
+275 -0.0037308740073283
+276 -0.0238823990824962
+277 -0.0233175869444128
+278 -0.0466628437090312
+279 0.00124369697752989
+280 0.033635887914297
+281 0.0595585462605596
+282 -0.00471883892563787
+283 -0.022010928895564
+284 -0.0396393069529268
+285 -0.047610976414541
+286 0.0330006232948636
+287 0.0280762592215935
+288 0.0546372734557523
+289 -0.0127989574716365
+290 -0.0191221337324256
+291 -0.0441318227203198
+292 -0.0234180780296535
+293 0.0323850514195515
+294 0.0485470915014664
+295 0.0233514564784711
+296 -0.014986868171212
+297 -0.0303748609767652
+298 -0.0492165541971281
+299 -0.000385604501460381
+300 0.0269531666988284
+301 0.0565609923395246
+302 0.00593180901393307
+303 -0.0139487837507826
+304 -0.0382587858091347
+305 -0.0491851369445174
+306 0.0160807177510981
+307 0.0361087651605283
+308 0.0389978157300904
+309 0.00502802264445259
+310 -0.0214508646037847
+311 -0.0382274859105765
+312 -0.0406626513624875
+313 0.0280699039368022
+314 0.0389617980418346
+315 0.0271371634582089
+316 0.00383396360577986
+317 -0.0368406522772554
+318 -0.0386138394670918
+319 -0.0144256141856596
+320 0.0269236337036347
+321 0.0378611438537414
+322 0.0209886410948846
+323 -0.000452113297036075
+324 -0.0449001716863398
+325 -0.0362164044779451
+326 -0.00595679435360415
+327 0.0506843309155259
+328 0.0326573572134026
+329 0.0107949518760053
+330 -0.00524263889747431
+331 -0.045061910257765
+332 -0.0336081125622954
+333 0.0142902742395516
+334 0.0327621408145429
+335 0.0232224714127171
+336 0.0111851134672308
+337 -0.0168616046652318
+338 -0.0421660588992697
+339 -0.0304729350756775
+340 0.0315110873281277
+341 0.0393883283265487
+342 0.00688623370858959
+343 0.0155748729948725
+344 -0.0396114220680361
+345 -0.036903793556725
+346 -0.0106964102495091
+347 0.0321472442987069
+348 0.0291161569873515
+349 0.0127286036167739
+350 0.0131191581487462
+351 -0.0510684340547118
+352 -0.037342914226626
+353 0.00800616948303765
+354 0.0353286314592821
+355 0.0224843093277485
+356 0.00483640438097458
+357 0.00270936967225743
+358 -0.050958398888098
+359 -0.03181357197987
+360 0.0263165400282428
+361 0.0337466198913848
+362 0.0138214636037434
+363 0.0161643781357266
+364 -0.0166975714811741
+365 -0.0379548808112395
+366 -0.0107191330666086
+367 0.0151768728627536
+368 0.0330707869037677
+369 0.00862332944835417
+370 0.0126881690782585
+371 -0.035143571537685
+372 -0.0379591383040581
+373 0.0034903385393575
+374 0.0262443107228041
+375 0.0239169076988401
+376 0.0117645257098411
+377 0.00667620811923268
+378 -0.0487466537790665
+379 -0.0248323076320059
+380 0.00853369884513661
+381 0.0254571493249656
+382 0.0158332997765884
+383 0.0152150967683835
+384 -0.00560022391839541
+385 -0.0468960628871472
+386 -0.0122137430122784
+387 0.0195354222281915
+388 0.0205785620197055
+389 0.00640951181213936
+390 0.0192254336021024
+391 -0.0213684050918215
+392 -0.0390677938838948
+393 -0.00851270390379209
+394 0.0198814929031009
+395 0.0221284736508306
+396 0.0144170779179485
+397 0.00761346746337475
+398 -0.0341642702201187
+399 -0.0182072192904153
+400 -0.000917427430821407
+401 0.0240923988301287
+402 0.0149702208233445
+403 0.0254338021686953
+404 -0.0114315718167618
+405 -0.0367784109383449
+406 -0.0203107293220967
+407 0.0207711450646343
+408 0.00769317821995912
+409 0.0155113277213562
+410 0.0188010420230405
+411 -0.00588271186449876
+412 -0.0453215571077292
+413 -0.0023477078738424
+414 0.0045635114773767
+415 0.0193832767222524
+416 0.0126157524584856
+417 0.0125919924992071
+418 -0.022128831828596
+419 -0.0316624813090816
+420 0.00848651912597777
+421 0.00365846968970242
+422 0.0167934861719605
+423 0.0258369213405359
+424 -0.0110386479254365
+425 -0.0221266194130739
+426 -0.0342359305340173
+427 0.0198173965590731
+428 0.0113340288154053
+429 0.0117321942610559
+430 0.0199069545235314
+431 -0.00972019619126481
+432 -0.0334368587948193
+433 -0.00818672582858474
+434 0.00847403279906724
+435 0.0151410616338098
+436 0.0210571960796968
+437 0.0106767873737501
+438 -0.013923260538601
+439 -0.0295951598444345
+440 -0.00213381404969862
+441 0.00202904020725609
+442 0.0229482306295094
+443 0.0184877779142267
+444 -0.00967213617656215
+445 -0.00921421284518073
+446 -0.0235983767065866
+447 -0.00275565709687977
+448 0.00850528936282641
+449 0.021653187958436
+450 0.0175868623090648
+451 -0.0158567287280081
+452 -0.0197244183098808
+453 -0.0181122740176874
+454 0.0114885559203587
+455 0.00821969307220109
+456 0.0172333504264287
+457 0.0166219780995992
+458 -0.0218887409079099
+459 -0.0166096810167506
+460 -0.0175255182955902
+461 0.0155549717347949
+462 0.0109524688624427
+463 0.0108083192821273
+464 0.0109544410525194
+465 -0.012075150479233
+466 -0.0316229939529222
+467 -0.00616925120907086
+468 0.0132996349281117
+469 0.0194985827103642
+470 0.0118786255995167
+471 -0.00394060339988717
+472 -0.0074504553199804
+473 -0.0216171208389261
+474 0.00601096062326295
+475 0.00225300714016349
+476 0.0328870249803732
+477 -0.00143854393918084
+478 -0.0125765646700796
+479 -0.00518610856295871
+480 -0.0286671364514193
+481 0.0114893086586308
+482 0.0101767599569462
+483 0.0215358355330199
+484 0.0100013983093797
+485 -0.0189420875106819
+486 -0.0170156842542937
+487 -0.0181219245592761
+488 0.0134350210494302
+489 0.0157200832610872
+490 0.00820671869127948
+491 0.00609605427848417
+492 -0.00964792789764855
+493 -0.0280629491471991
+494 -0.00119096663786943
+495 0.0059816978766158
+496 0.0319195128927636
+497 -0.00616844922211785
+498 -0.00300183927697173
+499 -0.00255830020653143
+500 -0.0326795727885289
+501 0.00737460740372866
+502 0.0101738406924715
+503 0.0166480802410528
+504 0.0101781028011199
+505 -0.0148697505539931
+506 -0.00932908806811421
+507 -0.0228291650465262
+508 0.016317603272819
+509 0.0251213315783841
+510 0.00429219423365217
+511 0.00509519846591672
+512 -0.0118288041004493
+513 -0.0182276341829169
+514 -0.0136524793951616
+515 0.0125652837072878
+516 0.0237831170063298
+517 0.000525824158270796
+518 0.000861207866418543
+519 -0.000309524320918211
+520 -0.0319611866775823
+521 0.00377002226899237
+522 0.00366677706502651
+523 0.0238709877277231
+524 -0.00194721509431841
+525 -0.00532831903040821
+526 -0.0035954903575234
+527 -0.0265125935766282
+528 0.00819935557807736
+529 0.0187116031801041
+530 0.00335323640794092
+531 0.0093979106751416
+532 -0.00717619909651022
+533 -0.0222889570534225
+534 -0.0159873555724934
+535 0.0155232558898349
+536 0.0188575547550394
+537 0.00257632001432395
+538 0.0109600141670179
+539 -0.0136168353942696
+540 -0.0286265327239912
+541 -0.00493532024944744
+542 0.0131483720919412
+543 0.0207593713409036
+544 0.00752548764010655
+545 0.0101794683902496
+546 -0.00944756530014968
+547 -0.0361193792524987
+548 0.00900784799603882
+549 0.00814620931366632
+550 0.0118963349468229
+551 0.00869181440821501
+552 0.00553664631914035
+553 -0.0235896662674149
+554 -0.0213031930671748
+555 0.0144191547013866
+556 0.00985740627307818
+557 0.0146461357237841
+558 -0.00329509825327045
+559 0.00861808586430692
+560 -0.0382908781734418
+561 -0.00810416928099721
+562 0.0152325822988648
+563 0.0108896546286742
+564 0.0197283233093635
+565 -0.00597279642964848
+566 0.00549346286324277
+567 -0.0441402987586487
+568 0.00442694223265451
+569 0.00895528979634627
+570 0.00314478664849838
+571 0.0275939863464633
+572 -0.000211275077900297
+573 -0.0157780481890476
+574 -0.0348847108726074
+575 0.0178433894654182
+576 0.00358880348184893
+577 0.00325401416563326
+578 0.0168304732698679
+579 0.00759458115231633
+580 -0.0249153562132231
+581 -0.0148180695954744
+582 0.0108144203245513
+583 0.0147457973792171
+584 0.00442055500088463
+585 0.0113147505801929
+586 0.00208502530934012
+587 -0.0369024921021571
+588 -0.00738632772951817
+589 0.00992698216785421
+590 0.00762460161308267
+591 0.0264602045744605
+592 0.00179884430710083
+593 -0.0065858667702633
+594 -0.0400946265552496
+595 0.00586629198250832
+596 0.00638016879591378
+597 -0.00334997345122169
+598 0.0378696957160481
+599 -0.00291662872883922
+600 -0.0150181756899771
+601 -0.0308267314085245
+602 0.00545487745877096
+603 0.0145056871276495
+604 -0.00111862002362357
+605 0.0274345659047568
+606 -0.00545886365985009
+607 -0.02134718500889
+608 -0.0168792261598091
+609 0.00235047714564286
+610 0.0115358557818356
+611 0.00892944549777402
+612 0.0175837325671957
+613 -0.00241533013968592
+614 -0.0397066859486968
+615 -0.000775410212127817
+616 0.010404414311518
+617 0.00622818135682105
+618 0.0256159561966313
+619 0.0100572818761881
+620 -0.00997184439752021
+621 -0.0370357127908402
+622 -0.009493683122773
+623 0.019991811173322
+624 0.00616915844764652
+625 0.0226334480172136
+626 -0.00170152998435823
+627 -0.00527269037631295
+628 -0.0310245966733844
+629 -0.00334664758487885
+630 0.0108099133488301
+631 0.0162472542900972
+632 0.0107638392138735
+633 -9.28636881484359e-05
+634 -0.0251735775995027
+635 -0.0175915903660944
+636 0.0064154965729608
+637 0.00918775959735482
+638 0.025607471670139
+639 0.00415316421623987
+640 -0.00555481869685676
+641 -0.0243730502242372
+642 -0.0236765581404991
+643 0.0132551374194837
+644 0.0159204978713982
+645 0.0182545204715289
+646 -0.00177344669143713
+647 -0.00410362457456551
+648 -0.0217821833150809
+649 -0.0187567646143839
+650 0.0108473001511633
+651 0.024234409213132
+652 0.0103373343092404
+653 0.0053494854974728
+654 -0.0116971189957597
+655 -0.025622749432742
+656 -0.00703489184924496
+657 0.0127306317732122
+658 0.0264660231555335
+659 0.00441275817266093
+660 -0.000498144331723384
+661 -0.0170193444138239
+662 -0.035755915518656
+663 0.0153452894744309
+664 0.0184392623502257
+665 0.0179210598556496
+666 0.00323237671435628
+667 -0.0143732162504404
+668 -0.0059072260888979
+669 -0.0424395347705013
+670 0.0182802454123028
+671 0.028027312899014
+672 0.0105955795585643
+673 0.00873541917286547
+674 -0.0180699323851307
+675 -0.0157035416270782
+676 -0.0243544633968205
+677 0.0122599065615016
+678 0.0293159679608981
+679 -0.0023542771968947
+680 0.0173160434772516
+681 -0.0192740489190438
+682 -0.0267558924656808
+683 -0.00512931356799544
+684 0.0160575949541419
+685 0.0188852073807438
+686 0.00138912191794047
+687 -0.00115067732885235
+688 -0.0058938945939148
+689 -0.0270293884074899
+690 0.000894104439656761
+691 0.0254384890333336
+692 0.0135759887351247
+693 0.00706307551413458
+694 -0.00983098745115802
+695 -0.0182029532724777
+696 -0.0188844337318011
+697 -0.000620495183408782
+698 0.031569666060583
+699 0.00247939842897875
+700 0.0175967326065924
+701 -0.0140127620939771
+702 -0.0204023919721389
+703 -0.0265270099155168
+704 0.0189279709581055
+705 0.0230696877886033
+706 0.00221980643869467
+707 0.00877474738492577
+708 -0.0162154001263846
+709 -0.0131109560281679
+710 -0.0175675796745332
+711 0.0223801164921319
+712 0.00577037578768595
+713 0.015016209026733
+714 0.000700464791035295
+715 -0.0265570398797467
+716 -0.00328487594267362
+717 -0.0125180962593854
+718 0.0282899511684865
+719 0.00190078369585563
+720 0.00988422939784888
+721 -0.00206231662877586
+722 -0.0260676646786268
+723 -0.00911966903113347
+724 -0.00349690376176947
+725 0.0311131205663657
+726 0.00982115201693743
+727 0.00380892869332063
+728 -0.0110636013291228
+729 -0.0147589149221332
+730 -0.0142665446241887
+731 0.0082820839740987
+732 0.0115944492459724
+733 0.0193205726321855
+734 -0.00599937049345255
+735 -0.0124413644991841
+736 -0.00567111710885452
+737 -0.0172490266022523
+738 0.0208711936714456
+739 0.0049112245490164
+740 0.0119338001717033
+741 -0.00382254745169823
+742 -0.0168037126507566
+743 -0.0106727427496242
+744 -0.0015896316832005
+745 0.00986670286392471
+746 0.0187708614601626
+747 0.00280713985351326
+748 -0.0103005824233574
+749 -0.00698856527705199
+750 -0.0148829004327279
+751 0.00737864042801781
+752 0.00378825958027056
+753 0.0169762573619787
+754 0.0022171253424174
+755 -0.00880275220702398
+756 -0.0113861610535219
+757 -0.00866954185078337
+758 -0.00102625777568937
+759 0.0153621406801242
+760 0.0175483371870747
+761 -0.0117316284519376
+762 0.00201727719536751
+763 -0.0135695524051989
+764 -0.00236628739393315
+765 -0.00558540481434592
+766 0.0269770620065138
+767 0.00572732432254425
+768 -0.0206632040359575
+769 0.00669734976955735
+770 -0.0177594319318436
+771 0.00610794003109065
+772 0.000941524893761258
+773 0.0184249836070844
+774 0.00603564044659765
+775 -0.0194800088175
+776 0.00211956864190904
+777 -0.010814553078384
+778 -0.00345880879440837
+779 0.00784989092108616
+780 0.0219931715670487
+781 -0.00850728907326284
+782 -0.00818020013943201
+783 -0.000161877820177968
+784 -0.00713626483576915
+785 -0.00189547729017052
+786 0.00606277375629014
+787 0.0175714822376805
+788 -0.0163318892122437
+789 0.00355096379727685
+790 -0.00561323769976105
+791 -0.00173115162828963
+792 0.00285124323851199
+793 0.00626988628820364
+794 0.00217746014515121
+795 -0.00760875508840939
+796 -0.000158305774946426
+797 0.000505966683014493
+798 -0.00693871262526605
+799 0.00898933345030533
+800 0.014710588776899
+801 -0.0127611881730304
+802 0.00195021147362958
+803 -0.00619101895130629
+804 0.0026189336260538
+805 -0.0119751993107655
+806 0.00863989985124942
+807 0.0162582664631878
+808 -0.00961705217558156
+809 -0.00291393696249613
+810 0.00183243185138599
+811 -0.00460631909363343
+812 -0.0119632672766042
+813 0.0208966630422238
+814 -0.00308347876710094
+815 -0.000388668719911606
+816 -0.00886871268574757
+817 0.0104410151238245
+818 -0.00971881568327177
+819 -0.00556079139249464
+820 0.0192762976108135
+821 -0.0107849691388102
+822 0.00749648811680043
+823 -0.0133743112470617
+824 0.0148954204098446
+825 -0.012870734248631
+826 0.00297854342027238
+827 0.00400991287076845
+828 -0.000776475806225986
+829 0.000157063854584776
+830 -0.00648190853333762
+831 0.00841895039070195
+832 -0.0106394491215173
+833 0.0131617346674597
+834 -0.0110557177073731
+835 0.0104656591658511
+836 -0.00271631743019652
+837 0.00120199415841236
+838 0.003706954798763
+839 -0.00947603640270401
+840 0.00137362489293886
+841 -0.00412100522419038
+842 0.00440555479849327
+843 -0.00101257629784826
+844 0.011630938869848
+845 -0.00348460872671806
+846 -0.00490788919767545
+847 -0.00767305606978742
+848 0.00641850027996645
+849 -0.0047270157313243
+850 0.006561877154592
+851 0.00346504126665878
+852 0.000325934762370315
+853 -0.00691243590442494
+854 -0.0122397831712401
+855 0.0155142896041314
+856 -0.00649940375329406
+857 0.0115764362511307
+858 -0.00166218348252304
+859 0.00329024056556213
+860 -0.0168163842675434
+861 -0.0018300046237477
+862 0.00782622924665259
+863 0.00184144237820109
+864 0.00564522536281571
+865 0.00166897889337862
+866 0.000762761808421144
+867 -0.0247108710871775
+868 0.0102945871423903
+869 0.00176524231160526
+870 0.0100435696701272
+871 -0.000881447853453438
+872 0.0077251769247763
+873 -0.00856838315554851
+874 -0.0147878775532851
+875 0.0032203221928359
+876 0.00271820057534821
+877 0.0150200342356852
+878 -0.00679910502968767
+879 0.00803734684491422
+880 -0.0129685352671973
+881 -0.00468207467932367
+882 -0.0040001560959317
+883 0.0127784032727213
+884 0.00689584536184243
+885 -0.00348378029753978
+886 0.00583835064957876
+887 -0.018431993579404
+888 -0.00543151914104362
+889 0.000930192838208099
+890 0.0189669669181415
+891 0.00197455166108111
+892 0.000291983829886991
+893 -0.00151890218051029
+894 -0.018758927675871
+895 -0.00427007831617855
+896 0.00873163971817387
+897 0.0116921446719301
+898 0.00493448763764004
+899 0.000812558628478896
+900 -0.00829685479660704
+901 -0.016774476024156
+902 -0.00284574091222063
+903 0.0166712115089998
+904 0.00393567866715527
+905 0.00970634578920477
+906 -0.0013135499413494
+907 -0.0151419078767085
+908 -0.014262642806324
+909 0.000679710286692927
+910 0.023632237447571
+911 -0.000293075867552849
+912 0.00963897961846078
+913 -0.00892745437111743
+914 -0.0141610280914154
+915 -0.0143929747783252
+916 0.0126331813801288
+917 0.0140072140155889
+918 0.0038464358463258
+919 0.00872792856356974
+920 -0.0142893223780218
+921 -0.0144626608008151
+922 -0.0106633311842541
+923 0.0182487172273735
+924 0.00789811928832441
+925 0.00674770411457765
+926 0.00151185223543001
+927 -0.0131662643971208
+928 -0.0130299725001482
+929 -0.000421100875615765
+930 0.0101012876932665
+931 0.0109771581904619
+932 0.00600630873622808
+933 -0.00610768057521272
+934 -0.0113069105169847
+935 -0.0108646539420972
+936 0.00681782689120027
+937 0.00453863835411057
+938 0.0128033807887734
+939 0.00558460964303299
+940 -0.0111413786231144
+941 -0.010741707945974
+942 -0.0073905294023225
+943 0.00509539616333849
+944 0.00789664081858827
+945 0.0156023411643847
+946 -0.00196863307695851
+947 -0.00929990689658537
+948 -0.0100501558671196
+949 -0.00713963769082725
+950 0.00529444925980778
+951 0.00907288818013118
+952 0.0159396165239691
+953 -0.0070169105795629
+954 -0.00871200515303164
+955 -0.00623272113762449
+956 -0.00859043676592199
+957 0.00750758667776515
+958 0.0114715494246097
+959 0.00783845600054901
+960 -0.00640762499905148
+961 -0.00791318713998704
+962 -0.00388200155080539
+963 -0.00821887932833072
+964 0.00969710527680486
+965 0.0132324446252105
+966 0.000588150241816455
+967 -0.00459312775024423
+968 -0.00661504524014442
+969 -0.00488536336284523
+970 -0.00665739535025808
+971 0.0119120087088002
+972 0.0129080825261635
+973 -0.00502738233144332
+974 -0.00424651006131981
+975 -0.00529584314204073
+976 -0.00401797749822628
+977 -0.00398629771407627
+978 0.0145696891837213
+979 0.00312400996929776
+980 -0.0024620797714283
+981 -0.0029972609662243
+982 -0.00374070711004024
+983 -0.00324300553128461
+984 -0.00266784725010517
+985 0.0142342444009173
+986 -0.00291146863667702
+987 -0.00123170535641386
+988 -0.00195500360676893
+989 -0.0018623417265137
+990 -0.0010940028343966
+991 -0.00012714389035354
+992 0.00601935720393536
+993 -0.00153575128302119
+994 -0.000790525971546018
+995 -0.000953092463346404
+996 -0.000631437937788914
+997 -5.86631399396442e-05
+998 0.000839644378016313
+999 -0.000137648586440022
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat
new file mode 100644
index 000000000..129091697
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.0308499336242676 0.0300000000000011 0.0300000000000011 0.0 1
+2 0.027501106262207 0.0299999999999976 0.0299999999999976 0.0 2
+3 0.0248689651489258 0.0200000000000031 0.0200000000000031 0.0 3
+4 0.0230190753936768 0.0199999999999996 0.0199999999999996 0.0 4
+5 0.0231549739837646 0.0299999999999976 0.0299999999999976 0.0 5
+6 0.0229060649871826 0.0200000000000031 0.0200000000000031 0.0 6
+7 0.0479171276092529 0.0499999999999972 0.0499999999999972 0.0 7
+8 0.0237171649932861 0.0199999999999996 0.0199999999999996 0.0 8
+9 0.0234429836273193 0.0200000000000031 0.0200000000000031 0.0 9
+10 0.0232129096984863 0.0299999999999976 0.0299999999999976 0.0 10
+11 0.0243880748748779 0.0199999999999996 0.0199999999999996 0.0 11
+12 0.0262730121612549 0.0300000000000011 0.0300000000000011 0.0 12
+13 0.022907018661499 0.0199999999999996 0.0199999999999996 0.0 13
+14 0.0502560138702393 0.0500000000000007 0.0500000000000007 0.0 14
+15 0.0239529609680176 0.0199999999999996 0.0199999999999996 0.0 15
+16 0.0233089923858643 0.0300000000000011 0.0300000000000011 0.0 16
+17 0.0230889320373535 0.0199999999999996 0.0199999999999996 0.0 17
+18 0.0229461193084717 0.0199999999999996 0.0199999999999996 0.0 18
+19 0.0228281021118164 0.0300000000000011 0.0300000000000011 0.0 19
+20 0.0227499008178711 0.0199999999999996 0.0199999999999996 0.0 20
+21 0.0519850254058838 0.0500000000000007 0.0500000000000007 0.0 21
+22 0.0238831043243408 0.0299999999999976 0.0299999999999976 0.0 22
+23 0.0233030319213867 0.0199999999999996 0.0199999999999996 0.0 23
+24 0.0230920314788818 0.0200000000000031 0.0200000000000031 0.0 24
+25 0.0230100154876709 0.0199999999999996 0.0199999999999996 0.0 25
+26 0.0230438709259033 0.0199999999999996 0.0199999999999996 0.0 26
+27 0.0233631134033203 0.0199999999999996 0.0199999999999996 0.0 27
+28 0.0499250888824463 0.0500000000000007 0.0500000000000007 0.0 28
+29 0.0236561298370361 0.0300000000000011 0.0300000000000011 0.0 29
+30 0.0273551940917969 0.0199999999999996 0.0199999999999996 0.0 30
+31 0.0231010913848877 0.0300000000000011 0.0300000000000011 0.0 31
+32 0.0228641033172607 0.0199999999999996 0.0199999999999996 0.0 32
+33 0.0227639675140381 0.0199999999999996 0.0199999999999996 0.0 33
+34 0.0227780342102051 0.0199999999999996 0.0199999999999996 0.0 34
+35 0.0491790771484375 0.0500000000000007 0.0500000000000007 0.0 35
+36 0.0235280990600586 0.0300000000000011 0.0300000000000011 0.0 36
+37 0.0303738117218018 0.0299999999999976 0.0299999999999976 0.0 37
+38 0.0235600471496582 0.0199999999999996 0.0199999999999996 0.0 38
+39 0.0272340774536133 0.0300000000000011 0.0300000000000011 0.0 39
+40 0.0229921340942383 0.0199999999999996 0.0199999999999996 0.0 40
+41 0.0230140686035156 0.0199999999999996 0.0199999999999996 0.0 41
+42 0.0487380027770996 0.0500000000000007 0.0500000000000007 0.0 42
+43 0.0233781337738037 0.0300000000000011 0.0300000000000011 0.0 43
+44 0.0232539176940918 0.0199999999999996 0.0199999999999996 0.0 44
+45 0.0231471061706543 0.0199999999999996 0.0199999999999996 0.0 45
+46 0.0229659080505371 0.0300000000000011 0.0300000000000011 0.0 46
+47 0.0236260890960693 0.0199999999999996 0.0199999999999996 0.0 47
+48 0.0249731540679932 0.0299999999999976 0.0299999999999976 0.0 48
+49 0.0491600036621094 0.0400000000000027 0.0400000000000027 0.0 49
+50 0.0233979225158691 0.0299999999999976 0.0299999999999976 0.0 50
+51 0.0233068466186523 0.0200000000000031 0.0200000000000031 0.0 51
+52 0.0230197906494141 0.0199999999999996 0.0199999999999996 0.0 52
+53 0.023003101348877 0.0299999999999976 0.0299999999999976 0.0 53
+54 0.0229551792144775 0.0199999999999996 0.0199999999999996 0.0 54
+55 0.0227420330047607 0.0200000000000031 0.0200000000000031 0.0 55
+56 0.0490391254425049 0.0499999999999972 0.0499999999999972 0.0 56
+57 0.0280921459197998 0.0300000000000011 0.0300000000000011 0.0 57
+58 0.0237009525299072 0.0199999999999996 0.0199999999999996 0.0 58
+59 0.0233352184295654 0.0300000000000011 0.0300000000000011 0.0 59
+60 0.0229549407958984 0.0199999999999996 0.0199999999999996 0.0 60
+61 0.0229389667510986 0.0199999999999996 0.0199999999999996 0.0 61
+62 0.022536039352417 0.0300000000000011 0.0300000000000011 0.0 62
+63 0.0481998920440674 0.0399999999999991 0.0399999999999991 0.0 63
+64 0.0232841968536377 0.0300000000000011 0.0300000000000011 0.0 64
+65 0.0232529640197754 0.0199999999999996 0.0199999999999996 0.0 65
+66 0.026047945022583 0.0299999999999976 0.0299999999999976 0.0 66
+67 0.0240390300750732 0.0200000000000031 0.0200000000000031 0.0 67
+68 0.0229721069335938 0.0199999999999996 0.0199999999999996 0.0 68
+69 0.0479068756103516 0.0500000000000007 0.0500000000000007 0.0 69
+70 0.023643970489502 0.0199999999999996 0.0199999999999996 0.0 70
+71 0.0241210460662842 0.0199999999999996 0.0199999999999996 0.0 71
+72 0.0232229232788086 0.0199999999999996 0.0199999999999996 0.0 72
+73 0.0230081081390381 0.0300000000000011 0.0300000000000011 0.0 73
+74 0.0300300121307373 0.0300000000000011 0.0300000000000011 0.0 74
+75 0.0227279663085938 0.0199999999999996 0.0199999999999996 0.0 75
+76 0.0513601303100586 0.0500000000000007 0.0500000000000007 0.0 76
+77 0.0237360000610352 0.0199999999999996 0.0199999999999996 0.0 77
+78 0.0233068466186523 0.0300000000000011 0.0300000000000011 0.0 78
+79 0.0231139659881592 0.0199999999999996 0.0199999999999996 0.0 79
+80 0.0230059623718262 0.0199999999999996 0.0199999999999996 0.0 80
+81 0.022935152053833 0.0299999999999976 0.0299999999999976 0.0 81
+82 0.0229039192199707 0.0200000000000031 0.0200000000000031 0.0 82
+83 0.0487849712371826 0.0499999999999972 0.0499999999999972 0.0 83
+84 0.0268459320068359 0.0199999999999996 0.0199999999999996 0.0 84
+85 0.0233829021453857 0.0300000000000011 0.0300000000000011 0.0 85
+86 0.0231680870056152 0.0199999999999996 0.0199999999999996 0.0 86
+87 0.0230309963226318 0.0199999999999996 0.0199999999999996 0.0 87
+88 0.0234689712524414 0.0300000000000011 0.0300000000000011 0.0 88
+89 0.0231020450592041 0.0199999999999996 0.0199999999999996 0.0 89
+90 0.0486099720001221 0.0500000000000007 0.0500000000000007 0.0 90
+91 0.0234777927398682 0.0200000000000031 0.0200000000000031 0.0 91
+92 0.0232808589935303 0.029999999999994 0.029999999999994 0.0 92
+93 0.0230159759521484 0.0200000000000031 0.0200000000000031 0.0 93
+94 0.0258738994598389 0.0300000000000011 0.0300000000000011 0.0 94
+95 0.0232770442962646 0.019999999999996 0.019999999999996 0.0 95
+96 0.022737979888916 0.0200000000000031 0.0200000000000031 0.0 96
+97 0.0484600067138672 0.0499999999999972 0.0499999999999972 0.0 97
+98 0.023435115814209 0.0200000000000031 0.0200000000000031 0.0 98
+99 0.0234768390655518 0.0300000000000011 0.0300000000000011 0.0 99
+100 0.0230209827423096 0.019999999999996 0.019999999999996 0.0 100
+101 0.0230460166931152 0.0200000000000031 0.0200000000000031 0.0 101
+102 0.0232481956481934 0.0300000000000011 0.0300000000000011 0.0 102
+103 0.0264010429382324 0.019999999999996 0.019999999999996 0.0 103
+104 0.0486769676208496 0.0500000000000043 0.0500000000000043 0.0 104
+105 0.0233399868011475 0.019999999999996 0.019999999999996 0.0 105
+106 0.0231819152832031 0.0300000000000011 0.0300000000000011 0.0 106
+107 0.0230488777160645 0.0200000000000031 0.0200000000000031 0.0 107
+108 0.0238149166107178 0.019999999999996 0.019999999999996 0.0 108
+109 0.0230348110198975 0.0300000000000011 0.0300000000000011 0.0 109
+110 0.0254418849945068 0.0200000000000031 0.0200000000000031 0.0 110
+111 0.0559201240539551 0.0599999999999952 0.0599999999999952 0.0 111
+112 0.0237429141998291 0.0200000000000031 0.0200000000000031 0.0 112
+113 0.0230910778045654 0.0300000000000011 0.0300000000000011 0.0 113
+114 0.0230679512023926 0.019999999999996 0.019999999999996 0.0 114
+115 0.022960901260376 0.0200000000000031 0.0200000000000031 0.0 115
+116 0.0229921340942383 0.019999999999996 0.019999999999996 0.0 116
+117 0.0226120948791504 0.0300000000000011 0.0300000000000011 0.0 117
+118 0.0491540431976318 0.0500000000000043 0.0500000000000043 0.0 118
+119 0.0233540534973145 0.019999999999996 0.019999999999996 0.0 119
+120 0.023921012878418 0.0200000000000031 0.0200000000000031 0.0 120
+121 0.02628493309021 0.0300000000000011 0.0300000000000011 0.0 121
+122 0.0231039524078369 0.019999999999996 0.019999999999996 0.0 122
+123 0.0229899883270264 0.0300000000000011 0.0300000000000011 0.0 123
+124 0.0484068393707275 0.0399999999999991 0.0399999999999991 0.0 124
+125 0.0236389636993408 0.0300000000000011 0.0300000000000011 0.0 125
+126 0.0232870578765869 0.019999999999996 0.019999999999996 0.0 126
+127 0.0232260227203369 0.0200000000000031 0.0200000000000031 0.0 127
+128 0.0229640007019043 0.0300000000000011 0.0300000000000011 0.0 128
+129 0.02298903465271 0.019999999999996 0.019999999999996 0.0 129
+130 0.0251820087432861 0.0300000000000011 0.0300000000000011 0.0 130
+131 0.0493929386138916 0.0399999999999991 0.0399999999999991 0.0 131
+132 0.0237491130828857 0.019999999999996 0.019999999999996 0.0 132
+133 0.0233249664306641 0.0200000000000031 0.0200000000000031 0.0 133
+134 0.0232069492340088 0.0300000000000011 0.0300000000000011 0.0 134
+135 0.0229921340942383 0.019999999999996 0.019999999999996 0.0 135
+136 0.0232110023498535 0.0200000000000031 0.0200000000000031 0.0 136
+137 0.0227601528167725 0.019999999999996 0.019999999999996 0.0 137
+138 0.0484609603881836 0.0500000000000043 0.0500000000000043 0.0 138
+139 0.0269899368286133 0.0300000000000011 0.0300000000000011 0.0 139
+140 0.0233750343322754 0.019999999999996 0.019999999999996 0.0 140
+141 0.023090124130249 0.0300000000000011 0.0300000000000011 0.0 141
+142 0.0229980945587158 0.019999999999996 0.019999999999996 0.0 142
+143 0.0231709480285645 0.0200000000000031 0.0200000000000031 0.0 143
+144 0.0230460166931152 0.0300000000000011 0.0300000000000011 0.0 144
+145 0.0494990348815918 0.0499999999999972 0.0499999999999972 0.0 145
+146 0.0304419994354248 0.0300000000000011 0.0300000000000011 0.0 146
+147 0.0233581066131592 0.0200000000000031 0.0200000000000031 0.0 147
+148 0.0262119770050049 0.0300000000000011 0.0300000000000011 0.0 148
+149 0.0228428840637207 0.019999999999996 0.019999999999996 0.0 149
+150 0.0228331089019775 0.0200000000000031 0.0200000000000031 0.0 150
+151 0.0226950645446777 0.019999999999996 0.019999999999996 0.0 151
+152 0.0486769676208496 0.0500000000000043 0.0500000000000043 0.0 152
+153 0.0234050750732422 0.029999999999994 0.029999999999994 0.0 153
+154 0.0234100818634033 0.0200000000000031 0.0200000000000031 0.0 154
+155 0.023036003112793 0.0200000000000031 0.0200000000000031 0.0 155
+156 0.0237429141998291 0.029999999999994 0.029999999999994 0.0 156
+157 0.0230100154876709 0.0200000000000031 0.0200000000000031 0.0 157
+158 0.0260419845581055 0.0300000000000011 0.0300000000000011 0.0 158
+159 0.0487880706787109 0.0399999999999991 0.0399999999999991 0.0 159
+160 0.0236630439758301 0.0200000000000031 0.0200000000000031 0.0 160
+161 0.0232570171356201 0.019999999999996 0.019999999999996 0.0 161
+162 0.0230000019073486 0.0300000000000011 0.0300000000000011 0.0 162
+163 0.0229759216308594 0.0200000000000031 0.0200000000000031 0.0 163
+164 0.0229389667510986 0.019999999999996 0.019999999999996 0.0 164
+165 0.0226230621337891 0.0200000000000031 0.0200000000000031 0.0 165
+166 0.052177906036377 0.0600000000000023 0.0600000000000023 0.0 166
+167 0.0238969326019287 0.019999999999996 0.019999999999996 0.0 167
+168 0.0231490135192871 0.0200000000000031 0.0200000000000031 0.0 168
+169 0.0229499340057373 0.029999999999994 0.029999999999994 0.0 169
+170 0.0229768753051758 0.0200000000000031 0.0200000000000031 0.0 170
+171 0.0229849815368652 0.0200000000000031 0.0200000000000031 0.0 171
+172 0.0481510162353516 0.0499999999999972 0.0499999999999972 0.0 172
+173 0.0235779285430908 0.0200000000000031 0.0200000000000031 0.0 173
+174 0.0235681533813477 0.029999999999994 0.029999999999994 0.0 174
+175 0.0232248306274414 0.0200000000000031 0.0200000000000031 0.0 175
+176 0.0256550312042236 0.0300000000000011 0.0300000000000011 0.0 176
+177 0.023108959197998 0.019999999999996 0.019999999999996 0.0 177
+178 0.0228090286254883 0.0200000000000031 0.0200000000000031 0.0 178
+179 0.0490450859069824 0.0499999999999972 0.0499999999999972 0.0 179
+180 0.0244641304016113 0.0300000000000011 0.0300000000000011 0.0 180
+181 0.0233809947967529 0.0200000000000031 0.0200000000000031 0.0 181
+182 0.0231349468231201 0.019999999999996 0.019999999999996 0.0 182
+183 0.0308740139007568 0.0300000000000011 0.0300000000000011 0.0 183
+184 0.0236179828643799 0.0300000000000011 0.0300000000000011 0.0 184
+185 0.0272319316864014 0.0200000000000031 0.0200000000000031 0.0 185
+186 0.0488860607147217 0.0399999999999991 0.0399999999999991 0.0 186
+187 0.0235450267791748 0.0300000000000011 0.0300000000000011 0.0 187
+188 0.0232491493225098 0.019999999999996 0.019999999999996 0.0 188
+189 0.0231590270996094 0.0200000000000031 0.0200000000000031 0.0 189
+190 0.0231139659881592 0.0300000000000011 0.0300000000000011 0.0 190
+191 0.0231552124023438 0.019999999999996 0.019999999999996 0.0 191
+192 0.022982120513916 0.0200000000000031 0.0200000000000031 0.0 192
+193 0.0529110431671143 0.0600000000000023 0.0600000000000023 0.0 193
+194 0.0235891342163086 0.019999999999996 0.019999999999996 0.0 194
+195 0.0234260559082031 0.0200000000000031 0.0200000000000031 0.0 195
+196 0.0230891704559326 0.029999999999994 0.029999999999994 0.0 196
+197 0.0230920314788818 0.0200000000000031 0.0200000000000031 0.0 197
+198 0.0229229927062988 0.0200000000000031 0.0200000000000031 0.0 198
+199 0.0226840972900391 0.029999999999994 0.029999999999994 0.0 199
+200 0.048753023147583 0.0400000000000063 0.0400000000000063 0.0 200
+201 0.0234558582305908 0.029999999999994 0.029999999999994 0.0 201
+202 0.0232200622558594 0.0200000000000031 0.0200000000000031 0.0 202
+203 0.0268151760101318 0.0300000000000011 0.0300000000000011 0.0 203
+204 0.0231211185455322 0.019999999999996 0.019999999999996 0.0 204
+205 0.0231039524078369 0.0200000000000031 0.0200000000000031 0.0 205
+206 0.0227501392364502 0.0300000000000011 0.0300000000000011 0.0 206
+207 0.0488438606262207 0.0499999999999972 0.0499999999999972 0.0 207
+208 0.023730993270874 0.0200000000000031 0.0200000000000031 0.0 208
+209 0.0231349468231201 0.019999999999996 0.019999999999996 0.0 209
+210 0.0231950283050537 0.0300000000000011 0.0300000000000011 0.0 210
+211 0.0232861042022705 0.0200000000000031 0.0200000000000031 0.0 211
+212 0.0260870456695557 0.0300000000000011 0.0300000000000011 0.0 212
+213 0.0480821132659912 0.0399999999999991 0.0399999999999991 0.0 213
+214 0.0236039161682129 0.029999999999994 0.029999999999994 0.0 214
+215 0.0233402252197266 0.0200000000000031 0.0200000000000031 0.0 215
+216 0.0233190059661865 0.0200000000000031 0.0200000000000031 0.0 216
+217 0.0242919921875 0.029999999999994 0.029999999999994 0.0 217
+218 0.0228087902069092 0.0200000000000031 0.0200000000000031 0.0 218
+219 0.0274980068206787 0.0300000000000011 0.0300000000000011 0.0 219
+220 0.0521900653839111 0.0499999999999972 0.0499999999999972 0.0 220
+221 0.0259828567504883 0.0300000000000011 0.0300000000000011 0.0 221
+222 0.0233159065246582 0.0200000000000031 0.0200000000000031 0.0 222
+223 0.0232350826263428 0.019999999999996 0.019999999999996 0.0 223
+224 0.023000955581665 0.0300000000000011 0.0300000000000011 0.0 224
+225 0.0230231285095215 0.0200000000000031 0.0200000000000031 0.0 225
+226 0.022864818572998 0.019999999999996 0.019999999999996 0.0 226
+227 0.0486090183258057 0.0500000000000043 0.0500000000000043 0.0 227
+228 0.0247719287872314 0.029999999999994 0.029999999999994 0.0 228
+229 0.0233240127563477 0.0200000000000031 0.0200000000000031 0.0 229
+230 0.0263748168945312 0.0300000000000011 0.0300000000000011 0.0 230
+231 0.0231301784515381 0.019999999999996 0.019999999999996 0.0 231
+232 0.0229740142822266 0.0200000000000031 0.0200000000000031 0.0 232
+233 0.0233769416809082 0.0300000000000011 0.0300000000000011 0.0 233
+234 0.0495500564575195 0.0499999999999972 0.0499999999999972 0.0 234
+235 0.0234000682830811 0.0200000000000031 0.0200000000000031 0.0 235
+236 0.0231790542602539 0.019999999999996 0.019999999999996 0.0 236
+237 0.0230810642242432 0.0300000000000011 0.0300000000000011 0.0 237
+238 0.0229249000549316 0.0200000000000031 0.0200000000000031 0.0 238
+239 0.0257270336151123 0.019999999999996 0.019999999999996 0.0 239
+240 0.0246570110321045 0.0300000000000011 0.0300000000000011 0.0 240
+241 0.049109935760498 0.0499999999999972 0.0499999999999972 0.0 241
+242 0.0233631134033203 0.0200000000000031 0.0200000000000031 0.0 242
+243 0.0232560634613037 0.0300000000000011 0.0300000000000011 0.0 243
+244 0.0232639312744141 0.019999999999996 0.019999999999996 0.0 244
+245 0.0231678485870361 0.0200000000000031 0.0200000000000031 0.0 245
+246 0.0229339599609375 0.0200000000000031 0.0200000000000031 0.0 246
+247 0.0234620571136475 0.029999999999994 0.029999999999994 0.0 247
+248 0.0517890453338623 0.0500000000000043 0.0500000000000043 0.0 248
+249 0.0233941078186035 0.019999999999996 0.019999999999996 0.0 249
+250 0.0230710506439209 0.0300000000000011 0.0300000000000011 0.0 250
+251 0.0229940414428711 0.0200000000000031 0.0200000000000031 0.0 251
+252 0.0231740474700928 0.019999999999996 0.019999999999996 0.0 252
+253 0.0238161087036133 0.0300000000000011 0.0300000000000011 0.0 253
+254 0.0480771064758301 0.0399999999999991 0.0399999999999991 0.0 254
+255 0.0314779281616211 0.0399999999999991 0.0399999999999991 0.0 255
+256 0.0233800411224365 0.0200000000000031 0.0200000000000031 0.0 256
+257 0.0274808406829834 0.0300000000000011 0.0300000000000011 0.0 257
+258 0.0230331420898438 0.019999999999996 0.019999999999996 0.0 258
+259 0.0229949951171875 0.0200000000000031 0.0200000000000031 0.0 259
+260 0.0227811336517334 0.0300000000000011 0.0300000000000011 0.0 260
+261 0.048346996307373 0.0399999999999991 0.0399999999999991 0.0 261
+262 0.0237669944763184 0.0300000000000011 0.0300000000000011 0.0 262
+263 0.0234119892120361 0.019999999999996 0.019999999999996 0.0 263
+264 0.0230929851531982 0.0300000000000011 0.0300000000000011 0.0 264
+265 0.0237300395965576 0.0200000000000031 0.0200000000000031 0.0 265
+266 0.0250859260559082 0.019999999999996 0.019999999999996 0.0 266
+267 0.0239300727844238 0.0300000000000011 0.0300000000000011 0.0 267
+268 0.048508882522583 0.0499999999999972 0.0499999999999972 0.0 268
+269 0.0236718654632568 0.0200000000000031 0.0200000000000031 0.0 269
+270 0.0233798027038574 0.0200000000000031 0.0200000000000031 0.0 270
+271 0.0230140686035156 0.029999999999994 0.029999999999994 0.0 271
+272 0.023123025894165 0.0200000000000031 0.0200000000000031 0.0 272
+273 0.0230128765106201 0.0200000000000031 0.0200000000000031 0.0 273
+274 0.0230889320373535 0.029999999999994 0.029999999999994 0.0 274
+275 0.0541810989379883 0.0500000000000043 0.0500000000000043 0.0 275
+276 0.0234689712524414 0.019999999999996 0.019999999999996 0.0 276
+277 0.0232949256896973 0.0300000000000011 0.0300000000000011 0.0 277
+278 0.0229971408843994 0.0200000000000031 0.0200000000000031 0.0 278
+279 0.023047924041748 0.019999999999996 0.019999999999996 0.0 279
+280 0.0229649543762207 0.0300000000000011 0.0300000000000011 0.0 280
+281 0.0231289863586426 0.0200000000000031 0.0200000000000031 0.0 281
+282 0.0487880706787109 0.0499999999999972 0.0499999999999972 0.0 282
+283 0.0234870910644531 0.0200000000000031 0.0200000000000031 0.0 283
+284 0.0263619422912598 0.0300000000000011 0.0300000000000011 0.0 284
+285 0.0238580703735352 0.019999999999996 0.019999999999996 0.0 285
+286 0.0231029987335205 0.0300000000000011 0.0300000000000011 0.0 286
+287 0.0230438709259033 0.019999999999996 0.019999999999996 0.0 287
+288 0.0477249622344971 0.0500000000000043 0.0500000000000043 0.0 288
+289 0.024465799331665 0.019999999999996 0.019999999999996 0.0 289
+290 0.023345947265625 0.0200000000000031 0.0200000000000031 0.0 290
+291 0.0297031402587891 0.0300000000000011 0.0300000000000011 0.0 291
+292 0.0236890316009521 0.0300000000000011 0.0300000000000011 0.0 292
+293 0.0227231979370117 0.019999999999996 0.019999999999996 0.0 293
+294 0.0271649360656738 0.0300000000000011 0.0300000000000011 0.0 294
+295 0.0483009815216064 0.0499999999999972 0.0499999999999972 0.0 295
+296 0.0236551761627197 0.0200000000000031 0.0200000000000031 0.0 296
+297 0.0233678817749023 0.0200000000000031 0.0200000000000031 0.0 297
+298 0.0230870246887207 0.029999999999994 0.029999999999994 0.0 298
+299 0.0232620239257812 0.0200000000000031 0.0200000000000031 0.0 299
+300 0.0231177806854248 0.0200000000000031 0.0200000000000031 0.0 300
+301 0.0231750011444092 0.029999999999994 0.029999999999994 0.0 301
+302 0.0530638694763184 0.0500000000000043 0.0500000000000043 0.0 302
+303 0.0237231254577637 0.019999999999996 0.019999999999996 0.0 303
+304 0.0232911109924316 0.0300000000000011 0.0300000000000011 0.0 304
+305 0.0233948230743408 0.0200000000000031 0.0200000000000031 0.0 305
+306 0.0232441425323486 0.019999999999996 0.019999999999996 0.0 306
+307 0.0230438709259033 0.0300000000000011 0.0300000000000011 0.0 307
+308 0.0230541229248047 0.0200000000000031 0.0200000000000031 0.0 308
+309 0.0487320423126221 0.0499999999999972 0.0499999999999972 0.0 309
+310 0.0232770442962646 0.0200000000000031 0.0200000000000031 0.0 310
+311 0.0253291130065918 0.0300000000000011 0.0300000000000011 0.0 311
+312 0.0244429111480713 0.019999999999996 0.019999999999996 0.0 312
+313 0.0229580402374268 0.0200000000000031 0.0200000000000031 0.0 313
+314 0.0229830741882324 0.029999999999994 0.029999999999994 0.0 314
+315 0.022658109664917 0.0200000000000031 0.0200000000000031 0.0 315
+316 0.0462629795074463 0.0499999999999972 0.0499999999999972 0.0 316
+317 0.023582935333252 0.0200000000000031 0.0200000000000031 0.0 317
+318 0.0232110023498535 0.0200000000000031 0.0200000000000031 0.0 318
+319 0.0232689380645752 0.029999999999994 0.029999999999994 0.0 319
+320 0.0231220722198486 0.0200000000000031 0.0200000000000031 0.0 320
+321 0.0256280899047852 0.0300000000000011 0.0300000000000011 0.0 321
+322 0.0481250286102295 0.0399999999999991 0.0399999999999991 0.0 322
+323 0.0235259532928467 0.0300000000000011 0.0300000000000011 0.0 323
+324 0.0235180854797363 0.019999999999996 0.019999999999996 0.0 324
+325 0.0231471061706543 0.0200000000000031 0.0200000000000031 0.0 325
+326 0.0238540172576904 0.0300000000000011 0.0300000000000011 0.0 326
+327 0.02276611328125 0.019999999999996 0.019999999999996 0.0 327
+328 0.0304388999938965 0.0399999999999991 0.0300000000000011 0.01 328
+329 0.0523970127105713 0.0500000000000043 0.0500000000000043 0.0 329
+330 0.023996114730835 0.029999999999994 0.029999999999994 0.0 330
+331 0.0234379768371582 0.0200000000000031 0.0200000000000031 0.0 331
+332 0.0230920314788818 0.019999999999996 0.019999999999996 0.0 332
+333 0.02305006980896 0.0300000000000011 0.0300000000000011 0.0 333
+334 0.0229852199554443 0.0200000000000031 0.0200000000000031 0.0 334
+335 0.0228848457336426 0.019999999999996 0.019999999999996 0.0 335
+336 0.0461750030517578 0.0500000000000043 0.0500000000000043 0.0 336
+337 0.0242049694061279 0.019999999999996 0.019999999999996 0.0 337
+338 0.0232689380645752 0.0300000000000011 0.0300000000000011 0.0 338
+339 0.027277946472168 0.0200000000000031 0.0200000000000031 0.0 339
+340 0.0230321884155273 0.0300000000000011 0.0300000000000011 0.0 340
+341 0.0230269432067871 0.019999999999996 0.019999999999996 0.0 341
+342 0.0231468677520752 0.0200000000000031 0.0200000000000031 0.0 342
+343 0.0488090515136719 0.0499999999999972 0.0499999999999972 0.0 343
+344 0.0232529640197754 0.0300000000000011 0.0300000000000011 0.0 344
+345 0.0230770111083984 0.0200000000000031 0.0200000000000031 0.0 345
+346 0.0230259895324707 0.019999999999996 0.019999999999996 0.0 346
+347 0.0230309963226318 0.0200000000000031 0.0200000000000031 0.0 347
+348 0.026080846786499 0.0300000000000011 0.0300000000000011 0.0 348
+349 0.023392915725708 0.019999999999996 0.019999999999996 0.0 349
+350 0.0461099147796631 0.0499999999999972 0.0499999999999972 0.0 350
+351 0.0233287811279297 0.0200000000000031 0.0200000000000031 0.0 351
+352 0.023190975189209 0.0300000000000011 0.0300000000000011 0.0 352
+353 0.0231750011444092 0.019999999999996 0.019999999999996 0.0 353
+354 0.0230758190155029 0.0200000000000031 0.0200000000000031 0.0 354
+355 0.0229721069335938 0.0300000000000011 0.0300000000000011 0.0 355
+356 0.0483551025390625 0.0499999999999972 0.0499999999999972 0.0 356
+357 0.0269951820373535 0.0200000000000031 0.0200000000000031 0.0 357
+358 0.0235021114349365 0.0300000000000011 0.0300000000000011 0.0 358
+359 0.0231399536132812 0.019999999999996 0.019999999999996 0.0 359
+360 0.0230071544647217 0.0200000000000031 0.0200000000000031 0.0 360
+361 0.0228490829467773 0.019999999999996 0.019999999999996 0.0 361
+362 0.0229380130767822 0.0300000000000011 0.0300000000000011 0.0 362
+363 0.0501840114593506 0.0500000000000043 0.0500000000000043 0.0 363
+364 0.029426097869873 0.029999999999994 0.029999999999994 0.0 364
+365 0.023777961730957 0.0200000000000031 0.0200000000000031 0.0 365
+366 0.0276000499725342 0.0300000000000011 0.0300000000000011 0.0 366
+367 0.0230789184570312 0.019999999999996 0.019999999999996 0.0 367
+368 0.0233089923858643 0.0200000000000031 0.0200000000000031 0.0 368
+369 0.0229260921478271 0.0300000000000011 0.0300000000000011 0.0 369
+370 0.0456759929656982 0.0399999999999991 0.0399999999999991 0.0 370
+371 0.0234260559082031 0.0300000000000011 0.0300000000000011 0.0 371
+372 0.0235531330108643 0.019999999999996 0.019999999999996 0.0 372
+373 0.0229899883270264 0.0200000000000031 0.0200000000000031 0.0 373
+374 0.0239078998565674 0.0300000000000011 0.0300000000000011 0.0 374
+375 0.0229928493499756 0.019999999999996 0.019999999999996 0.0 375
+376 0.0269260406494141 0.0300000000000011 0.0300000000000011 0.0 376
+377 0.0490090847015381 0.0499999999999972 0.0499999999999972 0.0 377
+378 0.0235331058502197 0.0200000000000031 0.0200000000000031 0.0 378
+379 0.0232670307159424 0.0200000000000031 0.0200000000000031 0.0 379
+380 0.0229969024658203 0.029999999999994 0.029999999999994 0.0 380
+381 0.0230321884155273 0.0200000000000031 0.0200000000000031 0.0 381
+382 0.0229909420013428 0.0200000000000031 0.0200000000000031 0.0 382
+383 0.022780179977417 0.029999999999994 0.029999999999994 0.0 383
+384 0.0519418716430664 0.0500000000000043 0.0500000000000043 0.0 384
+385 0.0233969688415527 0.019999999999996 0.019999999999996 0.0 385
+386 0.0231471061706543 0.0200000000000031 0.0200000000000031 0.0 386
+387 0.0230250358581543 0.0300000000000011 0.0300000000000011 0.0 387
+388 0.0229988098144531 0.019999999999996 0.019999999999996 0.0 388
+389 0.0229358673095703 0.0200000000000031 0.0200000000000031 0.0 389
+390 0.0482490062713623 0.0499999999999972 0.0499999999999972 0.0 390
+391 0.0239629745483398 0.0200000000000031 0.0200000000000031 0.0 391
+392 0.0235099792480469 0.0300000000000011 0.0300000000000011 0.0 392
+393 0.0232250690460205 0.019999999999996 0.019999999999996 0.0 393
+394 0.0269668102264404 0.0300000000000011 0.0300000000000011 0.0 394
+395 0.0230469703674316 0.0200000000000031 0.0200000000000031 0.0 395
+396 0.0230209827423096 0.019999999999996 0.019999999999996 0.0 396
+397 0.0488598346710205 0.0500000000000043 0.0500000000000043 0.0 397
+398 0.0243711471557617 0.029999999999994 0.029999999999994 0.0 398
+399 0.023435115814209 0.0200000000000031 0.0200000000000031 0.0 399
+400 0.0307729244232178 0.0300000000000011 0.0300000000000011 0.0 400
+401 0.0231430530548096 0.0300000000000011 0.0300000000000011 0.0 401
+402 0.0228579044342041 0.019999999999996 0.019999999999996 0.0 402
+403 0.0268239974975586 0.0300000000000011 0.0300000000000011 0.0 403
+404 0.0487518310546875 0.0399999999999991 0.0399999999999991 0.0 404
+405 0.0233860015869141 0.0300000000000011 0.0300000000000011 0.0 405
+406 0.0233309268951416 0.0200000000000031 0.0200000000000031 0.0 406
+407 0.0230538845062256 0.019999999999996 0.019999999999996 0.0 407
+408 0.0232100486755371 0.0300000000000011 0.0300000000000011 0.0 408
+409 0.0231878757476807 0.0200000000000031 0.0200000000000031 0.0 409
+410 0.0229208469390869 0.019999999999996 0.019999999999996 0.0 410
+411 0.0527458190917969 0.0600000000000023 0.0600000000000023 0.0 411
+412 0.0235259532928467 0.019999999999996 0.019999999999996 0.0 412
+413 0.0231070518493652 0.0200000000000031 0.0200000000000031 0.0 413
+414 0.0231637954711914 0.0300000000000011 0.0300000000000011 0.0 414
+415 0.0231881141662598 0.019999999999996 0.019999999999996 0.0 415
+416 0.0229959487915039 0.0200000000000031 0.0200000000000031 0.0 416
+417 0.0480611324310303 0.0499999999999972 0.0499999999999972 0.0 417
+418 0.0235860347747803 0.0200000000000031 0.0200000000000031 0.0 418
+419 0.0235400199890137 0.0300000000000011 0.0300000000000011 0.0 419
+420 0.0231409072875977 0.019999999999996 0.019999999999996 0.0 420
+421 0.0267078876495361 0.0300000000000011 0.0300000000000011 0.0 421
+422 0.0230278968811035 0.0200000000000031 0.0200000000000031 0.0 422
+423 0.0228691101074219 0.019999999999996 0.019999999999996 0.0 423
+424 0.0483551025390625 0.0500000000000043 0.0500000000000043 0.0 424
+425 0.0237739086151123 0.029999999999994 0.029999999999994 0.0 425
+426 0.0233981609344482 0.0200000000000031 0.0200000000000031 0.0 426
+427 0.0230469703674316 0.0200000000000031 0.0200000000000031 0.0 427
+428 0.0233399868011475 0.029999999999994 0.029999999999994 0.0 428
+429 0.0231611728668213 0.0200000000000031 0.0200000000000031 0.0 429
+430 0.0267009735107422 0.0300000000000011 0.0300000000000011 0.0 430
+431 0.0472571849822998 0.0399999999999991 0.0399999999999991 0.0 431
+432 0.0234270095825195 0.0300000000000011 0.0300000000000011 0.0 432
+433 0.0233609676361084 0.019999999999996 0.019999999999996 0.0 433
+434 0.0230159759521484 0.0200000000000031 0.0200000000000031 0.0 434
+435 0.0242648124694824 0.0300000000000011 0.0300000000000011 0.0 435
+436 0.0230550765991211 0.019999999999996 0.019999999999996 0.0 436
+437 0.0298559665679932 0.0300000000000011 0.0300000000000011 0.0 437
+438 0.0506420135498047 0.0500000000000043 0.0500000000000043 0.0 438
+439 0.0245800018310547 0.029999999999994 0.029999999999994 0.0 439
+440 0.0232729911804199 0.0200000000000031 0.0200000000000031 0.0 440
+441 0.023047924041748 0.019999999999996 0.019999999999996 0.0 441
+442 0.0230588912963867 0.0300000000000011 0.0300000000000011 0.0 442
+443 0.0230181217193604 0.0200000000000031 0.0200000000000031 0.0 443
+444 0.0474259853363037 0.0499999999999972 0.0499999999999972 0.0 444
+445 0.0234999656677246 0.0200000000000031 0.0200000000000031 0.0 445
+446 0.0245218276977539 0.019999999999996 0.019999999999996 0.0 446
+447 0.0232257843017578 0.0300000000000011 0.0300000000000011 0.0 447
+448 0.0262331962585449 0.0200000000000031 0.0200000000000031 0.0 448
+449 0.0228760242462158 0.0300000000000011 0.0300000000000011 0.0 449
+450 0.0228469371795654 0.019999999999996 0.019999999999996 0.0 450
+451 0.0489568710327148 0.0500000000000043 0.0500000000000043 0.0 451
+452 0.0236458778381348 0.019999999999996 0.019999999999996 0.0 452
+453 0.0232670307159424 0.0300000000000011 0.0300000000000011 0.0 453
+454 0.0231130123138428 0.0200000000000031 0.0200000000000031 0.0 454
+455 0.0231020450592041 0.019999999999996 0.019999999999996 0.0 455
+456 0.0229918956756592 0.0300000000000011 0.0300000000000011 0.0 456
+457 0.0239298343658447 0.0200000000000031 0.0200000000000031 0.0 457
+458 0.0493390560150146 0.0499999999999972 0.0499999999999972 0.0 458
+459 0.0235741138458252 0.019999999999996 0.019999999999996 0.0 459
+460 0.0232348442077637 0.0300000000000011 0.0300000000000011 0.0 460
+461 0.023144006729126 0.0200000000000031 0.0200000000000031 0.0 461
+462 0.0232930183410645 0.019999999999996 0.019999999999996 0.0 462
+463 0.0231001377105713 0.0300000000000011 0.0300000000000011 0.0 463
+464 0.022939920425415 0.0200000000000031 0.0200000000000031 0.0 464
+465 0.0494201183319092 0.0499999999999972 0.0499999999999972 0.0 465
+466 0.0259408950805664 0.0200000000000031 0.0200000000000031 0.0 466
+467 0.0232219696044922 0.0300000000000011 0.0300000000000011 0.0 467
+468 0.0229430198669434 0.019999999999996 0.019999999999996 0.0 468
+469 0.0229699611663818 0.0200000000000031 0.0200000000000031 0.0 469
+470 0.023082971572876 0.0300000000000011 0.0300000000000011 0.0 470
+471 0.0460779666900635 0.0399999999999991 0.0399999999999991 0.0 471
+472 0.0259521007537842 0.0300000000000011 0.0300000000000011 0.0 472
+473 0.0284790992736816 0.029999999999994 0.029999999999994 0.0 473
+474 0.0231249332427979 0.0200000000000031 0.0200000000000031 0.0 474
+475 0.0256848335266113 0.0300000000000011 0.0300000000000011 0.0 475
+476 0.0245170593261719 0.019999999999996 0.019999999999996 0.0 476
+477 0.0228760242462158 0.0200000000000031 0.0200000000000031 0.0 477
+478 0.0482878684997559 0.0499999999999972 0.0499999999999972 0.0 478
+479 0.0235881805419922 0.0300000000000011 0.0300000000000011 0.0 479
+480 0.0232489109039307 0.0200000000000031 0.0200000000000031 0.0 480
+481 0.0233352184295654 0.019999999999996 0.019999999999996 0.0 481
+482 0.0229990482330322 0.0300000000000011 0.0300000000000011 0.0 482
+483 0.0238139629364014 0.0200000000000031 0.0200000000000031 0.0 483
+484 0.0229029655456543 0.019999999999996 0.019999999999996 0.0 484
+485 0.0516219139099121 0.0500000000000043 0.0500000000000043 0.0 485
+486 0.023360013961792 0.029999999999994 0.029999999999994 0.0 486
+487 0.0233120918273926 0.0200000000000031 0.0200000000000031 0.0 487
+488 0.0231151580810547 0.0200000000000031 0.0200000000000031 0.0 488
+489 0.0229690074920654 0.029999999999994 0.029999999999994 0.0 489
+490 0.0230300426483154 0.0200000000000031 0.0200000000000031 0.0 490
+491 0.0228698253631592 0.0200000000000031 0.0200000000000031 0.0 491
+492 0.0457451343536377 0.0499999999999972 0.0499999999999972 0.0 492
+493 0.0249300003051758 0.0200000000000031 0.0200000000000031 0.0 493
+494 0.0259578227996826 0.029999999999994 0.029999999999994 0.0 494
+495 0.0231161117553711 0.0200000000000031 0.0200000000000031 0.0 495
+496 0.0229859352111816 0.0300000000000011 0.0300000000000011 0.0 496
+497 0.0230338573455811 0.019999999999996 0.019999999999996 0.0 497
+498 0.0484039783477783 0.0500000000000043 0.0500000000000043 0.0 498
+499 0.0237560272216797 0.019999999999996 0.019999999999996 0.0 499
+500 0.0233612060546875 0.0200000000000031 0.0200000000000031 0.0 500
+501 0.0233550071716309 0.0300000000000011 0.0300000000000011 0.0 501
+502 0.0231049060821533 0.019999999999996 0.019999999999996 0.0 502
+503 0.026008129119873 0.0300000000000011 0.0300000000000011 0.0 503
+504 0.0228710174560547 0.0200000000000031 0.0200000000000031 0.0 504
+505 0.0483829975128174 0.0499999999999972 0.0499999999999972 0.0 505
+506 0.0237247943878174 0.0200000000000031 0.0200000000000031 0.0 506
+507 0.02410888671875 0.029999999999994 0.029999999999994 0.0 507
+508 0.0231809616088867 0.0200000000000031 0.0200000000000031 0.0 508
+509 0.0286002159118652 0.0300000000000011 0.0300000000000011 0.0 509
+510 0.0245559215545654 0.019999999999996 0.019999999999996 0.0 510
+511 0.0228598117828369 0.0300000000000011 0.0300000000000011 0.0 511
+512 0.0508739948272705 0.0500000000000043 0.0500000000000043 0.0 512
+513 0.0235428810119629 0.019999999999996 0.019999999999996 0.0 513
+514 0.0231621265411377 0.0200000000000031 0.0200000000000031 0.0 514
+515 0.0231170654296875 0.0300000000000011 0.0300000000000011 0.0 515
+516 0.023061990737915 0.019999999999996 0.019999999999996 0.0 516
+517 0.0231702327728271 0.0200000000000031 0.0200000000000031 0.0 517
+518 0.0230000019073486 0.0300000000000011 0.0300000000000011 0.0 518
+519 0.0464069843292236 0.0399999999999991 0.0399999999999991 0.0 519
+520 0.0233228206634521 0.0300000000000011 0.0300000000000011 0.0 520
+521 0.0263099670410156 0.019999999999996 0.019999999999996 0.0 521
+522 0.0230581760406494 0.0300000000000011 0.0300000000000011 0.0 522
+523 0.0230810642242432 0.019999999999996 0.019999999999996 0.0 523
+524 0.0231571197509766 0.0200000000000031 0.0200000000000031 0.0 524
+525 0.0479769706726074 0.0499999999999972 0.0499999999999972 0.0 525
+526 0.0237100124359131 0.0200000000000031 0.0200000000000031 0.0 526
+527 0.0232999324798584 0.0300000000000011 0.0300000000000011 0.0 527
+528 0.0232400894165039 0.019999999999996 0.019999999999996 0.0 528
+529 0.0229151248931885 0.0200000000000031 0.0200000000000031 0.0 529
+530 0.0261499881744385 0.0300000000000011 0.0300000000000011 0.0 530
+531 0.0231139659881592 0.019999999999996 0.019999999999996 0.0 531
+532 0.0486347675323486 0.0500000000000043 0.0500000000000043 0.0 532
+533 0.023561954498291 0.0300000000000011 0.0300000000000011 0.0 533
+534 0.0232679843902588 0.019999999999996 0.019999999999996 0.0 534
+535 0.023292064666748 0.0200000000000031 0.0200000000000031 0.0 535
+536 0.0231978893280029 0.0300000000000011 0.0300000000000011 0.0 536
+537 0.0229289531707764 0.019999999999996 0.019999999999996 0.0 537
+538 0.0231430530548096 0.0200000000000031 0.0200000000000031 0.0 538
+539 0.0520761013031006 0.0499999999999972 0.0499999999999972 0.0 539
+540 0.0233478546142578 0.0300000000000011 0.0300000000000011 0.0 540
+541 0.0231640338897705 0.019999999999996 0.019999999999996 0.0 541
+542 0.0230228900909424 0.0200000000000031 0.0200000000000031 0.0 542
+543 0.0231611728668213 0.0300000000000011 0.0300000000000011 0.0 543
+544 0.0238080024719238 0.019999999999996 0.019999999999996 0.0 544
+545 0.0228090286254883 0.0200000000000031 0.0200000000000031 0.0 545
+546 0.0527040958404541 0.0600000000000023 0.0600000000000023 0.0 546
+547 0.0233268737792969 0.019999999999996 0.019999999999996 0.0 547
+548 0.0268959999084473 0.0300000000000011 0.0300000000000011 0.0 548
+549 0.02323317527771 0.0200000000000031 0.0200000000000031 0.0 549
+550 0.0231490135192871 0.019999999999996 0.019999999999996 0.0 550
+551 0.0229969024658203 0.0300000000000011 0.0300000000000011 0.0 551
+552 0.0478971004486084 0.0399999999999991 0.0399999999999991 0.0 552
+553 0.0237979888916016 0.0300000000000011 0.0300000000000011 0.0 553
+554 0.0234241485595703 0.0200000000000031 0.0200000000000031 0.0 554
+555 0.023115873336792 0.019999999999996 0.019999999999996 0.0 555
+556 0.0237019062042236 0.0300000000000011 0.0300000000000011 0.0 556
+557 0.0229599475860596 0.0200000000000031 0.0200000000000031 0.0 557
+558 0.0263819694519043 0.029999999999994 0.029999999999994 0.0 558
+559 0.0488171577453613 0.0500000000000043 0.0500000000000043 0.0 559
+560 0.023486852645874 0.019999999999996 0.019999999999996 0.0 560
+561 0.0233681201934814 0.0200000000000031 0.0200000000000031 0.0 561
+562 0.0230288505554199 0.0300000000000011 0.0300000000000011 0.0 562
+563 0.022907018661499 0.019999999999996 0.019999999999996 0.0 563
+564 0.0227639675140381 0.0200000000000031 0.0200000000000031 0.0 564
+565 0.0228629112243652 0.019999999999996 0.019999999999996 0.0 565
+566 0.0502970218658447 0.0499999999999972 0.0499999999999972 0.0 566
+567 0.0234780311584473 0.0200000000000031 0.0200000000000031 0.0 567
+568 0.0246810913085938 0.019999999999996 0.019999999999996 0.0 568
+569 0.0233399868011475 0.0300000000000011 0.0300000000000011 0.0 569
+570 0.0233209133148193 0.0200000000000031 0.0200000000000031 0.0 570
+571 0.0233681201934814 0.019999999999996 0.019999999999996 0.0 571
+572 0.0485889911651611 0.0500000000000043 0.0500000000000043 0.0 572
+573 0.0244321823120117 0.029999999999994 0.029999999999994 0.0 573
+574 0.0241711139678955 0.0200000000000031 0.0200000000000031 0.0 574
+575 0.0249710083007812 0.0300000000000011 0.0300000000000011 0.0 575
+576 0.0267090797424316 0.019999999999996 0.019999999999996 0.0 576
+577 0.0232799053192139 0.0300000000000011 0.0300000000000011 0.0 577
+578 0.0231969356536865 0.0200000000000031 0.0200000000000031 0.0 578
+579 0.0491700172424316 0.0499999999999972 0.0499999999999972 0.0 579
+580 0.025277853012085 0.0200000000000031 0.0200000000000031 0.0 580
+581 0.0265741348266602 0.0300000000000011 0.0300000000000011 0.0 581
+582 0.0273458957672119 0.029999999999994 0.029999999999994 0.0 582
+583 0.0252799987792969 0.0200000000000031 0.0200000000000031 0.0 583
+584 0.0245480537414551 0.0300000000000011 0.0300000000000011 0.0 584
+585 0.0260021686553955 0.019999999999996 0.019999999999996 0.0 585
+586 0.0474262237548828 0.0500000000000043 0.0500000000000043 0.0 586
+587 0.0234909057617188 0.0300000000000011 0.0300000000000011 0.0 587
+588 0.023231029510498 0.019999999999996 0.019999999999996 0.0 588
+589 0.0231058597564697 0.0200000000000031 0.0200000000000031 0.0 589
+590 0.0234060287475586 0.0300000000000011 0.0300000000000011 0.0 590
+591 0.0230560302734375 0.019999999999996 0.019999999999996 0.0 591
+592 0.0236189365386963 0.0200000000000031 0.0200000000000031 0.0 592
+593 0.0531678199768066 0.0599999999999952 0.0599999999999952 0.0 593
+594 0.0234320163726807 0.0200000000000031 0.0200000000000031 0.0 594
+595 0.0234501361846924 0.019999999999996 0.019999999999996 0.0 595
+596 0.023097038269043 0.0300000000000011 0.0300000000000011 0.0 596
+597 0.0239620208740234 0.0200000000000031 0.0200000000000031 0.0 597
+598 0.023064136505127 0.019999999999996 0.019999999999996 0.0 598
+599 0.0469310283660889 0.0500000000000043 0.0500000000000043 0.0 599
+600 0.0238142013549805 0.019999999999996 0.019999999999996 0.0 600
+601 0.0232729911804199 0.0200000000000031 0.0200000000000031 0.0 601
+602 0.0264449119567871 0.0300000000000011 0.0300000000000011 0.0 602
+603 0.0250101089477539 0.0300000000000011 0.0300000000000011 0.0 603
+604 0.022953987121582 0.019999999999996 0.019999999999996 0.0 604
+605 0.0227360725402832 0.0200000000000031 0.0200000000000031 0.0 605
+606 0.0484528541564941 0.0499999999999972 0.0499999999999972 0.0 606
+607 0.0238401889801025 0.0200000000000031 0.0200000000000031 0.0 607
+608 0.023205041885376 0.0300000000000011 0.0300000000000011 0.0 608
+609 0.0230309963226318 0.019999999999996 0.019999999999996 0.0 609
+610 0.0233237743377686 0.0200000000000031 0.0200000000000031 0.0 610
+611 0.0229151248931885 0.0300000000000011 0.0300000000000011 0.0 611
+612 0.0266458988189697 0.019999999999996 0.019999999999996 0.0 612
+613 0.0459887981414795 0.0499999999999972 0.0499999999999972 0.0 613
+614 0.0233139991760254 0.0200000000000031 0.0200000000000031 0.0 614
+615 0.0232000350952148 0.0300000000000011 0.0300000000000011 0.0 615
+616 0.0238010883331299 0.019999999999996 0.019999999999996 0.0 616
+617 0.0231029987335205 0.0200000000000031 0.0200000000000031 0.0 617
+618 0.031013011932373 0.0300000000000011 0.0300000000000011 0.0 618
+619 0.0480711460113525 0.0499999999999972 0.0499999999999972 0.0 619
+620 0.0269320011138916 0.0300000000000011 0.0300000000000011 0.0 620
+621 0.0233550071716309 0.0200000000000031 0.0200000000000031 0.0 621
+622 0.0232939720153809 0.029999999999994 0.029999999999994 0.0 622
+623 0.0229189395904541 0.0200000000000031 0.0200000000000031 0.0 623
+624 0.022881031036377 0.0200000000000031 0.0200000000000031 0.0 624
+625 0.0228018760681152 0.029999999999994 0.029999999999994 0.0 625
+626 0.0487551689147949 0.0400000000000063 0.0400000000000063 0.0 626
+627 0.0234999656677246 0.029999999999994 0.029999999999994 0.0 627
+628 0.023996114730835 0.0200000000000031 0.0200000000000031 0.0 628
+629 0.0232369899749756 0.0300000000000011 0.0300000000000011 0.0 629
+630 0.0269510746002197 0.019999999999996 0.019999999999996 0.0 630
+631 0.024583101272583 0.0300000000000011 0.0300000000000011 0.0 631
+632 0.0230491161346436 0.0200000000000031 0.0200000000000031 0.0 632
+633 0.0473129749298096 0.0499999999999972 0.0499999999999972 0.0 633
+634 0.0233309268951416 0.0200000000000031 0.0200000000000031 0.0 634
+635 0.0232229232788086 0.019999999999996 0.019999999999996 0.0 635
+636 0.0229809284210205 0.0300000000000011 0.0300000000000011 0.0 636
+637 0.0231940746307373 0.0200000000000031 0.0200000000000031 0.0 637
+638 0.0231130123138428 0.019999999999996 0.019999999999996 0.0 638
+639 0.0522749423980713 0.0500000000000043 0.0500000000000043 0.0 639
+640 0.0235979557037354 0.029999999999994 0.029999999999994 0.0 640
+641 0.0233168601989746 0.0200000000000031 0.0200000000000031 0.0 641
+642 0.0231528282165527 0.0300000000000011 0.0300000000000011 0.0 642
+643 0.0232172012329102 0.019999999999996 0.019999999999996 0.0 643
+644 0.0227980613708496 0.0200000000000031 0.0200000000000031 0.0 644
+645 0.0227620601654053 0.0200000000000031 0.0200000000000031 0.0 645
+646 0.0490891933441162 0.0499999999999972 0.0499999999999972 0.0 646
+647 0.0240461826324463 0.0300000000000011 0.0300000000000011 0.0 647
+648 0.0267610549926758 0.019999999999996 0.019999999999996 0.0 648
+649 0.0232100486755371 0.0300000000000011 0.0300000000000011 0.0 649
+650 0.0230560302734375 0.0200000000000031 0.0200000000000031 0.0 650
+651 0.023500919342041 0.019999999999996 0.019999999999996 0.0 651
+652 0.0230460166931152 0.0300000000000011 0.0300000000000011 0.0 652
+653 0.0512759685516357 0.0500000000000043 0.0500000000000043 0.0 653
+654 0.0272390842437744 0.019999999999996 0.019999999999996 0.0 654
+655 0.0247349739074707 0.0300000000000011 0.0300000000000011 0.0 655
+656 0.0230178833007812 0.0200000000000031 0.0200000000000031 0.0 656
+657 0.0271899700164795 0.029999999999994 0.029999999999994 0.0 657
+658 0.0229711532592773 0.0200000000000031 0.0200000000000031 0.0 658
+659 0.0228548049926758 0.019999999999996 0.019999999999996 0.0 659
+660 0.0488860607147217 0.0500000000000043 0.0500000000000043 0.0 660
+661 0.0232799053192139 0.0300000000000011 0.0300000000000011 0.0 661
+662 0.0232510566711426 0.019999999999996 0.019999999999996 0.0 662
+663 0.0229790210723877 0.0200000000000031 0.0200000000000031 0.0 663
+664 0.0242810249328613 0.0300000000000011 0.0300000000000011 0.0 664
+665 0.0230100154876709 0.019999999999996 0.019999999999996 0.0 665
+666 0.0498199462890625 0.0500000000000043 0.0500000000000043 0.0 666
+667 0.0237331390380859 0.019999999999996 0.019999999999996 0.0 667
+668 0.0234551429748535 0.0300000000000011 0.0300000000000011 0.0 668
+669 0.0231800079345703 0.0200000000000031 0.0200000000000031 0.0 669
+670 0.0229709148406982 0.019999999999996 0.019999999999996 0.0 670
+671 0.023015022277832 0.0300000000000011 0.0300000000000011 0.0 671
+672 0.0230131149291992 0.0200000000000031 0.0200000000000031 0.0 672
+673 0.0487980842590332 0.0499999999999972 0.0499999999999972 0.0 673
+674 0.0240719318389893 0.0200000000000031 0.0200000000000031 0.0 674
+675 0.0269160270690918 0.029999999999994 0.029999999999994 0.0 675
+676 0.0230348110198975 0.0200000000000031 0.0200000000000031 0.0 676
+677 0.0227870941162109 0.0300000000000011 0.0300000000000011 0.0 677
+678 0.0228049755096436 0.019999999999996 0.019999999999996 0.0 678
+679 0.0226888656616211 0.0200000000000031 0.0200000000000031 0.0 679
+680 0.0477821826934814 0.0499999999999972 0.0499999999999972 0.0 680
+681 0.0232739448547363 0.0200000000000031 0.0200000000000031 0.0 681
+682 0.023953914642334 0.0300000000000011 0.0300000000000011 0.0 682
+683 0.0229859352111816 0.019999999999996 0.019999999999996 0.0 683
+684 0.0254220962524414 0.0200000000000031 0.0200000000000031 0.0 684
+685 0.0239348411560059 0.0300000000000011 0.0300000000000011 0.0 685
+686 0.0478279590606689 0.0499999999999972 0.0499999999999972 0.0 686
+687 0.023798942565918 0.0200000000000031 0.0200000000000031 0.0 687
+688 0.0233008861541748 0.019999999999996 0.019999999999996 0.0 688
+689 0.0240800380706787 0.0300000000000011 0.0300000000000011 0.0 689
+690 0.0304360389709473 0.0300000000000011 0.0300000000000011 0.0 690
+691 0.022982120513916 0.019999999999996 0.019999999999996 0.0 691
+692 0.0228438377380371 0.0200000000000031 0.0200000000000031 0.0 692
+693 0.0521981716156006 0.0600000000000023 0.0600000000000023 0.0 693
+694 0.0234532356262207 0.019999999999996 0.019999999999996 0.0 694
+695 0.0232119560241699 0.0200000000000031 0.0200000000000031 0.0 695
+696 0.0229840278625488 0.0300000000000011 0.0300000000000011 0.0 696
+697 0.0229799747467041 0.019999999999996 0.019999999999996 0.0 697
+698 0.0229427814483643 0.0200000000000031 0.0200000000000031 0.0 698
+699 0.0228908061981201 0.0300000000000011 0.0300000000000011 0.0 699
+700 0.0482070446014404 0.0399999999999991 0.0399999999999991 0.0 700
+701 0.023360013961792 0.0300000000000011 0.0300000000000011 0.0 701
+702 0.027055025100708 0.019999999999996 0.019999999999996 0.0 702
+703 0.0230090618133545 0.0300000000000011 0.0300000000000011 0.0 703
+704 0.02317214012146 0.019999999999996 0.019999999999996 0.0 704
+705 0.022986888885498 0.0200000000000031 0.0200000000000031 0.0 705
+706 0.0481140613555908 0.0499999999999972 0.0499999999999972 0.0 706
+707 0.0237739086151123 0.0300000000000011 0.0300000000000011 0.0 707
+708 0.0233809947967529 0.0200000000000031 0.0200000000000031 0.0 708
+709 0.0233211517333984 0.019999999999996 0.019999999999996 0.0 709
+710 0.0229690074920654 0.0300000000000011 0.0300000000000011 0.0 710
+711 0.0244121551513672 0.0200000000000031 0.0200000000000031 0.0 711
+712 0.0250389575958252 0.019999999999996 0.019999999999996 0.0 712
+713 0.0485482215881348 0.0399999999999991 0.0399999999999991 0.0 713
+714 0.0234758853912354 0.0300000000000011 0.0300000000000011 0.0 714
+715 0.023453950881958 0.019999999999996 0.019999999999996 0.0 715
+716 0.0230729579925537 0.0200000000000031 0.0200000000000031 0.0 716
+717 0.0230581760406494 0.0300000000000011 0.0300000000000011 0.0 717
+718 0.0230929851531982 0.019999999999996 0.019999999999996 0.0 718
+719 0.0229818820953369 0.0200000000000031 0.0200000000000031 0.0 719
+720 0.0512728691101074 0.0499999999999972 0.0499999999999972 0.0 720
+721 0.0234599113464355 0.0300000000000011 0.0300000000000011 0.0 721
+722 0.023129940032959 0.019999999999996 0.019999999999996 0.0 722
+723 0.0229649543762207 0.0200000000000031 0.0200000000000031 0.0 723
+724 0.0230588912963867 0.0300000000000011 0.0300000000000011 0.0 724
+725 0.0236339569091797 0.019999999999996 0.019999999999996 0.0 725
+726 0.0562300682067871 0.0600000000000023 0.0600000000000023 0.0 726
+727 0.0310180187225342 0.0300000000000011 0.0300000000000011 0.0 727
+728 0.0244710445404053 0.0200000000000031 0.0200000000000031 0.0 728
+729 0.0285270214080811 0.029999999999994 0.029999999999994 0.0 729
+730 0.0235979557037354 0.0300000000000011 0.0300000000000011 0.0 730
+731 0.0233108997344971 0.0200000000000031 0.0200000000000031 0.0 731
+732 0.0233650207519531 0.019999999999996 0.019999999999996 0.0 732
+733 0.0499210357666016 0.0500000000000043 0.0500000000000043 0.0 733
+734 0.0240199565887451 0.0300000000000011 0.0300000000000011 0.0 734
+735 0.0234189033508301 0.019999999999996 0.019999999999996 0.0 735
+736 0.0239479541778564 0.0200000000000031 0.0200000000000031 0.0 736
+737 0.0234498977661133 0.0300000000000011 0.0300000000000011 0.0 737
+738 0.027393102645874 0.019999999999996 0.019999999999996 0.0 738
+739 0.0233581066131592 0.0300000000000011 0.0300000000000011 0.0 739
+740 0.0494859218597412 0.0499999999999972 0.0499999999999972 0.0 740
+741 0.023939847946167 0.0200000000000031 0.0200000000000031 0.0 741
+742 0.0237078666687012 0.0300000000000011 0.0300000000000011 0.0 742
+743 0.023622989654541 0.019999999999996 0.019999999999996 0.0 743
+744 0.0235440731048584 0.0200000000000031 0.0200000000000031 0.0 744
+745 0.0236668586730957 0.0300000000000011 0.0300000000000011 0.0 745
+746 0.0538251399993896 0.0499999999999972 0.0499999999999972 0.0 746
+747 0.0246829986572266 0.0300000000000011 0.0300000000000011 0.0 747
+748 0.0239181518554688 0.019999999999996 0.019999999999996 0.0 748
+749 0.02370285987854 0.0200000000000031 0.0200000000000031 0.0 749
+750 0.0234520435333252 0.0300000000000011 0.0300000000000011 0.0 750
+751 0.0234749317169189 0.019999999999996 0.019999999999996 0.0 751
+752 0.0232760906219482 0.0200000000000031 0.0200000000000031 0.0 752
+753 0.050915002822876 0.0499999999999972 0.0499999999999972 0.0 753
+754 0.0237371921539307 0.0300000000000011 0.0300000000000011 0.0 754
+755 0.0239219665527344 0.0200000000000031 0.0200000000000031 0.0 755
+756 0.0273880958557129 0.0300000000000011 0.0300000000000011 0.0 756
+757 0.0232698917388916 0.019999999999996 0.019999999999996 0.0 757
+758 0.0235319137573242 0.0300000000000011 0.0300000000000011 0.0 758
+759 0.0232620239257812 0.0200000000000031 0.0200000000000031 0.0 759
+760 0.0498092174530029 0.0499999999999972 0.0499999999999972 0.0 760
+761 0.0315971374511719 0.0300000000000011 0.0300000000000011 0.0 761
+762 0.0236649513244629 0.019999999999996 0.019999999999996 0.0 762
+763 0.0233211517333984 0.0300000000000011 0.0300000000000011 0.0 763
+764 0.0230920314788818 0.0200000000000031 0.0200000000000031 0.0 764
+765 0.0270240306854248 0.0300000000000011 0.0300000000000011 0.0 765
+766 0.0479528903961182 0.0499999999999972 0.0499999999999972 0.0 766
+767 0.025413990020752 0.0200000000000031 0.0200000000000031 0.0 767
+768 0.0233969688415527 0.019999999999996 0.019999999999996 0.0 768
+769 0.0232100486755371 0.0300000000000011 0.0300000000000011 0.0 769
+770 0.0230209827423096 0.0200000000000031 0.0200000000000031 0.0 770
+771 0.0228300094604492 0.019999999999996 0.019999999999996 0.0 771
+772 0.0236411094665527 0.0300000000000011 0.0300000000000011 0.0 772
+773 0.0529980659484863 0.0499999999999972 0.0499999999999972 0.0 773
+774 0.0234870910644531 0.0200000000000031 0.0200000000000031 0.0 774
+775 0.0233190059661865 0.0300000000000011 0.0300000000000011 0.0 775
+776 0.0230171680450439 0.019999999999996 0.019999999999996 0.0 776
+777 0.0230998992919922 0.0200000000000031 0.0200000000000031 0.0 777
+778 0.0230000019073486 0.0300000000000011 0.0300000000000011 0.0 778
+779 0.0227389335632324 0.019999999999996 0.019999999999996 0.0 779
+780 0.0475330352783203 0.0500000000000043 0.0500000000000043 0.0 780
+781 0.0235450267791748 0.019999999999996 0.019999999999996 0.0 781
+782 0.024838924407959 0.0200000000000031 0.0200000000000031 0.0 782
+783 0.0251529216766357 0.0300000000000011 0.0300000000000011 0.0 783
+784 0.0230610370635986 0.019999999999996 0.019999999999996 0.0 784
+785 0.0230369567871094 0.0300000000000011 0.0300000000000011 0.0 785
+786 0.0483219623565674 0.0399999999999991 0.0399999999999991 0.0 786
+787 0.023716926574707 0.0300000000000011 0.0300000000000011 0.0 787
+788 0.0233070850372314 0.0200000000000031 0.0200000000000031 0.0 788
+789 0.0230929851531982 0.019999999999996 0.019999999999996 0.0 789
+790 0.0231740474700928 0.0300000000000011 0.0300000000000011 0.0 790
+791 0.0228431224822998 0.0200000000000031 0.0200000000000031 0.0 791
+792 0.0254631042480469 0.029999999999994 0.029999999999994 0.0 792
+793 0.0485448837280273 0.0399999999999991 0.0399999999999991 0.0 793
+794 0.0234110355377197 0.0300000000000011 0.0300000000000011 0.0 794
+795 0.023223876953125 0.0200000000000031 0.0200000000000031 0.0 795
+796 0.0238728523254395 0.0300000000000011 0.0300000000000011 0.0 796
+797 0.0251760482788086 0.019999999999996 0.019999999999996 0.0 797
+798 0.0276870727539062 0.0300000000000011 0.0300000000000011 0.0 798
+799 0.0227670669555664 0.0200000000000031 0.0200000000000031 0.0 799
+800 0.0514481067657471 0.0499999999999972 0.0499999999999972 0.0 800
+801 0.023374080657959 0.0300000000000011 0.0300000000000011 0.0 801
+802 0.0230941772460938 0.019999999999996 0.019999999999996 0.0 802
+803 0.0230350494384766 0.0200000000000031 0.0200000000000031 0.0 803
+804 0.0229940414428711 0.0300000000000011 0.0300000000000011 0.0 804
+805 0.0229909420013428 0.019999999999996 0.019999999999996 0.0 805
+806 0.0481908321380615 0.0500000000000043 0.0500000000000043 0.0 806
+807 0.0239169597625732 0.019999999999996 0.019999999999996 0.0 807
+808 0.0238561630249023 0.0200000000000031 0.0200000000000031 0.0 808
+809 0.0231790542602539 0.0300000000000011 0.0300000000000011 0.0 809
+810 0.0275747776031494 0.0300000000000011 0.0300000000000011 0.0 810
+811 0.0230591297149658 0.019999999999996 0.019999999999996 0.0 811
+812 0.0231878757476807 0.0200000000000031 0.0200000000000031 0.0 812
+813 0.048914909362793 0.0499999999999972 0.0499999999999972 0.0 813
+814 0.0234620571136475 0.0200000000000031 0.0200000000000031 0.0 814
+815 0.0232930183410645 0.0300000000000011 0.0300000000000011 0.0 815
+816 0.022986888885498 0.019999999999996 0.019999999999996 0.0 816
+817 0.0229377746582031 0.0200000000000031 0.0200000000000031 0.0 817
+818 0.0235490798950195 0.0300000000000011 0.0300000000000011 0.0 818
+819 0.0506079196929932 0.0499999999999972 0.0499999999999972 0.0 819
+820 0.023629903793335 0.019999999999996 0.019999999999996 0.0 820
+821 0.0234060287475586 0.0300000000000011 0.0300000000000011 0.0 821
+822 0.0231649875640869 0.0200000000000031 0.0200000000000031 0.0 822
+823 0.0232610702514648 0.019999999999996 0.019999999999996 0.0 823
+824 0.0246009826660156 0.0300000000000011 0.0300000000000011 0.0 824
+825 0.0229051113128662 0.0200000000000031 0.0200000000000031 0.0 825
+826 0.0487561225891113 0.0499999999999972 0.0499999999999972 0.0 826
+827 0.0235860347747803 0.0200000000000031 0.0200000000000031 0.0 827
+828 0.0275599956512451 0.0300000000000011 0.0300000000000011 0.0 828
+829 0.0231928825378418 0.019999999999996 0.019999999999996 0.0 829
+830 0.0227789878845215 0.0200000000000031 0.0200000000000031 0.0 830
+831 0.022838830947876 0.0300000000000011 0.0300000000000011 0.0 831
+832 0.0226640701293945 0.019999999999996 0.019999999999996 0.0 832
+833 0.0558691024780273 0.0600000000000023 0.0600000000000023 0.0 833
+834 0.0235500335693359 0.019999999999996 0.019999999999996 0.0 834
+835 0.0233221054077148 0.0200000000000031 0.0200000000000031 0.0 835
+836 0.0230560302734375 0.0300000000000011 0.0300000000000011 0.0 836
+837 0.026296854019165 0.019999999999996 0.019999999999996 0.0 837
+838 0.0231189727783203 0.0200000000000031 0.0200000000000031 0.0 838
+839 0.0479569435119629 0.0399999999999991 0.0399999999999991 0.0 839
+840 0.0236861705780029 0.0300000000000011 0.0300000000000011 0.0 840
+841 0.0233621597290039 0.0200000000000031 0.0200000000000031 0.0 841
+842 0.0233719348907471 0.019999999999996 0.019999999999996 0.0 842
+843 0.022942066192627 0.0300000000000011 0.0300000000000011 0.0 843
+844 0.0234341621398926 0.0200000000000031 0.0200000000000031 0.0 844
+845 0.0227351188659668 0.019999999999996 0.019999999999996 0.0 845
+846 0.0519671440124512 0.0500000000000043 0.0500000000000043 0.0 846
+847 0.0236749649047852 0.029999999999994 0.029999999999994 0.0 847
+848 0.0233500003814697 0.0200000000000031 0.0200000000000031 0.0 848
+849 0.0230710506439209 0.0300000000000011 0.0300000000000011 0.0 849
+850 0.0229990482330322 0.019999999999996 0.019999999999996 0.0 850
+851 0.0230109691619873 0.0200000000000031 0.0200000000000031 0.0 851
+852 0.0227420330047607 0.0200000000000031 0.0200000000000031 0.0 852
+853 0.0477049350738525 0.0499999999999972 0.0499999999999972 0.0 853
+854 0.0240600109100342 0.0300000000000011 0.0300000000000011 0.0 854
+855 0.026954174041748 0.019999999999996 0.019999999999996 0.0 855
+856 0.0229690074920654 0.0300000000000011 0.0300000000000011 0.0 856
+857 0.0230190753936768 0.0200000000000031 0.0200000000000031 0.0 857
+858 0.0229530334472656 0.019999999999996 0.019999999999996 0.0 858
+859 0.0483298301696777 0.0500000000000043 0.0500000000000043 0.0 859
+860 0.0237421989440918 0.019999999999996 0.019999999999996 0.0 860
+861 0.0233712196350098 0.0300000000000011 0.0300000000000011 0.0 861
+862 0.0233938694000244 0.0200000000000031 0.0200000000000031 0.0 862
+863 0.0228838920593262 0.019999999999996 0.019999999999996 0.0 863
+864 0.0237820148468018 0.0300000000000011 0.0300000000000011 0.0 864
+865 0.0258240699768066 0.0200000000000031 0.0200000000000031 0.0 865
+866 0.0487151145935059 0.0499999999999972 0.0499999999999972 0.0 866
+867 0.023514986038208 0.0300000000000011 0.0300000000000011 0.0 867
+868 0.023252010345459 0.019999999999996 0.019999999999996 0.0 868
+869 0.0243101119995117 0.0200000000000031 0.0200000000000031 0.0 869
+870 0.0295658111572266 0.0300000000000011 0.0300000000000011 0.0 870
+871 0.0230669975280762 0.0300000000000011 0.0300000000000011 0.0 871
+872 0.0470709800720215 0.0399999999999991 0.0399999999999991 0.0 872
+873 0.0276908874511719 0.0300000000000011 0.0300000000000011 0.0 873
+874 0.0235562324523926 0.029999999999994 0.029999999999994 0.0 874
+875 0.0232779979705811 0.0200000000000031 0.0200000000000031 0.0 875
+876 0.0230128765106201 0.0200000000000031 0.0200000000000031 0.0 876
+877 0.0227088928222656 0.019999999999996 0.019999999999996 0.0 877
+878 0.0227501392364502 0.0300000000000011 0.0300000000000011 0.0 878
+879 0.048612117767334 0.0499999999999972 0.0499999999999972 0.0 879
+880 0.0247840881347656 0.0200000000000031 0.0200000000000031 0.0 880
+881 0.0233609676361084 0.0200000000000031 0.0200000000000031 0.0 881
+882 0.0263519287109375 0.029999999999994 0.029999999999994 0.0 882
+883 0.0231118202209473 0.0200000000000031 0.0200000000000031 0.0 883
+884 0.0230841636657715 0.0300000000000011 0.0300000000000011 0.0 884
+885 0.022723913192749 0.019999999999996 0.019999999999996 0.0 885
+886 0.0473191738128662 0.0500000000000043 0.0500000000000043 0.0 886
+887 0.0233719348907471 0.019999999999996 0.019999999999996 0.0 887
+888 0.0231339931488037 0.0200000000000031 0.0200000000000031 0.0 888
+889 0.0230438709259033 0.0300000000000011 0.0300000000000011 0.0 889
+890 0.0230700969696045 0.019999999999996 0.019999999999996 0.0 890
+891 0.0235311985015869 0.0200000000000031 0.0200000000000031 0.0 891
+892 0.0513098239898682 0.0499999999999972 0.0499999999999972 0.0 892
+893 0.0237538814544678 0.0300000000000011 0.0300000000000011 0.0 893
+894 0.0234150886535645 0.0200000000000031 0.0200000000000031 0.0 894
+895 0.0234220027923584 0.029999999999994 0.029999999999994 0.0 895
+896 0.0229578018188477 0.0200000000000031 0.0200000000000031 0.0 896
+897 0.0227642059326172 0.0200000000000031 0.0200000000000031 0.0 897
+898 0.0227861404418945 0.019999999999996 0.019999999999996 0.0 898
+899 0.0495121479034424 0.0500000000000043 0.0500000000000043 0.0 899
+900 0.0261099338531494 0.029999999999994 0.029999999999994 0.0 900
+901 0.0232861042022705 0.0200000000000031 0.0200000000000031 0.0 901
+902 0.0230598449707031 0.0300000000000011 0.0300000000000011 0.0 902
+903 0.0229661464691162 0.019999999999996 0.019999999999996 0.0 903
+904 0.0229828357696533 0.0200000000000031 0.0200000000000031 0.0 904
+905 0.0227420330047607 0.0300000000000011 0.0300000000000011 0.0 905
+906 0.0554108619689941 0.0499999999999972 0.0499999999999972 0.0 906
+907 0.0234618186950684 0.0200000000000031 0.0200000000000031 0.0 907
+908 0.023097038269043 0.0300000000000011 0.0300000000000011 0.0 908
+909 0.0240907669067383 0.019999999999996 0.019999999999996 0.0 909
+910 0.0250539779663086 0.0300000000000011 0.0300000000000011 0.0 910
+911 0.0229489803314209 0.019999999999996 0.019999999999996 0.0 911
+912 0.0479700565338135 0.0500000000000043 0.0500000000000043 0.0 912
+913 0.023643970489502 0.019999999999996 0.019999999999996 0.0 913
+914 0.0235710144042969 0.0200000000000031 0.0200000000000031 0.0 914
+915 0.0231690406799316 0.0300000000000011 0.0300000000000011 0.0 915
+916 0.0229480266571045 0.019999999999996 0.019999999999996 0.0 916
+917 0.0235409736633301 0.0200000000000031 0.0200000000000031 0.0 917
+918 0.0229229927062988 0.0300000000000011 0.0300000000000011 0.0 918
+919 0.0514621734619141 0.0499999999999972 0.0499999999999972 0.0 919
+920 0.023529052734375 0.0200000000000031 0.0200000000000031 0.0 920
+921 0.0231509208679199 0.0300000000000011 0.0300000000000011 0.0 921
+922 0.0229501724243164 0.019999999999996 0.019999999999996 0.0 922
+923 0.0228419303894043 0.0200000000000031 0.0200000000000031 0.0 923
+924 0.0227689743041992 0.019999999999996 0.019999999999996 0.0 924
+925 0.047015905380249 0.0500000000000043 0.0500000000000043 0.0 925
+926 0.0242269039154053 0.0300000000000011 0.0300000000000011 0.0 926
+927 0.0240240097045898 0.019999999999996 0.019999999999996 0.0 927
+928 0.0257468223571777 0.0300000000000011 0.0300000000000011 0.0 928
+929 0.0229909420013428 0.019999999999996 0.019999999999996 0.0 929
+930 0.0228919982910156 0.0200000000000031 0.0200000000000031 0.0 930
+931 0.0228021144866943 0.0200000000000031 0.0200000000000031 0.0 931
+932 0.0487589836120605 0.0499999999999972 0.0499999999999972 0.0 932
+933 0.023705005645752 0.0300000000000011 0.0300000000000011 0.0 933
+934 0.0232529640197754 0.019999999999996 0.019999999999996 0.0 934
+935 0.0233039855957031 0.0200000000000031 0.0200000000000031 0.0 935
+936 0.0228619575500488 0.0300000000000011 0.0300000000000011 0.0 936
+937 0.0260879993438721 0.019999999999996 0.019999999999996 0.0 937
+938 0.022723913192749 0.0300000000000011 0.0300000000000011 0.0 938
+939 0.0474221706390381 0.0399999999999991 0.0399999999999991 0.0 939
+940 0.0233960151672363 0.0300000000000011 0.0300000000000011 0.0 940
+941 0.0239980220794678 0.0200000000000031 0.0200000000000031 0.0 941
+942 0.0292730331420898 0.0300000000000011 0.0300000000000011 0.0 942
+943 0.0237081050872803 0.019999999999996 0.019999999999996 0.0 943
+944 0.0230300426483154 0.0300000000000011 0.0300000000000011 0.0 944
+945 0.050105094909668 0.0499999999999972 0.0499999999999972 0.0 945
+946 0.0247271060943604 0.0200000000000031 0.0200000000000031 0.0 946
+947 0.0233941078186035 0.019999999999996 0.019999999999996 0.0 947
+948 0.0232498645782471 0.0300000000000011 0.0300000000000011 0.0 948
+949 0.0229218006134033 0.0200000000000031 0.0200000000000031 0.0 949
+950 0.0228300094604492 0.019999999999996 0.019999999999996 0.0 950
+951 0.023029088973999 0.0300000000000011 0.0300000000000011 0.0 951
+952 0.0492429733276367 0.0500000000000043 0.0500000000000043 0.0 952
+953 0.0234079360961914 0.019999999999996 0.019999999999996 0.0 953
+954 0.0232601165771484 0.0200000000000031 0.0200000000000031 0.0 954
+955 0.026918888092041 0.0300000000000011 0.0300000000000011 0.0 955
+956 0.0231409072875977 0.019999999999996 0.019999999999996 0.0 956
+957 0.0228209495544434 0.0300000000000011 0.0300000000000011 0.0 957
+958 0.0463271141052246 0.0399999999999991 0.0399999999999991 0.0 958
+959 0.0237219333648682 0.0300000000000011 0.0300000000000011 0.0 959
+960 0.0233180522918701 0.0200000000000031 0.0200000000000031 0.0 960
+961 0.0231690406799316 0.019999999999996 0.019999999999996 0.0 961
+962 0.0229840278625488 0.0300000000000011 0.0300000000000011 0.0 962
+963 0.0235729217529297 0.0200000000000031 0.0200000000000031 0.0 963
+964 0.0238869190216064 0.019999999999996 0.019999999999996 0.0 964
+965 0.0521998405456543 0.0600000000000023 0.0600000000000023 0.0 965
+966 0.0235168933868408 0.019999999999996 0.019999999999996 0.0 966
+967 0.0235238075256348 0.0200000000000031 0.0200000000000031 0.0 967
+968 0.0230309963226318 0.0300000000000011 0.0300000000000011 0.0 968
+969 0.0229330062866211 0.019999999999996 0.019999999999996 0.0 969
+970 0.0227758884429932 0.0200000000000031 0.0200000000000031 0.0 970
+971 0.0229518413543701 0.019999999999996 0.019999999999996 0.0 971
+972 0.0476210117340088 0.0500000000000043 0.0500000000000043 0.0 972
+973 0.0264060497283936 0.0300000000000011 0.0300000000000011 0.0 973
+974 0.023115873336792 0.019999999999996 0.019999999999996 0.0 974
+975 0.0229768753051758 0.0300000000000011 0.0300000000000011 0.0 975
+976 0.0229260921478271 0.0200000000000031 0.0200000000000031 0.0 976
+977 0.0229401588439941 0.019999999999996 0.019999999999996 0.0 977
+978 0.0558409690856934 0.0600000000000023 0.0600000000000023 0.0 978
+979 0.0236589908599854 0.019999999999996 0.019999999999996 0.0 979
+980 0.0233588218688965 0.0200000000000031 0.0200000000000031 0.0 980
+981 0.0231630802154541 0.0300000000000011 0.0300000000000011 0.0 981
+982 0.0260651111602783 0.019999999999996 0.019999999999996 0.0 982
+983 0.0229349136352539 0.0300000000000011 0.0300000000000011 0.0 983
+984 0.0229189395904541 0.0200000000000031 0.0200000000000031 0.0 984
+985 0.0485391616821289 0.0499999999999972 0.0499999999999972 0.0 985
+986 0.0233860015869141 0.0200000000000031 0.0200000000000031 0.0 986
+987 0.0233519077301025 0.0300000000000011 0.0300000000000011 0.0 987
+988 0.0228800773620605 0.019999999999996 0.019999999999996 0.0 988
+989 0.0234830379486084 0.0200000000000031 0.0200000000000031 0.0 989
+990 0.022752046585083 0.019999999999996 0.019999999999996 0.0 990
+991 0.0511069297790527 0.0600000000000023 0.0600000000000023 0.0 991
+992 0.0240139961242676 0.019999999999996 0.019999999999996 0.0 992
+993 0.0233669281005859 0.0200000000000031 0.0200000000000031 0.0 993
+994 0.0232489109039307 0.0300000000000011 0.0300000000000011 0.0 994
+995 0.0230247974395752 0.019999999999996 0.019999999999996 0.0 995
+996 0.023061990737915 0.0200000000000031 0.0200000000000031 0.0 996
+997 0.0229039192199707 0.0300000000000011 0.0300000000000011 0.0 997
+998 0.0489161014556885 0.0399999999999991 0.0399999999999991 0.0 998
+999 0.0239861011505127 0.0300000000000011 0.0300000000000011 0.0 999
+1000 0.0271100997924805 0.0300000000000011 0.0300000000000011 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat
new file mode 100644
index 000000000..28b793019
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.168711551610797
+3 -0.185075424775395
+4 -0.186405168470362
+5 -0.192236450287278
+6 -0.173995040669983
+7 0.497673430722803
+8 0.29654339644635
+9 -0.172542664486347
+10 -0.185316639646188
+11 -0.182116040823686
+12 -0.185415710620437
+13 0.0523528472158225
+14 0.71970177208368
+15 -0.151810164721185
+16 -0.187290279760093
+17 -0.182362754850871
+18 -0.182718737242755
+19 -0.129108594864474
+20 0.622082118720718
+21 0.130782387755957
+22 -0.170447345640965
+23 -0.196652105821247
+24 -0.173569338036787
+25 -0.182188355492763
+26 0.265071206382968
+27 0.484886522656777
+28 -0.140444543213911
+29 -0.174312335218403
+30 -0.183335022511814
+31 -0.179674296765045
+32 0.0232199842046602
+33 0.496114733715927
+34 0.0822638752997461
+35 -0.171572446908724
+36 -0.192551986206074
+37 -0.162051421499677
+38 -0.0895919384941433
+39 0.335786620502553
+40 0.327644243263212
+41 -0.129948612855453
+42 -0.184370502365683
+43 -0.177204007654948
+44 -0.162157037082618
+45 0.17271845923701
+46 0.351796103861273
+47 0.0642274162111852
+48 -0.170959443773073
+49 -0.190856323754992
+50 -0.163714827336534
+51 0.0228314931445091
+52 0.26381977073053
+53 0.247803374234943
+54 -0.117037193906021
+55 -0.183830227189461
+56 -0.164640226854526
+57 -0.079276117022691
+58 0.20723348437059
+59 0.239706931399691
+60 0.0489172113214087
+61 -0.172021951272623
+62 -0.182860808512729
+63 -0.127358224108573
+64 0.107845579472678
+65 0.188933656016848
+66 0.194757142044723
+67 -0.112205833758773
+68 -0.179001063269936
+69 -0.16311828493705
+70 0.0324344108778214
+71 0.15051955620332
+72 0.163810160363991
+73 0.0519448596312306
+74 -0.163602345245488
+75 -0.158418891887294
+76 -0.0560272711908581
+77 0.13272666880305
+78 0.128776651967307
+79 0.137508369826638
+80 -0.106468759380143
+81 -0.175112389279141
+82 -0.110600151424024
+83 0.0829713181187441
+84 0.116400027198787
+85 0.108590070864495
+86 0.0380032448395754
+87 -0.15928371193835
+88 -0.16128905172696
+89 0.0331094309593576
+90 0.0781776964153065
+91 0.102945304233414
+92 0.10106965637548
+93 -0.0872290949923226
+94 -0.169705593008044
+95 -0.0419012011984929
+96 0.0915477326766184
+97 0.0704199456915236
+98 0.0728740009744583
+99 0.0218543030675779
+100 -0.151415427637779
+101 -0.0978287647318857
+102 0.0561931235819149
+103 0.0505423398983019
+104 0.0727678785780604
+105 0.0722492445655898
+106 -0.0862525883888437
+107 -0.137087142443964
+108 0.00615618677612293
+109 0.05394162080397
+110 0.0553896795215559
+111 0.055562843944084
+112 0.0276994577739776
+113 -0.137189947176271
+114 -0.0377239416628224
+115 0.0514504295405741
+116 0.0313293831130493
+117 0.0301709278444951
+118 0.0568085567458709
+119 -0.0804133515562644
+120 -0.0795840579043476
+121 0.0330117984081293
+122 0.0164579873951377
+123 0.0433446545769141
+124 0.0255953757755855
+125 0.00173682042832781
+126 -0.103165860768009
+127 0.00232696284173702
+128 0.0312423522135313
+129 0.0149616490484137
+130 0.0184417493516088
+131 0.0447441958949695
+132 -0.0641393958061555
+133 -0.0383352332350825
+134 0.0245347192219029
+135 0.00652236926605711
+136 0.0171622535457413
+137 0.009279213035149
+138 0.00278884493235273
+139 -0.0536703342115355
+140 0.0241669190880944
+141 -0.00326726756980508
+142 0.0162345932059117
+143 -0.0128230828071517
+144 0.0286239253928854
+145 -0.0327123591597955
+146 -0.00540598964166124
+147 -0.000332512936572612
+148 0.0148948411721159
+149 0.0166966907990605
+150 -0.00567074642628022
+151 0.0228823388615856
+152 -0.0308965208330592
+153 0.0180444981742879
+154 -0.0206921039064052
+155 0.00595894351847688
+156 -0.0208220594875718
+157 0.0310092938713835
+158 0.00078836634941453
+159 0.0106191475130608
+160 -0.0238938431356785
+161 -0.00188312143245682
+162 -0.0172204115325742
+163 -0.0112282005708165
+164 0.045034914010554
+165 0.00699215558040877
+166 -0.00331533192179088
+167 -0.0190245860603562
+168 -0.00800260302384398
+169 -0.0268417229599795
+170 0.0337926174874967
+171 0.0299901254990817
+172 0.00546001840883143
+173 -0.0331114785270307
+174 -0.0100509196512551
+175 -0.0360797776791535
+176 0.00148731167321117
+177 0.0706998590798648
+178 0.0165067725132839
+179 -0.0253495351545265
+180 -0.0357212534091994
+181 -0.0113101599791917
+182 -0.0363761390533369
+183 0.0469745163800697
+184 0.0610771540099002
+185 0.00552862518083574
+186 -0.0369332414763318
+187 -0.0111795223609534
+188 -0.0432626099842255
+189 0.00749428956560664
+190 0.087771964947633
+191 0.00185581109295404
+192 -0.0313699827844243
+193 -0.0255394152605449
+194 -0.0313242476969615
+195 -0.0215433414073359
+196 0.0618252922061284
+197 0.0646027183854095
+198 -0.0273965032147501
+199 -0.0496517862033294
+200 -0.018433346375674
+201 -0.0411702579107107
+202 0.0253673387035334
+203 0.104691703014017
+204 -0.00185448989075414
+205 -0.0446682471573042
+206 -0.0238238321649752
+207 -0.0467619043304021
+208 -0.00360887459827125
+209 0.0793757654561071
+210 0.0429129421022387
+211 -0.0276583402343142
+212 -0.0541678923378372
+213 -0.0179592917752469
+214 -0.0355547481831798
+215 0.0461320988573292
+216 0.0913448308641226
+217 -0.01834847095298
+218 -0.0468350861575364
+219 -0.0339767892231334
+220 -0.0440298850183693
+221 0.0223578500867496
+222 0.0933434497060592
+223 0.0463337814726783
+224 -0.0425574347432942
+225 -0.0466890286886253
+226 -0.0399961538339586
+227 -0.0182587945265267
+228 0.0632222098042003
+229 0.0694906023247877
+230 -0.0142049617016301
+231 -0.0455291466080565
+232 -0.0361070791379545
+233 -0.0452564134883136
+234 0.0510580833723044
+235 0.0480780453494914
+236 0.0446139327527731
+237 -0.0522801405363582
+238 -0.0378004800445766
+239 -0.0470589177024096
+240 0.0108569075440268
+241 0.066938577476477
+242 0.0581800021039197
+243 -0.0194507150560373
+244 -0.0543671997964238
+245 -0.0401308556434312
+246 -0.0256000479147573
+247 0.0620205622045612
+248 0.030523271212025
+249 0.038296942239191
+250 -0.0449036287763184
+251 -0.0420966487827338
+252 -0.0465461175034265
+253 0.0377597573585246
+254 0.0350560493012657
+255 0.056093186329707
+256 -0.0275815952046349
+257 -0.04750423935097
+258 -0.0432832585148503
+259 0.0125157284398116
+260 0.064931228957816
+261 0.019604040715554
+262 0.0373596111888757
+263 -0.0636676558497218
+264 -0.0375272240403982
+265 -0.0361149121701811
+266 0.0465388746567212
+267 0.036241311622391
+268 0.0487539350868976
+269 -0.0287234748216925
+270 -0.0539239644524711
+271 -0.0436583063696183
+272 0.0205146377795573
+273 0.040230997344665
+274 0.0315213860739265
+275 0.0228897348670507
+276 -0.0572183200160057
+277 -0.0431270221897599
+278 -0.00833297422506617
+279 0.0473219005528863
+280 0.0251629586411652
+281 0.038915273454895
+282 -0.0354353137808485
+283 -0.0508161370460544
+284 -0.036047127999377
+285 0.0337334539194076
+286 0.0275614274110637
+287 0.0440004318004696
+288 0.00961414206729694
+289 -0.0613316463073689
+290 -0.0452152575735171
+291 0.00249641925695087
+292 0.0493185930315809
+293 0.011444255885649
+294 0.0316360674883416
+295 -0.0319106139816597
+296 -0.0295989018040149
+297 -0.0190441524352952
+298 0.0282870892585827
+299 0.0265353254552707
+300 0.032273319444618
+301 -0.000468750771499013
+302 -0.0611876583947586
+303 -0.0309474581592694
+304 0.0186631754625234
+305 0.0371821091242854
+306 0.0145022818476083
+307 0.0232617470286048
+308 -0.0395688677229205
+309 -0.0476060515379838
+310 -0.00769044117333217
+311 0.0353693458390462
+312 0.0240002604802843
+313 0.0245536637430618
+314 -0.004415413915098
+315 -0.0528044137604404
+316 -0.0234265814208568
+317 0.022470064568286
+318 0.028915521370024
+319 0.0211638004156281
+320 0.0054168896988135
+321 -0.042590350753945
+322 -0.0284283118181943
+323 -0.00664062749496557
+324 0.0411480242046925
+325 0.0128417754264411
+326 0.0305223344547661
+327 -0.0236579754952802
+328 -0.0540845927671526
+329 -0.015455893522093
+330 0.025833520023463
+331 0.0278005598102001
+332 0.023042186646012
+333 0.0188728568852482
+334 -0.0493662121878053
+335 -0.0261050936436941
+336 0.0147707465979224
+337 0.0180860444200187
+338 0.0126826785496685
+339 0.0298891954148176
+340 -0.0284892193567594
+341 -0.0442930583208295
+342 -0.00465824613683129
+343 0.0264974198001827
+344 0.0160287131470608
+345 0.0245897525651692
+346 -0.00575496663872669
+347 -0.0478041333821144
+348 -0.0171938958596392
+349 0.0121633028274292
+350 0.0339339464445481
+351 -0.00053023814088501
+352 0.0326742285343647
+353 -0.0341060707006212
+354 -0.039748874098284
+355 -8.49024655445998e-06
+356 0.0279658431303204
+357 0.00720050291043204
+358 0.0259853074034904
+359 -0.00689945021869653
+360 -0.0564417535195406
+361 0.00615675252612387
+362 0.012211786338546
+363 0.0210382695674554
+364 0.00854911585033297
+365 0.00730196086776967
+366 -0.0376558839307909
+367 -0.0205399505507927
+368 0.00730027899569551
+369 0.032246213402309
+370 0.0091169179182096
+371 0.0250196684542896
+372 -0.0111591997251681
+373 -0.0422136335522998
+374 -0.0128579601772781
+375 0.028053399466731
+376 0.00354103697855516
+377 0.0279174938103032
+378 -0.00904722473650234
+379 -0.028946301515676
+380 -0.0139786293136349
+381 0.00545851365358498
+382 0.0190227282430585
+383 -0.000179476269715586
+384 0.0207231566698558
+385 -0.0170447136957343
+386 -0.0310486179199879
+387 0.00187196784210256
+388 0.0224041083616037
+389 9.55672559842024e-06
+390 0.028063228403911
+391 -0.00629505686670561
+392 -0.0353987330853413
+393 -0.0136692381584725
+394 0.0175671180486305
+395 0.0138013069088845
+396 -0.00620615793014542
+397 0.0246579116616293
+398 -0.0183401258366494
+399 -0.032731274379925
+400 0.0140881514888206
+401 0.00766293328904026
+402 -0.00602692518274087
+403 0.0260538721783923
+404 -0.00584187577452444
+405 -0.0272022140360092
+406 -0.00245620949388524
+407 0.0238765788649767
+408 0.00803221790371331
+409 0.00486019379696553
+410 0.0128952371994524
+411 -0.0296483100976332
+412 -0.0169390703239796
+413 0.0100660026536031
+414 0.0116526840405598
+415 -0.00552490658166841
+416 0.0277013713253159
+417 -0.01262493213524
+418 -0.0279080581956591
+419 -0.00184485071740047
+420 0.0083680688534008
+421 0.00626000399151215
+422 0.0179881429190266
+423 -0.00447721272724791
+424 -0.0184829817994694
+425 -0.0111404841683833
+426 0.0129221736981228
+427 0.0117611123486844
+428 -0.00973900750863823
+429 0.0225145858300765
+430 -0.0109220115294983
+431 -0.0295910058303649
+432 0.00368789876917004
+433 0.00930110386233805
+434 0.00564395086046309
+435 0.0212026111611703
+436 -0.0130378739710715
+437 -0.0151643278007831
+438 -0.0180440351274524
+439 0.0151595776800046
+440 0.00929213226473587
+441 0.0003415659091603
+442 0.0139565319476247
+443 -0.00910162712841926
+444 -0.0047413122985865
+445 -0.00499428051231756
+446 0.0128999469215125
+447 -0.00928272901740709
+448 0.0272064223470049
+449 -0.0183788344655416
+450 -0.0118496040154817
+451 -0.0107494202754318
+452 0.0182399903606553
+453 0.00622660737187097
+454 0.00745915020514592
+455 -0.00127190501056035
+456 -0.0166547143603286
+457 -0.0103667163700212
+458 0.00400520855528189
+459 0.0147115427131264
+460 -0.0160615357972689
+461 0.0246609774312651
+462 -0.0029333920472466
+463 -0.0181346871754782
+464 -0.00953567256874797
+465 0.021178583971421
+466 -0.012606366153552
+467 0.0272533088449177
+468 -0.0210280900703455
+469 -0.00280319780800235
+470 -0.0170463672712959
+471 0.0183373667562639
+472 0.0107583671313877
+473 -0.0078936794893897
+474 0.00778649649424241
+475 -0.0155345265869157
+476 -0.00613257574212038
+477 -0.00504286887531768
+478 0.0210772277332088
+479 -0.0128524940267954
+480 0.0341276652831629
+481 -0.0170650621790446
+482 -0.00345617548803839
+483 -0.0129517082898899
+484 0.0173373606064477
+485 -0.00523973359223807
+486 0.00844247199289556
+487 -0.000388501685715539
+488 -0.00941832803307521
+489 -0.00657732323629541
+490 0.00367271132008509
+491 0.0104986289066865
+492 -0.012121254212176
+493 0.0144869605589711
+494 -0.00864941651177608
+495 -0.01112718777137
+496 -0.00334819620816524
+497 0.0185220421918073
+498 -0.00800250333583432
+499 0.0161430412671399
+500 -0.00811904696073173
+501 -0.0131958246871404
+502 0.00283288244567032
+503 0.00400534218369864
+504 0.00517285959530552
+505 -0.0113016945649371
+506 0.0133257896160407
+507 -0.0100249708015443
+508 -0.00256099015771646
+509 0.000136766223360138
+510 0.00855194730142931
+511 -0.00531138706017324
+512 0.00204161899934194
+513 -0.00420598958751402
+514 -0.00547421378316814
+515 -0.00769199850530263
+516 0.0216892032285094
+517 0.00908736119849349
+518 -0.00700354150287694
+519 0.00385030902693081
+520 -0.0123494297246387
+521 0.000934704276073887
+522 0.00705709592844499
+523 -0.00114787001008378
+524 -0.00210811799844287
+525 0.00379518996660863
+526 -0.00476039992301502
+527 0.00251331815987456
+528 -0.00826728020183847
+529 0.00902402695322199
+530 0.000870562551920878
+531 -0.00348481579363119
+532 -0.00125547085943994
+533 -0.00457730270844353
+534 0.000670589363068931
+535 0.00203788465196431
+536 0.00608567369144255
+537 2.19715778381094e-05
+538 -0.0039030628395208
+539 0.00512758275114747
+540 -0.0144646664397469
+541 0.0094686570477374
+542 0.00274671581906305
+543 -0.00678173613063177
+544 -0.00229002671014199
+545 0.00592727900087354
+546 -0.00816015486873931
+547 0.00907388451433627
+548 0.0018377578149579
+549 -0.0127399753897002
+550 0.0103068975915084
+551 -0.0106787121790095
+552 0.00570246495524106
+553 -0.00038055365375568
+554 0.0105773030205816
+555 0.00595131841957403
+556 -0.00509875005695669
+557 -0.00822359585740647
+558 0.00452689845139232
+559 -0.00293270803490497
+560 0.00105079194795726
+561 0.0109353635798441
+562 -0.0197506449586046
+563 0.0218239959802497
+564 -0.0146510772378776
+565 -0.0031545366575823
+566 0.00360976923040136
+567 0.00133537648121434
+568 -0.00289782413008785
+569 0.00758892970442103
+570 -0.0141005351769624
+571 0.00987824122870196
+572 -0.00255558849302304
+573 0.000744149940492195
+574 0.0106602498970704
+575 -0.0142431009887286
+576 0.00996314897224239
+577 -0.0104990007985002
+578 0.00109353754269881
+579 -0.00275371958433224
+580 0.0113885636424959
+581 -0.0150512253599863
+582 0.022337619882076
+583 -0.0216778389670573
+584 0.00863828810448533
+585 -0.00918952923772199
+586 0.00354541072669278
+587 0.00186796377320277
+588 -0.00419542916327283
+589 0.00975603734830963
+590 -0.00452668353073013
+591 0.00310061328497863
+592 0.00522892318692988
+593 0.000452603861773268
+594 -0.00392697607921247
+595 0.00863249154941176
+596 -0.00832078201242865
+597 -0.00394497658086084
+598 -0.00605451952414724
+599 0.0162191796757364
+600 -0.0110909733185336
+601 0.00720572232121751
+602 0.00218507796543462
+603 -0.00965401693454912
+604 -0.0108892449738329
+605 0.0182573291106095
+606 -0.0101848710757151
+607 0.00753912620319138
+608 0.00552590397878413
+609 -0.00699240285933447
+610 -0.00592445874426432
+611 0.00181675318258215
+612 0.00596213285085161
+613 -0.00175858286015883
+614 0.00407450191848153
+615 -0.00135060667016455
+616 -0.0132703466359575
+617 0.00119500154487564
+618 0.0104207042421722
+619 -0.0101546955527216
+620 0.0151923635732439
+621 -0.00273197735893913
+622 -0.00716289238336821
+623 -0.0171181101464724
+624 0.0167209884450157
+625 -0.00638456270553197
+626 0.0115244846746483
+627 0.00412387285497462
+628 0.00522037750437085
+629 -0.0207335154052575
+630 0.0107397344182975
+631 0.000446658250956307
+632 -0.00502788594559083
+633 0.0186557262987464
+634 -0.00802823332161929
+635 -0.0113496131760766
+636 -0.00301246620601798
+637 0.00960017707242071
+638 -0.0101983443096708
+639 0.0185874661412788
+640 -0.00796700063418294
+641 0.000800373366255129
+642 -0.0142259171933031
+643 0.00675256815377976
+644 -0.00261054615159158
+645 0.00391449782418117
+646 0.0139874531474154
+647 0.00530840019489214
+648 -0.0271260591182079
+649 0.00229999324419244
+650 0.0012589433396212
+651 0.000592814947107167
+652 0.0201903818074188
+653 -0.0109069610093694
+654 0.000612907033154517
+655 -0.0168429348765485
+656 0.00867757131382127
+657 -0.00734945498589961
+658 0.0116794460570149
+659 0.00508627131689495
+660 0.00338584069635359
+661 -0.0248824043490218
+662 0.00165251679722703
+663 0.00150493225276704
+664 0.0136218056659362
+665 0.0185790451050334
+666 -0.00254472668221909
+667 -0.012289308557362
+668 -0.0144954370766794
+669 0.00122172858017179
+670 0.0025962904924925
+671 0.0163382999614507
+672 0.00111261978891954
+673 0.0032877612305335
+674 -0.0260369810192395
+675 0.00159666131197362
+676 -0.00532940173394529
+677 0.0172320321775677
+678 0.00869668235164475
+679 0.00291575973127735
+680 -0.015462218778181
+681 -0.0118608792720508
+682 -0.00220903962177873
+683 0.0120179152403506
+684 0.0136302482537954
+685 0.00904529400779457
+686 -0.00689602667015569
+687 -0.0285633522016709
+688 -0.00218285494634568
+689 0.00546702558234338
+690 0.0209141673516685
+691 0.00370465573465944
+692 0.00302297586155796
+693 -0.016485314433266
+694 -0.0140010121985048
+695 -0.00666402217308437
+696 0.0185309777178555
+697 0.00524546360988583
+698 0.0136885255750835
+699 -0.0104440356403008
+700 -0.0241256457948681
+701 -0.000785820295910417
+702 0.0158790422192167
+703 0.0148074455993449
+704 0.0148524900638902
+705 -0.0115456319714617
+706 -0.0170567215815039
+707 -0.0158838823574548
+708 0.00366739139639638
+709 0.0229702948653725
+710 0.00020925945941642
+711 0.016393506286626
+712 -0.0146752015343459
+713 -0.0266439752231523
+714 -0.0106049447476659
+715 0.0200857710496951
+716 0.0159019417251445
+717 0.014477526739592
+718 -0.0114112270538866
+719 -0.0170568864212781
+720 -0.0198060133943224
+721 0.0141195633193631
+722 0.0169697876976791
+723 0.0111601506150928
+724 0.000736029778776562
+725 -0.0138823704910304
+726 -0.0297759947577568
+727 0.000877318422704956
+728 0.0245870344818203
+729 0.00991534185785315
+730 0.0167371008710776
+731 -0.01846756355292
+732 -0.0143120279886695
+733 -0.0275565546549941
+734 0.0192359115781678
+735 0.0161720734394042
+736 0.0126768844333159
+737 0.00181190220867761
+738 -0.0108467971335452
+739 -0.0304794501225128
+740 0.00782220949913542
+741 0.0209517859747924
+742 0.0159210578956611
+743 0.00507627421897103
+744 -0.0185977878326676
+745 -0.0172160801840428
+746 -0.0154503291175863
+747 0.0240468087097962
+748 0.00881259580601295
+749 0.0159692498562702
+750 -0.00910054705411617
+751 -0.0182022490122094
+752 -0.0240881360450285
+753 0.0120777690684819
+754 0.018009925362029
+755 0.0180902063329173
+756 0.000256136047852365
+757 -0.013362593701584
+758 -0.0228122214255098
+759 -0.00694060235600491
+760 0.0215395702278941
+761 0.0146271311142691
+762 0.0042224855013385
+763 -0.00912079764567066
+764 -0.0192977028904618
+765 -0.0141955473974918
+766 0.0183439845354601
+767 0.00930105732395573
+768 0.0184551584403917
+769 -0.00463309866829429
+770 -0.0226061978674481
+771 -0.0126560635461022
+772 -0.00415731908001533
+773 0.0187754008269273
+774 0.0180023436241415
+775 0.00200677790387502
+776 -0.00390091363657905
+777 -0.0259097935663753
+778 -0.00352849460582893
+779 0.0114869717500844
+780 0.0181590467496427
+781 0.00541354714803118
+782 -0.00341446349188591
+783 -0.0224873784300854
+784 -0.00419373295829652
+785 0.00151844686046239
+786 0.0113650109976602
+787 0.0158002722634896
+788 -0.00669123138348563
+789 -0.00944030297158121
+790 -0.0128471454926811
+791 -0.00195425126313221
+792 0.0074970279200069
+793 0.0181288263041054
+794 0.00373580246921938
+795 -0.00738898492727174
+796 -0.0131007631291169
+797 -0.000982016348095141
+798 -0.0077218774351863
+799 0.0213289345403391
+800 0.00354948225668615
+801 -0.00464603451943496
+802 -0.0112940265794087
+803 -0.00402400060757488
+804 0.00328202388625696
+805 -0.00289756468799923
+806 0.0217143167615233
+807 -0.00723480130387542
+808 -0.0106385305584251
+809 -0.000880622168562012
+810 0.00236278291649433
+811 -0.0102116844250211
+812 0.0231430095296313
+813 0.000498636796683443
+814 -0.00822238911567211
+815 -0.000690473274202945
+816 -0.0041688749017029
+817 -0.00252158403219581
+818 0.00607821741975229
+819 0.00777977338604755
+820 -0.00207050788971321
+821 -0.0140240864712808
+822 0.00947155215423528
+823 -0.00138467437610252
+824 -0.00770142306481203
+825 0.0154602942265093
+826 -0.00445857492028323
+827 -0.0101772151931684
+828 0.0100179562755017
+829 -0.00101796933766295
+830 -0.0119434679802116
+831 0.0102774737624907
+832 0.00478068349303803
+833 -0.00664556216054719
+834 -0.00197743246531773
+835 0.00543784524388563
+836 -0.0052886241893568
+837 0.0026439850351734
+838 0.0030919842085538
+839 -0.00804500518577692
+840 -0.0010416922039517
+841 0.0108884645351451
+842 -0.00566073610826143
+843 -0.00188898403884589
+844 -0.000623624431978478
+845 0.00428626298895372
+846 -0.0114117004140406
+847 0.0070058534073635
+848 0.01316321553763
+849 -0.0134743452627623
+850 0.00646873802741608
+851 -0.000711439355883821
+852 -0.0120290310079327
+853 0.00776340536975608
+854 0.0121426740397341
+855 -0.0112997696592519
+856 0.00101867582065373
+857 -0.00437667036049063
+858 0.000320275817054275
+859 -0.000142126707409615
+860 0.00721775365468403
+861 0.00498981583349973
+862 -0.00501663994971829
+863 -0.00749187478362105
+864 -0.00349429603220739
+865 0.00096737598977786
+866 0.00699694065608912
+867 0.00691803448626803
+868 -0.000449901074230268
+869 -0.00445988048738086
+870 -0.00905628623058306
+871 -0.00235661129997502
+872 0.00676090763319871
+873 0.00895030192113989
+874 4.49454384220283e-05
+875 -0.00263532947240222
+876 -0.010297542142376
+877 -0.010415543599356
+878 0.0128496698052284
+879 0.00696638356949457
+880 0.00214959987087146
+881 0.00604766744508239
+882 -0.0149547634792813
+883 -0.0133886474253249
+884 0.00661648124666426
+885 0.010135062194657
+886 0.0058559958108212
+887 0.00957431092209329
+888 -0.0090398903790597
+889 -0.0199467380548428
+890 -0.000587629934548291
+891 0.0110510611921795
+892 0.0128725674330994
+893 -0.00402188300253153
+894 0.00737831485228642
+895 -0.0184423803339027
+896 -0.0110288361296573
+897 0.00890220929064295
+898 0.0094403783725091
+899 -0.000809138837552774
+900 0.0116542051582576
+901 -0.0107875510009573
+902 -0.0180296809250011
+903 0.00306299530457164
+904 0.0106046718313357
+905 0.0100756629359416
+906 0.00402229149764495
+907 -0.00423755437734391
+908 -0.0147679502849595
+909 -0.00876645613183849
+910 0.00937383395424556
+911 0.00762135328148195
+912 0.00589312291049009
+913 0.00527632712012485
+914 -0.0150771941451772
+915 -0.0126209222242841
+916 0.00209594315460717
+917 0.0150533771997464
+918 -0.000323609234544641
+919 0.00910288654678051
+920 -0.00768699605697063
+921 -0.0131267840299683
+922 -0.00394519352651183
+923 0.0112577773951416
+924 0.00193303552341244
+925 0.0155473373100893
+926 -0.0059851304642569
+927 -0.0127129091731764
+928 -0.010012705310311
+929 0.00314209573634191
+930 0.0111473003309339
+931 0.00788913702307995
+932 0.00305911972139761
+933 -0.00846335727494071
+934 -0.0122811720479955
+935 -0.0061049349645249
+936 0.00712178796175147
+937 0.0109366030876719
+938 0.010847685977904
+939 -0.00884829082408408
+940 -0.00833721747749976
+941 -0.0119098033912994
+942 0.00740468154428091
+943 0.0055679748392607
+944 0.0108164694058525
+945 0.000125955287551805
+946 -0.00747241615545713
+947 -0.00869573388304389
+948 -0.00354302687064023
+949 0.00160999946217594
+950 0.0205396965281884
+951 -0.00211607394891862
+952 -0.00622739874288181
+953 -0.00653488891371642
+954 -0.00979554730684349
+955 0.000613100471788197
+956 0.0166711334404957
+957 0.00616769987888474
+958 -0.00491976982344559
+959 -0.00424317633763101
+960 -0.00827918671212606
+961 -0.00604128020653073
+962 0.00958577837280408
+963 0.0149354906693512
+964 -0.00421686394063702
+965 -0.00316215046844813
+966 -0.0064530371820805
+967 -0.00662231958613653
+968 0.00112156121486116
+969 0.0109421973075187
+970 0.00437305640139855
+971 -0.00455774256532607
+972 -0.00437412532272711
+973 -0.00518337545866395
+974 -0.00400100467146524
+975 0.0127573808612559
+976 0.00366553037525621
+977 -0.00238554249362654
+978 -0.00329057674587693
+979 -0.00396527990664183
+980 -0.00266571430247101
+981 0.00338581958247141
+982 0.00669480510272971
+983 -0.000520566185644882
+984 -0.00202730064400516
+985 -0.00225103555436894
+986 -0.00175391520986938
+987 -0.0030237079249996
+988 0.00556348089902938
+989 0.00016537124990895
+990 0.000366191847904269
+991 -0.000403568297995977
+992 -0.000980716337890804
+993 -0.00107150539540352
+994 -0.00116888364602599
+995 0.00111545140635789
+996 0.000974863549210892
+997 0.000888586420263992
+998 0.0007092258397136
+999 0.000470368356747198
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat
new file mode 100644
index 000000000..feedffb98
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.023082971572876 0.019999999999996 0.019999999999996 0.0 1
+2 0.0226471424102783 0.0300000000000011 0.0300000000000011 0.0 2
+3 0.0225150585174561 0.0200000000000102 0.0200000000000102 0.0 3
+4 0.0226900577545166 0.019999999999996 0.019999999999996 0.0 4
+5 0.0225200653076172 0.019999999999996 0.019999999999996 0.0 5
+6 0.0237810611724854 0.0300000000000011 0.0300000000000011 0.0 6
+7 0.0472888946533203 0.0400000000000063 0.0400000000000063 0.0 7
+8 0.022852897644043 0.0300000000000011 0.0300000000000011 0.0 8
+9 0.0266950130462646 0.019999999999996 0.019999999999996 0.0 9
+10 0.0224850177764893 0.0300000000000011 0.0300000000000011 0.0 10
+11 0.0223457813262939 0.019999999999996 0.019999999999996 0.0 11
+12 0.0224599838256836 0.019999999999996 0.019999999999996 0.0 12
+13 0.0224049091339111 0.0200000000000102 0.0200000000000102 0.0 13
+14 0.0482068061828613 0.0499999999999972 0.0499999999999972 0.0 14
+15 0.0226612091064453 0.019999999999996 0.019999999999996 0.0 15
+16 0.0224330425262451 0.019999999999996 0.019999999999996 0.0 16
+17 0.0224549770355225 0.019999999999996 0.019999999999996 0.0 17
+18 0.0225000381469727 0.0200000000000102 0.0200000000000102 0.0 18
+19 0.0258901119232178 0.0300000000000011 0.0300000000000011 0.0 19
+20 0.0469810962677002 0.0499999999999972 0.0499999999999972 0.0 20
+21 0.0228328704833984 0.019999999999996 0.019999999999996 0.0 21
+22 0.0226919651031494 0.019999999999996 0.019999999999996 0.0 22
+23 0.022468090057373 0.0200000000000102 0.0200000000000102 0.0 23
+24 0.0230059623718262 0.0299999999999869 0.0299999999999869 0.0 24
+25 0.0221710205078125 0.0200000000000102 0.0200000000000102 0.0 25
+26 0.0221641063690186 0.019999999999996 0.019999999999996 0.0 26
+27 0.0475480556488037 0.0499999999999972 0.0499999999999972 0.0 27
+28 0.025291919708252 0.0200000000000102 0.0200000000000102 0.0 28
+29 0.0225188732147217 0.0299999999999869 0.0299999999999869 0.0 29
+30 0.0293300151824951 0.0300000000000011 0.0300000000000011 0.0 30
+31 0.0234100818634033 0.0200000000000102 0.0200000000000102 0.0 31
+32 0.0224781036376953 0.019999999999996 0.019999999999996 0.0 32
+33 0.0478579998016357 0.0499999999999972 0.0499999999999972 0.0 33
+34 0.0229699611663818 0.019999999999996 0.019999999999996 0.0 34
+35 0.0227549076080322 0.0300000000000011 0.0300000000000011 0.0 35
+36 0.0226318836212158 0.0200000000000102 0.0200000000000102 0.0 36
+37 0.0262620449066162 0.019999999999996 0.019999999999996 0.0 37
+38 0.0223979949951172 0.0300000000000011 0.0300000000000011 0.0 38
+39 0.0222330093383789 0.019999999999996 0.019999999999996 0.0 39
+40 0.0477039813995361 0.0499999999999972 0.0499999999999972 0.0 40
+41 0.0228910446166992 0.0200000000000102 0.0200000000000102 0.0 41
+42 0.0233700275421143 0.019999999999996 0.019999999999996 0.0 42
+43 0.0224530696868896 0.0300000000000011 0.0300000000000011 0.0 43
+44 0.0225670337677002 0.019999999999996 0.019999999999996 0.0 44
+45 0.0227048397064209 0.019999999999996 0.019999999999996 0.0 45
+46 0.0222969055175781 0.0200000000000102 0.0200000000000102 0.0 46
+47 0.050562858581543 0.0499999999999972 0.0499999999999972 0.0 47
+48 0.0228369235992432 0.0300000000000011 0.0300000000000011 0.0 48
+49 0.0225470066070557 0.019999999999996 0.019999999999996 0.0 49
+50 0.02256178855896 0.019999999999996 0.019999999999996 0.0 50
+51 0.0225701332092285 0.0300000000000011 0.0300000000000011 0.0 51
+52 0.0230269432067871 0.019999999999996 0.019999999999996 0.0 52
+53 0.0470359325408936 0.0500000000000114 0.0500000000000114 0.0 53
+54 0.0227799415588379 0.019999999999996 0.019999999999996 0.0 54
+55 0.0225660800933838 0.019999999999996 0.019999999999996 0.0 55
+56 0.025252103805542 0.0300000000000011 0.0300000000000011 0.0 56
+57 0.0222170352935791 0.019999999999996 0.019999999999996 0.0 57
+58 0.0221600532531738 0.0200000000000102 0.0200000000000102 0.0 58
+59 0.0222020149230957 0.019999999999996 0.019999999999996 0.0 59
+60 0.0476398468017578 0.0499999999999972 0.0499999999999972 0.0 60
+61 0.022913932800293 0.019999999999996 0.019999999999996 0.0 61
+62 0.0225539207458496 0.0300000000000011 0.0300000000000011 0.0 62
+63 0.0225050449371338 0.0200000000000102 0.0200000000000102 0.0 63
+64 0.022601842880249 0.019999999999996 0.019999999999996 0.0 64
+65 0.0236048698425293 0.0300000000000011 0.0300000000000011 0.0 65
+66 0.0489590167999268 0.039999999999992 0.039999999999992 0.0 66
+67 0.0297541618347168 0.0300000000000011 0.0300000000000011 0.0 67
+68 0.0229940414428711 0.0300000000000011 0.0300000000000011 0.0 68
+69 0.0228681564331055 0.0200000000000102 0.0200000000000102 0.0 69
+70 0.0228149890899658 0.019999999999996 0.019999999999996 0.0 70
+71 0.0225210189819336 0.0300000000000011 0.0300000000000011 0.0 71
+72 0.022305965423584 0.019999999999996 0.019999999999996 0.0 72
+73 0.0474321842193604 0.0499999999999972 0.0499999999999972 0.0 73
+74 0.0265100002288818 0.0200000000000102 0.0200000000000102 0.0 74
+75 0.0226712226867676 0.019999999999996 0.019999999999996 0.0 75
+76 0.022493839263916 0.0300000000000011 0.0300000000000011 0.0 76
+77 0.0225288867950439 0.019999999999996 0.019999999999996 0.0 77
+78 0.0226340293884277 0.019999999999996 0.019999999999996 0.0 78
+79 0.0476889610290527 0.0499999999999972 0.0499999999999972 0.0 79
+80 0.0229480266571045 0.0200000000000102 0.0200000000000102 0.0 80
+81 0.0228819847106934 0.0300000000000011 0.0300000000000011 0.0 81
+82 0.0227799415588379 0.019999999999996 0.019999999999996 0.0 82
+83 0.0224130153656006 0.019999999999996 0.019999999999996 0.0 83
+84 0.0260109901428223 0.0300000000000011 0.0300000000000011 0.0 84
+85 0.0223500728607178 0.019999999999996 0.019999999999996 0.0 85
+86 0.0476620197296143 0.0500000000000114 0.0500000000000114 0.0 86
+87 0.022737979888916 0.019999999999996 0.019999999999996 0.0 87
+88 0.0233170986175537 0.019999999999996 0.019999999999996 0.0 88
+89 0.0224459171295166 0.0300000000000011 0.0300000000000011 0.0 89
+90 0.0226268768310547 0.019999999999996 0.019999999999996 0.0 90
+91 0.0225470066070557 0.0200000000000102 0.0200000000000102 0.0 91
+92 0.0492300987243652 0.0499999999999972 0.0499999999999972 0.0 92
+93 0.0236849784851074 0.019999999999996 0.019999999999996 0.0 93
+94 0.0227689743041992 0.0300000000000011 0.0300000000000011 0.0 94
+95 0.022672176361084 0.019999999999996 0.019999999999996 0.0 95
+96 0.022651195526123 0.0200000000000102 0.0200000000000102 0.0 96
+97 0.0225498676300049 0.0300000000000011 0.0300000000000011 0.0 97
+98 0.0222620964050293 0.019999999999996 0.019999999999996 0.0 98
+99 0.0475699901580811 0.0499999999999972 0.0499999999999972 0.0 99
+100 0.0227551460266113 0.019999999999996 0.019999999999996 0.0 100
+101 0.0227038860321045 0.0200000000000102 0.0200000000000102 0.0 101
+102 0.0256071090698242 0.0300000000000011 0.0300000000000011 0.0 102
+103 0.0226211547851562 0.019999999999996 0.019999999999996 0.0 103
+104 0.0256171226501465 0.0300000000000011 0.0300000000000011 0.0 104
+105 0.051800012588501 0.0499999999999972 0.0499999999999972 0.0 105
+106 0.023643970489502 0.019999999999996 0.019999999999996 0.0 106
+107 0.0227420330047607 0.019999999999996 0.019999999999996 0.0 107
+108 0.0226438045501709 0.0300000000000011 0.0300000000000011 0.0 108
+109 0.022442102432251 0.0200000000000102 0.0200000000000102 0.0 109
+110 0.0223290920257568 0.019999999999996 0.019999999999996 0.0 110
+111 0.0222249031066895 0.019999999999996 0.019999999999996 0.0 111
+112 0.0505638122558594 0.0499999999999972 0.0499999999999972 0.0 112
+113 0.0227949619293213 0.0300000000000011 0.0300000000000011 0.0 113
+114 0.0227949619293213 0.0200000000000102 0.0200000000000102 0.0 114
+115 0.0225298404693604 0.019999999999996 0.019999999999996 0.0 115
+116 0.0225038528442383 0.019999999999996 0.019999999999996 0.0 116
+117 0.0231928825378418 0.0300000000000011 0.0300000000000011 0.0 117
+118 0.0223879814147949 0.019999999999996 0.019999999999996 0.0 118
+119 0.0476298332214355 0.0500000000000114 0.0500000000000114 0.0 119
+120 0.0247969627380371 0.019999999999996 0.019999999999996 0.0 120
+121 0.0240130424499512 0.0300000000000011 0.0300000000000011 0.0 121
+122 0.0225648880004883 0.019999999999996 0.019999999999996 0.0 122
+123 0.0225870609283447 0.019999999999996 0.019999999999996 0.0 123
+124 0.0225720405578613 0.0300000000000011 0.0300000000000011 0.0 124
+125 0.0477638244628906 0.0400000000000063 0.0400000000000063 0.0 125
+126 0.0232040882110596 0.0300000000000011 0.0300000000000011 0.0 126
+127 0.0227577686309814 0.019999999999996 0.019999999999996 0.0 127
+128 0.0225858688354492 0.019999999999996 0.019999999999996 0.0 128
+129 0.0224049091339111 0.0200000000000102 0.0200000000000102 0.0 129
+130 0.0251419544219971 0.0300000000000011 0.0300000000000011 0.0 130
+131 0.0224969387054443 0.019999999999996 0.019999999999996 0.0 131
+132 0.0474879741668701 0.0499999999999972 0.0499999999999972 0.0 132
+133 0.0228550434112549 0.019999999999996 0.019999999999996 0.0 133
+134 0.0226738452911377 0.0300000000000011 0.0300000000000011 0.0 134
+135 0.0226309299468994 0.019999999999996 0.019999999999996 0.0 135
+136 0.0224778652191162 0.0200000000000102 0.0200000000000102 0.0 136
+137 0.0225551128387451 0.019999999999996 0.019999999999996 0.0 137
+138 0.0470321178436279 0.0499999999999972 0.0499999999999972 0.0 138
+139 0.0260279178619385 0.0300000000000011 0.0300000000000011 0.0 139
+140 0.0227389335632324 0.019999999999996 0.019999999999996 0.0 140
+141 0.029339075088501 0.0300000000000011 0.0300000000000011 0.0 141
+142 0.0226800441741943 0.0200000000000102 0.0200000000000102 0.0 142
+143 0.0223538875579834 0.019999999999996 0.019999999999996 0.0 143
+144 0.0231339931488037 0.0300000000000011 0.0300000000000011 0.0 144
+145 0.0474388599395752 0.039999999999992 0.039999999999992 0.0 145
+146 0.0227169990539551 0.0300000000000011 0.0300000000000011 0.0 146
+147 0.0225269794464111 0.0200000000000102 0.0200000000000102 0.0 147
+148 0.0240280628204346 0.019999999999996 0.019999999999996 0.0 148
+149 0.0242280960083008 0.0300000000000011 0.0300000000000011 0.0 149
+150 0.0225520133972168 0.019999999999996 0.019999999999996 0.0 150
+151 0.0471599102020264 0.0499999999999972 0.0499999999999972 0.0 151
+152 0.0230400562286377 0.0200000000000102 0.0200000000000102 0.0 152
+153 0.0234670639038086 0.019999999999996 0.019999999999996 0.0 153
+154 0.0225429534912109 0.0300000000000011 0.0300000000000011 0.0 154
+155 0.0225739479064941 0.019999999999996 0.019999999999996 0.0 155
+156 0.0225040912628174 0.019999999999996 0.019999999999996 0.0 156
+157 0.0224270820617676 0.0200000000000102 0.0200000000000102 0.0 157
+158 0.050184965133667 0.0499999999999972 0.0499999999999972 0.0 158
+159 0.0228159427642822 0.0300000000000011 0.0300000000000011 0.0 159
+160 0.0225830078125 0.019999999999996 0.019999999999996 0.0 160
+161 0.0224440097808838 0.019999999999996 0.019999999999996 0.0 161
+162 0.0228800773620605 0.0200000000000102 0.0200000000000102 0.0 162
+163 0.0230019092559814 0.0299999999999869 0.0299999999999869 0.0 163
+164 0.0468800067901611 0.0400000000000063 0.0400000000000063 0.0 164
+165 0.0230178833007812 0.019999999999996 0.019999999999996 0.0 165
+166 0.0227179527282715 0.0300000000000011 0.0300000000000011 0.0 166
+167 0.0280098915100098 0.0200000000000102 0.0200000000000102 0.0 167
+168 0.0224480628967285 0.0299999999999869 0.0299999999999869 0.0 168
+169 0.0222821235656738 0.0200000000000102 0.0200000000000102 0.0 169
+170 0.0222339630126953 0.019999999999996 0.019999999999996 0.0 170
+171 0.0482370853424072 0.0499999999999972 0.0499999999999972 0.0 171
+172 0.0229589939117432 0.019999999999996 0.019999999999996 0.0 172
+173 0.0225811004638672 0.0200000000000102 0.0200000000000102 0.0 173
+174 0.0225679874420166 0.0300000000000011 0.0300000000000011 0.0 174
+175 0.0226399898529053 0.019999999999996 0.019999999999996 0.0 175
+176 0.0225110054016113 0.019999999999996 0.019999999999996 0.0 176
+177 0.0512759685516357 0.0599999999999881 0.0499999999999972 0.01 177
+178 0.0293910503387451 0.0300000000000011 0.0300000000000011 0.0 178
+179 0.0228638648986816 0.0200000000000102 0.0200000000000102 0.0 179
+180 0.0226418972015381 0.0300000000000011 0.0300000000000011 0.0 180
+181 0.0233349800109863 0.019999999999996 0.019999999999996 0.0 181
+182 0.0224719047546387 0.019999999999996 0.019999999999996 0.0 182
+183 0.0222139358520508 0.019999999999996 0.019999999999996 0.0 183
+184 0.0475149154663086 0.0500000000000114 0.0500000000000114 0.0 184
+185 0.0268290042877197 0.0300000000000011 0.0300000000000011 0.0 185
+186 0.0225980281829834 0.019999999999996 0.019999999999996 0.0 186
+187 0.0224361419677734 0.019999999999996 0.019999999999996 0.0 187
+188 0.0225210189819336 0.0300000000000011 0.0300000000000011 0.0 188
+189 0.022615909576416 0.019999999999996 0.019999999999996 0.0 189
+190 0.0477218627929688 0.0499999999999972 0.0499999999999972 0.0 190
+191 0.0229659080505371 0.0200000000000102 0.0200000000000102 0.0 191
+192 0.0230429172515869 0.019999999999996 0.019999999999996 0.0 192
+193 0.0226750373840332 0.0300000000000011 0.0300000000000011 0.0 193
+194 0.0224380493164062 0.019999999999996 0.019999999999996 0.0 194
+195 0.0255289077758789 0.0200000000000102 0.0200000000000102 0.0 195
+196 0.0223410129547119 0.0299999999999869 0.0299999999999869 0.0 196
+197 0.0477759838104248 0.0400000000000063 0.0400000000000063 0.0 197
+198 0.0227560997009277 0.0300000000000011 0.0300000000000011 0.0 198
+199 0.0232150554656982 0.019999999999996 0.019999999999996 0.0 199
+200 0.0224218368530273 0.019999999999996 0.019999999999996 0.0 200
+201 0.0226380825042725 0.0300000000000011 0.0300000000000011 0.0 201
+202 0.0225119590759277 0.0200000000000102 0.0200000000000102 0.0 202
+203 0.0471208095550537 0.0499999999999972 0.0499999999999972 0.0 203
+204 0.0271830558776855 0.019999999999996 0.019999999999996 0.0 204
+205 0.0227551460266113 0.0300000000000011 0.0300000000000011 0.0 205
+206 0.0225760936737061 0.019999999999996 0.019999999999996 0.0 206
+207 0.0225489139556885 0.0200000000000102 0.0200000000000102 0.0 207
+208 0.0224738121032715 0.019999999999996 0.019999999999996 0.0 208
+209 0.0224080085754395 0.019999999999996 0.019999999999996 0.0 209
+210 0.0474929809570312 0.0499999999999972 0.0499999999999972 0.0 210
+211 0.0227348804473877 0.0200000000000102 0.0200000000000102 0.0 211
+212 0.0227007865905762 0.0300000000000011 0.0300000000000011 0.0 212
+213 0.0257821083068848 0.019999999999996 0.019999999999996 0.0 213
+214 0.0230338573455811 0.0300000000000011 0.0300000000000011 0.0 214
+215 0.0283098220825195 0.019999999999996 0.019999999999996 0.0 215
+216 0.048043966293335 0.0499999999999972 0.0499999999999972 0.0 216
+217 0.0241200923919678 0.0300000000000011 0.0300000000000011 0.0 217
+218 0.0226061344146729 0.019999999999996 0.019999999999996 0.0 218
+219 0.0226290225982666 0.0200000000000102 0.0200000000000102 0.0 219
+220 0.0223400592803955 0.019999999999996 0.019999999999996 0.0 220
+221 0.0222020149230957 0.019999999999996 0.019999999999996 0.0 221
+222 0.0221819877624512 0.019999999999996 0.019999999999996 0.0 222
+223 0.0513238906860352 0.0499999999999972 0.0499999999999972 0.0 223
+224 0.0227959156036377 0.0200000000000102 0.0200000000000102 0.0 224
+225 0.02286696434021 0.0300000000000011 0.0300000000000011 0.0 225
+226 0.0226180553436279 0.019999999999996 0.019999999999996 0.0 226
+227 0.0225269794464111 0.019999999999996 0.019999999999996 0.0 227
+228 0.0236740112304688 0.0300000000000011 0.0300000000000011 0.0 228
+229 0.0473580360412598 0.0400000000000063 0.0400000000000063 0.0 229
+230 0.0230889320373535 0.0300000000000011 0.0300000000000011 0.0 230
+231 0.0243098735809326 0.019999999999996 0.019999999999996 0.0 231
+232 0.0242350101470947 0.019999999999996 0.019999999999996 0.0 232
+233 0.0224809646606445 0.0300000000000011 0.0300000000000011 0.0 233
+234 0.0225131511688232 0.019999999999996 0.019999999999996 0.0 234
+235 0.0222058296203613 0.0200000000000102 0.0200000000000102 0.0 235
+236 0.0484139919281006 0.0499999999999972 0.0499999999999972 0.0 236
+237 0.0229649543762207 0.019999999999996 0.019999999999996 0.0 237
+238 0.0226538181304932 0.0300000000000011 0.0300000000000011 0.0 238
+239 0.0224990844726562 0.019999999999996 0.019999999999996 0.0 239
+240 0.0224988460540771 0.0200000000000102 0.0200000000000102 0.0 240
+241 0.0252270698547363 0.0300000000000011 0.0300000000000011 0.0 241
+242 0.0471029281616211 0.039999999999992 0.039999999999992 0.0 242
+243 0.0229470729827881 0.0300000000000011 0.0300000000000011 0.0 243
+244 0.0228309631347656 0.019999999999996 0.019999999999996 0.0 244
+245 0.0227391719818115 0.0200000000000102 0.0200000000000102 0.0 245
+246 0.0233259201049805 0.0299999999999869 0.0299999999999869 0.0 246
+247 0.0224099159240723 0.0200000000000102 0.0200000000000102 0.0 247
+248 0.0227949619293213 0.019999999999996 0.019999999999996 0.0 248
+249 0.0480821132659912 0.0499999999999972 0.0499999999999972 0.0 249
+250 0.026867151260376 0.0300000000000011 0.0300000000000011 0.0 250
+251 0.0245769023895264 0.019999999999996 0.019999999999996 0.0 251
+252 0.0283010005950928 0.0300000000000011 0.0300000000000011 0.0 252
+253 0.0227351188659668 0.0200000000000102 0.0200000000000102 0.0 253
+254 0.0224411487579346 0.019999999999996 0.019999999999996 0.0 254
+255 0.0479519367218018 0.0499999999999972 0.0499999999999972 0.0 255
+256 0.0230560302734375 0.019999999999996 0.019999999999996 0.0 256
+257 0.0227730274200439 0.0300000000000011 0.0300000000000011 0.0 257
+258 0.022550106048584 0.0200000000000102 0.0200000000000102 0.0 258
+259 0.0257129669189453 0.0300000000000011 0.0300000000000011 0.0 259
+260 0.0255739688873291 0.019999999999996 0.019999999999996 0.0 260
+261 0.0222690105438232 0.019999999999996 0.019999999999996 0.0 261
+262 0.0475499629974365 0.0499999999999972 0.0499999999999972 0.0 262
+263 0.0229249000549316 0.0200000000000102 0.0200000000000102 0.0 263
+264 0.0233249664306641 0.0299999999999869 0.0299999999999869 0.0 264
+265 0.0224719047546387 0.0200000000000102 0.0200000000000102 0.0 265
+266 0.0227599143981934 0.019999999999996 0.019999999999996 0.0 266
+267 0.0225708484649658 0.019999999999996 0.019999999999996 0.0 267
+268 0.0508639812469482 0.0500000000000114 0.0500000000000114 0.0 268
+269 0.0232470035552979 0.0299999999999869 0.0299999999999869 0.0 269
+270 0.0228660106658936 0.0200000000000102 0.0200000000000102 0.0 270
+271 0.0226750373840332 0.019999999999996 0.019999999999996 0.0 271
+272 0.0224699974060059 0.0300000000000011 0.0300000000000011 0.0 272
+273 0.023015022277832 0.019999999999996 0.019999999999996 0.0 273
+274 0.0223150253295898 0.019999999999996 0.019999999999996 0.0 274
+275 0.0476338863372803 0.0500000000000114 0.0500000000000114 0.0 275
+276 0.0227279663085938 0.019999999999996 0.019999999999996 0.0 276
+277 0.022507905960083 0.019999999999996 0.019999999999996 0.0 277
+278 0.0251290798187256 0.0300000000000011 0.0300000000000011 0.0 278
+279 0.0224900245666504 0.019999999999996 0.019999999999996 0.0 279
+280 0.0226230621337891 0.0200000000000102 0.0200000000000102 0.0 280
+281 0.0479300022125244 0.0499999999999972 0.0499999999999972 0.0 281
+282 0.0231950283050537 0.019999999999996 0.019999999999996 0.0 282
+283 0.0243661403656006 0.0300000000000011 0.0300000000000011 0.0 283
+284 0.0225939750671387 0.019999999999996 0.019999999999996 0.0 284
+285 0.0224170684814453 0.0200000000000102 0.0200000000000102 0.0 285
+286 0.0223720073699951 0.019999999999996 0.019999999999996 0.0 286
+287 0.0249221324920654 0.0300000000000011 0.0300000000000011 0.0 287
+288 0.0556089878082275 0.0600000000000023 0.0600000000000023 0.0 288
+289 0.0228722095489502 0.019999999999996 0.019999999999996 0.0 289
+290 0.0225820541381836 0.019999999999996 0.019999999999996 0.0 290
+291 0.0232369899749756 0.0200000000000102 0.0200000000000102 0.0 291
+292 0.0225460529327393 0.0299999999999869 0.0299999999999869 0.0 292
+293 0.0225048065185547 0.0200000000000102 0.0200000000000102 0.0 293
+294 0.0471150875091553 0.0499999999999972 0.0499999999999972 0.0 294
+295 0.0229630470275879 0.019999999999996 0.019999999999996 0.0 295
+296 0.026698112487793 0.0300000000000011 0.0300000000000011 0.0 296
+297 0.0225720405578613 0.019999999999996 0.019999999999996 0.0 297
+298 0.0224101543426514 0.0200000000000102 0.0200000000000102 0.0 298
+299 0.0224401950836182 0.019999999999996 0.019999999999996 0.0 299
+300 0.0223391056060791 0.0300000000000011 0.0300000000000011 0.0 300
+301 0.0480380058288574 0.039999999999992 0.039999999999992 0.0 301
+302 0.0228781700134277 0.0300000000000011 0.0300000000000011 0.0 302
+303 0.0226998329162598 0.0200000000000102 0.0200000000000102 0.0 303
+304 0.0224788188934326 0.019999999999996 0.019999999999996 0.0 304
+305 0.0245270729064941 0.0300000000000011 0.0300000000000011 0.0 305
+306 0.0251939296722412 0.019999999999996 0.019999999999996 0.0 306
+307 0.0470340251922607 0.0499999999999972 0.0499999999999972 0.0 307
+308 0.0229289531707764 0.0200000000000102 0.0200000000000102 0.0 308
+309 0.0233960151672363 0.0300000000000011 0.0300000000000011 0.0 309
+310 0.0224819183349609 0.019999999999996 0.019999999999996 0.0 310
+311 0.0227260589599609 0.019999999999996 0.019999999999996 0.0 311
+312 0.0223228931427002 0.019999999999996 0.019999999999996 0.0 312
+313 0.0223159790039062 0.0300000000000011 0.0300000000000011 0.0 313
+314 0.0510008335113525 0.0500000000000114 0.0500000000000114 0.0 314
+315 0.022799015045166 0.019999999999996 0.019999999999996 0.0 315
+316 0.0225009918212891 0.019999999999996 0.019999999999996 0.0 316
+317 0.0224380493164062 0.0300000000000011 0.0300000000000011 0.0 317
+318 0.0225141048431396 0.019999999999996 0.019999999999996 0.0 318
+319 0.0224788188934326 0.0200000000000102 0.0200000000000102 0.0 319
+320 0.0472540855407715 0.0499999999999972 0.0499999999999972 0.0 320
+321 0.0229048728942871 0.019999999999996 0.019999999999996 0.0 321
+322 0.022752046585083 0.019999999999996 0.019999999999996 0.0 322
+323 0.0224988460540771 0.0300000000000011 0.0300000000000011 0.0 323
+324 0.026637077331543 0.0200000000000102 0.0200000000000102 0.0 324
+325 0.0254490375518799 0.0299999999999869 0.0299999999999869 0.0 325
+326 0.0267879962921143 0.0300000000000011 0.0300000000000011 0.0 326
+327 0.0475130081176758 0.0400000000000063 0.0400000000000063 0.0 327
+328 0.0235271453857422 0.0300000000000011 0.0300000000000011 0.0 328
+329 0.0225729942321777 0.019999999999996 0.019999999999996 0.0 329
+330 0.0224888324737549 0.019999999999996 0.019999999999996 0.0 330
+331 0.0224771499633789 0.0200000000000102 0.0200000000000102 0.0 331
+332 0.0225000381469727 0.0300000000000011 0.0300000000000011 0.0 332
+333 0.0503771305084229 0.0499999999999972 0.0499999999999972 0.0 333
+334 0.02280592918396 0.019999999999996 0.019999999999996 0.0 334
+335 0.0226900577545166 0.019999999999996 0.019999999999996 0.0 335
+336 0.0226840972900391 0.0300000000000011 0.0300000000000011 0.0 336
+337 0.0223648548126221 0.0200000000000102 0.0200000000000102 0.0 337
+338 0.0229740142822266 0.019999999999996 0.019999999999996 0.0 338
+339 0.0223648548126221 0.019999999999996 0.019999999999996 0.0 339
+340 0.047623872756958 0.0499999999999972 0.0499999999999972 0.0 340
+341 0.0227048397064209 0.0200000000000102 0.0200000000000102 0.0 341
+342 0.0267980098724365 0.0300000000000011 0.0300000000000011 0.0 342
+343 0.0225899219512939 0.019999999999996 0.019999999999996 0.0 343
+344 0.022446870803833 0.0300000000000011 0.0300000000000011 0.0 344
+345 0.0226569175720215 0.019999999999996 0.019999999999996 0.0 345
+346 0.0477259159088135 0.0499999999999972 0.0499999999999972 0.0 346
+347 0.0228300094604492 0.019999999999996 0.019999999999996 0.0 347
+348 0.0228700637817383 0.0200000000000102 0.0200000000000102 0.0 348
+349 0.0224990844726562 0.019999999999996 0.019999999999996 0.0 349
+350 0.0223531723022461 0.0300000000000011 0.0300000000000011 0.0 350
+351 0.0225429534912109 0.019999999999996 0.019999999999996 0.0 351
+352 0.0264379978179932 0.0300000000000011 0.0300000000000011 0.0 352
+353 0.04734206199646 0.0400000000000063 0.0400000000000063 0.0 353
+354 0.0228159427642822 0.0300000000000011 0.0300000000000011 0.0 354
+355 0.0224540233612061 0.019999999999996 0.019999999999996 0.0 355
+356 0.0227231979370117 0.019999999999996 0.019999999999996 0.0 356
+357 0.0225269794464111 0.019999999999996 0.019999999999996 0.0 357
+358 0.0225820541381836 0.0300000000000011 0.0300000000000011 0.0 358
+359 0.0475459098815918 0.0400000000000063 0.0400000000000063 0.0 359
+360 0.0234520435333252 0.0300000000000011 0.0300000000000011 0.0 360
+361 0.0246992111206055 0.019999999999996 0.019999999999996 0.0 361
+362 0.0294170379638672 0.0300000000000011 0.0300000000000011 0.0 362
+363 0.0224790573120117 0.019999999999996 0.019999999999996 0.0 363
+364 0.0222852230072021 0.0300000000000011 0.0300000000000011 0.0 364
+365 0.0477530956268311 0.0400000000000063 0.0400000000000063 0.0 365
+366 0.0229170322418213 0.0300000000000011 0.0300000000000011 0.0 366
+367 0.0227410793304443 0.019999999999996 0.019999999999996 0.0 367
+368 0.0225741863250732 0.019999999999996 0.019999999999996 0.0 368
+369 0.0224859714508057 0.0300000000000011 0.0300000000000011 0.0 369
+370 0.0270230770111084 0.0200000000000102 0.0200000000000102 0.0 370
+371 0.0225620269775391 0.0299999999999869 0.0299999999999869 0.0 371
+372 0.047544002532959 0.0400000000000063 0.0400000000000063 0.0 372
+373 0.0227890014648438 0.0300000000000011 0.0300000000000011 0.0 373
+374 0.0226559638977051 0.019999999999996 0.019999999999996 0.0 374
+375 0.0231430530548096 0.019999999999996 0.019999999999996 0.0 375
+376 0.0225589275360107 0.0200000000000102 0.0200000000000102 0.0 376
+377 0.0225508213043213 0.0300000000000011 0.0300000000000011 0.0 377
+378 0.0470719337463379 0.039999999999992 0.039999999999992 0.0 378
+379 0.0261499881744385 0.0300000000000011 0.0300000000000011 0.0 379
+380 0.0227980613708496 0.019999999999996 0.019999999999996 0.0 380
+381 0.0226030349731445 0.0300000000000011 0.0300000000000011 0.0 381
+382 0.022442102432251 0.0200000000000102 0.0200000000000102 0.0 382
+383 0.0225498676300049 0.019999999999996 0.019999999999996 0.0 383
+384 0.0228650569915771 0.019999999999996 0.019999999999996 0.0 384
+385 0.0473499298095703 0.0499999999999972 0.0499999999999972 0.0 385
+386 0.0227880477905273 0.0200000000000102 0.0200000000000102 0.0 386
+387 0.0225081443786621 0.0300000000000011 0.0300000000000011 0.0 387
+388 0.0234310626983643 0.019999999999996 0.019999999999996 0.0 388
+389 0.0260570049285889 0.0300000000000011 0.0300000000000011 0.0 389
+390 0.0224580764770508 0.019999999999996 0.019999999999996 0.0 390
+391 0.0471310615539551 0.0499999999999972 0.0499999999999972 0.0 391
+392 0.02298903465271 0.0200000000000102 0.0200000000000102 0.0 392
+393 0.022860050201416 0.019999999999996 0.019999999999996 0.0 393
+394 0.0225329399108887 0.019999999999996 0.019999999999996 0.0 394
+395 0.0224058628082275 0.0300000000000011 0.0300000000000011 0.0 395
+396 0.0223350524902344 0.019999999999996 0.019999999999996 0.0 396
+397 0.022367000579834 0.0200000000000102 0.0200000000000102 0.0 397
+398 0.055199146270752 0.0599999999999881 0.0599999999999881 0.0 398
+399 0.0272421836853027 0.0200000000000102 0.0200000000000102 0.0 399
+400 0.0226209163665771 0.0300000000000011 0.0300000000000011 0.0 400
+401 0.0224409103393555 0.019999999999996 0.019999999999996 0.0 401
+402 0.0233349800109863 0.019999999999996 0.019999999999996 0.0 402
+403 0.0224699974060059 0.0300000000000011 0.0300000000000011 0.0 403
+404 0.0471019744873047 0.0400000000000063 0.0400000000000063 0.0 404
+405 0.0228829383850098 0.0300000000000011 0.0300000000000011 0.0 405
+406 0.0244019031524658 0.019999999999996 0.019999999999996 0.0 406
+407 0.0267729759216309 0.0300000000000011 0.0300000000000011 0.0 407
+408 0.0224130153656006 0.019999999999996 0.019999999999996 0.0 408
+409 0.022313117980957 0.019999999999996 0.019999999999996 0.0 409
+410 0.0224151611328125 0.0200000000000102 0.0200000000000102 0.0 410
+411 0.0483131408691406 0.0499999999999972 0.0499999999999972 0.0 411
+412 0.0227799415588379 0.019999999999996 0.019999999999996 0.0 412
+413 0.0228002071380615 0.0300000000000011 0.0300000000000011 0.0 413
+414 0.0224690437316895 0.019999999999996 0.019999999999996 0.0 414
+415 0.0225539207458496 0.0200000000000102 0.0200000000000102 0.0 415
+416 0.0254161357879639 0.0300000000000011 0.0300000000000011 0.0 416
+417 0.0482659339904785 0.0499999999999972 0.0499999999999972 0.0 417
+418 0.0229690074920654 0.019999999999996 0.019999999999996 0.0 418
+419 0.0226681232452393 0.019999999999996 0.019999999999996 0.0 419
+420 0.0230739116668701 0.0200000000000102 0.0200000000000102 0.0 420
+421 0.0223119258880615 0.0299999999999869 0.0299999999999869 0.0 421
+422 0.0240011215209961 0.0200000000000102 0.0200000000000102 0.0 422
+423 0.0470819473266602 0.0499999999999972 0.0499999999999972 0.0 423
+424 0.0231809616088867 0.019999999999996 0.019999999999996 0.0 424
+425 0.027169942855835 0.0300000000000011 0.0300000000000011 0.0 425
+426 0.0226540565490723 0.019999999999996 0.019999999999996 0.0 426
+427 0.0227150917053223 0.0200000000000102 0.0200000000000102 0.0 427
+428 0.0225992202758789 0.0300000000000011 0.0300000000000011 0.0 428
+429 0.0225179195404053 0.019999999999996 0.019999999999996 0.0 429
+430 0.0476188659667969 0.0499999999999972 0.0499999999999972 0.0 430
+431 0.0228111743927002 0.019999999999996 0.019999999999996 0.0 431
+432 0.0226650238037109 0.0200000000000102 0.0200000000000102 0.0 432
+433 0.0224969387054443 0.019999999999996 0.019999999999996 0.0 433
+434 0.0223591327667236 0.0300000000000011 0.0300000000000011 0.0 434
+435 0.0267119407653809 0.019999999999996 0.019999999999996 0.0 435
+436 0.0539910793304443 0.0600000000000023 0.0600000000000023 0.0 436
+437 0.0230631828308105 0.019999999999996 0.019999999999996 0.0 437
+438 0.0237729549407959 0.0200000000000102 0.0200000000000102 0.0 438
+439 0.0227470397949219 0.0299999999999869 0.0299999999999869 0.0 439
+440 0.0226438045501709 0.0200000000000102 0.0200000000000102 0.0 440
+441 0.0225329399108887 0.019999999999996 0.019999999999996 0.0 441
+442 0.0225589275360107 0.019999999999996 0.019999999999996 0.0 442
+443 0.0517570972442627 0.0600000000000023 0.0600000000000023 0.0 443
+444 0.0228259563446045 0.019999999999996 0.019999999999996 0.0 444
+445 0.0225679874420166 0.0200000000000102 0.0200000000000102 0.0 445
+446 0.0226199626922607 0.019999999999996 0.019999999999996 0.0 446
+447 0.0224108695983887 0.0300000000000011 0.0300000000000011 0.0 447
+448 0.022813081741333 0.019999999999996 0.019999999999996 0.0 448
+449 0.048245906829834 0.0499999999999972 0.0499999999999972 0.0 449
+450 0.0229110717773438 0.0200000000000102 0.0200000000000102 0.0 450
+451 0.0228190422058105 0.019999999999996 0.019999999999996 0.0 451
+452 0.022475004196167 0.0300000000000011 0.0300000000000011 0.0 452
+453 0.0269429683685303 0.019999999999996 0.019999999999996 0.0 453
+454 0.0225560665130615 0.0300000000000011 0.0300000000000011 0.0 454
+455 0.0226960182189941 0.019999999999996 0.019999999999996 0.0 455
+456 0.0481019020080566 0.0500000000000114 0.0500000000000114 0.0 456
+457 0.0228400230407715 0.019999999999996 0.019999999999996 0.0 457
+458 0.0225000381469727 0.019999999999996 0.019999999999996 0.0 458
+459 0.0225820541381836 0.0300000000000011 0.0300000000000011 0.0 459
+460 0.022550106048584 0.019999999999996 0.019999999999996 0.0 460
+461 0.0224931240081787 0.0200000000000102 0.0200000000000102 0.0 461
+462 0.0505130290985107 0.0499999999999972 0.0499999999999972 0.0 462
+463 0.0229830741882324 0.019999999999996 0.019999999999996 0.0 463
+464 0.0227599143981934 0.0300000000000011 0.0300000000000011 0.0 464
+465 0.0224440097808838 0.019999999999996 0.019999999999996 0.0 465
+466 0.0224459171295166 0.0200000000000102 0.0200000000000102 0.0 466
+467 0.0230529308319092 0.0299999999999869 0.0299999999999869 0.0 467
+468 0.0472948551177979 0.0400000000000063 0.0400000000000063 0.0 468
+469 0.0229778289794922 0.0300000000000011 0.0300000000000011 0.0 469
+470 0.0227181911468506 0.019999999999996 0.019999999999996 0.0 470
+471 0.0253911018371582 0.0200000000000102 0.0200000000000102 0.0 471
+472 0.0295701026916504 0.0299999999999869 0.0299999999999869 0.0 472
+473 0.0240099430084229 0.0300000000000011 0.0300000000000011 0.0 473
+474 0.0225830078125 0.0200000000000102 0.0200000000000102 0.0 474
+475 0.0483601093292236 0.0499999999999972 0.0499999999999972 0.0 475
+476 0.0228290557861328 0.019999999999996 0.019999999999996 0.0 476
+477 0.0227599143981934 0.019999999999996 0.019999999999996 0.0 477
+478 0.0223991870880127 0.0300000000000011 0.0300000000000011 0.0 478
+479 0.0224149227142334 0.0200000000000102 0.0200000000000102 0.0 479
+480 0.0231549739837646 0.019999999999996 0.019999999999996 0.0 480
+481 0.0494570732116699 0.0499999999999972 0.0499999999999972 0.0 481
+482 0.0229361057281494 0.0300000000000011 0.0300000000000011 0.0 482
+483 0.0228068828582764 0.019999999999996 0.019999999999996 0.0 483
+484 0.0226590633392334 0.0200000000000102 0.0200000000000102 0.0 484
+485 0.0231790542602539 0.019999999999996 0.019999999999996 0.0 485
+486 0.0226171016693115 0.0300000000000011 0.0300000000000011 0.0 486
+487 0.0226919651031494 0.019999999999996 0.019999999999996 0.0 487
+488 0.0492510795593262 0.0499999999999972 0.0499999999999972 0.0 488
+489 0.0257031917572021 0.0200000000000102 0.0200000000000102 0.0 489
+490 0.0239601135253906 0.0299999999999869 0.0299999999999869 0.0 490
+491 0.0223851203918457 0.0200000000000102 0.0200000000000102 0.0 491
+492 0.0224499702453613 0.019999999999996 0.019999999999996 0.0 492
+493 0.0224368572235107 0.019999999999996 0.019999999999996 0.0 493
+494 0.0476479530334473 0.0499999999999972 0.0499999999999972 0.0 494
+495 0.022913932800293 0.0300000000000011 0.0300000000000011 0.0 495
+496 0.022791862487793 0.0200000000000102 0.0200000000000102 0.0 496
+497 0.0225038528442383 0.019999999999996 0.019999999999996 0.0 497
+498 0.0226709842681885 0.019999999999996 0.019999999999996 0.0 498
+499 0.0256888866424561 0.0300000000000011 0.0300000000000011 0.0 499
+500 0.0224859714508057 0.019999999999996 0.019999999999996 0.0 500
+501 0.0475161075592041 0.0500000000000114 0.0500000000000114 0.0 501
+502 0.0226891040802002 0.019999999999996 0.019999999999996 0.0 502
+503 0.0227141380310059 0.019999999999996 0.019999999999996 0.0 503
+504 0.0224587917327881 0.0300000000000011 0.0300000000000011 0.0 504
+505 0.0225260257720947 0.019999999999996 0.019999999999996 0.0 505
+506 0.0225589275360107 0.0200000000000102 0.0200000000000102 0.0 506
+507 0.0470049381256104 0.0499999999999972 0.0499999999999972 0.0 507
+508 0.0271100997924805 0.0300000000000011 0.0300000000000011 0.0 508
+509 0.0292420387268066 0.0300000000000011 0.0300000000000011 0.0 509
+510 0.0224711894989014 0.019999999999996 0.019999999999996 0.0 510
+511 0.0221920013427734 0.019999999999996 0.019999999999996 0.0 511
+512 0.0228841304779053 0.0200000000000102 0.0200000000000102 0.0 512
+513 0.0471491813659668 0.0499999999999972 0.0499999999999972 0.0 513
+514 0.0229198932647705 0.019999999999996 0.019999999999996 0.0 514
+515 0.0227129459381104 0.0300000000000011 0.0300000000000011 0.0 515
+516 0.0225949287414551 0.019999999999996 0.019999999999996 0.0 516
+517 0.0255181789398193 0.0200000000000102 0.0200000000000102 0.0 517
+518 0.0228209495544434 0.0299999999999869 0.0299999999999869 0.0 518
+519 0.0225160121917725 0.0200000000000102 0.0200000000000102 0.0 519
+520 0.0473577976226807 0.0499999999999972 0.0499999999999972 0.0 520
+521 0.0227980613708496 0.019999999999996 0.019999999999996 0.0 521
+522 0.0231969356536865 0.019999999999996 0.019999999999996 0.0 522
+523 0.0227179527282715 0.0300000000000011 0.0300000000000011 0.0 523
+524 0.0223970413208008 0.0200000000000102 0.0200000000000102 0.0 524
+525 0.0223920345306396 0.019999999999996 0.019999999999996 0.0 525
+526 0.0507230758666992 0.0499999999999972 0.0499999999999972 0.0 526
+527 0.0229480266571045 0.019999999999996 0.019999999999996 0.0 527
+528 0.0227980613708496 0.0300000000000011 0.0300000000000011 0.0 528
+529 0.0225141048431396 0.0200000000000102 0.0200000000000102 0.0 529
+530 0.0231029987335205 0.019999999999996 0.019999999999996 0.0 530
+531 0.0224690437316895 0.0300000000000011 0.0300000000000011 0.0 531
+532 0.0224161148071289 0.019999999999996 0.019999999999996 0.0 532
+533 0.0474939346313477 0.0499999999999972 0.0499999999999972 0.0 533
+534 0.0227530002593994 0.0200000000000102 0.0200000000000102 0.0 534
+535 0.02276611328125 0.019999999999996 0.019999999999996 0.0 535
+536 0.025050163269043 0.0300000000000011 0.0300000000000011 0.0 536
+537 0.0224800109863281 0.019999999999996 0.019999999999996 0.0 537
+538 0.0225398540496826 0.019999999999996 0.019999999999996 0.0 538
+539 0.047184944152832 0.0500000000000114 0.0500000000000114 0.0 539
+540 0.0230119228363037 0.019999999999996 0.019999999999996 0.0 540
+541 0.022691011428833 0.019999999999996 0.019999999999996 0.0 541
+542 0.0224730968475342 0.0300000000000011 0.0300000000000011 0.0 542
+543 0.0223429203033447 0.019999999999996 0.019999999999996 0.0 543
+544 0.0224099159240723 0.0200000000000102 0.0200000000000102 0.0 544
+545 0.0533881187438965 0.0499999999999972 0.0499999999999972 0.0 545
+546 0.0262870788574219 0.0300000000000011 0.0300000000000011 0.0 546
+547 0.0228250026702881 0.019999999999996 0.019999999999996 0.0 547
+548 0.0226221084594727 0.0300000000000011 0.0300000000000011 0.0 548
+549 0.0232529640197754 0.019999999999996 0.019999999999996 0.0 549
+550 0.0225918292999268 0.019999999999996 0.019999999999996 0.0 550
+551 0.0225841999053955 0.0300000000000011 0.0300000000000011 0.0 551
+552 0.047435998916626 0.0400000000000063 0.0400000000000063 0.0 552
+553 0.0227999687194824 0.0300000000000011 0.0300000000000011 0.0 553
+554 0.0258529186248779 0.019999999999996 0.019999999999996 0.0 554
+555 0.022432804107666 0.019999999999996 0.019999999999996 0.0 555
+556 0.0223519802093506 0.0300000000000011 0.0300000000000011 0.0 556
+557 0.0224819183349609 0.0200000000000102 0.0200000000000102 0.0 557
+558 0.0474679470062256 0.0499999999999972 0.0499999999999972 0.0 558
+559 0.0229389667510986 0.019999999999996 0.019999999999996 0.0 559
+560 0.0228800773620605 0.019999999999996 0.019999999999996 0.0 560
+561 0.0224850177764893 0.0200000000000102 0.0200000000000102 0.0 561
+562 0.0225398540496826 0.0300000000000011 0.0300000000000011 0.0 562
+563 0.0224540233612061 0.019999999999996 0.019999999999996 0.0 563
+564 0.025576114654541 0.0300000000000011 0.0300000000000011 0.0 564
+565 0.0475959777832031 0.039999999999992 0.039999999999992 0.0 565
+566 0.0227079391479492 0.0300000000000011 0.0300000000000011 0.0 566
+567 0.0230989456176758 0.0200000000000102 0.0200000000000102 0.0 567
+568 0.0224859714508057 0.019999999999996 0.019999999999996 0.0 568
+569 0.0224618911743164 0.019999999999996 0.019999999999996 0.0 569
+570 0.0225780010223389 0.0300000000000011 0.0300000000000011 0.0 570
+571 0.0471539497375488 0.0400000000000063 0.0400000000000063 0.0 571
+572 0.0252819061279297 0.0300000000000011 0.0300000000000011 0.0 572
+573 0.0236349105834961 0.019999999999996 0.019999999999996 0.0 573
+574 0.0224208831787109 0.0300000000000011 0.0300000000000011 0.0 574
+575 0.0223720073699951 0.019999999999996 0.019999999999996 0.0 575
+576 0.0222949981689453 0.019999999999996 0.019999999999996 0.0 576
+577 0.0470468997955322 0.0499999999999972 0.0499999999999972 0.0 577
+578 0.0229780673980713 0.0200000000000102 0.0200000000000102 0.0 578
+579 0.0227508544921875 0.019999999999996 0.019999999999996 0.0 579
+580 0.022536039352417 0.0300000000000011 0.0300000000000011 0.0 580
+581 0.0225150585174561 0.019999999999996 0.019999999999996 0.0 581
+582 0.0254819393157959 0.0200000000000102 0.0200000000000102 0.0 582
+583 0.0310370922088623 0.0299999999999869 0.0299999999999869 0.0 583
+584 0.0474588871002197 0.0500000000000114 0.0500000000000114 0.0 584
+585 0.022752046585083 0.019999999999996 0.019999999999996 0.0 585
+586 0.0233280658721924 0.0300000000000011 0.0300000000000011 0.0 586
+587 0.0223760604858398 0.019999999999996 0.019999999999996 0.0 587
+588 0.0223050117492676 0.019999999999996 0.019999999999996 0.0 588
+589 0.0223169326782227 0.0200000000000102 0.0200000000000102 0.0 589
+590 0.047105073928833 0.0499999999999972 0.0499999999999972 0.0 590
+591 0.0272059440612793 0.0300000000000011 0.0300000000000011 0.0 591
+592 0.0227630138397217 0.019999999999996 0.019999999999996 0.0 592
+593 0.0226268768310547 0.019999999999996 0.019999999999996 0.0 593
+594 0.0225090980529785 0.0300000000000011 0.0300000000000011 0.0 594
+595 0.0225892066955566 0.0200000000000102 0.0200000000000102 0.0 595
+596 0.0231549739837646 0.019999999999996 0.019999999999996 0.0 596
+597 0.0475459098815918 0.0499999999999972 0.0499999999999972 0.0 597
+598 0.0226891040802002 0.019999999999996 0.019999999999996 0.0 598
+599 0.0224978923797607 0.0300000000000011 0.0300000000000011 0.0 599
+600 0.0245161056518555 0.0200000000000102 0.0200000000000102 0.0 600
+601 0.0242869853973389 0.019999999999996 0.019999999999996 0.0 601
+602 0.0225369930267334 0.0300000000000011 0.0300000000000011 0.0 602
+603 0.0477139949798584 0.039999999999992 0.039999999999992 0.0 603
+604 0.0228500366210938 0.0300000000000011 0.0300000000000011 0.0 604
+605 0.0225930213928223 0.019999999999996 0.019999999999996 0.0 605
+606 0.0224370956420898 0.0200000000000102 0.0200000000000102 0.0 606
+607 0.0223829746246338 0.019999999999996 0.019999999999996 0.0 607
+608 0.0222539901733398 0.0300000000000011 0.0300000000000011 0.0 608
+609 0.0497751235961914 0.0499999999999972 0.0499999999999972 0.0 609
+610 0.0235979557037354 0.019999999999996 0.019999999999996 0.0 610
+611 0.0227591991424561 0.0200000000000102 0.0200000000000102 0.0 611
+612 0.0226850509643555 0.0300000000000011 0.0300000000000011 0.0 612
+613 0.0225200653076172 0.019999999999996 0.019999999999996 0.0 613
+614 0.0227999687194824 0.019999999999996 0.019999999999996 0.0 614
+615 0.0224919319152832 0.019999999999996 0.019999999999996 0.0 615
+616 0.0472068786621094 0.0500000000000114 0.0500000000000114 0.0 616
+617 0.0227549076080322 0.019999999999996 0.019999999999996 0.0 617
+618 0.0224969387054443 0.0300000000000011 0.0300000000000011 0.0 618
+619 0.0257840156555176 0.019999999999996 0.019999999999996 0.0 619
+620 0.0295670032501221 0.0300000000000011 0.0300000000000011 0.0 620
+621 0.0229511260986328 0.019999999999996 0.019999999999996 0.0 621
+622 0.0471799373626709 0.0500000000000114 0.0500000000000114 0.0 622
+623 0.0238358974456787 0.0299999999999869 0.0299999999999869 0.0 623
+624 0.0228331089019775 0.0200000000000102 0.0200000000000102 0.0 624
+625 0.0225739479064941 0.019999999999996 0.019999999999996 0.0 625
+626 0.0223119258880615 0.019999999999996 0.019999999999996 0.0 626
+627 0.0223081111907959 0.0300000000000011 0.0300000000000011 0.0 627
+628 0.0510420799255371 0.0499999999999972 0.0499999999999972 0.0 628
+629 0.0229439735412598 0.0200000000000102 0.0200000000000102 0.0 629
+630 0.0228598117828369 0.019999999999996 0.019999999999996 0.0 630
+631 0.0226309299468994 0.0300000000000011 0.0300000000000011 0.0 631
+632 0.0225811004638672 0.019999999999996 0.019999999999996 0.0 632
+633 0.0231959819793701 0.019999999999996 0.019999999999996 0.0 633
+634 0.022752046585083 0.0200000000000102 0.0200000000000102 0.0 634
+635 0.0472497940063477 0.0499999999999972 0.0499999999999972 0.0 635
+636 0.0227398872375488 0.019999999999996 0.019999999999996 0.0 636
+637 0.0257761478424072 0.0300000000000011 0.0300000000000011 0.0 637
+638 0.0224080085754395 0.019999999999996 0.019999999999996 0.0 638
+639 0.0224230289459229 0.0300000000000011 0.0300000000000011 0.0 639
+640 0.0224108695983887 0.0200000000000102 0.0200000000000102 0.0 640
+641 0.0475258827209473 0.0499999999999972 0.0499999999999972 0.0 641
+642 0.0228271484375 0.019999999999996 0.019999999999996 0.0 642
+643 0.0227019786834717 0.019999999999996 0.019999999999996 0.0 643
+644 0.0224940776824951 0.0200000000000102 0.0200000000000102 0.0 644
+645 0.0224850177764893 0.0300000000000011 0.0300000000000011 0.0 645
+646 0.0227019786834717 0.019999999999996 0.019999999999996 0.0 646
+647 0.0250790119171143 0.019999999999996 0.019999999999996 0.0 647
+648 0.0480010509490967 0.0499999999999972 0.0499999999999972 0.0 648
+649 0.0226480960845947 0.0200000000000102 0.0200000000000102 0.0 649
+650 0.0224239826202393 0.0300000000000011 0.0300000000000011 0.0 650
+651 0.0233159065246582 0.019999999999996 0.019999999999996 0.0 651
+652 0.022554874420166 0.019999999999996 0.019999999999996 0.0 652
+653 0.0225050449371338 0.019999999999996 0.019999999999996 0.0 653
+654 0.04734206199646 0.0500000000000114 0.0500000000000114 0.0 654
+655 0.0227370262145996 0.019999999999996 0.019999999999996 0.0 655
+656 0.0317370891571045 0.0299999999999869 0.0299999999999869 0.0 656
+657 0.0237619876861572 0.0200000000000102 0.0200000000000102 0.0 657
+658 0.0224289894104004 0.019999999999996 0.019999999999996 0.0 658
+659 0.0223090648651123 0.0300000000000011 0.0300000000000011 0.0 659
+660 0.0475950241088867 0.039999999999992 0.039999999999992 0.0 660
+661 0.0230028629302979 0.0300000000000011 0.0300000000000011 0.0 661
+662 0.0226609706878662 0.0200000000000102 0.0200000000000102 0.0 662
+663 0.0227439403533936 0.019999999999996 0.019999999999996 0.0 663
+664 0.0224378108978271 0.019999999999996 0.019999999999996 0.0 664
+665 0.0267817974090576 0.0300000000000011 0.0300000000000011 0.0 665
+666 0.0225181579589844 0.019999999999996 0.019999999999996 0.0 666
+667 0.0476372241973877 0.0500000000000114 0.0500000000000114 0.0 667
+668 0.0227279663085938 0.019999999999996 0.019999999999996 0.0 668
+669 0.0238058567047119 0.0300000000000011 0.0300000000000011 0.0 669
+670 0.0225961208343506 0.019999999999996 0.019999999999996 0.0 670
+671 0.0226478576660156 0.019999999999996 0.019999999999996 0.0 671
+672 0.0224800109863281 0.0300000000000011 0.0300000000000011 0.0 672
+673 0.0478980541229248 0.0400000000000063 0.0400000000000063 0.0 673
+674 0.0272519588470459 0.0300000000000011 0.0300000000000011 0.0 674
+675 0.0226519107818604 0.019999999999996 0.019999999999996 0.0 675
+676 0.0225238800048828 0.0300000000000011 0.0300000000000011 0.0 676
+677 0.0224411487579346 0.019999999999996 0.019999999999996 0.0 677
+678 0.0228710174560547 0.0200000000000102 0.0200000000000102 0.0 678
+679 0.0471720695495605 0.0499999999999972 0.0499999999999972 0.0 679
+680 0.0229899883270264 0.019999999999996 0.019999999999996 0.0 680
+681 0.0226860046386719 0.019999999999996 0.019999999999996 0.0 681
+682 0.0227768421173096 0.0300000000000011 0.0300000000000011 0.0 682
+683 0.0246498584747314 0.0200000000000102 0.0200000000000102 0.0 683
+684 0.024179220199585 0.0299999999999869 0.0299999999999869 0.0 684
+685 0.0224809646606445 0.0200000000000102 0.0200000000000102 0.0 685
+686 0.0472848415374756 0.0499999999999972 0.0499999999999972 0.0 686
+687 0.0227711200714111 0.019999999999996 0.019999999999996 0.0 687
+688 0.0226719379425049 0.019999999999996 0.019999999999996 0.0 688
+689 0.0224339962005615 0.0200000000000102 0.0200000000000102 0.0 689
+690 0.022291898727417 0.0300000000000011 0.0300000000000011 0.0 690
+691 0.02239990234375 0.019999999999996 0.019999999999996 0.0 691
+692 0.0513718128204346 0.0499999999999972 0.0499999999999972 0.0 692
+693 0.0307130813598633 0.0300000000000011 0.0300000000000011 0.0 693
+694 0.0228471755981445 0.019999999999996 0.019999999999996 0.0 694
+695 0.0224709510803223 0.0300000000000011 0.0300000000000011 0.0 695
+696 0.0225100517272949 0.0200000000000102 0.0200000000000102 0.0 696
+697 0.0233030319213867 0.019999999999996 0.019999999999996 0.0 697
+698 0.0470919609069824 0.0499999999999972 0.0499999999999972 0.0 698
+699 0.0229198932647705 0.019999999999996 0.019999999999996 0.0 699
+700 0.0227630138397217 0.0200000000000102 0.0200000000000102 0.0 700
+701 0.0225980281829834 0.0200000000000102 0.0200000000000102 0.0 701
+702 0.0258259773254395 0.019999999999996 0.019999999999996 0.0 702
+703 0.0223879814147949 0.0300000000000011 0.0300000000000011 0.0 703
+704 0.0224990844726562 0.019999999999996 0.019999999999996 0.0 704
+705 0.0473251342773438 0.0499999999999972 0.0499999999999972 0.0 705
+706 0.0234189033508301 0.019999999999996 0.019999999999996 0.0 706
+707 0.0227119922637939 0.0200000000000102 0.0200000000000102 0.0 707
+708 0.0224349498748779 0.019999999999996 0.019999999999996 0.0 708
+709 0.0224518775939941 0.0300000000000011 0.0300000000000011 0.0 709
+710 0.0225179195404053 0.019999999999996 0.019999999999996 0.0 710
+711 0.0502331256866455 0.0499999999999972 0.0499999999999972 0.0 711
+712 0.0228428840637207 0.0200000000000102 0.0200000000000102 0.0 712
+713 0.0227060317993164 0.0300000000000011 0.0300000000000011 0.0 713
+714 0.023097038269043 0.019999999999996 0.019999999999996 0.0 714
+715 0.0223181247711182 0.019999999999996 0.019999999999996 0.0 715
+716 0.0222809314727783 0.019999999999996 0.019999999999996 0.0 716
+717 0.0471060276031494 0.0500000000000114 0.0500000000000114 0.0 717
+718 0.0228781700134277 0.019999999999996 0.019999999999996 0.0 718
+719 0.0229380130767822 0.0300000000000011 0.0300000000000011 0.0 719
+720 0.0258369445800781 0.019999999999996 0.019999999999996 0.0 720
+721 0.0224931240081787 0.0300000000000011 0.0300000000000011 0.0 721
+722 0.0230259895324707 0.019999999999996 0.019999999999996 0.0 722
+723 0.02252197265625 0.0200000000000102 0.0200000000000102 0.0 723
+724 0.0475549697875977 0.0499999999999972 0.0499999999999972 0.0 724
+725 0.0227770805358887 0.019999999999996 0.019999999999996 0.0 725
+726 0.0225141048431396 0.019999999999996 0.019999999999996 0.0 726
+727 0.0227451324462891 0.0300000000000011 0.0300000000000011 0.0 727
+728 0.0223758220672607 0.0200000000000102 0.0200000000000102 0.0 728
+729 0.023906946182251 0.019999999999996 0.019999999999996 0.0 729
+730 0.0556581020355225 0.0600000000000023 0.0600000000000023 0.0 730
+731 0.0229699611663818 0.019999999999996 0.019999999999996 0.0 731
+732 0.0226690769195557 0.019999999999996 0.019999999999996 0.0 732
+733 0.0225589275360107 0.0300000000000011 0.0300000000000011 0.0 733
+734 0.0232241153717041 0.019999999999996 0.019999999999996 0.0 734
+735 0.0225598812103271 0.0200000000000102 0.0200000000000102 0.0 735
+736 0.0470528602600098 0.0499999999999972 0.0499999999999972 0.0 736
+737 0.0228769779205322 0.019999999999996 0.019999999999996 0.0 737
+738 0.0257880687713623 0.0300000000000011 0.0300000000000011 0.0 738
+739 0.0235300064086914 0.019999999999996 0.019999999999996 0.0 739
+740 0.0224180221557617 0.0200000000000102 0.0200000000000102 0.0 740
+741 0.0224599838256836 0.0300000000000011 0.0300000000000011 0.0 741
+742 0.022385835647583 0.019999999999996 0.019999999999996 0.0 742
+743 0.0479929447174072 0.0499999999999972 0.0499999999999972 0.0 743
+744 0.0231039524078369 0.019999999999996 0.019999999999996 0.0 744
+745 0.0225660800933838 0.0200000000000102 0.0200000000000102 0.0 745
+746 0.0224900245666504 0.019999999999996 0.019999999999996 0.0 746
+747 0.0224640369415283 0.0300000000000011 0.0300000000000011 0.0 747
+748 0.0256268978118896 0.019999999999996 0.019999999999996 0.0 748
+749 0.0473120212554932 0.0499999999999972 0.0499999999999972 0.0 749
+750 0.0228018760681152 0.0200000000000102 0.0200000000000102 0.0 750
+751 0.0232498645782471 0.0300000000000011 0.0300000000000011 0.0 751
+752 0.0224390029907227 0.019999999999996 0.019999999999996 0.0 752
+753 0.022291898727417 0.019999999999996 0.019999999999996 0.0 753
+754 0.0223748683929443 0.019999999999996 0.019999999999996 0.0 754
+755 0.0472152233123779 0.0500000000000114 0.0500000000000114 0.0 755
+756 0.0228731632232666 0.019999999999996 0.019999999999996 0.0 756
+757 0.0252671241760254 0.0300000000000011 0.0300000000000011 0.0 757
+758 0.0226409435272217 0.019999999999996 0.019999999999996 0.0 758
+759 0.0225830078125 0.019999999999996 0.019999999999996 0.0 759
+760 0.0225331783294678 0.0300000000000011 0.0300000000000011 0.0 760
+761 0.0225949287414551 0.0200000000000102 0.0200000000000102 0.0 761
+762 0.0475749969482422 0.0499999999999972 0.0499999999999972 0.0 762
+763 0.0227329730987549 0.019999999999996 0.019999999999996 0.0 763
+764 0.0225529670715332 0.019999999999996 0.019999999999996 0.0 764
+765 0.0224440097808838 0.0200000000000102 0.0200000000000102 0.0 765
+766 0.0223290920257568 0.0300000000000011 0.0300000000000011 0.0 766
+767 0.033358097076416 0.0299999999999869 0.0299999999999869 0.0 767
+768 0.0471920967102051 0.0500000000000114 0.0500000000000114 0.0 768
+769 0.0227799415588379 0.019999999999996 0.019999999999996 0.0 769
+770 0.0234429836273193 0.019999999999996 0.019999999999996 0.0 770
+771 0.0224521160125732 0.0300000000000011 0.0300000000000011 0.0 771
+772 0.0226120948791504 0.019999999999996 0.019999999999996 0.0 772
+773 0.0225300788879395 0.0200000000000102 0.0200000000000102 0.0 773
+774 0.0472240447998047 0.0499999999999972 0.0499999999999972 0.0 774
+775 0.0266668796539307 0.0300000000000011 0.0300000000000011 0.0 775
+776 0.023015022277832 0.019999999999996 0.019999999999996 0.0 776
+777 0.0226809978485107 0.019999999999996 0.019999999999996 0.0 777
+778 0.0225629806518555 0.0200000000000102 0.0200000000000102 0.0 778
+779 0.0223550796508789 0.0300000000000011 0.0300000000000011 0.0 779
+780 0.0230989456176758 0.019999999999996 0.019999999999996 0.0 780
+781 0.0475809574127197 0.0499999999999972 0.0499999999999972 0.0 781
+782 0.0226840972900391 0.019999999999996 0.019999999999996 0.0 782
+783 0.0225729942321777 0.0200000000000102 0.0200000000000102 0.0 783
+784 0.0224289894104004 0.0300000000000011 0.0300000000000011 0.0 784
+785 0.0256469249725342 0.019999999999996 0.019999999999996 0.0 785
+786 0.0225028991699219 0.019999999999996 0.019999999999996 0.0 786
+787 0.0480420589447021 0.0499999999999972 0.0499999999999972 0.0 787
+788 0.0228919982910156 0.0200000000000102 0.0200000000000102 0.0 788
+789 0.0226309299468994 0.0299999999999869 0.0299999999999869 0.0 789
+790 0.0224378108978271 0.0200000000000102 0.0200000000000102 0.0 790
+791 0.0224709510803223 0.019999999999996 0.019999999999996 0.0 791
+792 0.0223159790039062 0.019999999999996 0.019999999999996 0.0 792
+793 0.0482239723205566 0.0400000000000063 0.0400000000000063 0.0 793
+794 0.0246069431304932 0.0299999999999869 0.0299999999999869 0.0 794
+795 0.0227251052856445 0.0200000000000102 0.0200000000000102 0.0 795
+796 0.0226359367370605 0.019999999999996 0.019999999999996 0.0 796
+797 0.0224781036376953 0.0300000000000011 0.0300000000000011 0.0 797
+798 0.0225961208343506 0.019999999999996 0.019999999999996 0.0 798
+799 0.0226588249206543 0.019999999999996 0.019999999999996 0.0 799
+800 0.0475590229034424 0.0500000000000114 0.0500000000000114 0.0 800
+801 0.0227870941162109 0.019999999999996 0.019999999999996 0.0 801
+802 0.0225069522857666 0.019999999999996 0.019999999999996 0.0 802
+803 0.0258538722991943 0.0300000000000011 0.0300000000000011 0.0 803
+804 0.0293428897857666 0.0300000000000011 0.0300000000000011 0.0 804
+805 0.022611141204834 0.019999999999996 0.019999999999996 0.0 805
+806 0.0470418930053711 0.0500000000000114 0.0500000000000114 0.0 806
+807 0.0237758159637451 0.019999999999996 0.019999999999996 0.0 807
+808 0.0227320194244385 0.0300000000000011 0.0300000000000011 0.0 808
+809 0.0224711894989014 0.019999999999996 0.019999999999996 0.0 809
+810 0.0225059986114502 0.019999999999996 0.019999999999996 0.0 810
+811 0.0224649906158447 0.0200000000000102 0.0200000000000102 0.0 811
+812 0.0506050586700439 0.0499999999999972 0.0499999999999972 0.0 812
+813 0.0230269432067871 0.0300000000000011 0.0300000000000011 0.0 813
+814 0.0228140354156494 0.019999999999996 0.019999999999996 0.0 814
+815 0.0225369930267334 0.019999999999996 0.019999999999996 0.0 815
+816 0.0224819183349609 0.0300000000000011 0.0300000000000011 0.0 816
+817 0.0230681896209717 0.019999999999996 0.019999999999996 0.0 817
+818 0.0226531028747559 0.0200000000000102 0.0200000000000102 0.0 818
+819 0.0471920967102051 0.0499999999999972 0.0499999999999972 0.0 819
+820 0.022752046585083 0.019999999999996 0.019999999999996 0.0 820
+821 0.0240130424499512 0.0300000000000011 0.0300000000000011 0.0 821
+822 0.024043083190918 0.019999999999996 0.019999999999996 0.0 822
+823 0.022367000579834 0.0200000000000102 0.0200000000000102 0.0 823
+824 0.0223929882049561 0.019999999999996 0.019999999999996 0.0 824
+825 0.0477418899536133 0.0499999999999972 0.0499999999999972 0.0 825
+826 0.0227749347686768 0.0300000000000011 0.0300000000000011 0.0 826
+827 0.0227129459381104 0.019999999999996 0.019999999999996 0.0 827
+828 0.0225088596343994 0.0200000000000102 0.0200000000000102 0.0 828
+829 0.0223178863525391 0.019999999999996 0.019999999999996 0.0 829
+830 0.02256178855896 0.0300000000000011 0.0300000000000011 0.0 830
+831 0.0491888523101807 0.039999999999992 0.039999999999992 0.0 831
+832 0.0238690376281738 0.0300000000000011 0.0300000000000011 0.0 832
+833 0.0228731632232666 0.0200000000000102 0.0200000000000102 0.0 833
+834 0.0226390361785889 0.019999999999996 0.019999999999996 0.0 834
+835 0.0226919651031494 0.0300000000000011 0.0300000000000011 0.0 835
+836 0.0225028991699219 0.019999999999996 0.019999999999996 0.0 836
+837 0.0224220752716064 0.019999999999996 0.019999999999996 0.0 837
+838 0.0475718975067139 0.0500000000000114 0.0500000000000114 0.0 838
+839 0.0228641033172607 0.019999999999996 0.019999999999996 0.0 839
+840 0.0308690071105957 0.0300000000000011 0.0300000000000011 0.0 840
+841 0.0251350402832031 0.0300000000000011 0.0300000000000011 0.0 841
+842 0.022784948348999 0.019999999999996 0.019999999999996 0.0 842
+843 0.022475004196167 0.019999999999996 0.019999999999996 0.0 843
+844 0.0481071472167969 0.0499999999999972 0.0499999999999972 0.0 844
+845 0.022777795791626 0.0200000000000102 0.0200000000000102 0.0 845
+846 0.0225391387939453 0.0300000000000011 0.0300000000000011 0.0 846
+847 0.0223829746246338 0.019999999999996 0.019999999999996 0.0 847
+848 0.0222880840301514 0.019999999999996 0.019999999999996 0.0 848
+849 0.0231649875640869 0.0200000000000102 0.0200000000000102 0.0 849
+850 0.0498239994049072 0.0499999999999972 0.0499999999999972 0.0 850
+851 0.0229728221893311 0.0300000000000011 0.0300000000000011 0.0 851
+852 0.0226678848266602 0.019999999999996 0.019999999999996 0.0 852
+853 0.0235629081726074 0.019999999999996 0.019999999999996 0.0 853
+854 0.0226778984069824 0.0300000000000011 0.0300000000000011 0.0 854
+855 0.0225760936737061 0.019999999999996 0.019999999999996 0.0 855
+856 0.0472428798675537 0.0500000000000114 0.0500000000000114 0.0 856
+857 0.0228590965270996 0.019999999999996 0.019999999999996 0.0 857
+858 0.0256388187408447 0.0300000000000011 0.0300000000000011 0.0 858
+859 0.0229208469390869 0.019999999999996 0.019999999999996 0.0 859
+860 0.0224840641021729 0.019999999999996 0.019999999999996 0.0 860
+861 0.0223701000213623 0.0200000000000102 0.0200000000000102 0.0 861
+862 0.0229117870330811 0.0300000000000011 0.0300000000000011 0.0 862
+863 0.0475149154663086 0.039999999999992 0.039999999999992 0.0 863
+864 0.022799015045166 0.0300000000000011 0.0300000000000011 0.0 864
+865 0.0225379467010498 0.019999999999996 0.019999999999996 0.0 865
+866 0.0226678848266602 0.0200000000000102 0.0200000000000102 0.0 866
+867 0.0223591327667236 0.019999999999996 0.019999999999996 0.0 867
+868 0.0251359939575195 0.0300000000000011 0.0300000000000011 0.0 868
+869 0.0475220680236816 0.0499999999999972 0.0499999999999972 0.0 869
+870 0.0227980613708496 0.019999999999996 0.019999999999996 0.0 870
+871 0.0227110385894775 0.0200000000000102 0.0200000000000102 0.0 871
+872 0.0231759548187256 0.0299999999999869 0.0299999999999869 0.0 872
+873 0.0223469734191895 0.0200000000000102 0.0200000000000102 0.0 873
+874 0.0222749710083008 0.019999999999996 0.019999999999996 0.0 874
+875 0.046968936920166 0.0499999999999972 0.0499999999999972 0.0 875
+876 0.0229840278625488 0.0200000000000102 0.0200000000000102 0.0 876
+877 0.0336899757385254 0.0299999999999869 0.0299999999999869 0.0 877
+878 0.0226821899414062 0.0300000000000011 0.0300000000000011 0.0 878
+879 0.0225288867950439 0.0200000000000102 0.0200000000000102 0.0 879
+880 0.0224189758300781 0.019999999999996 0.019999999999996 0.0 880
+881 0.023205041885376 0.0300000000000011 0.0300000000000011 0.0 881
+882 0.0473780632019043 0.039999999999992 0.039999999999992 0.0 882
+883 0.0226800441741943 0.0300000000000011 0.0300000000000011 0.0 883
+884 0.0224399566650391 0.0200000000000102 0.0200000000000102 0.0 884
+885 0.0223681926727295 0.019999999999996 0.019999999999996 0.0 885
+886 0.0252659320831299 0.0300000000000011 0.0300000000000011 0.0 886
+887 0.0249259471893311 0.019999999999996 0.019999999999996 0.0 887
+888 0.047400951385498 0.0499999999999972 0.0499999999999972 0.0 888
+889 0.0227570533752441 0.0200000000000102 0.0200000000000102 0.0 889
+890 0.0234551429748535 0.019999999999996 0.019999999999996 0.0 890
+891 0.0227649211883545 0.0300000000000011 0.0300000000000011 0.0 891
+892 0.0223729610443115 0.019999999999996 0.019999999999996 0.0 892
+893 0.0223479270935059 0.019999999999996 0.019999999999996 0.0 893
+894 0.047307014465332 0.0500000000000114 0.0500000000000114 0.0 894
+895 0.0258030891418457 0.019999999999996 0.019999999999996 0.0 895
+896 0.0229730606079102 0.0300000000000011 0.0300000000000011 0.0 896
+897 0.0226550102233887 0.019999999999996 0.019999999999996 0.0 897
+898 0.0230071544647217 0.019999999999996 0.019999999999996 0.0 898
+899 0.0224480628967285 0.0300000000000011 0.0300000000000011 0.0 899
+900 0.047260046005249 0.0400000000000063 0.0400000000000063 0.0 900
+901 0.0229511260986328 0.0300000000000011 0.0300000000000011 0.0 901
+902 0.0227549076080322 0.019999999999996 0.019999999999996 0.0 902
+903 0.0227870941162109 0.019999999999996 0.019999999999996 0.0 903
+904 0.023169994354248 0.0200000000000102 0.0200000000000102 0.0 904
+905 0.0247299671173096 0.0299999999999869 0.0299999999999869 0.0 905
+906 0.0232272148132324 0.0200000000000102 0.0200000000000102 0.0 906
+907 0.0473639965057373 0.0499999999999972 0.0499999999999972 0.0 907
+908 0.0231180191040039 0.019999999999996 0.019999999999996 0.0 908
+909 0.0226378440856934 0.0300000000000011 0.0300000000000011 0.0 909
+910 0.0224730968475342 0.019999999999996 0.019999999999996 0.0 910
+911 0.0223720073699951 0.0200000000000102 0.0200000000000102 0.0 911
+912 0.0224881172180176 0.019999999999996 0.019999999999996 0.0 912
+913 0.0518181324005127 0.0600000000000023 0.0600000000000023 0.0 913
+914 0.0285370349884033 0.019999999999996 0.019999999999996 0.0 914
+915 0.0229339599609375 0.0300000000000011 0.0300000000000011 0.0 915
+916 0.0224258899688721 0.019999999999996 0.019999999999996 0.0 916
+917 0.0223419666290283 0.0200000000000102 0.0200000000000102 0.0 917
+918 0.0231149196624756 0.019999999999996 0.019999999999996 0.0 918
+919 0.0469498634338379 0.0499999999999972 0.0499999999999972 0.0 919
+920 0.0229380130767822 0.019999999999996 0.019999999999996 0.0 920
+921 0.022784948348999 0.0300000000000011 0.0300000000000011 0.0 921
+922 0.0224778652191162 0.0200000000000102 0.0200000000000102 0.0 922
+923 0.025670051574707 0.0299999999999869 0.0299999999999869 0.0 923
+924 0.0241270065307617 0.0200000000000102 0.0200000000000102 0.0 924
+925 0.0224959850311279 0.019999999999996 0.019999999999996 0.0 925
+926 0.0475151538848877 0.0499999999999972 0.0499999999999972 0.0 926
+927 0.0233569145202637 0.019999999999996 0.019999999999996 0.0 927
+928 0.022697925567627 0.0300000000000011 0.0300000000000011 0.0 928
+929 0.0224049091339111 0.0200000000000102 0.0200000000000102 0.0 929
+930 0.0223929882049561 0.019999999999996 0.019999999999996 0.0 930
+931 0.0224430561065674 0.019999999999996 0.019999999999996 0.0 931
+932 0.0508589744567871 0.0499999999999972 0.0499999999999972 0.0 932
+933 0.0229549407958984 0.0300000000000011 0.0300000000000011 0.0 933
+934 0.0227360725402832 0.0200000000000102 0.0200000000000102 0.0 934
+935 0.0230159759521484 0.019999999999996 0.019999999999996 0.0 935
+936 0.0223309993743896 0.019999999999996 0.019999999999996 0.0 936
+937 0.0222959518432617 0.019999999999996 0.019999999999996 0.0 937
+938 0.0472970008850098 0.0400000000000063 0.0400000000000063 0.0 938
+939 0.0230600833892822 0.0300000000000011 0.0300000000000011 0.0 939
+940 0.0226349830627441 0.019999999999996 0.019999999999996 0.0 940
+941 0.025303840637207 0.0300000000000011 0.0300000000000011 0.0 941
+942 0.0234689712524414 0.019999999999996 0.019999999999996 0.0 942
+943 0.022615909576416 0.019999999999996 0.019999999999996 0.0 943
+944 0.0470030307769775 0.0500000000000114 0.0500000000000114 0.0 944
+945 0.0232269763946533 0.019999999999996 0.019999999999996 0.0 945
+946 0.0227811336517334 0.0300000000000011 0.0300000000000011 0.0 946
+947 0.0225110054016113 0.019999999999996 0.019999999999996 0.0 947
+948 0.0224099159240723 0.019999999999996 0.019999999999996 0.0 948
+949 0.0224759578704834 0.0200000000000102 0.0200000000000102 0.0 949
+950 0.0223360061645508 0.0300000000000011 0.0300000000000011 0.0 950
+951 0.0556850433349609 0.0499999999999972 0.0499999999999972 0.0 951
+952 0.0229251384735107 0.019999999999996 0.019999999999996 0.0 952
+953 0.0225358009338379 0.0300000000000011 0.0300000000000011 0.0 953
+954 0.0226168632507324 0.019999999999996 0.019999999999996 0.0 954
+955 0.023292064666748 0.019999999999996 0.019999999999996 0.0 955
+956 0.0225601196289062 0.0300000000000011 0.0300000000000011 0.0 956
+957 0.0472140312194824 0.0400000000000063 0.0400000000000063 0.0 957
+958 0.0228290557861328 0.0300000000000011 0.0300000000000011 0.0 958
+959 0.0247390270233154 0.019999999999996 0.019999999999996 0.0 959
+960 0.0244059562683105 0.019999999999996 0.019999999999996 0.0 960
+961 0.0223748683929443 0.0300000000000011 0.0300000000000011 0.0 961
+962 0.0224399566650391 0.0200000000000102 0.0200000000000102 0.0 962
+963 0.0478479862213135 0.0499999999999972 0.0499999999999972 0.0 963
+964 0.0231130123138428 0.019999999999996 0.019999999999996 0.0 964
+965 0.0229220390319824 0.019999999999996 0.019999999999996 0.0 965
+966 0.0224699974060059 0.0300000000000011 0.0300000000000011 0.0 966
+967 0.0225620269775391 0.0200000000000102 0.0200000000000102 0.0 967
+968 0.0224020481109619 0.019999999999996 0.019999999999996 0.0 968
+969 0.0508251190185547 0.0499999999999972 0.0499999999999972 0.0 969
+970 0.0230629444122314 0.0300000000000011 0.0300000000000011 0.0 970
+971 0.0234439373016357 0.019999999999996 0.019999999999996 0.0 971
+972 0.0241410732269287 0.0200000000000102 0.0200000000000102 0.0 972
+973 0.0225048065185547 0.019999999999996 0.019999999999996 0.0 973
+974 0.0223360061645508 0.0300000000000011 0.0300000000000011 0.0 974
+975 0.0224909782409668 0.019999999999996 0.019999999999996 0.0 975
+976 0.0475950241088867 0.0499999999999972 0.0499999999999972 0.0 976
+977 0.0227401256561279 0.0200000000000102 0.0200000000000102 0.0 977
+978 0.0255289077758789 0.019999999999996 0.019999999999996 0.0 978
+979 0.0238900184631348 0.0300000000000011 0.0300000000000011 0.0 979
+980 0.0224909782409668 0.019999999999996 0.019999999999996 0.0 980
+981 0.0223910808563232 0.019999999999996 0.019999999999996 0.0 981
+982 0.0473268032073975 0.0499999999999972 0.0499999999999972 0.0 982
+983 0.0227880477905273 0.0200000000000102 0.0200000000000102 0.0 983
+984 0.0226118564605713 0.0300000000000011 0.0300000000000011 0.0 984
+985 0.0223948955535889 0.019999999999996 0.019999999999996 0.0 985
+986 0.0223472118377686 0.019999999999996 0.019999999999996 0.0 986
+987 0.0237748622894287 0.0200000000000102 0.0200000000000102 0.0 987
+988 0.0564570426940918 0.0499999999999972 0.0499999999999972 0.0 988
+989 0.0229530334472656 0.0200000000000102 0.0200000000000102 0.0 989
+990 0.0226871967315674 0.0300000000000011 0.0300000000000011 0.0 990
+991 0.0234870910644531 0.019999999999996 0.019999999999996 0.0 991
+992 0.0224900245666504 0.019999999999996 0.019999999999996 0.0 992
+993 0.0224850177764893 0.0300000000000011 0.0300000000000011 0.0 993
+994 0.0470020771026611 0.0400000000000063 0.0400000000000063 0.0 994
+995 0.022852897644043 0.0300000000000011 0.0300000000000011 0.0 995
+996 0.0257470607757568 0.019999999999996 0.019999999999996 0.0 996
+997 0.0236849784851074 0.0300000000000011 0.0300000000000011 0.0 997
+998 0.0226609706878662 0.019999999999996 0.019999999999996 0.0 998
+999 0.0222959518432617 0.019999999999996 0.019999999999996 0.0 999
+1000 0.0223429203033447 0.0200000000000102 0.0200000000000102 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log
new file mode 100644
index 000000000..1d42e63d0
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log
@@ -0,0 +1,262 @@
+========================== 2009-04-01T16:50:52 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'GeneratorBenchmarkPure' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+GeneratorBenchmarkPure#generator_pretty:
+ real total user system
+sum 27.356301069 27.380000000 27.370000000 0.010000000
+min 0.022372007 0.020000000 0.020000000 0.000000000
+std- 0.018178834 0.017248947 0.017256376 -0.000306228
+mean 0.027356301 0.027380000 0.027370000 0.000010000
+std+ 0.036533768 0.037511053 0.037483624 0.000326228
+max 0.059602976 0.060000000 0.060000000 0.010000000
+std 0.009177467 0.010131053 0.010113624 0.000316228
+std% 33.547909026 37.001655096 36.951493429 3162.277660168
+harm 0.025499974 0.024719842 0.024716787 nan
+geo 0.026258699 0.025883656 0.025877881 0.000000000
+q1 0.023006916 0.020000000 0.020000000 0.000000000
+med 0.023234129 0.020000000 0.020000000 0.000000000
+q3 0.024879038 0.030000000 0.030000000 0.000000000
+ 1000 36.55465 0.027356301
+ calls calls/sec secs/call
+
+ 0.05774 -|
+ 0.05402 -|*
+ 0.05030 -|****
+ 0.04657 -|***
+ 0.04285 -|
+ 0.03913 -|
+ 0.03540 -|
+ 0.03168 -|*
+ 0.02796 -|***
+ 0.02423 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02323, iqr=0.00187, factor=3.00):
+high=72 very_high=150
+
+Ljung-Box statistics: q=3705.61130 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+GeneratorBenchmarkPure#generator_pretty:
+ real total user system
+sum 27.569372892 27.540000000 27.530000000 0.010000000
+min 0.022536039 0.020000000 0.020000000 0.000000000
+std- 0.018335894 0.017329581 0.017326902 -0.000306228
+mean 0.027569373 0.027540000 0.027530000 0.000010000
+std+ 0.036802852 0.037750419 0.037733098 0.000326228
+max 0.056230068 0.060000000 0.060000000 0.010000000
+std 0.009233479 0.010210419 0.010203098 0.000316228
+std% 33.491797772 37.074868658 37.061742557 3162.277660168
+harm 0.025675439 0.024841635 0.024836493 nan
+geo 0.026453993 0.026024721 0.026017235 0.000000000
+q1 0.023056030 0.020000000 0.020000000 0.000000000
+med 0.023363113 0.020000000 0.020000000 0.000000000
+q3 0.025253892 0.030000000 0.030000000 0.000000000
+ 1000 36.27213 0.027569373
+ calls calls/sec secs/call
+
+ 0.05455 -|*
+ 0.05118 -|**
+ 0.04781 -|******
+ 0.04444 -|
+ 0.04107 -|
+ 0.03770 -|
+ 0.03433 -|
+ 0.03096 -|*
+ 0.02759 -|*****
+ 0.02422 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02336, iqr=0.00220, factor=3.00):
+high=67 very_high=148
+
+Ljung-Box statistics: q=3212.48820 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+-------------------------------------------------------------------------------
+
+This first run is only for warmup.
+GeneratorBenchmarkPure#generator_safe:
+ real total user system
+sum 26.869803667 26.870000000 26.870000000 0.000000000
+min 0.022134781 0.020000000 0.020000000 0.000000000
+std- 0.017763505 0.016750439 0.016750439 0.000000000
+mean 0.026869804 0.026870000 0.026870000 0.000000000
+std+ 0.035976103 0.036989561 0.036989561 0.000000000
+max 0.054952860 0.060000000 0.060000000 0.000000000
+std 0.009106299 0.010119561 0.010119561 0.000000000
+std% 33.890455748 37.661185483 37.661185483 nan
+harm 0.024986876 0.024236549 0.024236549 nan
+geo 0.025759291 0.025373850 0.025373850 0.000000000
+q1 0.022480011 0.020000000 0.020000000 0.000000000
+med 0.022669554 0.020000000 0.020000000 0.000000000
+q3 0.024562180 0.030000000 0.030000000 0.000000000
+ 1000 37.21650 0.026869804
+ calls calls/sec secs/call
+
+ 0.05331 -|*
+ 0.05003 -|**
+ 0.04675 -|*******
+ 0.04347 -|
+ 0.04018 -|
+ 0.03690 -|
+ 0.03362 -|
+ 0.03034 -|*
+ 0.02706 -|****
+ 0.02378 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02267, iqr=0.00208, factor=3.00):
+high=77 very_high=149
+
+Ljung-Box statistics: q=3100.69443 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+GeneratorBenchmarkPure#generator_safe:
+ real total user system
+sum 27.079979420 27.040000000 27.030000000 0.010000000
+min 0.022160053 0.020000000 0.020000000 0.000000000
+std- 0.017839790 0.016756803 0.016774061 -0.000306228
+mean 0.027079979 0.027040000 0.027030000 0.000010000
+std+ 0.036320169 0.037323197 0.037285939 0.000326228
+max 0.056457043 0.060000000 0.060000000 0.010000000
+std 0.009240189 0.010283197 0.010255939 0.000316228
+std% 34.121847738 38.029575352 37.942800504 3162.277660168
+harm 0.025134510 0.024331887 0.024329914 nan
+geo 0.025935574 0.025501913 0.025497264 0.000000000
+q1 0.022511005 0.020000000 0.020000000 0.000000000
+med 0.022763968 0.020000000 0.020000000 0.000000000
+q3 0.024686873 0.030000000 0.030000000 0.000000000
+ 1000 36.92765 0.027079979
+ calls calls/sec secs/call
+
+ 0.05474 -|
+ 0.05131 -|*
+ 0.04788 -|********
+ 0.04445 -|
+ 0.04102 -|
+ 0.03759 -|
+ 0.03416 -|
+ 0.03073 -|*
+ 0.02730 -|***
+ 0.02387 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02276, iqr=0.00218, factor=3.00):
+high=53 very_high=158
+
+Ljung-Box statistics: q=3263.81737 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+-------------------------------------------------------------------------------
+
+This first run is only for warmup.
+GeneratorBenchmarkPure#generator_fast:
+ real total user system
+sum 19.930217266 19.900000000 19.900000000 0.000000000
+min 0.015556812 0.010000000 0.010000000 0.000000000
+std- 0.010984683 0.009865525 0.009865525 0.000000000
+mean 0.019930217 0.019900000 0.019900000 0.000000000
+std+ 0.028875752 0.029934475 0.029934475 0.000000000
+max 0.048508883 0.050000000 0.050000000 0.000000000
+std 0.008945535 0.010034475 0.010034475 0.000000000
+std% 44.884280314 50.424498030 50.424498030 nan
+harm 0.017806422 0.016056519 0.016056519 nan
+geo 0.018618502 0.017792091 0.017792091 0.000000000
+q1 0.015833676 0.010000000 0.010000000 0.000000000
+med 0.016059995 0.020000000 0.020000000 0.000000000
+q3 0.016686678 0.020000000 0.020000000 0.000000000
+ 1000 50.17507 0.019930217
+ calls calls/sec secs/call
+
+ 0.04686 -|
+ 0.04357 -|**
+ 0.04027 -|******
+ 0.03698 -|
+ 0.03368 -|
+ 0.03039 -|
+ 0.02709 -|
+ 0.02379 -|*
+ 0.02050 -|**
+ 0.01720 -|**************************************************
+
+Outliers detected with box plot algo (median=0.01606, iqr=0.00085, factor=3.00):
+high=46 very_high=180
+
+Ljung-Box statistics: q=3486.59836 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+GeneratorBenchmarkPure#generator_fast:
+ real total user system
+sum 20.008520842 19.960000000 19.950000000 0.010000000
+min 0.015434027 0.010000000 0.010000000 0.000000000
+std- 0.010882230 0.009581845 0.009596030 -0.000306228
+mean 0.020008521 0.019960000 0.019950000 0.000010000
+std+ 0.029134812 0.030338155 0.030303970 0.000326228
+max 0.047976971 0.050000000 0.050000000 0.010000000
+std 0.009126291 0.010378155 0.010353970 0.000316228
+std% 45.612021047 51.994765712 51.899601404 3162.277660168
+harm 0.017787111 0.015944725 0.015943454 nan
+geo 0.018637889 0.017737808 0.017733851 0.000000000
+q1 0.015746295 0.010000000 0.010000000 0.000000000
+med 0.015944481 0.020000000 0.020000000 0.000000000
+q3 0.016811609 0.020000000 0.020000000 0.000000000
+ 1000 49.97871 0.020008521
+ calls calls/sec secs/call
+
+ 0.04635 -|*
+ 0.04310 -|**
+ 0.03984 -|*******
+ 0.03659 -|
+ 0.03333 -|
+ 0.03008 -|
+ 0.02682 -|
+ 0.02357 -|
+ 0.02032 -|***
+ 0.01706 -|**************************************************
+
+Outliers detected with box plot algo (median=0.01594, iqr=0.00107, factor=3.00):
+high=64 very_high=166
+
+Ljung-Box statistics: q=2965.93220 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:53:33 CEST ===========================
+
+Comparing times (call_time_mean):
+ 1 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+ 49.978706968 ( real) -> 1.378x
+ 0.020008521
+ 2 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+ 36.927649925 ( real) -> 1.018x 3 (>=3859)
+ 0.027079979
+ 3 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+ 36.272134441 ( real) -> 1.000x 2 (>=3859)
+ 0.027569373
+ calls/sec ( time) -> speed covers
+ secs/call
+
+Comparing times (call_time_median):
+ 1 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+ 62.717626652 ( real) -> 1.465x
+ 0.015944481
+ 2 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+ 43.929073409 ( real) -> 1.026x 3 (>=3859)
+ 0.022763968
+ 3 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+ 42.802514491 ( real) -> 1.000x 2 (>=3859)
+ 0.023363113
+ calls/sec ( time) -> speed covers
+ secs/call
+===============================================================================
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_pretty.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat'.
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_safe.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat'.
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_fast.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat'.
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat
new file mode 100644
index 000000000..8817d6516
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.0465724627546347
+3 -0.0538491011993629
+4 -0.0538837516678858
+5 -0.0581087152880847
+6 -0.0572986418232159
+7 -0.0599999756465123
+8 -0.068646253651936
+9 -0.0748373181827194
+10 -0.0762302382502274
+11 -0.0698190157504385
+12 -0.0638026172211339
+13 -0.056269249634719
+14 -0.0567327382445349
+15 -0.0596771394790282
+16 -0.054002423139168
+17 -0.0490317335722634
+18 0.461538736857567
+19 0.45915885478734
+20 -0.0465031134094806
+21 -0.0522729893812941
+22 -0.0556508820670087
+23 -0.0550082280116714
+24 -0.0545719306525113
+25 -0.0657168876641937
+26 -0.0693857874047984
+27 -0.0792986072802413
+28 -0.0733338236920328
+29 -0.0654333815670565
+30 -0.0571917436864775
+31 -0.0526717459233624
+32 -0.0557521787108153
+33 -0.0549975758505058
+34 -0.0517415749303995
+35 0.0235297603781655
+36 0.804189593789118
+37 0.0278204967070628
+38 -0.050024141489799
+39 -0.0518095926145569
+40 -0.0452419084747306
+41 -0.0508505065460828
+42 -0.0630761219578647
+43 -0.062815338541251
+44 -0.0772705590073707
+45 -0.0729125138410514
+46 -0.0718320579999123
+47 -0.0607354760752678
+48 -0.0537362276786008
+49 -0.0486777895346357
+50 -0.0554247873222313
+51 -0.0511645855928409
+52 -0.0466004298363093
+53 0.459873350367521
+54 0.424472275070108
+55 -0.0487047547824375
+56 -0.0545283173980978
+57 -0.0480870048405532
+58 -0.0558758950923908
+59 -0.0508952051704444
+60 -0.0620003778190341
+61 -0.0676424010473159
+62 -0.0753766989500048
+63 -0.0695341618321725
+64 -0.0663751431467297
+65 -0.0563170232338965
+66 -0.053655761264179
+67 -0.0530055660822738
+68 -0.0517420323264873
+69 -0.0456703115975304
+70 0.103335608865948
+71 0.639961232446673
+72 0.0835611643585718
+73 -0.0505874487567197
+74 -0.0544864827038179
+75 -0.05268470170316
+76 -0.0471381749128569
+77 -0.0587367141040808
+78 -0.0594188669128526
+79 -0.0650917021991912
+80 -0.068525580194848
+81 -0.0720464392408628
+82 -0.0530371585210882
+83 -0.0594974405056426
+84 -0.0468462249568105
+85 -0.0556729861678099
+86 -0.0486685569511801
+87 -0.0231831809211586
+88 0.412151261252192
+89 0.427286596751845
+90 -0.0468484487476343
+91 -0.0513065750413643
+92 -0.0506460103589642
+93 -0.0523040710285122
+94 -0.0553864194240335
+95 -0.0624298273708398
+96 -0.0629408163122051
+97 -0.0704192947779158
+98 -0.0661863417422444
+99 -0.0616198727092325
+100 -0.0549440862832691
+101 -0.0493100463446785
+102 -0.0513058903561152
+103 -0.0546567629566328
+104 -0.0447767089062448
+105 0.155994950171604
+106 0.499983838989633
+107 0.146752854694195
+108 -0.0499527760238258
+109 -0.0481994338837686
+110 -0.0507971256336303
+111 -0.053242725247733
+112 -0.0556340421399292
+113 -0.0659043126583437
+114 -0.0664898553672703
+115 -0.0623446272778118
+116 -0.0661076782182718
+117 -0.0496402401287781
+118 -0.0494603231236963
+119 -0.04785210230028
+120 -0.0549514395062738
+121 -0.0457893865901791
+122 0.0107718727916323
+123 0.354591871972286
+124 0.378214524188427
+125 -0.00576473785992366
+126 -0.0475263414095933
+127 -0.0467032507959455
+128 -0.0492439340398371
+129 -0.0553725291795042
+130 -0.0588373348224932
+131 -0.0653802923166691
+132 -0.065420878560692
+133 -0.0664825458346486
+134 -0.0585794787867471
+135 -0.0526654847715212
+136 -0.0458834268571694
+137 -0.0488834733479998
+138 -0.0484626462105708
+139 -0.0459832096817391
+140 0.217115969208045
+141 0.366645152379531
+142 0.180037374351014
+143 -0.0470069302868867
+144 -0.0448016085636167
+145 -0.0480964372087658
+146 -0.047581587974722
+147 -0.0542737921731714
+148 -0.0616712591015281
+149 -0.0645264998964167
+150 -0.0660893063296893
+151 -0.0626040533901412
+152 -0.0563401748225009
+153 -0.0489872324179382
+154 -0.0416660137613489
+155 -0.0474153625982119
+156 -0.0429322203344692
+157 0.0758981518142605
+158 0.280022168317631
+159 0.322388389335567
+160 0.029741268314489
+161 -0.0477650431020993
+162 -0.0450492975581489
+163 -0.0437136320420844
+164 -0.0525847472537078
+165 -0.0545773291954165
+166 -0.0605617971026816
+167 -0.0604174493574271
+168 -0.0668887082049361
+169 -0.0569988719330788
+170 -0.0531317736158737
+171 -0.0453847330038626
+172 -0.0478811645968217
+173 -0.0490973206952072
+174 -0.0208865958962374
+175 0.219799921570466
+176 0.281455499801039
+177 0.217413022569843
+178 -0.0472411753883375
+179 -0.0420519413404592
+180 -0.0503599257085886
+181 -0.0460149167014056
+182 -0.0525935089624673
+183 -0.058565014679309
+184 -0.0597480380605469
+185 -0.0594067588886417
+186 -0.0596129671442577
+187 -0.0532084985745771
+188 -0.0488672523172161
+189 -0.0467425993035773
+190 -0.047469398929737
+191 -0.0478812995202321
+192 0.113496325641223
+193 0.235261527843186
+194 0.274288512637064
+195 0.0686558749507578
+196 -0.0421890074761181
+197 -0.0462774420288975
+198 -0.0436343780463106
+199 -0.0526745158526506
+200 -0.0530085997416379
+201 -0.0595766365030657
+202 -0.0527520859095327
+203 -0.0617844575573737
+204 -0.0533732516707478
+205 -0.0475406344908671
+206 -0.0448557657939025
+207 -0.0491813452587493
+208 -0.0465215540303466
+209 0.0129885978681198
+210 0.18048531357979
+211 0.232613590605931
+212 0.216739579303611
+213 -0.0198642765598399
+214 -0.0414628173858397
+215 -0.0446070145491157
+216 -0.0466847454519845
+217 -0.0516226742873491
+218 -0.0545361970917439
+219 -0.0613148091516843
+220 -0.055072960413915
+221 -0.0570761596774525
+222 -0.0495753919838192
+223 -0.044640513821499
+224 -0.0405018327822807
+225 -0.0466702636420172
+226 -0.0430523088898141
+227 0.125260003795363
+228 0.191674753632075
+229 0.237532651857125
+230 0.0874635279713366
+231 -0.0384027504022232
+232 -0.0385130011851906
+233 -0.0369193020542282
+234 -0.0515458512947041
+235 -0.050306447453753
+236 -0.0581741159838659
+237 -0.052999201910556
+238 -0.0589658237786291
+239 -0.0514526377102802
+240 -0.0466869399159385
+241 -0.0380841759966984
+242 -0.0453267873931886
+243 -0.0425000608264673
+244 0.0366267109959152
+245 0.160369979130273
+246 0.196676462412679
+247 0.196963399648668
+248 -0.00269284361330376
+249 -0.0432567847711532
+250 -0.038260742578146
+251 -0.0448624744088596
+252 -0.0455503391926038
+253 -0.0532191861758754
+254 -0.0548508398385335
+255 -0.0555442566058335
+256 -0.0526918597919155
+257 -0.0496453707825256
+258 -0.0463836479193388
+259 -0.0379199031664589
+260 -0.043979755952542
+261 -0.0385836044654481
+262 0.148383243382033
+263 0.160888203514488
+264 0.201083269668142
+265 0.101463931607865
+266 -0.0389240581250844
+267 -0.043318710806698
+268 -0.0360099743646708
+269 -0.0479594556724686
+270 -0.0461272027080179
+271 -0.0510551768794275
+272 -0.0463026057033333
+273 -0.0586300566668458
+274 -0.0481537987530518
+275 -0.0467240944281063
+276 -0.0388278648519038
+277 -0.0438740084909164
+278 -0.0404201849366918
+279 0.0573087818198142
+280 0.149625568374594
+281 0.165251996461555
+282 0.180497909191808
+283 0.0141274252706337
+284 -0.0433910523077124
+285 -0.0353327138881179
+286 -0.04407012419326
+287 -0.0472875341495554
+288 -0.0500154039913527
+289 -0.0489059070454218
+290 -0.0523175481803876
+291 -0.0483438070974799
+292 -0.0465391341735897
+293 -0.0443706893358358
+294 -0.0383212232736209
+295 -0.0439923509231612
+296 -0.0179530530333497
+297 0.126953953852207
+298 0.148073497780274
+299 0.169463284775491
+300 0.12460981401008
+301 -0.0384433337210392
+302 -0.037574676038055
+303 -0.0373312294892246
+304 -0.0476939816787347
+305 -0.0485476034606885
+306 -0.053203479537681
+307 -0.0432695529453645
+308 -0.0531581165281506
+309 -0.0433332891054256
+310 -0.0406621361812071
+311 -0.0336785273069936
+312 -0.0450892345419585
+313 -0.0372803722726718
+314 0.0747413637301572
+315 0.12838403521187
+316 0.131273451158583
+317 0.165634916670676
+318 0.0393574762093495
+319 -0.0400219462092557
+320 -0.0321130988518114
+321 -0.0426329631110547
+322 -0.0472021330054887
+323 -0.0510884361963381
+324 -0.0451526836510229
+325 -0.0497432174259365
+326 -0.0494924567626408
+327 -0.0426445357005891
+328 -0.0399977780929692
+329 -0.035075954620801
+330 -0.0398937379838232
+331 0.00141601747607724
+332 0.111237045799794
+333 0.129781753698161
+334 0.148823429538605
+335 0.111428704849097
+336 -0.0189114212837953
+337 -0.0358144500870447
+338 -0.0338893528609611
+339 -0.04156202524001
+340 -0.0476279047622513
+341 -0.0479240001912479
+342 -0.0448192129885784
+343 -0.0520619488376005
+344 -0.045398294011681
+345 -0.0425448160252897
+346 -0.0301879715513119
+347 -0.039119844953792
+348 -0.0318445060292795
+349 0.0775128927560733
+350 0.133696030929458
+351 0.0934040962894178
+352 0.165037006342042
+353 0.0370713206399436
+354 -0.0370489719027206
+355 -0.0298304751416159
+356 -0.0387994185030151
+357 -0.0425739727567155
+358 -0.0469026409069165
+359 -0.0418293150822566
+360 -0.0473273219131854
+361 -0.049308019642061
+362 -0.0433284886806794
+363 -0.0369972157525989
+364 -0.0345525347288445
+365 -0.0400585889725531
+366 0.006656467274749
+367 0.11319538432443
+368 0.114967420474613
+369 0.133840368292221
+370 0.11280046677219
+371 -0.0184103961539414
+372 -0.0339399206362434
+373 -0.0341590200213704
+374 -0.0389400741910205
+375 -0.0448588461724111
+376 -0.0447120964840124
+377 -0.0401284599190171
+378 -0.0470280445927007
+379 -0.0439972690249817
+380 -0.0392994644400358
+381 -0.0331443114964012
+382 -0.0396320099995872
+383 -0.0357237280973228
+384 0.0769794799672965
+385 0.121101405134608
+386 0.100303300798787
+387 0.149213747230628
+388 0.0412712734968881
+389 -0.034428474543572
+390 -0.0309853686271892
+391 -0.037127802798713
+392 -0.0410862385400477
+393 -0.0446683655260938
+394 -0.0377779019366912
+395 -0.0432145550363202
+396 -0.0438865867392626
+397 -0.0397741719725851
+398 -0.0337532454079572
+399 -0.0345799482263535
+400 -0.0387855235790556
+401 0.0042952586621399
+402 0.114260797874283
+403 0.0962185400570627
+404 0.116302086694965
+405 0.116848660126361
+406 -0.0132599069767382
+407 -0.0326838372412273
+408 -0.031676894325753
+409 -0.0359544345578842
+410 -0.0430939231188687
+411 -0.0427909313399572
+412 -0.0392589148284163
+413 -0.0430139521930403
+414 -0.0405058980200932
+415 -0.0359005384516355
+416 -0.0297289315488662
+417 -0.0346787823837342
+418 -0.0332184590996983
+419 0.0771309823574169
+420 0.0954831808563938
+421 0.0986580814637101
+422 0.132204221810988
+423 0.0432995539287995
+424 -0.0282150289086581
+425 -0.0254088298731916
+426 -0.035952142901876
+427 -0.037552626088304
+428 -0.0405520090843967
+429 -0.0395737434856001
+430 -0.0415264891793749
+431 -0.0396875191674724
+432 -0.0384740880698292
+433 -0.0302213018176337
+434 -0.0302192627628463
+435 -0.0348307323662469
+436 0.00857082219058242
+437 0.113991981123305
+438 0.0810743348982558
+439 0.0970584251304922
+440 0.115026168034471
+441 -0.0130244881629081
+442 -0.0292031219799078
+443 -0.0308836212065116
+444 -0.0320575360367349
+445 -0.0393235092139189
+446 -0.0404817406521166
+447 -0.0375499698943704
+448 -0.0391450519157927
+449 -0.0397015347530508
+450 -0.0341587808934071
+451 -0.0310633384201306
+452 -0.0298881734250907
+453 -0.0295664081324632
+454 0.0805186281243404
+455 0.0833481690834954
+456 0.100864427083124
+457 0.111048128125141
+458 0.0464738054146592
+459 -0.0349995254836163
+460 -0.0255159736923953
+461 -0.0328764364137298
+462 -0.0338236112511505
+463 -0.0346782988250705
+464 -0.0340726935148046
+465 -0.0404234701095829
+466 -0.0356824878052483
+467 -0.0365578629303766
+468 -0.0324733709193554
+469 -0.0289648187856306
+470 -0.0320583632447268
+471 0.0109080362038411
+472 0.11757782076319
+473 0.0695324086716044
+474 0.079135520981604
+475 0.117166513712611
+476 -0.0107597842046391
+477 -0.0317910056255559
+478 -0.027713154753877
+479 -0.0328896799629515
+480 -0.0351148398263727
+481 -0.0367274328131775
+482 -0.0364350706943765
+483 -0.0352358798451258
+484 -0.0349817805140066
+485 -0.0341765926002117
+486 -0.0295770684618762
+487 -0.0265724708520466
+488 -0.0307810244464994
+489 0.0809894603579388
+490 0.0657550565427912
+491 0.106121880875152
+492 0.0974533505603275
+493 0.048238583810636
+494 -0.0288751879183889
+495 -0.0278787597095273
+496 -0.0337889205336922
+497 -0.0310688626579132
+498 -0.0384449649057626
+499 -0.0323682085966455
+500 -0.0361594385992874
+501 -0.0307937097313911
+502 -0.0313341566221988
+503 -0.0279856067641256
+504 -0.0289346840813807
+505 -0.0274872799690336
+506 0.00966555565940951
+507 0.0987720472362742
+508 0.0693890261403234
+509 0.0836756922797179
+510 0.10281770126579
+511 -0.00727787007831376
+512 -0.0258225019587932
+513 -0.0298502698700326
+514 -0.0306103473329238
+515 -0.0340826155989302
+516 -0.0355383371718098
+517 -0.0332157070791453
+518 -0.0354738192624273
+519 -0.0294010470848171
+520 -0.0310021513905682
+521 -0.0278235052216282
+522 -0.0239204460552095
+523 -0.0270969544256545
+524 0.0813764246127106
+525 0.0493102023473518
+526 0.104517332044244
+527 0.0811860139474904
+528 0.0510442031887192
+529 -0.0263637770970907
+530 -0.024755257304
+531 -0.0293388219300537
+532 -0.030007512828798
+533 -0.0323871465584352
+534 -0.0326780116025662
+535 -0.0374203204825225
+536 -0.0287231615177231
+537 -0.0332054768516264
+538 -0.0263051872864467
+539 -0.0243639277620771
+540 -0.023684344033898
+541 0.0142647324079813
+542 0.08574245660666
+543 0.0666795058595027
+544 0.0869761334698767
+545 0.0822018389405922
+546 -0.00295335814304317
+547 -0.0235452895911804
+548 -0.0281420988182953
+549 -0.0274120947938358
+550 -0.030158448744077
+551 -0.0295591560556766
+552 -0.0349368577359752
+553 -0.0326892340430509
+554 -0.0288806796544796
+555 -0.0295906146661126
+556 -0.0255785772166513
+557 -0.0247509384838002
+558 -0.0232231373627232
+559 0.0658724153140723
+560 0.0712698072158692
+561 0.0881661970571259
+562 0.0663434329796159
+563 0.0504442196817487
+564 -0.0220475381031792
+565 -0.0264520763210997
+566 -0.0262681630778278
+567 -0.0288120090469048
+568 -0.0292045667237407
+569 -0.0288062681932496
+570 -0.0330307486178301
+571 -0.0276514157813042
+572 -0.0268575483268837
+573 -0.0286764091398958
+574 -0.0281163961143271
+575 -0.0228693014048811
+576 0.0137045823052654
+577 0.0708633033596918
+578 0.0727744765379734
+579 0.0901470435080371
+580 0.0668755655920324
+581 -0.000653685262202251
+582 -0.0226994101946291
+583 -0.0270858316982201
+584 -0.0262718617327352
+585 -0.0265543856920115
+586 -0.0263771846461291
+587 -0.0319210552186977
+588 -0.029228183377507
+589 -0.0253777881177648
+590 -0.023809668956424
+591 -0.0280707574473553
+592 -0.0236140212549248
+593 -0.0228812657345804
+594 0.0486286781379677
+595 0.0898094414635747
+596 0.0508172134123107
+597 0.0901627351364118
+598 0.035844991775818
+599 -0.0203954379453198
+600 -0.0236862766959248
+601 -0.0247764225976876
+602 -0.0268581954253402
+603 -0.024001323229557
+604 -0.0303209729182735
+605 -0.0282931887611187
+606 -0.0292448557436288
+607 -0.0204578421032432
+608 -0.0248481591188926
+609 -0.0243082585401647
+610 -0.0203058655309834
+611 0.0139804741022989
+612 0.0505962449646704
+613 0.0690065939226321
+614 0.0907008020619833
+615 0.0519895469381193
+616 0.00206395484186643
+617 -0.0179281261622168
+618 -0.0227541776038619
+619 -0.0257149623750039
+620 -0.0221474812173537
+621 -0.0258958495203968
+622 -0.0291821476071184
+623 -0.0275173183668531
+624 -0.0219475947671766
+625 -0.0205864860149524
+626 -0.025198699283959
+627 -0.0196801475213126
+628 -0.0202813022751003
+629 0.0348753757737052
+630 0.0886744284826022
+631 0.0510351034421101
+632 0.0895415054055807
+633 0.0164865165554748
+634 -0.015820890351599
+635 -0.0235475303149806
+636 -0.0213487610196947
+637 -0.0223199871320358
+638 -0.0232883343131998
+639 -0.0272670686256873
+640 -0.0272994728260666
+641 -0.0251308147365066
+642 -0.0178939045831991
+643 -0.0228455395566411
+644 -0.0221674583093893
+645 -0.0181323711670327
+646 -0.000452057490636536
+647 0.0730003371658734
+648 0.0526039790662623
+649 0.0893120555725861
+650 0.0370376391850216
+651 -0.00089235639136826
+652 -0.0187548356986865
+653 -0.0202476722666913
+654 -0.0234402686094643
+655 -0.0176944079943485
+656 -0.0217419932421246
+657 -0.0252856528727102
+658 -0.0266563306764344
+659 -0.0179448089254929
+660 -0.0195530157887301
+661 -0.0242694989687706
+662 -0.0190898174037584
+663 -0.0162971087662526
+664 0.0190291931578508
+665 0.0920040569420149
+666 0.0547776230200262
+667 0.092519718174194
+668 -0.00323187468810452
+669 -0.0159810677640527
+670 -0.0185314129082898
+671 -0.0214996968543122
+672 -0.0209394743431591
+673 -0.0193460621057047
+674 -0.0257496298508357
+675 -0.0234878155623851
+676 -0.0215154679548733
+677 -0.0168154166505892
+678 -0.019623012738795
+679 -0.0222731795719489
+680 -0.0150548901993986
+681 -0.0172527061580013
+682 0.0747183966470148
+683 0.0721393781132992
+684 0.0565213941535672
+685 0.0565389116679803
+686 -0.0148388383909541
+687 -0.0189549593111703
+688 -0.0194161863407717
+689 -0.0197915076545455
+690 -0.0204244077381793
+691 -0.0218016316407433
+692 -0.0214645015602913
+693 -0.0238079641007921
+694 -0.0139629684168808
+695 -0.0156538895936235
+696 -0.021079456852115
+697 -0.0181418459552329
+698 -0.0145711876585601
+699 0.021215272535226
+700 0.0739558887973388
+701 0.0544658986157784
+702 0.0807341348823958
+703 -0.000188368345643536
+704 -0.0129199941327641
+705 -0.0180368997395347
+706 -0.0177692127800531
+707 -0.0204829544190261
+708 -0.0186632967600099
+709 -0.0204496056760325
+710 -0.023317274857146
+711 -0.0203774310283799
+712 -0.0136747501938559
+713 -0.0178116490297146
+714 -0.0189587954269383
+715 -0.0118858609089409
+716 -0.0172514569604997
+717 0.060802565704854
+718 0.0729937005677284
+719 0.0561951789698019
+720 0.042100568116198
+721 -0.0145015528092692
+722 -0.015700955312727
+723 -0.0167874521751816
+724 -0.0157176826421741
+725 -0.01783312467466
+726 -0.0220309477451877
+727 -0.0206302592507727
+728 -0.0200916933627863
+729 -0.0188778418069578
+730 -0.0113708982542668
+731 -0.0176778219523296
+732 -0.014843868366855
+733 -0.0112296460883651
+734 0.0256322345958098
+735 0.0560052205819785
+736 0.0568640232132456
+737 0.0611881586473825
+738 0.00379039852134298
+739 -0.0104730174558681
+740 -0.0164262606347393
+741 -0.0144022889870097
+742 -0.0168139620706729
+743 -0.0162615811333726
+744 -0.0196477371337629
+745 -0.0198824745918442
+746 -0.0192330305226495
+747 -0.012843462564526
+748 -0.0132891104080353
+749 -0.0181808023489715
+750 -0.0130545167379928
+751 -0.0113910229689613
+752 0.041990539641635
+753 0.0763855238906953
+754 0.0594251709620633
+755 0.0243609283015674
+756 -0.011509575108219
+757 -0.0130005756539877
+758 -0.0150890385548497
+759 -0.0139673203815592
+760 -0.0157156335728081
+761 -0.0186682466883542
+762 -0.0185554927618856
+763 -0.0162755018147282
+764 -0.0154200664197001
+765 -0.0134500863696249
+766 -0.014171081512106
+767 -0.0144636296247257
+768 -0.0126931065239486
+769 0.00886491087382969
+770 0.0582642578199214
+771 0.0786546867228701
+772 0.0272306482046141
+773 0.00822579495183492
+774 -0.011517390916366
+775 -0.0139592957633573
+776 -0.0129421565517047
+777 -0.0134986559471086
+778 -0.0136304589585504
+779 -0.0173438393070116
+780 -0.016064531677406
+781 -0.0152510664062614
+782 -0.0101822066131621
+783 -0.0130099394643087
+784 -0.0150897101751983
+785 -0.0121547232260943
+786 -0.0117824571975702
+787 0.0242515574526126
+788 0.0773173900249155
+789 0.061635146281499
+790 0.00959030625397352
+791 -0.0090693872805306
+792 -0.0112081729509553
+793 -0.0138649594742307
+794 -0.010084978733244
+795 -0.0132143360704552
+796 -0.01496302977637
+797 -0.0164140720480332
+798 -0.0137826264017484
+799 -0.0128738607141167
+800 -0.0108179181287105
+801 -0.0114389768189071
+802 -0.0115710434341599
+803 -0.00965025893918617
+804 -0.0135132422793313
+805 0.0617365766920115
+806 0.0779699523399871
+807 0.0247967756220761
+808 -0.0065090662747984
+809 -0.00857892822230665
+810 -0.0101662607994292
+811 -0.0108507653686812
+812 -0.00958246558520002
+813 -0.0144516907622999
+814 -0.0150147299589262
+815 -0.0135220759135818
+816 -0.0115211008118439
+817 -0.0104021106108387
+818 -0.00780776429502702
+819 -0.011404849912357
+820 -0.00951333011434902
+821 -0.00938572506372878
+822 0.0266216133025957
+823 0.0610181017554806
+824 0.0438869371591075
+825 0.00859504869317741
+826 -0.00699743519150731
+827 -0.00929600314682341
+828 -0.0111911531783819
+829 -0.00823625897932562
+830 -0.0100913686286367
+831 -0.0125756643002852
+832 -0.0152602353555104
+833 -0.00953260529007071
+834 -0.0100594605441607
+835 -0.00871459443751229
+836 -0.00938155933764076
+837 -0.00918618283897082
+838 -0.00755980106901216
+839 -0.0107245855066125
+840 0.0458486876264972
+841 0.0824090055093124
+842 0.00574421553061521
+843 -0.00725667517287379
+844 -0.00867494223043522
+845 -0.00829285117321785
+846 -0.00957414187855957
+847 -0.00659032223177494
+848 -0.0106624401215929
+849 -0.0122427759092887
+850 -0.0104622099267244
+851 -0.00799623147718296
+852 -0.0104382420530796
+853 -0.0075668223790859
+854 -0.00621892353946098
+855 -0.00836920759535837
+856 -0.00630014552985234
+857 0.0113479974095218
+858 0.0628686123242055
+859 0.0463260384468626
+860 -0.00865830449867469
+861 -0.00632533057369849
+862 -0.00620405394762857
+863 -0.00876475527943431
+864 -0.00910265771371557
+865 -0.00714690863853632
+866 -0.0103958026182488
+867 -0.0121633888743942
+868 -0.00676196610841381
+869 -0.00714452896204837
+870 -0.00679873891573572
+871 -0.00845680011347619
+872 -0.00625057507944579
+873 -0.00606839813409962
+874 -0.00725859558269772
+875 0.0281965759233777
+876 0.0670260741629087
+877 0.00963490036467712
+878 -0.00456245837151462
+879 -0.00755131292428571
+880 -0.00586747799683473
+881 -0.00783299131040265
+882 -0.00744370954110726
+883 -0.00915087240687255
+884 -0.00957213417268418
+885 -0.00832361596391925
+886 -0.0050340090260566
+887 -0.00755295159414475
+888 -0.00495117481094215
+889 -0.00424086001593403
+890 -0.00515343444584415
+891 -0.00744099299381077
+892 -0.00696188041633924
+893 0.0670358828192865
+894 0.0306555670430617
+895 -0.00700188318283173
+896 -0.00439483158228684
+897 -0.00440309654475794
+898 -0.00580106920715627
+899 -0.00743386431878525
+900 -0.00615300126683845
+901 -0.00852083652339179
+902 -0.00801483743475307
+903 -0.0074130347068713
+904 -0.00363565987760851
+905 -0.007955033309064
+906 -0.00193305784421065
+907 -0.0041800577189778
+908 -0.00353565656672481
+909 -0.0058551774732522
+910 0.0302595657677451
+911 0.0314102314562899
+912 0.013212750015713
+913 -0.00316630844923298
+914 -0.00520479906156008
+915 -0.00420739410816969
+916 -0.00564901350096342
+917 -0.00531128324885506
+918 -0.00606089198821065
+919 -0.00772996050306375
+920 -0.00676594704104744
+921 -0.00533751850001158
+922 -0.0058222391965106
+923 -0.00590469211682123
+924 -0.00139624368550244
+925 -0.00225770557975624
+926 -0.00430278519099915
+927 -0.00497994091066768
+928 0.0521745063047641
+929 0.0125007611461825
+930 -0.00335983528594071
+931 -0.00200633784627574
+932 -0.00192061226814783
+933 -0.00414996522579167
+934 -0.00453925170940819
+935 -0.00441610859184833
+936 -0.00487531850001996
+937 -0.00511365916811154
+938 -0.00549890284279737
+939 -0.00379682253936933
+940 -0.00404757676266654
+941 -0.00349312951783624
+942 -0.00159942004178191
+943 -0.00176952812644145
+944 -0.00366444935410891
+945 0.0162283566898874
+946 0.0320898583297591
+947 -0.00388380045409207
+948 -0.0018243911045478
+949 -0.00115125308892718
+950 -0.00149365801922153
+951 -0.00294988667592288
+952 -0.00329687293305934
+953 -0.00371267430404071
+954 -0.00407396263409427
+955 -0.00384065535263086
+956 -0.00283959971098493
+957 -0.00342824033321658
+958 -0.00321142688896053
+959 -0.00222112060678468
+960 -0.0020328615528584
+961 -0.00145605698519582
+962 -0.00287857829852364
+963 0.0183610738417914
+964 0.0154027556420478
+965 -0.00179489314871512
+966 -0.00129790436843852
+967 -0.000853980926230406
+968 -0.000666619047494671
+969 -0.00118456473308688
+970 -0.00182173221293997
+971 -0.00223763548036304
+972 -0.00250045159359336
+973 -0.00244783545512189
+974 -0.00233355012767793
+975 -0.00148662334882801
+976 -0.00109910993153004
+977 -0.00197535475727005
+978 -0.00150005492632689
+979 -0.000669782105543667
+980 -0.00133477373003284
+981 0.0173273972011934
+982 -0.00112526521664063
+983 -0.000841739351965462
+984 0.000565203827743629
+985 -0.000459312244397425
+986 -0.000418262528083788
+987 -0.000498463341452234
+988 -0.000616296957122406
+989 -0.000679296268851578
+990 -0.00084778145306077
+991 -0.000978798423497668
+992 -0.000894990113732281
+993 -0.000701461719327138
+994 -0.000511781130867642
+995 -0.000286708792038961
+996 -0.000395118651726646
+997 -0.000921290818811666
+998 -0.000781372909192289
+999 9.80848043031114e-05
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat
new file mode 100644
index 000000000..7ed81ad3d
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.0234072208404541 0.0299999999999976 0.0299999999999976 0.0 1
+2 0.0229461193084717 0.0199999999999996 0.0199999999999996 0.0 2
+3 0.0243709087371826 0.0200000000000031 0.0200000000000031 0.0 3
+4 0.0244681835174561 0.0299999999999976 0.0299999999999976 0.0 4
+5 0.0235309600830078 0.0199999999999996 0.0199999999999996 0.0 5
+6 0.0227420330047607 0.0199999999999996 0.0199999999999996 0.0 6
+7 0.022014856338501 0.0300000000000011 0.0300000000000011 0.0 7
+8 0.0215449333190918 0.0199999999999996 0.0199999999999996 0.0 8
+9 0.0216219425201416 0.0199999999999996 0.0199999999999996 0.0 9
+10 0.0218148231506348 0.0199999999999996 0.0199999999999996 0.0 10
+11 0.0217390060424805 0.0200000000000031 0.0200000000000031 0.0 11
+12 0.0218250751495361 0.0299999999999976 0.0299999999999976 0.0 12
+13 0.0219888687133789 0.0199999999999996 0.0199999999999996 0.0 13
+14 0.021812915802002 0.0200000000000031 0.0200000000000031 0.0 14
+15 0.0244221687316895 0.0199999999999996 0.0199999999999996 0.0 15
+16 0.022874116897583 0.0299999999999976 0.0299999999999976 0.0 16
+17 0.0218498706817627 0.0199999999999996 0.0199999999999996 0.0 17
+18 0.0760290622711182 0.0700000000000003 0.0700000000000003 0.0 18
+19 0.0238790512084961 0.0300000000000011 0.0300000000000011 0.0 19
+20 0.0229480266571045 0.0199999999999996 0.0199999999999996 0.0 20
+21 0.0231330394744873 0.0199999999999996 0.0199999999999996 0.0 21
+22 0.0228769779205322 0.0300000000000011 0.0300000000000011 0.0 22
+23 0.0258219242095947 0.0199999999999996 0.0199999999999996 0.0 23
+24 0.0243449211120605 0.0300000000000011 0.0300000000000011 0.0 24
+25 0.0228381156921387 0.0199999999999996 0.0199999999999996 0.0 25
+26 0.022367000579834 0.0199999999999996 0.0199999999999996 0.0 26
+27 0.0216410160064697 0.0199999999999996 0.0199999999999996 0.0 27
+28 0.0216100215911865 0.0300000000000011 0.0300000000000011 0.0 28
+29 0.0220630168914795 0.0199999999999996 0.0199999999999996 0.0 29
+30 0.0222890377044678 0.0199999999999996 0.0199999999999996 0.0 30
+31 0.0216050148010254 0.0199999999999996 0.0199999999999996 0.0 31
+32 0.0216009616851807 0.0199999999999996 0.0199999999999996 0.0 32
+33 0.021636962890625 0.0199999999999996 0.0199999999999996 0.0 33
+34 0.0239388942718506 0.0300000000000011 0.0300000000000011 0.0 34
+35 0.021759033203125 0.0199999999999996 0.0199999999999996 0.0 35
+36 0.0811088085174561 0.0800000000000018 0.0800000000000018 0.0 36
+37 0.0229001045227051 0.0199999999999996 0.0199999999999996 0.0 37
+38 0.0228509902954102 0.0299999999999976 0.0299999999999976 0.0 38
+39 0.0228641033172607 0.0200000000000031 0.0200000000000031 0.0 39
+40 0.0229160785675049 0.0199999999999996 0.0199999999999996 0.0 40
+41 0.0227169990539551 0.0299999999999976 0.0299999999999976 0.0 41
+42 0.0228250026702881 0.0200000000000031 0.0200000000000031 0.0 42
+43 0.0261838436126709 0.0199999999999996 0.0199999999999996 0.0 43
+44 0.0234429836273193 0.0299999999999976 0.0299999999999976 0.0 44
+45 0.0215818881988525 0.0199999999999996 0.0199999999999996 0.0 45
+46 0.0215709209442139 0.0200000000000031 0.0200000000000031 0.0 46
+47 0.0215950012207031 0.0199999999999996 0.0199999999999996 0.0 47
+48 0.0215859413146973 0.0199999999999996 0.0199999999999996 0.0 48
+49 0.0217461585998535 0.0299999999999976 0.0299999999999976 0.0 49
+50 0.021589994430542 0.0200000000000031 0.0200000000000031 0.0 50
+51 0.0216829776763916 0.0199999999999996 0.0199999999999996 0.0 51
+52 0.0217359066009521 0.0199999999999996 0.0199999999999996 0.0 52
+53 0.0219109058380127 0.0199999999999996 0.0199999999999996 0.0 53
+54 0.0795738697052002 0.0799999999999983 0.0799999999999983 0.0 54
+55 0.023021936416626 0.0300000000000011 0.0300000000000011 0.0 55
+56 0.0230770111083984 0.0199999999999996 0.0199999999999996 0.0 56
+57 0.0229918956756592 0.0199999999999996 0.0199999999999996 0.0 57
+58 0.0233080387115479 0.0300000000000011 0.0300000000000011 0.0 58
+59 0.0226249694824219 0.0199999999999996 0.0199999999999996 0.0 59
+60 0.022819995880127 0.0199999999999996 0.0199999999999996 0.0 60
+61 0.0220620632171631 0.0199999999999996 0.0199999999999996 0.0 61
+62 0.0242538452148438 0.0300000000000011 0.0300000000000011 0.0 62
+63 0.0224769115447998 0.0199999999999996 0.0199999999999996 0.0 63
+64 0.0229120254516602 0.0199999999999996 0.0199999999999996 0.0 64
+65 0.0216310024261475 0.0199999999999996 0.0199999999999996 0.0 65
+66 0.0215990543365479 0.0300000000000011 0.0300000000000011 0.0 66
+67 0.0216221809387207 0.0199999999999996 0.0199999999999996 0.0 67
+68 0.0220649242401123 0.0199999999999996 0.0199999999999996 0.0 68
+69 0.0225241184234619 0.0199999999999996 0.0199999999999996 0.0 69
+70 0.0217139720916748 0.0200000000000031 0.0200000000000031 0.0 70
+71 0.0781118869781494 0.0799999999999983 0.0799999999999983 0.0 71
+72 0.0234410762786865 0.0300000000000011 0.0300000000000011 0.0 72
+73 0.0229668617248535 0.0199999999999996 0.0199999999999996 0.0 73
+74 0.0291080474853516 0.0300000000000011 0.0300000000000011 0.0 74
+75 0.0240139961242676 0.0199999999999996 0.0199999999999996 0.0 75
+76 0.0226550102233887 0.0199999999999996 0.0199999999999996 0.0 76
+77 0.0226681232452393 0.0299999999999976 0.0299999999999976 0.0 77
+78 0.0226988792419434 0.0200000000000031 0.0200000000000031 0.0 78
+79 0.0223758220672607 0.0199999999999996 0.0199999999999996 0.0 79
+80 0.0216100215911865 0.0199999999999996 0.0199999999999996 0.0 80
+81 0.0216431617736816 0.0300000000000011 0.0300000000000011 0.0 81
+82 0.0247490406036377 0.0199999999999996 0.0199999999999996 0.0 82
+83 0.023237943649292 0.0199999999999996 0.0199999999999996 0.0 83
+84 0.0217869281768799 0.0299999999999976 0.0299999999999976 0.0 84
+85 0.0216598510742188 0.0200000000000031 0.0200000000000031 0.0 85
+86 0.0217628479003906 0.0199999999999996 0.0199999999999996 0.0 86
+87 0.0218119621276855 0.0199999999999996 0.0199999999999996 0.0 87
+88 0.0217659473419189 0.0199999999999996 0.0199999999999996 0.0 88
+89 0.0768370628356934 0.0799999999999983 0.0799999999999983 0.0 89
+90 0.025317907333374 0.0200000000000031 0.0200000000000031 0.0 90
+91 0.0233399868011475 0.0299999999999976 0.0299999999999976 0.0 91
+92 0.0232961177825928 0.0199999999999996 0.0199999999999996 0.0 92
+93 0.0227580070495605 0.0199999999999996 0.0199999999999996 0.0 93
+94 0.0227789878845215 0.0300000000000011 0.0300000000000011 0.0 94
+95 0.0228569507598877 0.0199999999999996 0.0199999999999996 0.0 95
+96 0.0226337909698486 0.0199999999999996 0.0199999999999996 0.0 96
+97 0.0222299098968506 0.0300000000000011 0.0300000000000011 0.0 97
+98 0.0214722156524658 0.0199999999999996 0.0199999999999996 0.0 98
+99 0.0216591358184814 0.0199999999999996 0.0199999999999996 0.0 99
+100 0.0215888023376465 0.0199999999999996 0.0199999999999996 0.0 100
+101 0.0234711170196533 0.0200000000000031 0.0200000000000031 0.0 101
+102 0.0229098796844482 0.0299999999999976 0.0299999999999976 0.0 102
+103 0.0220291614532471 0.0199999999999996 0.0199999999999996 0.0 103
+104 0.0216660499572754 0.0199999999999996 0.0199999999999996 0.0 104
+105 0.0216059684753418 0.0200000000000031 0.0200000000000031 0.0 105
+106 0.0761630535125732 0.0799999999999983 0.0799999999999983 0.0 106
+107 0.0231220722198486 0.0199999999999996 0.0199999999999996 0.0 107
+108 0.0229330062866211 0.0199999999999996 0.0199999999999996 0.0 108
+109 0.0230400562286377 0.0300000000000011 0.0300000000000011 0.0 109
+110 0.0250980854034424 0.0199999999999996 0.0199999999999996 0.0 110
+111 0.0231518745422363 0.0300000000000011 0.0300000000000011 0.0 111
+112 0.0227048397064209 0.0199999999999996 0.0199999999999996 0.0 112
+113 0.0284969806671143 0.0300000000000011 0.0300000000000011 0.0 113
+114 0.0239260196685791 0.0199999999999996 0.0199999999999996 0.0 114
+115 0.0219199657440186 0.0199999999999996 0.0199999999999996 0.0 115
+116 0.0215260982513428 0.0199999999999996 0.0199999999999996 0.0 116
+117 0.0215198993682861 0.0300000000000011 0.0300000000000011 0.0 117
+118 0.0216398239135742 0.0199999999999996 0.0199999999999996 0.0 118
+119 0.0215740203857422 0.0199999999999996 0.0199999999999996 0.0 119
+120 0.0216050148010254 0.0199999999999996 0.0199999999999996 0.0 120
+121 0.0247631072998047 0.0300000000000011 0.0300000000000011 0.0 121
+122 0.0225539207458496 0.0199999999999996 0.0199999999999996 0.0 122
+123 0.0218660831451416 0.0199999999999996 0.0199999999999996 0.0 123
+124 0.0765988826751709 0.0799999999999983 0.0799999999999983 0.0 124
+125 0.0230319499969482 0.0199999999999996 0.0199999999999996 0.0 125
+126 0.0229179859161377 0.0200000000000031 0.0200000000000031 0.0 126
+127 0.0229899883270264 0.0299999999999976 0.0299999999999976 0.0 127
+128 0.0230929851531982 0.0199999999999996 0.0199999999999996 0.0 128
+129 0.024507999420166 0.0200000000000031 0.0200000000000031 0.0 129
+130 0.0237898826599121 0.0299999999999976 0.0299999999999976 0.0 130
+131 0.0237009525299072 0.0199999999999996 0.0199999999999996 0.0 131
+132 0.0220949649810791 0.0199999999999996 0.0199999999999996 0.0 132
+133 0.0216069221496582 0.0300000000000011 0.0300000000000011 0.0 133
+134 0.0217080116271973 0.0199999999999996 0.0199999999999996 0.0 134
+135 0.0218410491943359 0.0199999999999996 0.0199999999999996 0.0 135
+136 0.0222909450531006 0.0199999999999996 0.0199999999999996 0.0 136
+137 0.0216519832611084 0.0200000000000031 0.0200000000000031 0.0 137
+138 0.0217440128326416 0.0299999999999976 0.0299999999999976 0.0 138
+139 0.0217659473419189 0.0199999999999996 0.0199999999999996 0.0 139
+140 0.0218610763549805 0.0200000000000031 0.0200000000000031 0.0 140
+141 0.0243120193481445 0.0199999999999996 0.0199999999999996 0.0 141
+142 0.0773770809173584 0.0799999999999983 0.0799999999999983 0.0 142
+143 0.0230779647827148 0.0199999999999996 0.0199999999999996 0.0 143
+144 0.022913932800293 0.0300000000000011 0.0300000000000011 0.0 144
+145 0.0239241123199463 0.0199999999999996 0.0199999999999996 0.0 145
+146 0.0227971076965332 0.0199999999999996 0.0199999999999996 0.0 146
+147 0.0230598449707031 0.0300000000000011 0.0300000000000011 0.0 147
+148 0.0227980613708496 0.0200000000000031 0.0199999999999996 0.0 148
+149 0.0250101089477539 0.019999999999996 0.0199999999999996 0.0 149
+150 0.0231060981750488 0.0300000000000011 0.0300000000000011 0.0 150
+151 0.021589994430542 0.0200000000000031 0.0199999999999996 0.0 151
+152 0.0279331207275391 0.029999999999994 0.0299999999999976 0.0 152
+153 0.0230989456176758 0.0200000000000031 0.0200000000000031 0.0 153
+154 0.0220518112182617 0.019999999999996 0.019999999999996 0.0 154
+155 0.02158522605896 0.0200000000000031 0.0200000000000031 0.0 155
+156 0.0215890407562256 0.0300000000000011 0.0300000000000011 0.0 156
+157 0.021787166595459 0.019999999999996 0.019999999999996 0.0 157
+158 0.0218689441680908 0.0200000000000031 0.0200000000000031 0.0 158
+159 0.0797779560089111 0.0799999999999983 0.0799999999999983 0.0 159
+160 0.0232160091400146 0.0200000000000031 0.0200000000000031 0.0 160
+161 0.0228378772735596 0.019999999999996 0.019999999999996 0.0 161
+162 0.02286696434021 0.0300000000000011 0.0300000000000011 0.0 162
+163 0.0227479934692383 0.0200000000000031 0.0200000000000031 0.0 163
+164 0.0228869915008545 0.019999999999996 0.019999999999996 0.0 164
+165 0.0226659774780273 0.0300000000000011 0.0300000000000011 0.0 165
+166 0.022770881652832 0.0200000000000031 0.0200000000000031 0.0 166
+167 0.0226860046386719 0.019999999999996 0.019999999999996 0.0 167
+168 0.0242869853973389 0.0300000000000011 0.0300000000000011 0.0 168
+169 0.0219647884368896 0.0200000000000031 0.0200000000000031 0.0 169
+170 0.0227658748626709 0.019999999999996 0.019999999999996 0.0 170
+171 0.0217809677124023 0.0200000000000031 0.0200000000000031 0.0 171
+172 0.0216867923736572 0.019999999999996 0.019999999999996 0.0 172
+173 0.0220091342926025 0.0300000000000011 0.0300000000000011 0.0 173
+174 0.0218439102172852 0.0200000000000031 0.0200000000000031 0.0 174
+175 0.0223178863525391 0.019999999999996 0.019999999999996 0.0 175
+176 0.0216579437255859 0.0200000000000031 0.0200000000000031 0.0 176
+177 0.0791630744934082 0.0799999999999983 0.0799999999999983 0.0 177
+178 0.0234289169311523 0.0300000000000011 0.0300000000000011 0.0 178
+179 0.0239951610565186 0.019999999999996 0.019999999999996 0.0 179
+180 0.0231759548187256 0.0200000000000031 0.0200000000000031 0.0 180
+181 0.0228521823883057 0.0300000000000011 0.0300000000000011 0.0 181
+182 0.0234448909759521 0.019999999999996 0.019999999999996 0.0 182
+183 0.0231420993804932 0.0200000000000031 0.0200000000000031 0.0 183
+184 0.0229649543762207 0.0300000000000011 0.0300000000000011 0.0 184
+185 0.0216999053955078 0.019999999999996 0.019999999999996 0.0 185
+186 0.0214908123016357 0.0200000000000031 0.0200000000000031 0.0 186
+187 0.0216050148010254 0.019999999999996 0.019999999999996 0.0 187
+188 0.0253100395202637 0.0200000000000031 0.0200000000000031 0.0 188
+189 0.0231828689575195 0.0300000000000011 0.0300000000000011 0.0 189
+190 0.021651029586792 0.019999999999996 0.019999999999996 0.0 190
+191 0.0281798839569092 0.0300000000000011 0.0300000000000011 0.0 191
+192 0.0221288204193115 0.0200000000000031 0.0200000000000031 0.0 192
+193 0.0217571258544922 0.019999999999996 0.019999999999996 0.0 193
+194 0.0757858753204346 0.0800000000000054 0.0800000000000054 0.0 194
+195 0.0231471061706543 0.019999999999996 0.019999999999996 0.0 195
+196 0.0251290798187256 0.0300000000000011 0.0300000000000011 0.0 196
+197 0.0239238739013672 0.0200000000000031 0.0200000000000031 0.0 197
+198 0.0237748622894287 0.019999999999996 0.019999999999996 0.0 198
+199 0.0228419303894043 0.0300000000000011 0.0300000000000011 0.0 199
+200 0.0227909088134766 0.0200000000000031 0.0200000000000031 0.0 200
+201 0.0227510929107666 0.019999999999996 0.019999999999996 0.0 201
+202 0.0226459503173828 0.0200000000000031 0.0200000000000031 0.0 202
+203 0.0219879150390625 0.0300000000000011 0.0300000000000011 0.0 203
+204 0.0215039253234863 0.019999999999996 0.019999999999996 0.0 204
+205 0.021712064743042 0.0200000000000031 0.0200000000000031 0.0 205
+206 0.0217649936676025 0.019999999999996 0.019999999999996 0.0 206
+207 0.0244510173797607 0.0300000000000011 0.0300000000000011 0.0 207
+208 0.0221529006958008 0.0200000000000031 0.0200000000000031 0.0 208
+209 0.0231170654296875 0.019999999999996 0.019999999999996 0.0 209
+210 0.0216870307922363 0.0200000000000031 0.0200000000000031 0.0 210
+211 0.0216608047485352 0.019999999999996 0.019999999999996 0.0 211
+212 0.0771470069885254 0.0800000000000054 0.0800000000000054 0.0 212
+213 0.0229711532592773 0.019999999999996 0.019999999999996 0.0 213
+214 0.0230278968811035 0.0300000000000011 0.0300000000000011 0.0 214
+215 0.0230338573455811 0.019999999999996 0.019999999999996 0.0 215
+216 0.0260100364685059 0.0300000000000011 0.0300000000000011 0.0 216
+217 0.0238170623779297 0.0200000000000031 0.0200000000000031 0.0 217
+218 0.0228071212768555 0.019999999999996 0.019999999999996 0.0 218
+219 0.0227000713348389 0.0300000000000011 0.0300000000000011 0.0 219
+220 0.0220599174499512 0.0200000000000031 0.0200000000000031 0.0 220
+221 0.0216770172119141 0.019999999999996 0.019999999999996 0.0 221
+222 0.0224151611328125 0.0200000000000031 0.0200000000000031 0.0 222
+223 0.0217008590698242 0.0200000000000031 0.0200000000000031 0.0 223
+224 0.0216941833496094 0.029999999999994 0.029999999999994 0.0 224
+225 0.0216820240020752 0.0200000000000031 0.0200000000000031 0.0 225
+226 0.0217270851135254 0.019999999999996 0.019999999999996 0.0 226
+227 0.0246779918670654 0.0200000000000031 0.0200000000000031 0.0 227
+228 0.0233469009399414 0.0300000000000011 0.0300000000000011 0.0 228
+229 0.0217921733856201 0.019999999999996 0.019999999999996 0.0 229
+230 0.0832829475402832 0.0800000000000054 0.0800000000000054 0.0 230
+231 0.02298903465271 0.019999999999996 0.019999999999996 0.0 231
+232 0.0229618549346924 0.0300000000000011 0.0300000000000011 0.0 232
+233 0.0230050086975098 0.0200000000000031 0.0200000000000031 0.0 233
+234 0.022770881652832 0.019999999999996 0.019999999999996 0.0 234
+235 0.0257570743560791 0.0300000000000011 0.0300000000000011 0.0 235
+236 0.0234668254852295 0.0200000000000031 0.0200000000000031 0.0 236
+237 0.0224740505218506 0.029999999999994 0.029999999999994 0.0 237
+238 0.0215451717376709 0.0200000000000031 0.0200000000000031 0.0 238
+239 0.0215630531311035 0.0200000000000031 0.0200000000000031 0.0 239
+240 0.0216259956359863 0.019999999999996 0.019999999999996 0.0 240
+241 0.0215809345245361 0.0200000000000031 0.0200000000000031 0.0 241
+242 0.0216450691223145 0.019999999999996 0.019999999999996 0.0 242
+243 0.0215449333190918 0.0300000000000011 0.0300000000000011 0.0 243
+244 0.0216479301452637 0.0200000000000031 0.0200000000000031 0.0 244
+245 0.0218291282653809 0.019999999999996 0.019999999999996 0.0 245
+246 0.0227890014648438 0.0200000000000031 0.0200000000000031 0.0 246
+247 0.0793211460113525 0.0799999999999983 0.0799999999999983 0.0 247
+248 0.0230979919433594 0.0200000000000031 0.0200000000000031 0.0 248
+249 0.0230920314788818 0.029999999999994 0.029999999999994 0.0 249
+250 0.0235588550567627 0.0200000000000031 0.0200000000000031 0.0 250
+251 0.0228121280670166 0.0200000000000031 0.0200000000000031 0.0 251
+252 0.0227479934692383 0.029999999999994 0.029999999999994 0.0 252
+253 0.0227429866790771 0.0200000000000031 0.0200000000000031 0.0 253
+254 0.0227539539337158 0.019999999999996 0.019999999999996 0.0 254
+255 0.0255939960479736 0.0300000000000011 0.0300000000000011 0.0 255
+256 0.0225818157196045 0.0200000000000031 0.0200000000000031 0.0 256
+257 0.0216748714447021 0.019999999999996 0.019999999999996 0.0 257
+258 0.0216860771179199 0.0200000000000031 0.0200000000000031 0.0 258
+259 0.0217640399932861 0.0300000000000011 0.0300000000000011 0.0 259
+260 0.0218229293823242 0.019999999999996 0.019999999999996 0.0 260
+261 0.0217108726501465 0.0200000000000031 0.0200000000000031 0.0 261
+262 0.0230560302734375 0.0200000000000031 0.0200000000000031 0.0 262
+263 0.0218439102172852 0.019999999999996 0.019999999999996 0.0 263
+264 0.0216600894927979 0.0200000000000031 0.0200000000000031 0.0 264
+265 0.0821051597595215 0.0899999999999963 0.0899999999999963 0.0 265
+266 0.0255589485168457 0.0200000000000031 0.0200000000000031 0.0 266
+267 0.0274901390075684 0.0300000000000011 0.0300000000000011 0.0 267
+268 0.0230200290679932 0.019999999999996 0.019999999999996 0.0 268
+269 0.0227861404418945 0.0200000000000031 0.0200000000000031 0.0 269
+270 0.0227971076965332 0.0300000000000011 0.0300000000000011 0.0 270
+271 0.0227358341217041 0.019999999999996 0.019999999999996 0.0 271
+272 0.0242559909820557 0.0200000000000031 0.0200000000000031 0.0 272
+273 0.0217318534851074 0.029999999999994 0.029999999999994 0.0 273
+274 0.0250978469848633 0.0200000000000031 0.0200000000000031 0.0 274
+275 0.0236959457397461 0.0200000000000031 0.0200000000000031 0.0 275
+276 0.0217390060424805 0.029999999999994 0.029999999999994 0.0 276
+277 0.0216028690338135 0.0200000000000031 0.0200000000000031 0.0 277
+278 0.0216250419616699 0.0200000000000031 0.0200000000000031 0.0 278
+279 0.0216012001037598 0.019999999999996 0.019999999999996 0.0 279
+280 0.0216450691223145 0.0200000000000031 0.0200000000000031 0.0 280
+281 0.0217640399932861 0.019999999999996 0.019999999999996 0.0 281
+282 0.076016902923584 0.0799999999999983 0.0799999999999983 0.0 282
+283 0.0259561538696289 0.0300000000000011 0.0300000000000011 0.0 283
+284 0.024043083190918 0.0200000000000031 0.0200000000000031 0.0 284
+285 0.0230240821838379 0.019999999999996 0.019999999999996 0.0 285
+286 0.0229220390319824 0.0300000000000011 0.0300000000000011 0.0 286
+287 0.0229079723358154 0.0200000000000031 0.0200000000000031 0.0 287
+288 0.0228331089019775 0.019999999999996 0.019999999999996 0.0 288
+289 0.0232009887695312 0.0300000000000011 0.0300000000000011 0.0 289
+290 0.0225679874420166 0.0200000000000031 0.0200000000000031 0.0 290
+291 0.021859884262085 0.019999999999996 0.019999999999996 0.0 291
+292 0.0215480327606201 0.0200000000000031 0.0200000000000031 0.0 292
+293 0.0216219425201416 0.019999999999996 0.019999999999996 0.0 293
+294 0.0247988700866699 0.0300000000000011 0.0300000000000011 0.0 294
+295 0.0220661163330078 0.0200000000000031 0.0200000000000031 0.0 295
+296 0.0218551158905029 0.019999999999996 0.019999999999996 0.0 296
+297 0.0216910839080811 0.0200000000000031 0.0200000000000031 0.0 297
+298 0.0218009948730469 0.0300000000000011 0.0300000000000011 0.0 298
+299 0.0217809677124023 0.019999999999996 0.019999999999996 0.0 299
+300 0.0773510932922363 0.0800000000000054 0.0800000000000054 0.0 300
+301 0.0230739116668701 0.019999999999996 0.019999999999996 0.0 301
+302 0.0251951217651367 0.0200000000000031 0.0200000000000031 0.0 302
+303 0.0236630439758301 0.0300000000000011 0.0300000000000011 0.0 303
+304 0.0231490135192871 0.019999999999996 0.019999999999996 0.0 304
+305 0.029649019241333 0.0300000000000011 0.0300000000000011 0.0 305
+306 0.0232720375061035 0.0200000000000031 0.0200000000000031 0.0 306
+307 0.0227010250091553 0.029999999999994 0.029999999999994 0.0 307
+308 0.0219080448150635 0.0200000000000031 0.0200000000000031 0.0 308
+309 0.0215001106262207 0.0200000000000031 0.0200000000000031 0.0 309
+310 0.0215349197387695 0.019999999999996 0.019999999999996 0.0 310
+311 0.0216870307922363 0.0200000000000031 0.0200000000000031 0.0 311
+312 0.0215351581573486 0.019999999999996 0.019999999999996 0.0 312
+313 0.0247399806976318 0.0300000000000011 0.0300000000000011 0.0 313
+314 0.0232751369476318 0.0200000000000031 0.0200000000000031 0.0 314
+315 0.0219449996948242 0.019999999999996 0.019999999999996 0.0 315
+316 0.0216867923736572 0.0300000000000011 0.0300000000000011 0.0 316
+317 0.0756809711456299 0.0700000000000003 0.0700000000000003 0.0 317
+318 0.0230629444122314 0.0300000000000011 0.0300000000000011 0.0 318
+319 0.0229449272155762 0.019999999999996 0.019999999999996 0.0 319
+320 0.0231809616088867 0.0200000000000031 0.0200000000000031 0.0 320
+321 0.0229148864746094 0.019999999999996 0.019999999999996 0.0 321
+322 0.0256710052490234 0.0300000000000011 0.0300000000000011 0.0 322
+323 0.0237009525299072 0.0200000000000031 0.0200000000000031 0.0 323
+324 0.0227048397064209 0.0300000000000011 0.0300000000000011 0.0 324
+325 0.0226731300354004 0.019999999999996 0.019999999999996 0.0 325
+326 0.0221679210662842 0.0200000000000031 0.0200000000000031 0.0 326
+327 0.0216591358184814 0.019999999999996 0.019999999999996 0.0 327
+328 0.0220868587493896 0.0300000000000011 0.0300000000000011 0.0 328
+329 0.0215578079223633 0.0200000000000031 0.0200000000000031 0.0 329
+330 0.0216000080108643 0.019999999999996 0.019999999999996 0.0 330
+331 0.0216810703277588 0.0200000000000031 0.0200000000000031 0.0 331
+332 0.0217440128326416 0.019999999999996 0.019999999999996 0.0 332
+333 0.024817943572998 0.0300000000000011 0.0300000000000011 0.0 333
+334 0.0228419303894043 0.0200000000000031 0.0200000000000031 0.0 334
+335 0.0767669677734375 0.0799999999999983 0.0799999999999983 0.0 335
+336 0.0229949951171875 0.0200000000000031 0.0200000000000031 0.0 336
+337 0.0237720012664795 0.019999999999996 0.019999999999996 0.0 337
+338 0.0229918956756592 0.0300000000000011 0.0300000000000011 0.0 338
+339 0.0228021144866943 0.0200000000000031 0.0200000000000031 0.0 339
+340 0.0227911472320557 0.019999999999996 0.019999999999996 0.0 340
+341 0.0249691009521484 0.0300000000000011 0.0300000000000011 0.0 341
+342 0.0228381156921387 0.0200000000000031 0.0200000000000031 0.0 342
+343 0.0229289531707764 0.019999999999996 0.019999999999996 0.0 343
+344 0.028364896774292 0.0300000000000011 0.0300000000000011 0.0 344
+345 0.0216519832611084 0.0200000000000031 0.0200000000000031 0.0 345
+346 0.0216679573059082 0.029999999999994 0.029999999999994 0.0 346
+347 0.0215489864349365 0.0200000000000031 0.0200000000000031 0.0 347
+348 0.0216460227966309 0.0200000000000031 0.0200000000000031 0.0 348
+349 0.0217490196228027 0.019999999999996 0.019999999999996 0.0 349
+350 0.0217440128326416 0.0200000000000031 0.0200000000000031 0.0 350
+351 0.0216310024261475 0.019999999999996 0.019999999999996 0.0 351
+352 0.0248680114746094 0.0300000000000011 0.0300000000000011 0.0 352
+353 0.0779280662536621 0.0799999999999983 0.0799999999999983 0.0 353
+354 0.0229990482330322 0.0200000000000031 0.0200000000000031 0.0 354
+355 0.02298903465271 0.019999999999996 0.019999999999996 0.0 355
+356 0.0229768753051758 0.0300000000000011 0.0300000000000011 0.0 356
+357 0.0228021144866943 0.0200000000000031 0.0200000000000031 0.0 357
+358 0.0227739810943604 0.019999999999996 0.019999999999996 0.0 358
+359 0.0229020118713379 0.0200000000000031 0.0200000000000031 0.0 359
+360 0.0220818519592285 0.0300000000000011 0.0300000000000011 0.0 360
+361 0.024421215057373 0.019999999999996 0.019999999999996 0.0 361
+362 0.0219769477844238 0.0200000000000031 0.0200000000000031 0.0 362
+363 0.0216801166534424 0.0300000000000011 0.0300000000000011 0.0 363
+364 0.0218110084533691 0.019999999999996 0.019999999999996 0.0 364
+365 0.0219409465789795 0.0200000000000031 0.0200000000000031 0.0 365
+366 0.0218820571899414 0.019999999999996 0.019999999999996 0.0 366
+367 0.0223009586334229 0.0200000000000031 0.0200000000000031 0.0 367
+368 0.0218269824981689 0.0300000000000011 0.0300000000000011 0.0 368
+369 0.0217530727386475 0.019999999999996 0.019999999999996 0.0 369
+370 0.0778021812438965 0.0700000000000003 0.0700000000000003 0.0 370
+371 0.0233700275421143 0.0300000000000011 0.0300000000000011 0.0 371
+372 0.0233359336853027 0.0200000000000031 0.0200000000000031 0.0 372
+373 0.0229201316833496 0.019999999999996 0.019999999999996 0.0 373
+374 0.0229110717773438 0.0300000000000011 0.0300000000000011 0.0 374
+375 0.0227591991424561 0.0200000000000031 0.0200000000000031 0.0 375
+376 0.023568868637085 0.019999999999996 0.019999999999996 0.0 376
+377 0.022733211517334 0.0300000000000011 0.0300000000000011 0.0 377
+378 0.0221920013427734 0.0200000000000031 0.0200000000000031 0.0 378
+379 0.0215809345245361 0.019999999999996 0.019999999999996 0.0 379
+380 0.0231049060821533 0.0200000000000031 0.0200000000000031 0.0 380
+381 0.0227119922637939 0.0300000000000011 0.0300000000000011 0.0 381
+382 0.0230410099029541 0.019999999999996 0.019999999999996 0.0 382
+383 0.0276191234588623 0.0300000000000011 0.0300000000000011 0.0 383
+384 0.0234389305114746 0.0200000000000031 0.0200000000000031 0.0 384
+385 0.0217380523681641 0.019999999999996 0.019999999999996 0.0 385
+386 0.0216379165649414 0.0200000000000031 0.0200000000000031 0.0 386
+387 0.0217010974884033 0.0300000000000011 0.0300000000000011 0.0 387
+388 0.0771059989929199 0.0699999999999932 0.0699999999999932 0.0 388
+389 0.0259981155395508 0.0300000000000011 0.0300000000000011 0.0 389
+390 0.0245940685272217 0.0200000000000031 0.0200000000000031 0.0 390
+391 0.0229830741882324 0.0300000000000011 0.0300000000000011 0.0 391
+392 0.0227859020233154 0.019999999999996 0.019999999999996 0.0 392
+393 0.0226709842681885 0.0200000000000031 0.0200000000000031 0.0 393
+394 0.0227479934692383 0.0300000000000011 0.0300000000000011 0.0 394
+395 0.0223689079284668 0.019999999999996 0.019999999999996 0.0 395
+396 0.0215182304382324 0.0200000000000031 0.0200000000000031 0.0 396
+397 0.0214920043945312 0.019999999999996 0.019999999999996 0.0 397
+398 0.0217499732971191 0.0200000000000031 0.0200000000000031 0.0 398
+399 0.021583080291748 0.019999999999996 0.019999999999996 0.0 399
+400 0.0245871543884277 0.0300000000000011 0.0300000000000011 0.0 400
+401 0.0234861373901367 0.0200000000000031 0.0200000000000031 0.0 401
+402 0.0216600894927979 0.019999999999996 0.019999999999996 0.0 402
+403 0.0216600894927979 0.0300000000000011 0.0300000000000011 0.0 403
+404 0.021885871887207 0.0200000000000031 0.0200000000000031 0.0 404
+405 0.0772140026092529 0.0799999999999983 0.0799999999999983 0.0 405
+406 0.0230650901794434 0.0200000000000031 0.0200000000000031 0.0 406
+407 0.0229761600494385 0.019999999999996 0.019999999999996 0.0 407
+408 0.0251660346984863 0.0300000000000011 0.0300000000000011 0.0 408
+409 0.0232548713684082 0.0200000000000031 0.0200000000000031 0.0 409
+410 0.0238220691680908 0.019999999999996 0.019999999999996 0.0 410
+411 0.0227861404418945 0.0300000000000011 0.0300000000000011 0.0 411
+412 0.0226359367370605 0.0200000000000031 0.0200000000000031 0.0 412
+413 0.0224370956420898 0.019999999999996 0.019999999999996 0.0 413
+414 0.0216140747070312 0.0200000000000031 0.0200000000000031 0.0 414
+415 0.0223848819732666 0.0300000000000011 0.0300000000000011 0.0 415
+416 0.0215442180633545 0.019999999999996 0.019999999999996 0.0 416
+417 0.0215690135955811 0.0200000000000031 0.0200000000000031 0.0 417
+418 0.0216190814971924 0.019999999999996 0.019999999999996 0.0 418
+419 0.0228719711303711 0.0200000000000031 0.0200000000000031 0.0 419
+420 0.0226399898529053 0.0300000000000011 0.0300000000000011 0.0 420
+421 0.0236082077026367 0.019999999999996 0.019999999999996 0.0 421
+422 0.0264570713043213 0.0300000000000011 0.0300000000000011 0.0 422
+423 0.0789790153503418 0.0799999999999983 0.0799999999999983 0.0 423
+424 0.0229339599609375 0.0200000000000031 0.0200000000000031 0.0 424
+425 0.0229668617248535 0.019999999999996 0.019999999999996 0.0 425
+426 0.02298903465271 0.0200000000000031 0.0200000000000031 0.0 426
+427 0.0229198932647705 0.0300000000000011 0.0300000000000011 0.0 427
+428 0.0257198810577393 0.019999999999996 0.019999999999996 0.0 428
+429 0.0243279933929443 0.0300000000000011 0.0300000000000011 0.0 429
+430 0.022507905960083 0.0200000000000031 0.0200000000000031 0.0 430
+431 0.0216341018676758 0.019999999999996 0.019999999999996 0.0 431
+432 0.0214908123016357 0.0200000000000031 0.0200000000000031 0.0 432
+433 0.0215690135955811 0.0300000000000011 0.0300000000000011 0.0 433
+434 0.0216338634490967 0.019999999999996 0.019999999999996 0.0 434
+435 0.0216329097747803 0.0200000000000031 0.0200000000000031 0.0 435
+436 0.0217580795288086 0.019999999999996 0.019999999999996 0.0 436
+437 0.0218169689178467 0.0200000000000031 0.0200000000000031 0.0 437
+438 0.0216329097747803 0.019999999999996 0.019999999999996 0.0 438
+439 0.0245261192321777 0.0300000000000011 0.0300000000000011 0.0 439
+440 0.0769329071044922 0.0700000000000003 0.0700000000000003 0.0 440
+441 0.0231759548187256 0.0300000000000011 0.0300000000000011 0.0 441
+442 0.0230391025543213 0.0200000000000031 0.0200000000000031 0.0 442
+443 0.0233399868011475 0.019999999999996 0.019999999999996 0.0 443
+444 0.0227611064910889 0.0300000000000011 0.0300000000000011 0.0 444
+445 0.0228729248046875 0.0200000000000031 0.0200000000000031 0.0 445
+446 0.0227501392364502 0.019999999999996 0.019999999999996 0.0 446
+447 0.0253760814666748 0.0300000000000011 0.0300000000000011 0.0 447
+448 0.0228900909423828 0.0200000000000031 0.0200000000000031 0.0 448
+449 0.0227060317993164 0.019999999999996 0.019999999999996 0.0 449
+450 0.0215671062469482 0.0300000000000011 0.0300000000000011 0.0 450
+451 0.0215458869934082 0.0200000000000031 0.0200000000000031 0.0 451
+452 0.0216641426086426 0.019999999999996 0.019999999999996 0.0 452
+453 0.0215919017791748 0.0200000000000031 0.0200000000000031 0.0 453
+454 0.022503137588501 0.019999999999996 0.019999999999996 0.0 454
+455 0.0216779708862305 0.0300000000000011 0.0300000000000011 0.0 455
+456 0.0216538906097412 0.0200000000000031 0.0200000000000031 0.0 456
+457 0.0217761993408203 0.019999999999996 0.019999999999996 0.0 457
+458 0.0798358917236328 0.0799999999999983 0.0799999999999983 0.0 458
+459 0.0303719043731689 0.0300000000000011 0.0300000000000011 0.0 459
+460 0.0229458808898926 0.0200000000000031 0.0200000000000031 0.0 460
+461 0.0229299068450928 0.019999999999996 0.019999999999996 0.0 461
+462 0.0227961540222168 0.019999999999996 0.019999999999996 0.0 462
+463 0.0226409435272217 0.0200000000000031 0.0200000000000031 0.0 463
+464 0.0226771831512451 0.019999999999996 0.019999999999996 0.0 464
+465 0.0224730968475342 0.0300000000000011 0.0300000000000011 0.0 465
+466 0.0218050479888916 0.0200000000000031 0.0200000000000031 0.0 466
+467 0.025601863861084 0.019999999999996 0.019999999999996 0.0 467
+468 0.0238199234008789 0.0300000000000011 0.0300000000000011 0.0 468
+469 0.0232160091400146 0.0200000000000031 0.0200000000000031 0.0 469
+470 0.0216109752655029 0.019999999999996 0.019999999999996 0.0 470
+471 0.0216319561004639 0.0200000000000031 0.0200000000000031 0.0 471
+472 0.0216560363769531 0.019999999999996 0.019999999999996 0.0 472
+473 0.021658182144165 0.0300000000000011 0.0300000000000011 0.0 473
+474 0.0217010974884033 0.0200000000000031 0.0200000000000031 0.0 474
+475 0.0779910087585449 0.0799999999999983 0.0799999999999983 0.0 475
+476 0.0244100093841553 0.0200000000000031 0.0200000000000031 0.0 476
+477 0.026054859161377 0.029999999999994 0.029999999999994 0.0 477
+478 0.022968053817749 0.0200000000000031 0.0200000000000031 0.0 478
+479 0.0229709148406982 0.0200000000000031 0.0200000000000031 0.0 479
+480 0.0229671001434326 0.019999999999996 0.019999999999996 0.0 480
+481 0.0232329368591309 0.0300000000000011 0.0300000000000011 0.0 481
+482 0.0227680206298828 0.0200000000000031 0.0200000000000031 0.0 482
+483 0.0224251747131348 0.019999999999996 0.019999999999996 0.0 483
+484 0.021751880645752 0.0300000000000011 0.0300000000000011 0.0 484
+485 0.0215151309967041 0.019999999999996 0.019999999999996 0.0 485
+486 0.0246729850769043 0.0200000000000031 0.0200000000000031 0.0 486
+487 0.0227639675140381 0.0200000000000031 0.0200000000000031 0.0 487
+488 0.0219759941101074 0.029999999999994 0.029999999999994 0.0 488
+489 0.0217058658599854 0.0200000000000031 0.0200000000000031 0.0 489
+490 0.0216960906982422 0.0200000000000031 0.0200000000000031 0.0 490
+491 0.0218369960784912 0.019999999999996 0.019999999999996 0.0 491
+492 0.0217111110687256 0.0200000000000031 0.0200000000000031 0.0 492
+493 0.078171968460083 0.0799999999999983 0.0799999999999983 0.0 493
+494 0.0229799747467041 0.019999999999996 0.019999999999996 0.0 494
+495 0.0272798538208008 0.0300000000000011 0.0300000000000011 0.0 495
+496 0.0244588851928711 0.0200000000000031 0.0200000000000031 0.0 496
+497 0.028217077255249 0.0300000000000011 0.0300000000000011 0.0 497
+498 0.0241749286651611 0.0300000000000011 0.0300000000000011 0.0 498
+499 0.0227570533752441 0.019999999999996 0.019999999999996 0.0 499
+500 0.022475004196167 0.0200000000000031 0.0200000000000031 0.0 500
+501 0.021665096282959 0.019999999999996 0.019999999999996 0.0 501
+502 0.021481990814209 0.0300000000000011 0.0300000000000011 0.0 502
+503 0.0216250419616699 0.0200000000000031 0.0200000000000031 0.0 503
+504 0.0215671062469482 0.019999999999996 0.019999999999996 0.0 504
+505 0.0225341320037842 0.0200000000000031 0.0200000000000031 0.0 505
+506 0.0243070125579834 0.0300000000000011 0.0300000000000011 0.0 506
+507 0.0236639976501465 0.019999999999996 0.019999999999996 0.0 507
+508 0.021744966506958 0.0200000000000031 0.0200000000000031 0.0 508
+509 0.0216488838195801 0.019999999999996 0.019999999999996 0.0 509
+510 0.0759198665618896 0.0800000000000054 0.0800000000000054 0.0 510
+511 0.0230319499969482 0.019999999999996 0.019999999999996 0.0 511
+512 0.0232639312744141 0.0300000000000011 0.0300000000000011 0.0 512
+513 0.022974967956543 0.019999999999996 0.019999999999996 0.0 513
+514 0.0257279872894287 0.0200000000000031 0.0200000000000031 0.0 514
+515 0.0243010520935059 0.0300000000000011 0.0300000000000011 0.0 515
+516 0.0226881504058838 0.019999999999996 0.019999999999996 0.0 516
+517 0.0226349830627441 0.0200000000000031 0.0200000000000031 0.0 517
+518 0.0224928855895996 0.0300000000000011 0.0300000000000011 0.0 518
+519 0.0218918323516846 0.019999999999996 0.019999999999996 0.0 519
+520 0.0220029354095459 0.0200000000000031 0.0200000000000031 0.0 520
+521 0.0215179920196533 0.0200000000000031 0.0200000000000031 0.0 521
+522 0.0215981006622314 0.019999999999996 0.019999999999996 0.0 522
+523 0.0216679573059082 0.0300000000000011 0.0300000000000011 0.0 523
+524 0.0216460227966309 0.019999999999996 0.019999999999996 0.0 524
+525 0.0247371196746826 0.0200000000000031 0.0200000000000031 0.0 525
+526 0.0231599807739258 0.0300000000000011 0.0300000000000011 0.0 526
+527 0.021859884262085 0.019999999999996 0.019999999999996 0.0 527
+528 0.0768899917602539 0.0700000000000003 0.0700000000000003 0.0 528
+529 0.0238020420074463 0.0300000000000011 0.0300000000000011 0.0 529
+530 0.0229949951171875 0.0200000000000031 0.0200000000000031 0.0 530
+531 0.0229158401489258 0.019999999999996 0.019999999999996 0.0 531
+532 0.0228259563446045 0.0300000000000011 0.0300000000000011 0.0 532
+533 0.0230560302734375 0.0200000000000031 0.0200000000000031 0.0 533
+534 0.0252690315246582 0.0300000000000011 0.0300000000000011 0.0 534
+535 0.0236430168151855 0.019999999999996 0.019999999999996 0.0 535
+536 0.029339075088501 0.0300000000000011 0.0300000000000011 0.0 536
+537 0.0215559005737305 0.0200000000000031 0.0200000000000031 0.0 537
+538 0.0222070217132568 0.019999999999996 0.019999999999996 0.0 538
+539 0.0215811729431152 0.0200000000000031 0.0200000000000031 0.0 539
+540 0.0215599536895752 0.0300000000000011 0.0300000000000011 0.0 540
+541 0.0217399597167969 0.019999999999996 0.019999999999996 0.0 541
+542 0.0217771530151367 0.0200000000000031 0.0200000000000031 0.0 542
+543 0.0216219425201416 0.019999999999996 0.019999999999996 0.0 543
+544 0.0232682228088379 0.0200000000000031 0.0200000000000031 0.0 544
+545 0.0793290138244629 0.0799999999999983 0.0799999999999983 0.0 545
+546 0.0229940414428711 0.0300000000000011 0.0300000000000011 0.0 546
+547 0.022838830947876 0.019999999999996 0.019999999999996 0.0 547
+548 0.0229969024658203 0.0200000000000031 0.0200000000000031 0.0 548
+549 0.0229189395904541 0.0300000000000011 0.0300000000000011 0.0 549
+550 0.0227901935577393 0.019999999999996 0.019999999999996 0.0 550
+551 0.0229239463806152 0.0200000000000031 0.0200000000000031 0.0 551
+552 0.022730827331543 0.019999999999996 0.019999999999996 0.0 552
+553 0.0253369808197021 0.0300000000000011 0.0300000000000011 0.0 553
+554 0.0220980644226074 0.0200000000000031 0.0200000000000031 0.0 554
+555 0.0214731693267822 0.019999999999996 0.019999999999996 0.0 555
+556 0.0215020179748535 0.0300000000000011 0.0300000000000011 0.0 556
+557 0.0217249393463135 0.0200000000000031 0.0200000000000031 0.0 557
+558 0.0217740535736084 0.019999999999996 0.019999999999996 0.0 558
+559 0.022136926651001 0.0200000000000031 0.0200000000000031 0.0 559
+560 0.021636962890625 0.0200000000000031 0.0200000000000031 0.0 560
+561 0.0216689109802246 0.019999999999996 0.019999999999996 0.0 561
+562 0.0218231678009033 0.0300000000000011 0.0300000000000011 0.0 562
+563 0.0795009136199951 0.0799999999999983 0.0799999999999983 0.0 563
+564 0.0232501029968262 0.0200000000000031 0.0200000000000031 0.0 564
+565 0.0230040550231934 0.019999999999996 0.019999999999996 0.0 565
+566 0.0230789184570312 0.0300000000000011 0.0300000000000011 0.0 566
+567 0.0227739810943604 0.0200000000000031 0.0200000000000031 0.0 567
+568 0.0235750675201416 0.019999999999996 0.019999999999996 0.0 568
+569 0.0226988792419434 0.0200000000000031 0.0200000000000031 0.0 569
+570 0.0223028659820557 0.0300000000000011 0.0300000000000011 0.0 570
+571 0.0216829776763916 0.019999999999996 0.019999999999996 0.0 571
+572 0.0214540958404541 0.0200000000000031 0.0200000000000031 0.0 572
+573 0.0238778591156006 0.019999999999996 0.019999999999996 0.0 573
+574 0.0230958461761475 0.0300000000000011 0.0300000000000011 0.0 574
+575 0.0280261039733887 0.0300000000000011 0.0300000000000011 0.0 575
+576 0.0220839977264404 0.0200000000000031 0.0200000000000031 0.0 576
+577 0.0217299461364746 0.019999999999996 0.019999999999996 0.0 577
+578 0.0215981006622314 0.0200000000000031 0.0200000000000031 0.0 578
+579 0.0216739177703857 0.019999999999996 0.019999999999996 0.0 579
+580 0.0760340690612793 0.0799999999999983 0.0799999999999983 0.0 580
+581 0.0261681079864502 0.0200000000000031 0.0200000000000031 0.0 581
+582 0.0245881080627441 0.0300000000000011 0.0300000000000011 0.0 582
+583 0.0231649875640869 0.019999999999996 0.019999999999996 0.0 583
+584 0.0228891372680664 0.0300000000000011 0.0300000000000011 0.0 584
+585 0.0227940082550049 0.0200000000000031 0.0200000000000031 0.0 585
+586 0.0227079391479492 0.019999999999996 0.019999999999996 0.0 586
+587 0.0227351188659668 0.0200000000000031 0.0200000000000031 0.0 587
+588 0.0223979949951172 0.0300000000000011 0.0300000000000011 0.0 588
+589 0.0217239856719971 0.019999999999996 0.019999999999996 0.0 589
+590 0.0216400623321533 0.0200000000000031 0.0200000000000031 0.0 590
+591 0.0222110748291016 0.019999999999996 0.019999999999996 0.0 591
+592 0.0244839191436768 0.0300000000000011 0.0300000000000011 0.0 592
+593 0.0231800079345703 0.0200000000000031 0.0200000000000031 0.0 593
+594 0.0216829776763916 0.019999999999996 0.019999999999996 0.0 594
+595 0.0216670036315918 0.0200000000000031 0.0200000000000031 0.0 595
+596 0.0216989517211914 0.0200000000000031 0.0200000000000031 0.0 596
+597 0.0218870639801025 0.039999999999992 0.029999999999994 0.01 597
+598 0.077578067779541 0.0700000000000003 0.0700000000000003 0.0 598
+599 0.0230538845062256 0.0300000000000011 0.0300000000000011 0.0 599
+600 0.0230109691619873 0.0200000000000031 0.0200000000000031 0.0 600
+601 0.0260770320892334 0.0300000000000011 0.0300000000000011 0.0 601
+602 0.0238099098205566 0.019999999999996 0.019999999999996 0.0 602
+603 0.0228049755096436 0.0200000000000031 0.0200000000000031 0.0 603
+604 0.0226948261260986 0.019999999999996 0.019999999999996 0.0 604
+605 0.0223379135131836 0.0300000000000011 0.0300000000000011 0.0 605
+606 0.0216000080108643 0.0200000000000031 0.0200000000000031 0.0 606
+607 0.0224909782409668 0.019999999999996 0.019999999999996 0.0 607
+608 0.0216529369354248 0.0200000000000031 0.0200000000000031 0.0 608
+609 0.0217139720916748 0.019999999999996 0.019999999999996 0.0 609
+610 0.0218150615692139 0.0300000000000011 0.0300000000000011 0.0 610
+611 0.0217039585113525 0.0200000000000031 0.0200000000000031 0.0 611
+612 0.0246798992156982 0.019999999999996 0.019999999999996 0.0 612
+613 0.0233089923858643 0.0300000000000011 0.0300000000000011 0.0 613
+614 0.0297579765319824 0.0300000000000011 0.0300000000000011 0.0 614
+615 0.0762190818786621 0.0700000000000003 0.0700000000000003 0.0 615
+616 0.0230169296264648 0.0200000000000031 0.0200000000000031 0.0 616
+617 0.0229558944702148 0.029999999999994 0.029999999999994 0.0 617
+618 0.0230798721313477 0.0200000000000031 0.0200000000000031 0.0 618
+619 0.0230178833007812 0.019999999999996 0.019999999999996 0.0 619
+620 0.0257527828216553 0.0300000000000011 0.0300000000000011 0.0 620
+621 0.0235459804534912 0.0200000000000031 0.0200000000000031 0.0 621
+622 0.0228161811828613 0.0300000000000011 0.0300000000000011 0.0 622
+623 0.022197961807251 0.019999999999996 0.019999999999996 0.0 623
+624 0.021589994430542 0.0200000000000031 0.0200000000000031 0.0 624
+625 0.0214920043945312 0.019999999999996 0.019999999999996 0.0 625
+626 0.0215818881988525 0.0200000000000031 0.0200000000000031 0.0 626
+627 0.021651029586792 0.0300000000000011 0.0300000000000011 0.0 627
+628 0.0215868949890137 0.019999999999996 0.019999999999996 0.0 628
+629 0.0218029022216797 0.0200000000000031 0.0200000000000031 0.0 629
+630 0.0216500759124756 0.019999999999996 0.019999999999996 0.0 630
+631 0.0244319438934326 0.0200000000000031 0.0200000000000031 0.0 631
+632 0.0230758190155029 0.0300000000000011 0.0300000000000011 0.0 632
+633 0.077272891998291 0.0799999999999983 0.0799999999999983 0.0 633
+634 0.0236070156097412 0.0200000000000031 0.0200000000000031 0.0 634
+635 0.0229601860046387 0.019999999999996 0.019999999999996 0.0 635
+636 0.0228729248046875 0.0200000000000031 0.0200000000000031 0.0 636
+637 0.0228011608123779 0.0300000000000011 0.0300000000000011 0.0 637
+638 0.0227499008178711 0.019999999999996 0.019999999999996 0.0 638
+639 0.0244989395141602 0.0200000000000031 0.0200000000000031 0.0 639
+640 0.0235378742218018 0.0200000000000031 0.0200000000000031 0.0 640
+641 0.0223779678344727 0.019999999999996 0.019999999999996 0.0 641
+642 0.0215990543365479 0.0200000000000031 0.0200000000000031 0.0 642
+643 0.0215990543365479 0.019999999999996 0.019999999999996 0.0 643
+644 0.0219650268554688 0.0300000000000011 0.0300000000000011 0.0 644
+645 0.0215990543365479 0.0200000000000031 0.0200000000000031 0.0 645
+646 0.0224740505218506 0.019999999999996 0.019999999999996 0.0 646
+647 0.0216758251190186 0.0200000000000031 0.0200000000000031 0.0 647
+648 0.0216619968414307 0.019999999999996 0.019999999999996 0.0 648
+649 0.0221309661865234 0.0300000000000011 0.0300000000000011 0.0 649
+650 0.0787041187286377 0.0700000000000003 0.0700000000000003 0.0 650
+651 0.0299739837646484 0.0300000000000011 0.0300000000000011 0.0 651
+652 0.0230100154876709 0.0200000000000031 0.0200000000000031 0.0 652
+653 0.0230507850646973 0.019999999999996 0.019999999999996 0.0 653
+654 0.0228569507598877 0.0200000000000031 0.0200000000000031 0.0 654
+655 0.0227470397949219 0.0300000000000011 0.0300000000000011 0.0 655
+656 0.0226500034332275 0.019999999999996 0.019999999999996 0.0 656
+657 0.0228099822998047 0.0200000000000031 0.0200000000000031 0.0 657
+658 0.0222539901733398 0.019999999999996 0.019999999999996 0.0 658
+659 0.0245277881622314 0.0300000000000011 0.0300000000000011 0.0 659
+660 0.0224230289459229 0.0200000000000031 0.0200000000000031 0.0 660
+661 0.0216460227966309 0.019999999999996 0.019999999999996 0.0 661
+662 0.0215950012207031 0.0300000000000011 0.0300000000000011 0.0 662
+663 0.0216000080108643 0.0200000000000031 0.0200000000000031 0.0 663
+664 0.0216140747070312 0.019999999999996 0.019999999999996 0.0 664
+665 0.021726131439209 0.0200000000000031 0.0200000000000031 0.0 665
+666 0.0217559337615967 0.0200000000000031 0.0200000000000031 0.0 666
+667 0.0218238830566406 0.019999999999996 0.019999999999996 0.0 667
+668 0.0802149772644043 0.0799999999999983 0.0799999999999983 0.0 668
+669 0.0245440006256104 0.0300000000000011 0.0300000000000011 0.0 669
+670 0.0230040550231934 0.0200000000000031 0.0200000000000031 0.0 670
+671 0.02288818359375 0.019999999999996 0.019999999999996 0.0 671
+672 0.0228390693664551 0.0300000000000011 0.0300000000000011 0.0 672
+673 0.023313045501709 0.0200000000000031 0.0200000000000031 0.0 673
+674 0.0226609706878662 0.019999999999996 0.019999999999996 0.0 674
+675 0.0220029354095459 0.0300000000000011 0.0300000000000011 0.0 675
+676 0.0215702056884766 0.0200000000000031 0.0200000000000031 0.0 676
+677 0.0216479301452637 0.019999999999996 0.019999999999996 0.0 677
+678 0.0215539932250977 0.0200000000000031 0.0200000000000031 0.0 678
+679 0.0247859954833984 0.0300000000000011 0.0300000000000011 0.0 679
+680 0.0219168663024902 0.019999999999996 0.019999999999996 0.0 680
+681 0.0216579437255859 0.0200000000000031 0.0200000000000031 0.0 681
+682 0.0216360092163086 0.019999999999996 0.019999999999996 0.0 682
+683 0.0217740535736084 0.0200000000000031 0.0200000000000031 0.0 683
+684 0.0216720104217529 0.019999999999996 0.019999999999996 0.0 684
+685 0.076854944229126 0.0800000000000054 0.0800000000000054 0.0 685
+686 0.0229959487915039 0.019999999999996 0.019999999999996 0.0 686
+687 0.0258049964904785 0.0300000000000011 0.0300000000000011 0.0 687
+688 0.0232279300689697 0.0200000000000031 0.0200000000000031 0.0 688
+689 0.0251309871673584 0.029999999999994 0.029999999999994 0.0 689
+690 0.0279409885406494 0.0300000000000011 0.0300000000000011 0.0 690
+691 0.0227260589599609 0.0200000000000031 0.0200000000000031 0.0 691
+692 0.0227479934692383 0.019999999999996 0.019999999999996 0.0 692
+693 0.0219731330871582 0.0200000000000031 0.0200000000000031 0.0 693
+694 0.0215420722961426 0.0300000000000011 0.0300000000000011 0.0 694
+695 0.0214939117431641 0.019999999999996 0.019999999999996 0.0 695
+696 0.0216901302337646 0.0200000000000031 0.0200000000000031 0.0 696
+697 0.0216901302337646 0.019999999999996 0.019999999999996 0.0 697
+698 0.0246269702911377 0.0200000000000031 0.0200000000000031 0.0 698
+699 0.0231730937957764 0.0300000000000011 0.0300000000000011 0.0 699
+700 0.021737813949585 0.019999999999996 0.019999999999996 0.0 700
+701 0.0217559337615967 0.0200000000000031 0.0200000000000031 0.0 701
+702 0.0756359100341797 0.0799999999999983 0.0799999999999983 0.0 702
+703 0.0232179164886475 0.0200000000000031 0.0200000000000031 0.0 703
+704 0.0229458808898926 0.019999999999996 0.019999999999996 0.0 704
+705 0.0230169296264648 0.0300000000000011 0.0300000000000011 0.0 705
+706 0.0228660106658936 0.0200000000000031 0.0200000000000031 0.0 706
+707 0.0257608890533447 0.0300000000000011 0.0300000000000011 0.0 707
+708 0.0230529308319092 0.019999999999996 0.019999999999996 0.0 708
+709 0.0226249694824219 0.0200000000000031 0.0200000000000031 0.0 709
+710 0.0225780010223389 0.019999999999996 0.019999999999996 0.0 710
+711 0.0220761299133301 0.0300000000000011 0.0300000000000011 0.0 711
+712 0.0221598148345947 0.0200000000000031 0.0200000000000031 0.0 712
+713 0.0215129852294922 0.019999999999996 0.019999999999996 0.0 713
+714 0.0216219425201416 0.0200000000000031 0.0200000000000031 0.0 714
+715 0.0215890407562256 0.019999999999996 0.019999999999996 0.0 715
+716 0.0216820240020752 0.0200000000000031 0.0200000000000031 0.0 716
+717 0.0216300487518311 0.0300000000000011 0.0300000000000011 0.0 717
+718 0.0247721672058105 0.019999999999996 0.019999999999996 0.0 718
+719 0.0220820903778076 0.0200000000000031 0.0200000000000031 0.0 719
+720 0.0769851207733154 0.0799999999999983 0.0799999999999983 0.0 720
+721 0.0229990482330322 0.0200000000000031 0.0200000000000031 0.0 721
+722 0.024212121963501 0.0300000000000011 0.0300000000000011 0.0 722
+723 0.0229740142822266 0.019999999999996 0.019999999999996 0.0 723
+724 0.0227351188659668 0.0200000000000031 0.0200000000000031 0.0 724
+725 0.0226562023162842 0.029999999999994 0.029999999999994 0.0 725
+726 0.0255320072174072 0.0200000000000031 0.0200000000000031 0.0 726
+727 0.0227208137512207 0.0200000000000031 0.0200000000000031 0.0 727
+728 0.0237081050872803 0.029999999999994 0.029999999999994 0.0 728
+729 0.0268452167510986 0.0200000000000031 0.0200000000000031 0.0 729
+730 0.0218770503997803 0.0300000000000011 0.0300000000000011 0.0 730
+731 0.0217039585113525 0.019999999999996 0.019999999999996 0.0 731
+732 0.0215818881988525 0.0200000000000031 0.0200000000000031 0.0 732
+733 0.0217380523681641 0.0200000000000031 0.0200000000000031 0.0 733
+734 0.0216901302337646 0.019999999999996 0.019999999999996 0.0 734
+735 0.0217649936676025 0.0300000000000011 0.0300000000000011 0.0 735
+736 0.0216591358184814 0.019999999999996 0.019999999999996 0.0 736
+737 0.0809669494628906 0.0800000000000054 0.0800000000000054 0.0 737
+738 0.0230050086975098 0.019999999999996 0.019999999999996 0.0 738
+739 0.0229599475860596 0.0200000000000031 0.0200000000000031 0.0 739
+740 0.0229651927947998 0.0300000000000011 0.0300000000000011 0.0 740
+741 0.0228550434112549 0.019999999999996 0.019999999999996 0.0 741
+742 0.0228068828582764 0.0200000000000031 0.0200000000000031 0.0 742
+743 0.022993803024292 0.0300000000000011 0.0300000000000011 0.0 743
+744 0.0227200984954834 0.019999999999996 0.019999999999996 0.0 744
+745 0.02242112159729 0.0200000000000031 0.0200000000000031 0.0 745
+746 0.0246379375457764 0.0300000000000011 0.0300000000000011 0.0 746
+747 0.0218410491943359 0.019999999999996 0.019999999999996 0.0 747
+748 0.0215339660644531 0.0200000000000031 0.0200000000000031 0.0 748
+749 0.0215659141540527 0.019999999999996 0.019999999999996 0.0 749
+750 0.0216779708862305 0.0200000000000031 0.0200000000000031 0.0 750
+751 0.0216810703277588 0.019999999999996 0.019999999999996 0.0 751
+752 0.0221710205078125 0.0300000000000011 0.0300000000000011 0.0 752
+753 0.0216331481933594 0.0200000000000031 0.0200000000000031 0.0 753
+754 0.0217230319976807 0.019999999999996 0.019999999999996 0.0 754
+755 0.0797798633575439 0.0800000000000054 0.0800000000000054 0.0 755
+756 0.0233240127563477 0.019999999999996 0.019999999999996 0.0 756
+757 0.0232129096984863 0.0300000000000011 0.0300000000000011 0.0 757
+758 0.0233068466186523 0.0200000000000031 0.0200000000000031 0.0 758
+759 0.0228340625762939 0.019999999999996 0.019999999999996 0.0 759
+760 0.0226619243621826 0.0300000000000011 0.0300000000000011 0.0 760
+761 0.0235550403594971 0.0200000000000031 0.0200000000000031 0.0 761
+762 0.0222749710083008 0.019999999999996 0.019999999999996 0.0 762
+763 0.0216190814971924 0.0200000000000031 0.0200000000000031 0.0 763
+764 0.0215640068054199 0.019999999999996 0.019999999999996 0.0 764
+765 0.0237760543823242 0.0300000000000011 0.0300000000000011 0.0 765
+766 0.0217039585113525 0.0200000000000031 0.0200000000000031 0.0 766
+767 0.0219049453735352 0.019999999999996 0.019999999999996 0.0 767
+768 0.0291330814361572 0.0300000000000011 0.0300000000000011 0.0 768
+769 0.0216200351715088 0.0200000000000031 0.0200000000000031 0.0 769
+770 0.0217278003692627 0.019999999999996 0.019999999999996 0.0 770
+771 0.0217189788818359 0.0300000000000011 0.0300000000000011 0.0 771
+772 0.0760140419006348 0.0700000000000003 0.0700000000000003 0.0 772
+773 0.0230591297149658 0.0300000000000011 0.0300000000000011 0.0 773
+774 0.0260210037231445 0.019999999999996 0.019999999999996 0.0 774
+775 0.0247459411621094 0.0300000000000011 0.0300000000000011 0.0 775
+776 0.0229299068450928 0.0200000000000031 0.0200000000000031 0.0 776
+777 0.0227248668670654 0.019999999999996 0.019999999999996 0.0 777
+778 0.022636890411377 0.0300000000000011 0.0300000000000011 0.0 778
+779 0.0227160453796387 0.0200000000000031 0.0200000000000031 0.0 779
+780 0.0222170352935791 0.019999999999996 0.019999999999996 0.0 780
+781 0.0216178894042969 0.0200000000000031 0.0200000000000031 0.0 781
+782 0.0216701030731201 0.019999999999996 0.019999999999996 0.0 782
+783 0.0215609073638916 0.0300000000000011 0.0300000000000011 0.0 783
+784 0.0215671062469482 0.0200000000000031 0.0200000000000031 0.0 784
+785 0.0244979858398438 0.019999999999996 0.019999999999996 0.0 785
+786 0.02254319190979 0.0200000000000031 0.0200000000000031 0.0 786
+787 0.0216531753540039 0.0300000000000011 0.0300000000000011 0.0 787
+788 0.0216619968414307 0.019999999999996 0.019999999999996 0.0 788
+789 0.0218989849090576 0.0200000000000031 0.0200000000000031 0.0 789
+790 0.0775949954986572 0.0799999999999983 0.0799999999999983 0.0 790
+791 0.0229768753051758 0.0200000000000031 0.0200000000000031 0.0 791
+792 0.0230350494384766 0.019999999999996 0.019999999999996 0.0 792
+793 0.0247578620910645 0.0300000000000011 0.0300000000000011 0.0 793
+794 0.0241599082946777 0.0200000000000031 0.0200000000000031 0.0 794
+795 0.0229189395904541 0.029999999999994 0.029999999999994 0.0 795
+796 0.0227510929107666 0.0200000000000031 0.0200000000000031 0.0 796
+797 0.0223112106323242 0.0200000000000031 0.0200000000000031 0.0 797
+798 0.0216238498687744 0.019999999999996 0.019999999999996 0.0 798
+799 0.0216000080108643 0.0200000000000031 0.0200000000000031 0.0 799
+800 0.0226099491119385 0.0300000000000011 0.0300000000000011 0.0 800
+801 0.0218279361724854 0.019999999999996 0.019999999999996 0.0 801
+802 0.0216817855834961 0.0200000000000031 0.0200000000000031 0.0 802
+803 0.0218219757080078 0.019999999999996 0.019999999999996 0.0 803
+804 0.0220489501953125 0.0200000000000031 0.0200000000000031 0.0 804
+805 0.0245721340179443 0.0300000000000011 0.0300000000000011 0.0 805
+806 0.0237100124359131 0.019999999999996 0.019999999999996 0.0 806
+807 0.0831229686737061 0.0900000000000034 0.0900000000000034 0.0 807
+808 0.0229980945587158 0.019999999999996 0.019999999999996 0.0 808
+809 0.0230069160461426 0.0200000000000031 0.0200000000000031 0.0 809
+810 0.0229578018188477 0.019999999999996 0.019999999999996 0.0 810
+811 0.0229570865631104 0.0300000000000011 0.0300000000000011 0.0 811
+812 0.0228419303894043 0.0200000000000031 0.0200000000000031 0.0 812
+813 0.0257079601287842 0.0300000000000011 0.0300000000000011 0.0 813
+814 0.0235209465026855 0.019999999999996 0.019999999999996 0.0 814
+815 0.0221221446990967 0.0200000000000031 0.0200000000000031 0.0 815
+816 0.0214879512786865 0.019999999999996 0.019999999999996 0.0 816
+817 0.0215079784393311 0.0300000000000011 0.0300000000000011 0.0 817
+818 0.0216140747070312 0.0200000000000031 0.0200000000000031 0.0 818
+819 0.0216760635375977 0.019999999999996 0.019999999999996 0.0 819
+820 0.021683931350708 0.0200000000000031 0.0200000000000031 0.0 820
+821 0.0217459201812744 0.019999999999996 0.019999999999996 0.0 821
+822 0.0217831134796143 0.0200000000000031 0.0200000000000031 0.0 822
+823 0.0216968059539795 0.0300000000000011 0.0300000000000011 0.0 823
+824 0.0794470310211182 0.0799999999999983 0.0799999999999983 0.0 824
+825 0.0230400562286377 0.0200000000000031 0.0200000000000031 0.0 825
+826 0.0233430862426758 0.019999999999996 0.019999999999996 0.0 826
+827 0.023482084274292 0.0300000000000011 0.0300000000000011 0.0 827
+828 0.0228879451751709 0.0200000000000031 0.0200000000000031 0.0 828
+829 0.0232207775115967 0.019999999999996 0.019999999999996 0.0 829
+830 0.0228579044342041 0.0200000000000031 0.0200000000000031 0.0 830
+831 0.022691011428833 0.029999999999994 0.029999999999994 0.0 831
+832 0.024960994720459 0.0200000000000031 0.0200000000000031 0.0 832
+833 0.0226261615753174 0.0200000000000031 0.0200000000000031 0.0 833
+834 0.0222339630126953 0.029999999999994 0.029999999999994 0.0 834
+835 0.0216858386993408 0.0200000000000031 0.0200000000000031 0.0 835
+836 0.0216341018676758 0.0200000000000031 0.0200000000000031 0.0 836
+837 0.0216710567474365 0.019999999999996 0.019999999999996 0.0 837
+838 0.0217170715332031 0.0200000000000031 0.0200000000000031 0.0 838
+839 0.0223820209503174 0.0300000000000011 0.0300000000000011 0.0 839
+840 0.0218658447265625 0.019999999999996 0.019999999999996 0.0 840
+841 0.0216851234436035 0.0200000000000031 0.0200000000000031 0.0 841
+842 0.0797119140625 0.0799999999999983 0.0799999999999983 0.0 842
+843 0.0296900272369385 0.0300000000000011 0.0300000000000011 0.0 843
+844 0.023921012878418 0.019999999999996 0.019999999999996 0.0 844
+845 0.0230309963226318 0.0300000000000011 0.0300000000000011 0.0 845
+846 0.0227670669555664 0.0200000000000031 0.0200000000000031 0.0 846
+847 0.0226919651031494 0.019999999999996 0.019999999999996 0.0 847
+848 0.0227150917053223 0.0200000000000031 0.0200000000000031 0.0 848
+849 0.0224990844726562 0.0300000000000011 0.0300000000000011 0.0 849
+850 0.0217578411102295 0.019999999999996 0.019999999999996 0.0 850
+851 0.0215840339660645 0.0200000000000031 0.0200000000000031 0.0 851
+852 0.0246429443359375 0.0300000000000011 0.0300000000000011 0.0 852
+853 0.0232079029083252 0.019999999999996 0.019999999999996 0.0 853
+854 0.0217320919036865 0.0200000000000031 0.0200000000000031 0.0 854
+855 0.0215840339660645 0.019999999999996 0.019999999999996 0.0 855
+856 0.0217161178588867 0.0200000000000031 0.0200000000000031 0.0 856
+857 0.0216400623321533 0.0300000000000011 0.0300000000000011 0.0 857
+858 0.0217981338500977 0.019999999999996 0.019999999999996 0.0 858
+859 0.0765349864959717 0.0700000000000003 0.0700000000000003 0.0 859
+860 0.0244770050048828 0.0300000000000011 0.0300000000000011 0.0 860
+861 0.0246331691741943 0.0200000000000031 0.0200000000000031 0.0 861
+862 0.0232968330383301 0.029999999999994 0.029999999999994 0.0 862
+863 0.0228350162506104 0.0200000000000031 0.0200000000000031 0.0 863
+864 0.0228140354156494 0.0200000000000031 0.0200000000000031 0.0 864
+865 0.0230000019073486 0.029999999999994 0.029999999999994 0.0 865
+866 0.0231919288635254 0.0200000000000031 0.0200000000000031 0.0 866
+867 0.0222370624542236 0.0200000000000031 0.0200000000000031 0.0 867
+868 0.0216059684753418 0.019999999999996 0.019999999999996 0.0 868
+869 0.0215280055999756 0.0200000000000031 0.0200000000000031 0.0 869
+870 0.0218400955200195 0.029999999999994 0.029999999999994 0.0 870
+871 0.0238420963287354 0.0200000000000031 0.0200000000000031 0.0 871
+872 0.0222158432006836 0.0200000000000031 0.0200000000000031 0.0 872
+873 0.0229439735412598 0.029999999999994 0.029999999999994 0.0 873
+874 0.022014856338501 0.0200000000000031 0.0200000000000031 0.0 874
+875 0.0218870639801025 0.0200000000000031 0.0200000000000031 0.0 875
+876 0.0765628814697266 0.0799999999999983 0.0799999999999983 0.0 876
+877 0.0229649543762207 0.019999999999996 0.019999999999996 0.0 877
+878 0.0228400230407715 0.0200000000000031 0.0200000000000031 0.0 878
+879 0.0230231285095215 0.019999999999996 0.019999999999996 0.0 879
+880 0.0252189636230469 0.0300000000000011 0.0300000000000011 0.0 880
+881 0.0232028961181641 0.0200000000000031 0.0200000000000031 0.0 881
+882 0.0295140743255615 0.0300000000000011 0.0300000000000011 0.0 882
+883 0.0227620601654053 0.0300000000000011 0.0300000000000011 0.0 883
+884 0.0229089260101318 0.019999999999996 0.019999999999996 0.0 884
+885 0.0219950675964355 0.0200000000000031 0.0200000000000031 0.0 885
+886 0.021589994430542 0.019999999999996 0.019999999999996 0.0 886
+887 0.0214979648590088 0.0200000000000031 0.0200000000000031 0.0 887
+888 0.0215859413146973 0.0300000000000011 0.0300000000000011 0.0 888
+889 0.0217750072479248 0.019999999999996 0.019999999999996 0.0 889
+890 0.021744966506958 0.0200000000000031 0.0200000000000031 0.0 890
+891 0.025892972946167 0.019999999999996 0.019999999999996 0.0 891
+892 0.0236170291900635 0.0300000000000011 0.0300000000000011 0.0 892
+893 0.0218141078948975 0.0200000000000031 0.0200000000000031 0.0 893
+894 0.0771820545196533 0.0799999999999983 0.0799999999999983 0.0 894
+895 0.0230357646942139 0.0200000000000031 0.0200000000000031 0.0 895
+896 0.0231060981750488 0.019999999999996 0.019999999999996 0.0 896
+897 0.023137092590332 0.0300000000000011 0.0300000000000011 0.0 897
+898 0.022799015045166 0.019999999999996 0.019999999999996 0.0 898
+899 0.0256779193878174 0.0200000000000031 0.0200000000000031 0.0 899
+900 0.0231838226318359 0.0300000000000011 0.0300000000000011 0.0 900
+901 0.0232141017913818 0.019999999999996 0.019999999999996 0.0 901
+902 0.0217940807342529 0.0200000000000031 0.0200000000000031 0.0 902
+903 0.0214989185333252 0.0200000000000031 0.0200000000000031 0.0 903
+904 0.0218000411987305 0.029999999999994 0.029999999999994 0.0 904
+905 0.0220961570739746 0.0200000000000031 0.0200000000000031 0.0 905
+906 0.0215680599212646 0.0200000000000031 0.0200000000000031 0.0 906
+907 0.0216329097747803 0.019999999999996 0.019999999999996 0.0 907
+908 0.0217070579528809 0.0200000000000031 0.0200000000000031 0.0 908
+909 0.0216760635375977 0.019999999999996 0.019999999999996 0.0 909
+910 0.0236759185791016 0.0300000000000011 0.0300000000000011 0.0 910
+911 0.0770270824432373 0.0799999999999983 0.0799999999999983 0.0 911
+912 0.0231328010559082 0.0200000000000031 0.0200000000000031 0.0 912
+913 0.0229079723358154 0.019999999999996 0.019999999999996 0.0 913
+914 0.0230019092559814 0.0200000000000031 0.0200000000000031 0.0 914
+915 0.0252349376678467 0.0300000000000011 0.0300000000000011 0.0 915
+916 0.0227150917053223 0.019999999999996 0.019999999999996 0.0 916
+917 0.0228018760681152 0.0200000000000031 0.0200000000000031 0.0 917
+918 0.0226809978485107 0.0300000000000011 0.0300000000000011 0.0 918
+919 0.0252270698547363 0.019999999999996 0.019999999999996 0.0 919
+920 0.0231540203094482 0.0300000000000011 0.0300000000000011 0.0 920
+921 0.0289709568023682 0.0200000000000031 0.0200000000000031 0.0 921
+922 0.0215799808502197 0.0300000000000011 0.0300000000000011 0.0 922
+923 0.0319468975067139 0.0300000000000011 0.019999999999996 0.01 923
+924 0.0216109752655029 0.0200000000000031 0.0200000000000031 0.0 924
+925 0.0217740535736084 0.019999999999996 0.019999999999996 0.0 925
+926 0.0216958522796631 0.0200000000000031 0.0200000000000031 0.0 926
+927 0.0216629505157471 0.019999999999996 0.019999999999996 0.0 927
+928 0.0217578411102295 0.0300000000000011 0.0300000000000011 0.0 928
+929 0.0820608139038086 0.0799999999999983 0.0799999999999983 0.0 929
+930 0.0229201316833496 0.0200000000000031 0.0200000000000031 0.0 930
+931 0.0229270458221436 0.0200000000000031 0.0200000000000031 0.0 931
+932 0.0229320526123047 0.029999999999994 0.029999999999994 0.0 932
+933 0.0227558612823486 0.0200000000000031 0.0200000000000031 0.0 933
+934 0.0226609706878662 0.0200000000000031 0.0200000000000031 0.0 934
+935 0.0229549407958984 0.019999999999996 0.019999999999996 0.0 935
+936 0.0221340656280518 0.0300000000000011 0.0300000000000011 0.0 936
+937 0.0215301513671875 0.019999999999996 0.019999999999996 0.0 937
+938 0.0243568420410156 0.0200000000000031 0.0200000000000031 0.0 938
+939 0.021946907043457 0.0300000000000011 0.0300000000000011 0.0 939
+940 0.021575927734375 0.019999999999996 0.019999999999996 0.0 940
+941 0.0216639041900635 0.0200000000000031 0.0200000000000031 0.0 941
+942 0.0217418670654297 0.0200000000000031 0.0200000000000031 0.0 942
+943 0.0222411155700684 0.019999999999996 0.019999999999996 0.0 943
+944 0.0216610431671143 0.0200000000000031 0.0200000000000031 0.0 944
+945 0.0216820240020752 0.019999999999996 0.019999999999996 0.0 945
+946 0.0792751312255859 0.0699999999999932 0.0699999999999932 0.0 946
+947 0.0251059532165527 0.0300000000000011 0.0300000000000011 0.0 947
+948 0.0247578620910645 0.0200000000000031 0.0200000000000031 0.0 948
+949 0.0229980945587158 0.0300000000000011 0.0300000000000011 0.0 949
+950 0.0229229927062988 0.019999999999996 0.019999999999996 0.0 950
+951 0.0227029323577881 0.0200000000000031 0.0200000000000031 0.0 951
+952 0.0226871967315674 0.019999999999996 0.019999999999996 0.0 952
+953 0.0235540866851807 0.0300000000000011 0.0300000000000011 0.0 953
+954 0.0219640731811523 0.0200000000000031 0.0200000000000031 0.0 954
+955 0.0214629173278809 0.019999999999996 0.019999999999996 0.0 955
+956 0.021557092666626 0.0200000000000031 0.0200000000000031 0.0 956
+957 0.02388596534729 0.0300000000000011 0.0300000000000011 0.0 957
+958 0.0222799777984619 0.019999999999996 0.019999999999996 0.0 958
+959 0.0276319980621338 0.0300000000000011 0.0300000000000011 0.0 959
+960 0.0242338180541992 0.0200000000000031 0.0200000000000031 0.0 960
+961 0.0216600894927979 0.019999999999996 0.019999999999996 0.0 961
+962 0.0217490196228027 0.0200000000000031 0.0200000000000031 0.0 962
+963 0.0757958889007568 0.0799999999999983 0.0799999999999983 0.0 963
+964 0.0231211185455322 0.0200000000000031 0.0200000000000031 0.0 964
+965 0.023090124130249 0.029999999999994 0.029999999999994 0.0 965
+966 0.02652907371521 0.0200000000000031 0.0200000000000031 0.0 966
+967 0.024601936340332 0.0300000000000011 0.0300000000000011 0.0 967
+968 0.0228731632232666 0.019999999999996 0.019999999999996 0.0 968
+969 0.0227208137512207 0.0200000000000031 0.0200000000000031 0.0 969
+970 0.0226399898529053 0.0300000000000011 0.0300000000000011 0.0 970
+971 0.0225419998168945 0.019999999999996 0.019999999999996 0.0 971
+972 0.0218651294708252 0.0200000000000031 0.0200000000000031 0.0 972
+973 0.0215599536895752 0.0200000000000031 0.0200000000000031 0.0 973
+974 0.0218329429626465 0.019999999999996 0.019999999999996 0.0 974
+975 0.0215480327606201 0.0300000000000011 0.0300000000000011 0.0 975
+976 0.0220801830291748 0.019999999999996 0.019999999999996 0.0 976
+977 0.0245459079742432 0.0200000000000031 0.0200000000000031 0.0 977
+978 0.0230350494384766 0.0300000000000011 0.0300000000000011 0.0 978
+979 0.0217211246490479 0.019999999999996 0.019999999999996 0.0 979
+980 0.0217759609222412 0.0200000000000031 0.0200000000000031 0.0 980
+981 0.0778119564056396 0.0799999999999983 0.0799999999999983 0.0 981
+982 0.0229709148406982 0.0200000000000031 0.0200000000000031 0.0 982
+983 0.023047924041748 0.019999999999996 0.019999999999996 0.0 983
+984 0.0228879451751709 0.0300000000000011 0.0300000000000011 0.0 984
+985 0.0263099670410156 0.0200000000000031 0.0200000000000031 0.0 985
+986 0.0241529941558838 0.0300000000000011 0.0300000000000011 0.0 986
+987 0.0228710174560547 0.019999999999996 0.019999999999996 0.0 987
+988 0.0223538875579834 0.0200000000000031 0.0200000000000031 0.0 988
+989 0.0217280387878418 0.019999999999996 0.019999999999996 0.0 989
+990 0.0214800834655762 0.0300000000000011 0.0300000000000011 0.0 990
+991 0.0215470790863037 0.0200000000000031 0.0200000000000031 0.0 991
+992 0.0224719047546387 0.019999999999996 0.019999999999996 0.0 992
+993 0.0216379165649414 0.0200000000000031 0.0200000000000031 0.0 993
+994 0.0215561389923096 0.019999999999996 0.019999999999996 0.0 994
+995 0.021676778793335 0.0200000000000031 0.0200000000000031 0.0 995
+996 0.024587869644165 0.0300000000000011 0.0300000000000011 0.0 996
+997 0.0231449604034424 0.019999999999996 0.019999999999996 0.0 997
+998 0.0824549198150635 0.0900000000000034 0.0900000000000034 0.0 998
+999 0.0230429172515869 0.019999999999996 0.019999999999996 0.0 999
+1000 0.0229730606079102 0.0200000000000031 0.0200000000000031 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log
new file mode 100644
index 000000000..727267931
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log
@@ -0,0 +1,82 @@
+========================== 2009-04-01T16:49:55 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'GeneratorBenchmarkRails' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+GeneratorBenchmarkRails#generator:
+ real total user system
+sum 25.871086597 25.820000000 25.780000000 0.040000000
+min 0.021485090 0.020000000 0.020000000 0.000000000
+std- 0.013123732 0.012534515 0.012507179 -0.000591505
+mean 0.025871087 0.025820000 0.025780000 0.000040000
+std+ 0.038618441 0.039105485 0.039052821 0.000671505
+max 0.084933996 0.090000000 0.090000000 0.010000000
+std 0.012747354 0.013285485 0.013272821 0.000631505
+std% 49.272590131 51.454239794 51.484952060 1578.762962731
+harm 0.023654431 0.022959497 0.022933171 nan
+geo 0.024373445 0.023988580 0.023955348 0.000000000
+q1 0.021737874 0.020000000 0.020000000 0.000000000
+med 0.022677064 0.020000000 0.020000000 0.000000000
+q3 0.023290575 0.030000000 0.030000000 0.000000000
+ 1000 38.65319 0.025871087
+ calls calls/sec secs/call
+
+ 0.08176 -|*
+ 0.07542 -|**
+ 0.06907 -|
+ 0.06273 -|
+ 0.05638 -|
+ 0.05004 -|
+ 0.04369 -|
+ 0.03735 -|
+ 0.03100 -|*
+ 0.02466 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02268, iqr=0.00155, factor=3.00):
+high=115 very_high=69
+
+Ljung-Box statistics: q=1246.12050 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+GeneratorBenchmarkRails#generator:
+ real total user system
+sum 25.952543497 25.950000000 25.930000000 0.020000000
+min 0.021454096 0.020000000 0.020000000 0.000000000
+std- 0.013029796 0.012272113 0.012258057 -0.000426990
+mean 0.025952543 0.025950000 0.025930000 0.000020000
+std+ 0.038875291 0.039627887 0.039601943 0.000466990
+max 0.083282948 0.090000000 0.090000000 0.010000000
+std 0.012922747 0.013677887 0.013671943 0.000446990
+std% 49.793760083 52.708619269 52.726351240 2234.948544149
+harm 0.023675798 0.022977187 0.022963996 nan
+geo 0.024414095 0.024037524 0.024020868 0.000000000
+q1 0.021728516 0.020000000 0.020000000 0.000000000
+med 0.022745013 0.020000000 0.020000000 0.000000000
+q3 0.023253679 0.030000000 0.030000000 0.000000000
+ 1000 38.53187 0.025952543
+ calls calls/sec secs/call
+
+ 0.08019 -|**
+ 0.07401 -|*
+ 0.06783 -|
+ 0.06164 -|
+ 0.05546 -|
+ 0.04928 -|
+ 0.04309 -|
+ 0.03691 -|
+ 0.03073 -|*
+ 0.02455 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02275, iqr=0.00153, factor=3.00):
+high=106 very_high=75
+
+Ljung-Box statistics: q=1270.99317 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:50:50 CEST ===========================
+
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkRails#generator.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkRails#generator-autocorrelation.dat'.
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log
new file mode 100644
index 000000000..7df444512
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log
@@ -0,0 +1,34 @@
+========================== 2009-04-01T16:49:51 CEST ===========================
+
+Comparing times (call_time_mean):
+ 1 ParserBenchmarkExt#parser 900 repeats:
+ 553.922304770 ( real) -> 21.500x
+ 0.001805307
+ 2 ParserBenchmarkYAML#parser 1000 repeats:
+ 224.513358139 ( real) -> 8.714x
+ 0.004454078
+ 3 ParserBenchmarkPure#parser 1000 repeats:
+ 26.755020642 ( real) -> 1.038x
+ 0.037376163
+ 4 ParserBenchmarkRails#parser 1000 repeats:
+ 25.763381731 ( real) -> 1.000x
+ 0.038814780
+ calls/sec ( time) -> speed covers
+ secs/call
+
+Comparing times (call_time_median):
+ 1 ParserBenchmarkExt#parser 900 repeats:
+ 800.592479481 ( real) -> 26.936x
+ 0.001249075
+ 2 ParserBenchmarkYAML#parser 1000 repeats:
+ 271.002390644 ( real) -> 9.118x
+ 0.003690004
+ 3 ParserBenchmarkRails#parser 1000 repeats:
+ 30.227910865 ( real) -> 1.017x
+ 0.033082008
+ 4 ParserBenchmarkPure#parser 1000 repeats:
+ 29.722384421 ( real) -> 1.000x
+ 0.033644676
+ calls/sec ( time) -> speed covers
+ secs/call
+===============================================================================
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat
new file mode 100644
index 000000000..40efc57cc
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat
@@ -0,0 +1,900 @@
+#lag autocorrelation
+101 1.0
+102 0.00985212418163005
+103 -0.00105742571489969
+104 -0.0200019393620297
+105 -0.00933105977449441
+106 -0.0198053539236752
+107 -0.0179767811553642
+108 -0.0176611423990743
+109 -0.0185222417953087
+110 -0.0205843694390457
+111 -0.01715959553508
+112 -0.0198505157325194
+113 -0.0185062490072185
+114 -0.0196897065923063
+115 -0.021656479097572
+116 -0.0204821887654524
+117 -0.0184415185088398
+118 -0.0211615011085338
+119 -0.0216761971444828
+120 -0.0198233495768411
+121 -0.0203604715880323
+122 -0.0198005010000642
+123 -0.0186848341524697
+124 -0.0180302780242917
+125 -0.0183844885059821
+126 -0.0193889269967917
+127 -0.0192676046194778
+128 -0.017137594880939
+129 -0.0170409124066728
+130 -0.0150595759310503
+131 -0.018497243864985
+132 -0.0191312662452333
+133 -0.0194917405622472
+134 -0.0182724916370003
+135 -0.0171018288530395
+136 -0.017693203383731
+137 -0.019233808628409
+138 -0.0204803489133546
+139 -0.0206519814870514
+140 -0.0209197600090546
+141 -0.0201426439148014
+142 -0.0181979335068176
+143 -0.0198192645275531
+144 -0.0202773409268149
+145 -0.0197509641765462
+146 -0.0174542791271672
+147 -0.0185131963029398
+148 -0.0142911622141816
+149 -0.018189949446747
+150 -0.0172775321644038
+151 -0.0172514996638929
+152 -0.0149711216258677
+153 -0.0180209406771167
+154 -0.0187829326095732
+155 -0.0179420788237305
+156 0.00424372785454928
+157 0.00821554188465932
+158 0.35293400731859
+159 0.366837592246794
+160 0.213298783047283
+161 -0.0157394761915721
+162 -0.00774376349114834
+163 -0.0172186119438013
+164 -0.0162348306988972
+165 -0.0179811217375531
+166 -0.0168325248721867
+167 -0.0177863454159124
+168 -0.0162717222175639
+169 -0.0191117204105146
+170 -0.0177356811020167
+171 -0.0186975490077008
+172 -0.0172583072789483
+173 -0.0189210264178748
+174 -0.0171826733538386
+175 -0.0197467598837419
+176 -0.0197612311894552
+177 -0.0200029809913758
+178 -0.0197615059774931
+179 -0.017571989727297
+180 -0.0173400082784329
+181 -0.0176396221137864
+182 -0.0178007321096628
+183 -0.0171581059408866
+184 -0.0175715243687287
+185 -0.0144018049890081
+186 -0.0137323861679082
+187 -0.0160141550759938
+188 -0.017722831700802
+189 -0.015351426662838
+190 -0.0185698089210776
+191 -0.0175157776409104
+192 -0.0155631516338833
+193 -0.0169248557096909
+194 -0.0172361325951485
+195 -0.0181452103029826
+196 -0.0188512630759419
+197 -0.019287412783149
+198 -0.0189502964327969
+199 -0.0175238114666983
+200 -0.0183952774301715
+201 -0.0186218598819691
+202 -0.018542074990071
+203 -0.0182545379514657
+204 -0.017840994815964
+205 -0.0165268111705284
+206 -0.0170697996989772
+207 -0.0164709961667795
+208 -0.016643508111465
+209 -0.0157568996501781
+210 -0.0168374783887807
+211 -0.0177159477110073
+212 -0.0185524368774668
+213 0.0053422952230943
+214 0.00276128222155045
+215 0.286489934471652
+216 0.0658269400928081
+217 0.262561253228902
+218 0.169103819531699
+219 0.0650049870287007
+220 -0.0133346213868773
+221 -0.0142126752180425
+222 -0.0160968078458446
+223 -0.0167528062012806
+224 -0.0164817511097463
+225 -0.0142119297070018
+226 -0.0184810797176798
+227 -0.0172569541054024
+228 -0.0172066024264211
+229 -0.0169726297147995
+230 -0.0150887497973008
+231 -0.0156277947184747
+232 -0.0180738339464492
+233 -0.0190883324101496
+234 -0.0183422711026111
+235 -0.018362277398652
+236 -0.0181804365041856
+237 -0.0173970084740036
+238 -0.0160781720728349
+239 -0.0175236902049324
+240 -0.0174042718759811
+241 -0.0173938793276598
+242 -0.0147551028769872
+243 -0.0122857581039405
+244 -0.010867924198452
+245 -0.0147424216205904
+246 -0.0161622617779801
+247 -0.0172022551420587
+248 -0.0150808969605776
+249 -0.0151917742587137
+250 -0.0152127703813932
+251 -0.0164007891388044
+252 -0.0158495946074772
+253 -0.0165231819746255
+254 -0.0179743821309601
+255 -0.0168790954979486
+256 -0.0162120097817564
+257 -0.0178739491417351
+258 -0.0173473040628906
+259 -0.017333660413587
+260 -0.0169091470123355
+261 -0.0173480396586057
+262 -0.0162244782824425
+263 -0.0161131334675745
+264 -0.015440149830728
+265 -0.0158807862437797
+266 -0.0152294521155507
+267 -0.0158352218642096
+268 -0.0155828944335708
+269 -0.0154836062421944
+270 0.00558208708467659
+271 0.0114870902959279
+272 0.231287473612096
+273 0.0339554100844083
+274 0.0575163566469858
+275 0.200319219612533
+276 0.130545113965154
+277 0.103208025156172
+278 -0.00828951271991966
+279 -0.011478192463039
+280 -0.0144428867470379
+281 -0.0166239539451988
+282 -0.0140920994032186
+283 -0.0158723288388108
+284 -0.0165069706040961
+285 -0.0161430629749153
+286 -0.0156730553051534
+287 -0.0140404598916659
+288 -0.0133504108974733
+289 -0.0157085445845684
+290 -0.0176124651386038
+291 -0.0171680503827001
+292 -0.0170039830572799
+293 -0.0168887759061973
+294 -0.0169101987732867
+295 -0.0163174932481928
+296 -0.0167303236582728
+297 -0.0164240715366653
+298 -0.0174052740404305
+299 -0.0154895527247017
+300 -0.0136444220312839
+301 -0.0116830781987026
+302 -0.0115068177333964
+303 -0.0122234935117673
+304 -0.0161080245808241
+305 -0.0156513921624129
+306 -0.015465759720129
+307 -0.0155883071657887
+308 -0.014915569597449
+309 -0.0154401977831601
+310 -0.0152328705988631
+311 -0.0150660231818582
+312 -0.0162849647550971
+313 -0.0156909486406831
+314 -0.0157314619149535
+315 -0.0171049069711299
+316 -0.0163207392432989
+317 -0.0162187518728422
+318 -0.0159225278740695
+319 -0.0158753160806369
+320 -0.0175020706698857
+321 -0.0162498852657993
+322 -0.0142911340574672
+323 -0.0134726499133121
+324 -0.0139601338890013
+325 -0.0135761876345162
+326 -0.0137860102565959
+327 0.00758105123652143
+328 0.0138556686845422
+329 0.160536954774616
+330 0.0580898398456171
+331 0.0362943231984366
+332 0.0582894097570709
+333 0.140607199465268
+334 0.122618966464092
+335 0.0544884026670781
+336 0.0574883295508244
+337 -0.0128811621108332
+338 -0.0142051495442353
+339 -0.012596825344306
+340 -0.0144711739317383
+341 -0.0143424560269512
+342 -0.0151482554143398
+343 -0.0152335381293791
+344 -0.0145008541639242
+345 -0.0128863677349906
+346 -0.0135998919997521
+347 -0.0137187354568586
+348 -0.016562150133356
+349 -0.0159327586951356
+350 -0.0157278421724429
+351 -0.0156917921778683
+352 -0.0162525169522264
+353 -0.0151087680645235
+354 -0.0163683946557918
+355 -0.0158321090068333
+356 -0.014187820897252
+357 -0.0135506277381031
+358 -0.0129291218507853
+359 -0.011476061331394
+360 -0.0106220863859184
+361 -0.0136381523747695
+362 -0.0144198007144617
+363 -0.0140646467360062
+364 -0.0146311562003427
+365 -0.0138043111265009
+366 -0.0132336502438289
+367 -0.0137447378009751
+368 -0.0134055994936963
+369 -0.0138096044909662
+370 -0.0148709544542698
+371 -0.0141560548846661
+372 -0.0143189068321436
+373 -0.0154246653827396
+374 -0.0143998490618263
+375 -0.0151239610115372
+376 -0.0145837141470442
+377 -0.0149820141088871
+378 -0.0152660994133885
+379 -0.0150896640677698
+380 -0.0143925874319689
+381 -0.012857919840862
+382 -0.012469852706461
+383 -0.0114191455070416
+384 -0.0117369627541799
+385 0.00901231127194259
+386 0.112581309251641
+387 0.0630586366341156
+388 0.0560506964150278
+389 0.034078031969884
+390 0.0673456104691437
+391 0.0675823686435704
+392 0.125111752483497
+393 0.0574208869213907
+394 0.0547195112212531
+395 -0.0126520762992662
+396 -0.0108416098060863
+397 -0.0130469248384881
+398 -0.0127546014788274
+399 -0.0132792357499854
+400 -0.0146832842515137
+401 -0.0126612510959431
+402 -0.0115800372136954
+403 -0.0113903072278453
+404 -0.0140846407853927
+405 -0.0131520362471166
+406 -0.0151139726926659
+407 -0.014338285447184
+408 -0.0139604129340576
+409 -0.0146086760584088
+410 -0.0147068805852203
+411 -0.0133990381740181
+412 -0.0146858710730989
+413 -0.0130742254367083
+414 -0.0131112804223081
+415 -0.0137104304702131
+416 -0.0127181490916882
+417 -0.0101122805581215
+418 -0.0116311057808783
+419 -0.0116685677717087
+420 -0.0125364818049418
+421 -0.0131681573750755
+422 -0.0136051276108772
+423 -0.0120078720987834
+424 -0.0120742461009416
+425 -0.0122528176238668
+426 -0.0117254366398627
+427 -0.0121713901545344
+428 -0.0134473192309673
+429 -0.0125993249687127
+430 -0.0127679522459455
+431 -0.0139092549620457
+432 -0.012803641341176
+433 -0.0136774030500624
+434 -0.0141830514589281
+435 -0.0128995570395618
+436 -0.0138061906269556
+437 -0.0138485903191603
+438 -0.0134705594226274
+439 -0.0135710367850959
+440 -0.0134802406736088
+441 -0.0114240523633417
+442 0.00941052876968686
+443 0.0430904882987511
+444 0.0610654134717703
+445 0.062319445242902
+446 0.0601232622212667
+447 0.0405754724552619
+448 0.0620931832458557
+449 0.0116088523973264
+450 0.0982633823768887
+451 0.0714603689521745
+452 0.0559398394361076
+453 -0.0101201070889078
+454 -0.00879771513149454
+455 -0.0115272354759577
+456 -0.0116269116840352
+457 -0.0122869101923228
+458 -0.0120188445899197
+459 -0.0118598309936189
+460 -0.0101004693907269
+461 -0.0114030122417514
+462 -0.0122734729370316
+463 -0.0115720712151182
+464 -0.0138183196216235
+465 -0.0127878610331042
+466 -0.0125076360625095
+467 -0.012954528306254
+468 -0.0134636454445403
+469 -0.0119988447482744
+470 -0.0129555835189171
+471 -0.0118492958760378
+472 -0.0118594416726488
+473 -0.0122062699596644
+474 -0.010080021699572
+475 -0.0096177810356361
+476 -0.0103925438270026
+477 -0.00956922010832709
+478 -0.0112412626452718
+479 -0.0121001052660535
+480 -0.011378640220319
+481 -0.0092484956113967
+482 -0.0106941808432033
+483 -0.0110034314038638
+484 -0.0110076000819364
+485 -0.0120066628455925
+486 -0.0120644325940679
+487 -0.0113002732292104
+488 -0.0115088408547228
+489 -0.0124620522688203
+490 -0.011436641831689
+491 -0.0122177151639931
+492 -0.011889848089267
+493 -0.0112514741258071
+494 -0.0123396196285994
+495 -0.0125441398199035
+496 -0.0120423852622065
+497 -0.0117710714915686
+498 -0.0120685728943707
+499 -0.0102415762932917
+500 -0.00952560982747511
+501 0.057365018480452
+502 0.0589533698587152
+503 0.0631840298934377
+504 0.0575949246719766
+505 0.0495075237359153
+506 -0.00276987533523964
+507 0.0566980942764334
+508 0.0446716609032234
+509 0.0800168272027955
+510 0.0590566885918559
+511 -0.00867575003512787
+512 -0.00762446391218853
+513 -0.0110530315739159
+514 -0.0112154987644773
+515 -0.0115595346792594
+516 -0.00980277940001169
+517 -0.00973051262117572
+518 -0.0103794047555936
+519 -0.0112379712859069
+520 -0.0115804163149423
+521 -0.0101848401928812
+522 -0.0124971838157264
+523 -0.0116095875762639
+524 -0.0110264315185272
+525 -0.0117091264505558
+526 -0.0123732885927322
+527 -0.010594137537324
+528 -0.0118959477121367
+529 -0.0104863548938662
+530 -0.0105605260979509
+531 -0.0106933635291854
+532 -0.0108043363381157
+533 -0.00921313629560141
+534 -0.00991616820012903
+535 -0.00958582052168739
+536 -0.00704544580624994
+537 -0.0106691661025772
+538 -0.010420801758334
+539 -0.00875433609811375
+540 -0.00883595894162315
+541 -0.00997102984238341
+542 -0.0102647231793572
+543 -0.0102814553860974
+544 -0.0108603826750419
+545 -0.00986739232072193
+546 -0.0101569632812344
+547 -0.011268829829185
+548 -0.0103314326239715
+549 -0.0108025538636602
+550 -0.0110885402975588
+551 -0.00994108726738058
+552 -0.0109717247548978
+553 -0.0111952027153027
+554 -0.0106777314688714
+555 -0.0105192670440749
+556 -0.0103965890169893
+557 -0.00921877528177769
+558 -0.0105438348503076
+559 0.0565407931203086
+560 0.0607631038776418
+561 0.0631456281304688
+562 0.0643969806813753
+563 0.00250124004424947
+564 0.0238807604805019
+565 0.0611062977177439
+566 0.00597775022828004
+567 0.0460556379694793
+568 0.0815090939407766
+569 -0.00626805713052914
+570 -0.00661349141206074
+571 -0.0103106916231778
+572 -0.00997759927119779
+573 -0.00925417552568336
+574 -0.00793232399214336
+575 -0.00984859802468641
+576 -0.00970943291247622
+577 -0.0102555983171129
+578 -0.0105112448841139
+579 -0.00934462727175849
+580 -0.0109724429920345
+581 -0.0105475816212072
+582 -0.00987869004825123
+583 -0.0108012349540747
+584 -0.0110285881583596
+585 -0.00936923199699531
+586 -0.010677032137483
+587 -0.00926759654250112
+588 -0.00927806685390026
+589 -0.00953198453346766
+590 -0.00985316922914821
+591 -0.00816343304426746
+592 -0.00804247528052676
+593 -0.00716187036218296
+594 -0.00719169352938419
+595 -0.00640320531281439
+596 -0.00933925279879329
+597 -0.00742884578783592
+598 -0.00884147481763569
+599 -0.00946231770499787
+600 -0.00920569741458586
+601 -0.00945237056796019
+602 -0.00981398771732927
+603 -0.00871297697902305
+604 -0.0100303276706874
+605 -0.00898480302286613
+606 -0.00924314281708078
+607 -0.00967182311916309
+608 -0.00990373367569264
+609 -0.00867546650016389
+610 -0.00974271626786161
+611 -0.00993605711012294
+612 -0.00942263108268127
+613 -0.00900896482065972
+614 -0.0091002536867116
+615 -0.0087141619357278
+616 -0.00892632720545352
+617 0.0589814861280723
+618 0.0605513762593439
+619 0.0714950418331747
+620 -0.00270802819557134
+621 0.0492471524740303
+622 0.038730090749927
+623 -0.00470286001171746
+624 0.0805291384934167
+625 -0.0061135815816416
+626 0.0469241708061885
+627 0.0129057834766504
+628 -0.00613654384956245
+629 -0.00879823441679327
+630 -0.00781138453907383
+631 -0.00742325743221473
+632 -0.00823530705565565
+633 -0.0084784951984544
+634 -0.00809365168883783
+635 -0.00953458560320773
+636 -0.00802484455858134
+637 -0.00916422962874895
+638 -0.00901522658367207
+639 -0.00980509257172476
+640 -0.00879042365734647
+641 -0.00895901541679582
+642 -0.00967011172668992
+643 -0.00909032972552398
+644 -0.00839888383893324
+645 -0.00811198094900032
+646 -0.00768107918073061
+647 -0.00816456224653991
+648 -0.0082275430634122
+649 -0.0081977088645516
+650 -0.00539347813540888
+651 -0.00654335448921841
+652 -0.00443308105716727
+653 -0.00570487900007702
+654 -0.0066893756968109
+655 -0.00818867754248517
+656 -0.00757689453770065
+657 -0.00809806707024929
+658 -0.00781954604985851
+659 -0.00817710586907003
+660 -0.00815598808085207
+661 -0.00838471453215144
+662 -0.00761655712958744
+663 -0.00754256056280177
+664 -0.00784016975796052
+665 -0.00809877261256007
+666 -0.00845387142411403
+667 -0.00839255166002082
+668 -0.00750643389123885
+669 -0.00842839786359518
+670 -0.00793771252048078
+671 -0.00821559065464683
+672 -0.00836801649799504
+673 -0.00801406294900344
+674 -0.0068829238602205
+675 0.0587431729672395
+676 0.0679066498016378
+677 0.00138627052356425
+678 0.045430011210707
+679 0.0703642058717147
+680 -0.00785311036081027
+681 0.0393771166371859
+682 -0.0012573720198598
+683 0.0787866974453597
+684 -0.00622669473512034
+685 -0.00636435714406588
+686 -0.00498738462505791
+687 -0.00682069596495773
+688 -0.00626878401038485
+689 -0.00829494420297491
+690 -0.00672112910303483
+691 -0.00742349355313316
+692 -0.00663050740514031
+693 -0.00668402104568857
+694 -0.00765554385447826
+695 -0.00750480426076586
+696 -0.00755677083867405
+697 -0.00878562401331522
+698 -0.00750067365297707
+699 -0.00777302023891454
+700 -0.00817258866736239
+701 -0.00782461564356417
+702 -0.00524788018311442
+703 -0.00639934484202989
+704 -0.00643323873066334
+705 -0.00675310931225713
+706 -0.00662734325519555
+707 -0.00521831889291382
+708 -0.00564541170834083
+709 -0.00456417269308792
+710 -0.00400766521918149
+711 -0.00371044720499201
+712 -0.00477769884156836
+713 -0.00650815478194108
+714 -0.00648004714637358
+715 -0.00676089500421721
+716 -0.00680941068103167
+717 -0.00642611423395982
+718 -0.00702188737616296
+719 -0.00653395389621014
+720 -0.00584494763207698
+721 -0.00698560115812894
+722 -0.00617395252882351
+723 -0.00649589045366301
+724 -0.00697571124768394
+725 -0.00710622766255317
+726 -0.00619879747257016
+727 -0.00665952366507082
+728 -0.00697267381777301
+729 -0.00656067343167249
+730 -0.00686476942480864
+731 -0.00642237619826439
+732 -0.00571464839985842
+733 0.0667446844690344
+734 -0.000602956363836805
+735 0.0435578419252502
+736 0.0671949304076346
+737 0.00272911716837698
+738 0.0617459164425819
+739 -0.00803573888395584
+740 0.0408644996908555
+741 -0.00188635612841879
+742 0.012816656873346
+743 -0.00568767407759494
+744 -0.00636171895252407
+745 -0.00542006518701238
+746 -0.00762131167004239
+747 -0.00660561178711003
+748 -0.00606759153689151
+749 -0.0058887906931096
+750 -0.00489479103900307
+751 -0.00560951874516548
+752 -0.00616879095509287
+753 -0.00635688929093473
+754 -0.00647498478390112
+755 -0.00602500915318228
+756 -0.00733096951475789
+757 -0.00594264381799701
+758 -0.00639292931982792
+759 -0.00572524668506834
+760 -0.00539599866786123
+761 -0.00379529224483641
+762 -0.00508628266806213
+763 -0.00482859601859399
+764 -0.00384270276169917
+765 -0.0048947554317503
+766 -0.0036868713314995
+767 -0.00296664588261117
+768 -0.00394853350358643
+769 -0.00370978621561119
+770 -0.00496135959443785
+771 -0.00483764544982328
+772 -0.00514032926285884
+773 -0.00429422735197048
+774 -0.00533057103732123
+775 -0.00536211175807313
+776 -0.00507354991704586
+777 -0.00523842710609345
+778 -0.00538601193828756
+779 -0.00457245530033061
+780 -0.00555196995586425
+781 -0.00431853553236008
+782 -0.00528202292794999
+783 -0.00548332867892791
+784 -0.0054668106220194
+785 -0.00467211264805423
+786 -0.0056172070705691
+787 -0.0050524268347218
+788 -0.00490507861057278
+789 -0.00533817709181219
+790 -0.00320459126822799
+791 0.000899360051725526
+792 0.0415445575505902
+793 0.0636610531703114
+794 -0.0016809425357539
+795 0.0687212087083107
+796 0.000196803163775908
+797 0.0629583673226595
+798 -0.00692549309097212
+799 -0.00464547193258324
+800 -0.00554999704707722
+801 -0.00548776067864322
+802 -0.00542976281097604
+803 -0.0035044437646846
+804 -0.0055525582475137
+805 -0.00571646473007065
+806 -0.00559650400651719
+807 -0.0038274405540596
+808 -0.0049295061654944
+809 -0.00431367615172496
+810 -0.00488424593891825
+811 -0.00508803026004008
+812 -0.00516376184293035
+813 -0.00533514975859532
+814 -0.00495590288647863
+815 -0.00582914296339316
+816 -0.00363638197988919
+817 -0.00435167714877856
+818 -0.00395852323776287
+819 -0.0040209798766184
+820 -0.00259964040539382
+821 -0.00252589454921766
+822 -0.00402931674090356
+823 -0.00437393888079731
+824 -0.00424357159059594
+825 -0.00410943374121717
+826 -0.00317027800134567
+827 -0.00401422305864503
+828 -0.00362959396117676
+829 -0.00435662189051477
+830 -0.00429725981497675
+831 -0.00437374795310113
+832 -0.00378466430841879
+833 -0.00411294642315096
+834 -0.00378707889918487
+835 -0.00453957661876227
+836 -0.00428380826395531
+837 -0.00440314525366383
+838 -0.0035999051330324
+839 -0.00448715088820831
+840 -0.00394825961839359
+841 -0.00424255651229298
+842 -0.00457239362923998
+843 -0.00454960510129971
+844 -0.00359729823872128
+845 -0.00427987549442926
+846 -0.00383749859614317
+847 -0.00440264075958008
+848 -0.00443053281886172
+849 -0.00462479790588209
+850 0.0635581089210887
+851 -0.00436894515178304
+852 0.0644673368682151
+853 -0.000871046243511147
+854 0.0774867967247699
+855 -0.00520058993039265
+856 -0.00455758197376518
+857 -0.0045515125818426
+858 -0.00326760124250017
+859 -0.00391042035486497
+860 -0.00365931176845998
+861 -0.00406590514483785
+862 -0.0025402582470179
+863 -0.00536731784656349
+864 -0.00383767883865199
+865 -0.00355617763954968
+866 -0.00378000247138692
+867 -0.00392301919821498
+868 -0.00311017256485425
+869 -0.00362676859689902
+870 -0.00388528530404416
+871 -0.00403811507092716
+872 -0.00389341264783238
+873 -0.00250872494912967
+874 -0.00227481761327797
+875 -0.00232996833366221
+876 -0.00304083453398083
+877 -0.00268074555016819
+878 -0.00265096778109124
+879 -0.00262000280831905
+880 -0.00263328713175465
+881 -0.0025831537476473
+882 -0.00285396803049453
+883 -0.00275081518908208
+884 -0.00275786365878849
+885 -0.00270692981149454
+886 -0.00279346701415621
+887 -0.00243358618146588
+888 -0.00292581648863345
+889 -0.00324682684580069
+890 -0.00268405340278505
+891 -0.00298098008752344
+892 -0.0030275487992921
+893 -0.00253465692577619
+894 -0.0030528198225934
+895 -0.00306163668899383
+896 -0.00302971568628192
+897 -0.00312372318456645
+898 -0.00302532654866883
+899 -0.00260699554256586
+900 -0.00314997872940616
+901 -0.00310092374684808
+902 -0.00285287807280204
+903 -0.00322514674479286
+904 -0.00324555248275787
+905 -0.00266343884682981
+906 -0.0033292088604627
+907 -0.00311942534161818
+908 -0.003188028948592
+909 0.063849474353312
+910 -0.00314766360320187
+911 0.0654720703776586
+912 -0.00104922659034679
+913 0.00682464273763961
+914 -0.00303985655616328
+915 -0.00305320941524036
+916 -0.00235000269848827
+917 -0.00159322372169743
+918 -0.00266570495618958
+919 -0.00262099570862898
+920 -0.00331666377238153
+921 -0.000308570913141365
+922 -0.0043164022171378
+923 -0.00371227484203275
+924 -0.00247827724873875
+925 -0.00234032536054011
+926 -0.00253743141649567
+927 -0.00196547166307156
+928 -0.00258072736023124
+929 -0.00262490193099622
+930 -0.00130204665127498
+931 -0.00126358935693649
+932 -0.00125324190600646
+933 -0.00103101472775934
+934 -0.00130963767061068
+935 -0.00170600528719406
+936 -0.00131231544424995
+937 -0.00130240649250473
+938 -0.0011496494054081
+939 -0.00120338315610114
+940 -0.00107955390929202
+941 -0.00136336765253578
+942 -0.00138525137115296
+943 -0.00142000506928781
+944 -0.00137347169208518
+945 -0.00130072987756282
+946 -0.00149282878067872
+947 -0.00147328073275425
+948 -0.00148996134571696
+949 -0.0015346094598941
+950 -0.00155787525175409
+951 -0.0015758298667031
+952 -0.00144258818629267
+953 -0.0016057038498501
+954 -0.00161313789189179
+955 -0.0014926163928444
+956 -0.00167630619540263
+957 -0.00171225333920666
+958 -0.00158417048330168
+959 -0.00172363849918105
+960 -0.00178681745393769
+961 -0.00177326985666539
+962 -0.00177274859905472
+963 -0.00180813461186522
+964 -0.00164734316246358
+965 -0.00179758469878046
+966 -0.00170533834289266
+967 -0.0018391064291266
+968 0.0648568044321966
+969 -0.00181391508277247
+970 -0.00187271774497418
+971 -0.00171843154333231
+972 0.00690748933974905
+973 -0.0020046618702145
+974 -0.00209930430368119
+975 -0.00151158386207428
+976 -0.00215827618636864
+977 -0.00219374577659291
+978 -0.00221636226760568
+979 -0.00228093075519445
+980 -0.00204652728069895
+981 -0.00229765429774947
+982 -0.00230704101453769
+983 -0.00107403973652915
+984 -0.00110441180969535
+985 -0.00113692360921596
+986 -0.00114267728647558
+987 0.000141381944635982
+988 0.00011755670125973
+989 9.44527623139297e-05
+990 7.92340829889737e-05
+991 0.000230018756762113
+992 0.000207110838703588
+993 0.000182764350871147
+994 0.000169272314028801
+995 0.000144905246673696
+996 0.000120096836237343
+997 9.53172448027285e-05
+998 7.0792968638772e-05
+999 4.98796983407663e-05
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat
new file mode 100644
index 000000000..797a3d099
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat
@@ -0,0 +1,901 @@
+#scatter real total user system repeat
+101 0.00124120712280273 0.0 0.0 0.0 101
+102 0.00123310089111328 0.0 0.0 0.0 102
+103 0.0012359619140625 0.0 0.0 0.0 103
+104 0.00124216079711914 0.0 0.0 0.0 104
+105 0.00124096870422363 0.0 0.0 0.0 105
+106 0.00124096870422363 0.00999999999999979 0.00999999999999979 0.0 106
+107 0.00124692916870117 0.0 0.0 0.0 107
+108 0.00122189521789551 0.0 0.0 0.0 108
+109 0.00124287605285645 0.0 0.0 0.0 109
+110 0.00124287605285645 0.0 0.0 0.0 110
+111 0.00124597549438477 0.0 0.0 0.0 111
+112 0.0012519359588623 0.0 0.0 0.0 112
+113 0.00124788284301758 0.0 0.0 0.0 113
+114 0.00124502182006836 0.0100000000000007 0.0100000000000007 0.0 114
+115 0.00124692916870117 0.0 0.0 0.0 115
+116 0.00123810768127441 0.0 0.0 0.0 116
+117 0.00125002861022949 0.0 0.0 0.0 117
+118 0.00125789642333984 0.0 0.0 0.0 118
+119 0.0300710201263428 0.0299999999999994 0.0299999999999994 0.0 119
+120 0.00127291679382324 0.0 0.0 0.0 120
+121 0.00133109092712402 0.0 0.0 0.0 121
+122 0.0012810230255127 0.0100000000000007 0.0100000000000007 0.0 122
+123 0.00127792358398438 0.0 0.0 0.0 123
+124 0.0012671947479248 0.0 0.0 0.0 124
+125 0.00126814842224121 0.0 0.0 0.0 125
+126 0.00125694274902344 0.0 0.0 0.0 126
+127 0.00124883651733398 0.0 0.0 0.0 127
+128 0.00124907493591309 0.0 0.0 0.0 128
+129 0.0012509822845459 0.0 0.0 0.0 129
+130 0.0012509822845459 0.00999999999999979 0.00999999999999979 0.0 130
+131 0.00125312805175781 0.0 0.0 0.0 131
+132 0.00131797790527344 0.0 0.0 0.0 132
+133 0.00125694274902344 0.0 0.0 0.0 133
+134 0.00125288963317871 0.0 0.0 0.0 134
+135 0.0012519359588623 0.0 0.0 0.0 135
+136 0.00124692916870117 0.0 0.0 0.0 136
+137 0.00124692916870117 0.0 0.0 0.0 137
+138 0.00124907493591309 0.00999999999999979 0.00999999999999979 0.0 138
+139 0.0012509822845459 0.0 0.0 0.0 139
+140 0.00125598907470703 0.0 0.0 0.0 140
+141 0.00124287605285645 0.0 0.0 0.0 141
+142 0.00124812126159668 0.0 0.0 0.0 142
+143 0.00124883651733398 0.0 0.0 0.0 143
+144 0.00123500823974609 0.0 0.0 0.0 144
+145 0.00124382972717285 0.00999999999999979 0.00999999999999979 0.0 145
+146 0.00123715400695801 0.0 0.0 0.0 146
+147 0.00134897232055664 0.0 0.0 0.0 147
+148 0.00123906135559082 0.0 0.0 0.0 148
+149 0.00124788284301758 0.0 0.0 0.0 149
+150 0.0012359619140625 0.0 0.0 0.0 150
+151 0.00123476982116699 0.0 0.0 0.0 151
+152 0.00124597549438477 0.0 0.0 0.0 152
+153 0.00124597549438477 0.0100000000000007 0.0100000000000007 0.0 153
+154 0.00123190879821777 0.0 0.0 0.0 154
+155 0.0012509822845459 0.0 0.0 0.0 155
+156 0.00124096870422363 0.0 0.0 0.0 156
+157 0.0012359619140625 0.0 0.0 0.0 157
+158 0.00123906135559082 0.0 0.0 0.0 158
+159 0.00123906135559082 0.0 0.0 0.0 159
+160 0.00123691558837891 0.0 0.0 0.0 160
+161 0.00124001502990723 0.00999999999999979 0.00999999999999979 0.0 161
+162 0.00124597549438477 0.0 0.0 0.0 162
+163 0.00124096870422363 0.0 0.0 0.0 163
+164 0.0012359619140625 0.0 0.0 0.0 164
+165 0.00123500823974609 0.0 0.0 0.0 165
+166 0.00173211097717285 0.0 0.0 0.0 166
+167 0.00125217437744141 0.0 0.0 0.0 167
+168 0.00124406814575195 0.00999999999999979 0.00999999999999979 0.0 168
+169 0.00124096870422363 0.0 0.0 0.0 169
+170 0.00123381614685059 0.0 0.0 0.0 170
+171 0.00124001502990723 0.0 0.0 0.0 171
+172 0.00124001502990723 0.0 0.0 0.0 172
+173 0.00123715400695801 0.0 0.0 0.0 173
+174 0.00123691558837891 0.0 0.0 0.0 174
+175 0.00124692916870117 0.0 0.0 0.0 175
+176 0.00130796432495117 0.00999999999999979 0.00999999999999979 0.0 176
+177 0.00127100944519043 0.0 0.0 0.0 177
+178 0.0301418304443359 0.0300000000000002 0.0300000000000002 0.0 178
+179 0.00127196311950684 0.0 0.0 0.0 179
+180 0.00131416320800781 0.0 0.0 0.0 180
+181 0.00119805335998535 0.0 0.0 0.0 181
+182 0.00128316879272461 0.0 0.0 0.0 182
+183 0.0013129711151123 0.0 0.0 0.0 183
+184 0.00127100944519043 0.0 0.0 0.0 184
+185 0.00141692161560059 0.0 0.0 0.0 185
+186 0.00130701065063477 0.0 0.0 0.0 186
+187 0.00126099586486816 0.0 0.0 0.0 187
+188 0.00125694274902344 0.0 0.0 0.0 188
+189 0.00124502182006836 0.0 0.0 0.0 189
+190 0.00125217437744141 0.0 0.0 0.0 190
+191 0.00124216079711914 0.0 0.0 0.0 191
+192 0.00125408172607422 0.0100000000000007 0.0100000000000007 0.0 192
+193 0.00124502182006836 0.0 0.0 0.0 193
+194 0.00125718116760254 0.0 0.0 0.0 194
+195 0.00125503540039062 0.0 0.0 0.0 195
+196 0.00125598907470703 0.0 0.0 0.0 196
+197 0.00137186050415039 0.0 0.0 0.0 197
+198 0.0011131763458252 0.0 0.0 0.0 198
+199 0.00124788284301758 0.0 0.0 0.0 199
+200 0.00124597549438477 0.00999999999999979 0.00999999999999979 0.0 200
+201 0.00124597549438477 0.0 0.0 0.0 201
+202 0.00132608413696289 0.0 0.0 0.0 202
+203 0.00129795074462891 0.0 0.0 0.0 203
+204 0.00120997428894043 0.0 0.0 0.0 204
+205 0.00124192237854004 0.0 0.0 0.0 205
+206 0.00126290321350098 0.0 0.0 0.0 206
+207 0.00125002861022949 0.00999999999999979 0.00999999999999979 0.0 207
+208 0.00125503540039062 0.0 0.0 0.0 208
+209 0.00124883651733398 0.0 0.0 0.0 209
+210 0.00124192237854004 0.0 0.0 0.0 210
+211 0.00124812126159668 0.0 0.0 0.0 211
+212 0.00125002861022949 0.0 0.0 0.0 212
+213 0.00124287605285645 0.0 0.0 0.0 213
+214 0.00125288963317871 0.0 0.0 0.0 214
+215 0.00125002861022949 0.00999999999999979 0.00999999999999979 0.0 215
+216 0.00124287605285645 0.0 0.0 0.0 216
+217 0.00124001502990723 0.0 0.0 0.0 217
+218 0.00124883651733398 0.0 0.0 0.0 218
+219 0.00124192237854004 0.0 0.0 0.0 219
+220 0.00123405456542969 0.0 0.0 0.0 220
+221 0.00124883651733398 0.0 0.0 0.0 221
+222 0.00123810768127441 0.0 0.0 0.0 222
+223 0.0012359619140625 0.00999999999999979 0.00999999999999979 0.0 223
+224 0.00123405456542969 0.0 0.0 0.0 224
+225 0.00124788284301758 0.0 0.0 0.0 225
+226 0.00148200988769531 0.0 0.0 0.0 226
+227 0.00123882293701172 0.0 0.0 0.0 227
+228 0.00124907493591309 0.0 0.0 0.0 228
+229 0.00124120712280273 0.0 0.0 0.0 229
+230 0.00124096870422363 0.0 0.0 0.0 230
+231 0.00124812126159668 0.0100000000000007 0.0100000000000007 0.0 231
+232 0.00124001502990723 0.0 0.0 0.0 232
+233 0.001251220703125 0.0 0.0 0.0 233
+234 0.00123810768127441 0.0 0.0 0.0 234
+235 0.00125885009765625 0.0 0.0 0.0 235
+236 0.00126409530639648 0.0 0.0 0.0 236
+237 0.0301649570465088 0.0299999999999994 0.0299999999999994 0.0 237
+238 0.00130605697631836 0.0 0.0 0.0 238
+239 0.00129795074462891 0.0100000000000007 0.0100000000000007 0.0 239
+240 0.00127410888671875 0.0 0.0 0.0 240
+241 0.00134420394897461 0.0 0.0 0.0 241
+242 0.00127720832824707 0.0 0.0 0.0 242
+243 0.00126409530639648 0.0 0.0 0.0 243
+244 0.00125288963317871 0.0 0.0 0.0 244
+245 0.00125384330749512 0.0 0.0 0.0 245
+246 0.00124788284301758 0.0 0.0 0.0 246
+247 0.00124287605285645 0.00999999999999979 0.00999999999999979 0.0 247
+248 0.00125813484191895 0.0 0.0 0.0 248
+249 0.00125002861022949 0.0 0.0 0.0 249
+250 0.00124502182006836 0.0 0.0 0.0 250
+251 0.00125694274902344 0.0 0.0 0.0 251
+252 0.00124192237854004 0.0 0.0 0.0 252
+253 0.00128889083862305 0.0 0.0 0.0 253
+254 0.00124883651733398 0.00999999999999979 0.00999999999999979 0.0 254
+255 0.00124907493591309 0.0 0.0 0.0 255
+256 0.00124812126159668 0.0 0.0 0.0 256
+257 0.00125503540039062 0.0 0.0 0.0 257
+258 0.00125789642333984 0.0 0.0 0.0 258
+259 0.00124692916870117 0.0 0.0 0.0 259
+260 0.00124812126159668 0.0 0.0 0.0 260
+261 0.00124192237854004 0.0 0.0 0.0 261
+262 0.00124287605285645 0.00999999999999979 0.00999999999999979 0.0 262
+263 0.00124192237854004 0.0 0.0 0.0 263
+264 0.00123500823974609 0.0 0.0 0.0 264
+265 0.00123715400695801 0.0 0.0 0.0 265
+266 0.0018610954284668 0.0 0.0 0.0 266
+267 0.00128507614135742 0.0 0.0 0.0 267
+268 0.00123906135559082 0.0 0.0 0.0 268
+269 0.00124001502990723 0.0 0.0 0.0 269
+270 0.00124907493591309 0.0 0.0 0.0 270
+271 0.00124716758728027 0.0 0.0 0.0 271
+272 0.00124001502990723 0.0 0.0 0.0 272
+273 0.00125288963317871 0.0 0.0 0.0 273
+274 0.00118589401245117 0.0 0.0 0.0 274
+275 0.00124192237854004 0.0 0.0 0.0 275
+276 0.00123906135559082 0.0 0.0 0.0 276
+277 0.00125002861022949 0.00999999999999979 0.00999999999999979 0.0 277
+278 0.00124597549438477 0.0 0.0 0.0 278
+279 0.00124096870422363 0.0 0.0 0.0 279
+280 0.00124382972717285 0.0 0.0 0.0 280
+281 0.00125694274902344 0.0 0.0 0.0 281
+282 0.00124812126159668 0.0 0.0 0.0 282
+283 0.00124192237854004 0.0 0.0 0.0 283
+284 0.001251220703125 0.0 0.0 0.0 284
+285 0.00128316879272461 0.00999999999999979 0.00999999999999979 0.0 285
+286 0.00124287605285645 0.0 0.0 0.0 286
+287 0.00133800506591797 0.0 0.0 0.0 287
+288 0.00124788284301758 0.0 0.0 0.0 288
+289 0.0012509822845459 0.0 0.0 0.0 289
+290 0.00124883651733398 0.0 0.0 0.0 290
+291 0.00124502182006836 0.0 0.0 0.0 291
+292 0.00124382972717285 0.0 0.0 0.0 292
+293 0.00125908851623535 0.00999999999999979 0.00999999999999979 0.0 293
+294 0.00126791000366211 0.0 0.0 0.0 294
+295 0.0215630531311035 0.0200000000000005 0.0200000000000005 0.0 295
+296 0.00352096557617188 0.0 0.0 0.0 296
+297 0.00220417976379395 0.0 0.0 0.0 297
+298 0.00125384330749512 0.00999999999999979 0.00999999999999979 0.0 298
+299 0.00129985809326172 0.0 0.0 0.0 299
+300 0.00123715400695801 0.0 0.0 0.0 300
+301 0.00124096870422363 0.0 0.0 0.0 301
+302 0.00124001502990723 0.0 0.0 0.0 302
+303 0.00123405456542969 0.0 0.0 0.0 303
+304 0.0012509822845459 0.0 0.0 0.0 304
+305 0.0012509822845459 0.00999999999999979 0.00999999999999979 0.0 305
+306 0.00125288963317871 0.0 0.0 0.0 306
+307 0.00126099586486816 0.0 0.0 0.0 307
+308 0.00124788284301758 0.0 0.0 0.0 308
+309 0.00124907493591309 0.0 0.0 0.0 309
+310 0.00124096870422363 0.0 0.0 0.0 310
+311 0.00125002861022949 0.0 0.0 0.0 311
+312 0.0012519359588623 0.0 0.0 0.0 312
+313 0.00126314163208008 0.0100000000000007 0.0100000000000007 0.0 313
+314 0.00124406814575195 0.0 0.0 0.0 314
+315 0.00125789642333984 0.0 0.0 0.0 315
+316 0.00128793716430664 0.0 0.0 0.0 316
+317 0.0012509822845459 0.0 0.0 0.0 317
+318 0.00156903266906738 0.0 0.0 0.0 318
+319 0.00181221961975098 0.0 0.0 0.0 319
+320 0.0018010139465332 0.00999999999999979 0.00999999999999979 0.0 320
+321 0.00193095207214355 0.0 0.0 0.0 321
+322 0.0014030933380127 0.0 0.0 0.0 322
+323 0.0012519359588623 0.0 0.0 0.0 323
+324 0.00121903419494629 0.0 0.0 0.0 324
+325 0.00120687484741211 0.0 0.0 0.0 325
+326 0.00123000144958496 0.0 0.0 0.0 326
+327 0.00123095512390137 0.00999999999999979 0.00999999999999979 0.0 327
+328 0.00124692916870117 0.0 0.0 0.0 328
+329 0.00127005577087402 0.0 0.0 0.0 329
+330 0.00124716758728027 0.0 0.0 0.0 330
+331 0.00126481056213379 0.0 0.0 0.0 331
+332 0.00125694274902344 0.0 0.0 0.0 332
+333 0.00118613243103027 0.0 0.0 0.0 333
+334 0.00124001502990723 0.0 0.0 0.0 334
+335 0.00124812126159668 0.00999999999999979 0.00999999999999979 0.0 335
+336 0.00126791000366211 0.0 0.0 0.0 336
+337 0.00124692916870117 0.0 0.0 0.0 337
+338 0.00124907493591309 0.0 0.0 0.0 338
+339 0.00126218795776367 0.0 0.0 0.0 339
+340 0.00124406814575195 0.0 0.0 0.0 340
+341 0.0012359619140625 0.0 0.0 0.0 341
+342 0.00125885009765625 0.0100000000000007 0.0100000000000007 0.0 342
+343 0.00131320953369141 0.0 0.0 0.0 343
+344 0.0012519359588623 0.0 0.0 0.0 344
+345 0.00123691558837891 0.0 0.0 0.0 345
+346 0.00125694274902344 0.0 0.0 0.0 346
+347 0.00139403343200684 0.0 0.0 0.0 347
+348 0.00127506256103516 0.0 0.0 0.0 348
+349 0.00130009651184082 0.0 0.0 0.0 349
+350 0.00128412246704102 0.00999999999999979 0.00999999999999979 0.0 350
+351 0.00133395195007324 0.0 0.0 0.0 351
+352 0.00152087211608887 0.0 0.0 0.0 352
+353 0.0015110969543457 0.0 0.0 0.0 353
+354 0.0320370197296143 0.0299999999999994 0.0299999999999994 0.0 354
+355 0.00130319595336914 0.0 0.0 0.0 355
+356 0.0012969970703125 0.0100000000000007 0.0100000000000007 0.0 356
+357 0.00127792358398438 0.0 0.0 0.0 357
+358 0.00127506256103516 0.0 0.0 0.0 358
+359 0.00126791000366211 0.0 0.0 0.0 359
+360 0.00126385688781738 0.0 0.0 0.0 360
+361 0.00125694274902344 0.0 0.0 0.0 361
+362 0.00125002861022949 0.0 0.0 0.0 362
+363 0.00125598907470703 0.0 0.0 0.0 363
+364 0.00125002861022949 0.00999999999999979 0.00999999999999979 0.0 364
+365 0.00124692916870117 0.0 0.0 0.0 365
+366 0.00125503540039062 0.0 0.0 0.0 366
+367 0.00125217437744141 0.0 0.0 0.0 367
+368 0.00124406814575195 0.0 0.0 0.0 368
+369 0.00125789642333984 0.0 0.0 0.0 369
+370 0.0012509822845459 0.0 0.0 0.0 370
+371 0.00124287605285645 0.0 0.0 0.0 371
+372 0.00124812126159668 0.00999999999999979 0.00999999999999979 0.0 372
+373 0.00124692916870117 0.0 0.0 0.0 373
+374 0.0012519359588623 0.0 0.0 0.0 374
+375 0.0012519359588623 0.0 0.0 0.0 375
+376 0.00125503540039062 0.0 0.0 0.0 376
+377 0.00123691558837891 0.0 0.0 0.0 377
+378 0.00123310089111328 0.0 0.0 0.0 378
+379 0.00123190879821777 0.0 0.0 0.0 379
+380 0.00124382972717285 0.00999999999999979 0.00999999999999979 0.0 380
+381 0.00123906135559082 0.0 0.0 0.0 381
+382 0.00124883651733398 0.0 0.0 0.0 382
+383 0.00124192237854004 0.0 0.0 0.0 383
+384 0.0012509822845459 0.0 0.0 0.0 384
+385 0.00124406814575195 0.0 0.0 0.0 385
+386 0.00123405456542969 0.0 0.0 0.0 386
+387 0.00124788284301758 0.0100000000000007 0.0100000000000007 0.0 387
+388 0.00125002861022949 0.0 0.0 0.0 388
+389 0.00123214721679688 0.0 0.0 0.0 389
+390 0.00123810768127441 0.0 0.0 0.0 390
+391 0.00124287605285645 0.0 0.0 0.0 391
+392 0.0012359619140625 0.0 0.0 0.0 392
+393 0.00123405456542969 0.0 0.0 0.0 393
+394 0.00124621391296387 0.0 0.0 0.0 394
+395 0.00124907493591309 0.00999999999999979 0.00999999999999979 0.0 395
+396 0.00124216079711914 0.0 0.0 0.0 396
+397 0.00123190879821777 0.0 0.0 0.0 397
+398 0.00139594078063965 0.0 0.0 0.0 398
+399 0.0022280216217041 0.0 0.0 0.0 399
+400 0.00197100639343262 0.0 0.0 0.0 400
+401 0.00163888931274414 0.00999999999999979 0.00999999999999979 0.0 401
+402 0.00142812728881836 0.0 0.0 0.0 402
+403 0.00138711929321289 0.0 0.0 0.0 403
+404 0.00148701667785645 0.0 0.0 0.0 404
+405 0.00162696838378906 0.0 0.0 0.0 405
+406 0.00157594680786133 0.0 0.0 0.0 406
+407 0.00158596038818359 0.00999999999999979 0.00999999999999979 0.0 407
+408 0.00186491012573242 0.0 0.0 0.0 408
+409 0.0016481876373291 0.0 0.0 0.0 409
+410 0.00135707855224609 0.0 0.0 0.0 410
+411 0.00129485130310059 0.0 0.0 0.0 411
+412 0.0299890041351318 0.0300000000000002 0.0300000000000002 0.0 412
+413 0.00138497352600098 0.0 0.0 0.0 413
+414 0.0013120174407959 0.0 0.0 0.0 414
+415 0.00127696990966797 0.00999999999999979 0.00999999999999979 0.0 415
+416 0.00128507614135742 0.0 0.0 0.0 416
+417 0.00126981735229492 0.0 0.0 0.0 417
+418 0.00126814842224121 0.0 0.0 0.0 418
+419 0.00125718116760254 0.0 0.0 0.0 419
+420 0.00125408172607422 0.0 0.0 0.0 420
+421 0.0012509822845459 0.0 0.0 0.0 421
+422 0.00124716758728027 0.0 0.0 0.0 422
+423 0.00125408172607422 0.0100000000000007 0.0100000000000007 0.0 423
+424 0.001251220703125 0.0 0.0 0.0 424
+425 0.00124812126159668 0.0 0.0 0.0 425
+426 0.00124692916870117 0.0 0.0 0.0 426
+427 0.00124597549438477 0.0 0.0 0.0 427
+428 0.001251220703125 0.0 0.0 0.0 428
+429 0.00124311447143555 0.0 0.0 0.0 429
+430 0.00124812126159668 0.00999999999999979 0.00999999999999979 0.0 430
+431 0.00124311447143555 0.0 0.0 0.0 431
+432 0.00125002861022949 0.0 0.0 0.0 432
+433 0.00125002861022949 0.0 0.0 0.0 433
+434 0.00125002861022949 0.0 0.0 0.0 434
+435 0.00124502182006836 0.0 0.0 0.0 435
+436 0.00124382972717285 0.0 0.0 0.0 436
+437 0.00124812126159668 0.0 0.0 0.0 437
+438 0.00124406814575195 0.00999999999999979 0.00999999999999979 0.0 438
+439 0.00122785568237305 0.0 0.0 0.0 439
+440 0.00123214721679688 0.0 0.0 0.0 440
+441 0.00123691558837891 0.0 0.0 0.0 441
+442 0.00124502182006836 0.0 0.0 0.0 442
+443 0.00123405456542969 0.0 0.0 0.0 443
+444 0.00124311447143555 0.0 0.0 0.0 444
+445 0.00124382972717285 0.0 0.0 0.0 445
+446 0.00123906135559082 0.00999999999999979 0.00999999999999979 0.0 446
+447 0.00124096870422363 0.0 0.0 0.0 447
+448 0.00124311447143555 0.0 0.0 0.0 448
+449 0.00124788284301758 0.0 0.0 0.0 449
+450 0.00123500823974609 0.0 0.0 0.0 450
+451 0.00124096870422363 0.0 0.0 0.0 451
+452 0.00123906135559082 0.0 0.0 0.0 452
+453 0.00123500823974609 0.0 0.0 0.0 453
+454 0.0012359619140625 0.0100000000000007 0.0100000000000007 0.0 454
+455 0.00124192237854004 0.0 0.0 0.0 455
+456 0.00124096870422363 0.0 0.0 0.0 456
+457 0.00123405456542969 0.0 0.0 0.0 457
+458 0.00124311447143555 0.0 0.0 0.0 458
+459 0.00158381462097168 0.0 0.0 0.0 459
+460 0.00182890892028809 0.0 0.0 0.0 460
+461 0.00183510780334473 0.00999999999999979 0.00999999999999979 0.0 461
+462 0.00188088417053223 0.0 0.0 0.0 462
+463 0.00174307823181152 0.0 0.0 0.0 463
+464 0.00124692916870117 0.0 0.0 0.0 464
+465 0.00123906135559082 0.0 0.0 0.0 465
+466 0.00124096870422363 0.0 0.0 0.0 466
+467 0.00124311447143555 0.00999999999999979 0.00999999999999979 0.0 467
+468 0.00125503540039062 0.0 0.0 0.0 468
+469 0.00125908851623535 0.0 0.0 0.0 469
+470 0.0304310321807861 0.0300000000000002 0.0300000000000002 0.0 470
+471 0.00145387649536133 0.0 0.0 0.0 471
+472 0.00129985809326172 0.0 0.0 0.0 472
+473 0.00149822235107422 0.0 0.0 0.0 473
+474 0.0015261173248291 0.0 0.0 0.0 474
+475 0.00127696990966797 0.00999999999999979 0.00999999999999979 0.0 475
+476 0.0012669563293457 0.0 0.0 0.0 476
+477 0.00122594833374023 0.0 0.0 0.0 477
+478 0.00125002861022949 0.0 0.0 0.0 478
+479 0.00124478340148926 0.0 0.0 0.0 479
+480 0.00125694274902344 0.0 0.0 0.0 480
+481 0.001251220703125 0.0 0.0 0.0 481
+482 0.0012509822845459 0.0 0.0 0.0 482
+483 0.0012509822845459 0.00999999999999979 0.00999999999999979 0.0 483
+484 0.00125288963317871 0.0 0.0 0.0 484
+485 0.00125408172607422 0.0 0.0 0.0 485
+486 0.00125718116760254 0.0 0.0 0.0 486
+487 0.00124716758728027 0.0 0.0 0.0 487
+488 0.00117087364196777 0.0 0.0 0.0 488
+489 0.00124812126159668 0.0 0.0 0.0 489
+490 0.00122618675231934 0.00999999999999979 0.00999999999999979 0.0 490
+491 0.00125598907470703 0.0 0.0 0.0 491
+492 0.00124311447143555 0.0 0.0 0.0 492
+493 0.00124192237854004 0.0 0.0 0.0 493
+494 0.00124692916870117 0.0 0.0 0.0 494
+495 0.00123381614685059 0.0 0.0 0.0 495
+496 0.00123691558837891 0.0 0.0 0.0 496
+497 0.00123906135559082 0.0 0.0 0.0 497
+498 0.00125718116760254 0.0100000000000007 0.0100000000000007 0.0 498
+499 0.00124502182006836 0.0 0.0 0.0 499
+500 0.00124788284301758 0.0 0.0 0.0 500
+501 0.00124812126159668 0.0 0.0 0.0 501
+502 0.00124096870422363 0.0 0.0 0.0 502
+503 0.00124287605285645 0.0 0.0 0.0 503
+504 0.00122690200805664 0.0 0.0 0.0 504
+505 0.00124406814575195 0.0 0.0 0.0 505
+506 0.00123786926269531 0.00999999999999979 0.00999999999999979 0.0 506
+507 0.00124001502990723 0.0 0.0 0.0 507
+508 0.0012519359588623 0.0 0.0 0.0 508
+509 0.00124597549438477 0.0 0.0 0.0 509
+510 0.00124311447143555 0.0 0.0 0.0 510
+511 0.00124979019165039 0.0 0.0 0.0 511
+512 0.00124502182006836 0.0 0.0 0.0 512
+513 0.00124001502990723 0.0 0.0 0.0 513
+514 0.00123810768127441 0.00999999999999979 0.00999999999999979 0.0 514
+515 0.00125002861022949 0.0 0.0 0.0 515
+516 0.00124812126159668 0.0 0.0 0.0 516
+517 0.00124311447143555 0.0 0.0 0.0 517
+518 0.00125288963317871 0.0 0.0 0.0 518
+519 0.00124979019165039 0.0 0.0 0.0 519
+520 0.00124192237854004 0.0 0.0 0.0 520
+521 0.00124406814575195 0.0 0.0 0.0 521
+522 0.00125622749328613 0.00999999999999979 0.00999999999999979 0.0 522
+523 0.00124907493591309 0.0 0.0 0.0 523
+524 0.00124692916870117 0.0 0.0 0.0 524
+525 0.00125002861022949 0.0 0.0 0.0 525
+526 0.0012671947479248 0.0 0.0 0.0 526
+527 0.00126910209655762 0.0 0.0 0.0 527
+528 0.0301029682159424 0.0300000000000002 0.0300000000000002 0.0 528
+529 0.00129103660583496 0.0 0.0 0.0 529
+530 0.00132203102111816 0.00999999999999979 0.00999999999999979 0.0 530
+531 0.00127696990966797 0.0 0.0 0.0 531
+532 0.00128507614135742 0.0 0.0 0.0 532
+533 0.00127196311950684 0.0 0.0 0.0 533
+534 0.00127100944519043 0.0 0.0 0.0 534
+535 0.00126886367797852 0.0 0.0 0.0 535
+536 0.00125789642333984 0.0 0.0 0.0 536
+537 0.00124311447143555 0.0 0.0 0.0 537
+538 0.0012509822845459 0.0100000000000007 0.0100000000000007 0.0 538
+539 0.00125908851623535 0.0 0.0 0.0 539
+540 0.00124788284301758 0.0 0.0 0.0 540
+541 0.00125002861022949 0.0 0.0 0.0 541
+542 0.0012671947479248 0.0 0.0 0.0 542
+543 0.00125312805175781 0.0 0.0 0.0 543
+544 0.00125885009765625 0.0 0.0 0.0 544
+545 0.00125503540039062 0.00999999999999979 0.00999999999999979 0.0 545
+546 0.00126099586486816 0.0 0.0 0.0 546
+547 0.00126218795776367 0.0 0.0 0.0 547
+548 0.00124883651733398 0.0 0.0 0.0 548
+549 0.00126099586486816 0.0 0.0 0.0 549
+550 0.00126194953918457 0.0 0.0 0.0 550
+551 0.00119996070861816 0.0 0.0 0.0 551
+552 0.00124883651733398 0.0 0.0 0.0 552
+553 0.00124192237854004 0.00999999999999979 0.00999999999999979 0.0 553
+554 0.00124382972717285 0.0 0.0 0.0 554
+555 0.00124311447143555 0.0 0.0 0.0 555
+556 0.00123500823974609 0.0 0.0 0.0 556
+557 0.0012359619140625 0.0 0.0 0.0 557
+558 0.00123882293701172 0.0 0.0 0.0 558
+559 0.0012519359588623 0.0 0.0 0.0 559
+560 0.00124716758728027 0.0 0.0 0.0 560
+561 0.00124406814575195 0.0 0.0 0.0 561
+562 0.00124812126159668 0.00999999999999979 0.00999999999999979 0.0 562
+563 0.00129103660583496 0.0 0.0 0.0 563
+564 0.00124001502990723 0.0 0.0 0.0 564
+565 0.00124406814575195 0.0 0.0 0.0 565
+566 0.00125789642333984 0.0 0.0 0.0 566
+567 0.00124406814575195 0.0 0.0 0.0 567
+568 0.00123500823974609 0.0 0.0 0.0 568
+569 0.00124311447143555 0.0 0.0 0.0 569
+570 0.00124096870422363 0.0 0.0 0.0 570
+571 0.00124001502990723 0.0 0.0 0.0 571
+572 0.00123786926269531 0.0 0.0 0.0 572
+573 0.00125288963317871 0.0 0.0 0.0 573
+574 0.00124502182006836 0.0 0.0 0.0 574
+575 0.00124192237854004 0.0 0.0 0.0 575
+576 0.00124502182006836 0.0 0.0 0.0 576
+577 0.00125479698181152 0.00999999999999979 0.00999999999999979 0.0 577
+578 0.00124502182006836 0.0 0.0 0.0 578
+579 0.00124502182006836 0.0 0.0 0.0 579
+580 0.00124692916870117 0.0 0.0 0.0 580
+581 0.00123095512390137 0.0 0.0 0.0 581
+582 0.00124287605285645 0.0 0.0 0.0 582
+583 0.00125288963317871 0.0 0.0 0.0 583
+584 0.0012669563293457 0.0 0.0 0.0 584
+585 0.00127005577087402 0.00999999999999979 0.00999999999999979 0.0 585
+586 0.0311369895935059 0.0300000000000002 0.0300000000000002 0.0 586
+587 0.00198984146118164 0.0 0.0 0.0 587
+588 0.00141692161560059 0.0 0.0 0.0 588
+589 0.00131011009216309 0.0 0.0 0.0 589
+590 0.0012810230255127 0.0 0.0 0.0 590
+591 0.00123500823974609 0.0 0.0 0.0 591
+592 0.00117397308349609 0.00999999999999979 0.00999999999999979 0.0 592
+593 0.00125908851623535 0.0 0.0 0.0 593
+594 0.00126194953918457 0.0 0.0 0.0 594
+595 0.00124597549438477 0.0 0.0 0.0 595
+596 0.00124692916870117 0.0 0.0 0.0 596
+597 0.00125479698181152 0.0 0.0 0.0 597
+598 0.00127911567687988 0.0 0.0 0.0 598
+599 0.00125789642333984 0.0 0.0 0.0 599
+600 0.00124406814575195 0.00999999999999979 0.00999999999999979 0.0 600
+601 0.00124907493591309 0.0 0.0 0.0 601
+602 0.00124216079711914 0.0 0.0 0.0 602
+603 0.00124907493591309 0.0 0.0 0.0 603
+604 0.00125384330749512 0.0 0.0 0.0 604
+605 0.00125694274902344 0.0 0.0 0.0 605
+606 0.00124192237854004 0.0 0.0 0.0 606
+607 0.00124502182006836 0.0 0.0 0.0 607
+608 0.0012509822845459 0.0100000000000007 0.0100000000000007 0.0 608
+609 0.00123906135559082 0.0 0.0 0.0 609
+610 0.0014030933380127 0.0 0.0 0.0 610
+611 0.00124883651733398 0.0 0.0 0.0 611
+612 0.00135397911071777 0.0 0.0 0.0 612
+613 0.00174593925476074 0.0 0.0 0.0 613
+614 0.00124716758728027 0.0 0.0 0.0 614
+615 0.00124812126159668 0.00999999999999979 0.00999999999999979 0.0 615
+616 0.00125503540039062 0.0 0.0 0.0 616
+617 0.00140786170959473 0.0 0.0 0.0 617
+618 0.00125312805175781 0.0 0.0 0.0 618
+619 0.0012509822845459 0.0 0.0 0.0 619
+620 0.00124096870422363 0.0 0.0 0.0 620
+621 0.0012359619140625 0.0 0.0 0.0 621
+622 0.00124382972717285 0.00999999999999979 0.00999999999999979 0.0 622
+623 0.00124406814575195 0.0 0.0 0.0 623
+624 0.00123000144958496 0.0 0.0 0.0 624
+625 0.00124001502990723 0.0 0.0 0.0 625
+626 0.00124001502990723 0.0 0.0 0.0 626
+627 0.00124001502990723 0.0 0.0 0.0 627
+628 0.00125885009765625 0.0 0.0 0.0 628
+629 0.00124907493591309 0.0 0.0 0.0 629
+630 0.00124192237854004 0.00999999999999979 0.00999999999999979 0.0 630
+631 0.00124406814575195 0.0 0.0 0.0 631
+632 0.0012519359588623 0.0 0.0 0.0 632
+633 0.00124502182006836 0.0 0.0 0.0 633
+634 0.00124287605285645 0.0 0.0 0.0 634
+635 0.00123906135559082 0.0 0.0 0.0 635
+636 0.00124621391296387 0.0 0.0 0.0 636
+637 0.00124502182006836 0.0 0.0 0.0 637
+638 0.00124692916870117 0.00999999999999979 0.00999999999999979 0.0 638
+639 0.0012509822845459 0.0 0.0 0.0 639
+640 0.00132584571838379 0.0 0.0 0.0 640
+641 0.00126409530639648 0.0 0.0 0.0 641
+642 0.00126504898071289 0.0 0.0 0.0 642
+643 0.00127911567687988 0.0 0.0 0.0 643
+644 0.0240340232849121 0.0300000000000002 0.0300000000000002 0.0 644
+645 0.0101561546325684 0.00999999999999979 0.00999999999999979 0.0 645
+646 0.00133299827575684 0.0 0.0 0.0 646
+647 0.00129604339599609 0.0 0.0 0.0 647
+648 0.00124382972717285 0.0 0.0 0.0 648
+649 0.00127410888671875 0.0 0.0 0.0 649
+650 0.00126409530639648 0.0 0.0 0.0 650
+651 0.0012519359588623 0.0 0.0 0.0 651
+652 0.00124597549438477 0.0100000000000007 0.0100000000000007 0.0 652
+653 0.000922918319702148 0.0 0.0 0.0 653
+654 0.00125503540039062 0.0 0.0 0.0 654
+655 0.00124287605285645 0.0 0.0 0.0 655
+656 0.00124692916870117 0.0 0.0 0.0 656
+657 0.00126004219055176 0.0 0.0 0.0 657
+658 0.00125384330749512 0.0 0.0 0.0 658
+659 0.0013279914855957 0.0 0.0 0.0 659
+660 0.00124502182006836 0.00999999999999979 0.00999999999999979 0.0 660
+661 0.00125598907470703 0.0 0.0 0.0 661
+662 0.00124192237854004 0.0 0.0 0.0 662
+663 0.00124096870422363 0.0 0.0 0.0 663
+664 0.00125312805175781 0.0 0.0 0.0 664
+665 0.00124692916870117 0.0 0.0 0.0 665
+666 0.00124597549438477 0.0 0.0 0.0 666
+667 0.00123977661132812 0.0 0.0 0.0 667
+668 0.00124406814575195 0.0 0.0 0.0 668
+669 0.00123500823974609 0.0 0.0 0.0 669
+670 0.00124502182006836 0.0 0.0 0.0 670
+671 0.00124502182006836 0.0 0.0 0.0 671
+672 0.00124382972717285 0.0 0.0 0.0 672
+673 0.00123190879821777 0.0 0.0 0.0 673
+674 0.00123500823974609 0.0 0.0 0.0 674
+675 0.00124692916870117 0.00999999999999979 0.00999999999999979 0.0 675
+676 0.00123310089111328 0.0 0.0 0.0 676
+677 0.00123095512390137 0.0 0.0 0.0 677
+678 0.00124192237854004 0.0 0.0 0.0 678
+679 0.00122690200805664 0.0 0.0 0.0 679
+680 0.00123286247253418 0.0 0.0 0.0 680
+681 0.00124096870422363 0.0 0.0 0.0 681
+682 0.00124192237854004 0.0 0.0 0.0 682
+683 0.00124692916870117 0.0100000000000007 0.0100000000000007 0.0 683
+684 0.0012359619140625 0.0 0.0 0.0 684
+685 0.00123286247253418 0.0 0.0 0.0 685
+686 0.00124001502990723 0.0 0.0 0.0 686
+687 0.00124001502990723 0.0 0.0 0.0 687
+688 0.00123786926269531 0.0 0.0 0.0 688
+689 0.00125002861022949 0.0 0.0 0.0 689
+690 0.00124907493591309 0.0 0.0 0.0 690
+691 0.00129103660583496 0.00999999999999979 0.00999999999999979 0.0 691
+692 0.00124311447143555 0.0 0.0 0.0 692
+693 0.00129890441894531 0.0 0.0 0.0 693
+694 0.00130796432495117 0.0 0.0 0.0 694
+695 0.00123500823974609 0.0 0.0 0.0 695
+696 0.00124716758728027 0.0 0.0 0.0 696
+697 0.00123906135559082 0.0 0.0 0.0 697
+698 0.00124287605285645 0.0 0.0 0.0 698
+699 0.00127696990966797 0.00999999999999979 0.00999999999999979 0.0 699
+700 0.00124907493591309 0.0 0.0 0.0 700
+701 0.0300769805908203 0.0300000000000002 0.0300000000000002 0.0 701
+702 0.0012669563293457 0.0 0.0 0.0 702
+703 0.00174999237060547 0.0 0.0 0.0 703
+704 0.00131797790527344 0.0 0.0 0.0 704
+705 0.00130391120910645 0.0 0.0 0.0 705
+706 0.00126886367797852 0.0 0.0 0.0 706
+707 0.00127601623535156 0.00999999999999979 0.00999999999999979 0.0 707
+708 0.00125503540039062 0.0 0.0 0.0 708
+709 0.00125312805175781 0.0 0.0 0.0 709
+710 0.00124597549438477 0.0 0.0 0.0 710
+711 0.00125217437744141 0.0 0.0 0.0 711
+712 0.00124311447143555 0.0 0.0 0.0 712
+713 0.00124287605285645 0.0 0.0 0.0 713
+714 0.00125503540039062 0.00999999999999979 0.00999999999999979 0.0 714
+715 0.0012519359588623 0.0 0.0 0.0 715
+716 0.00124502182006836 0.0 0.0 0.0 716
+717 0.00124502182006836 0.0 0.0 0.0 717
+718 0.00126814842224121 0.0 0.0 0.0 718
+719 0.00124883651733398 0.0 0.0 0.0 719
+720 0.00124812126159668 0.0 0.0 0.0 720
+721 0.00125408172607422 0.0 0.0 0.0 721
+722 0.00125694274902344 0.0100000000000007 0.0100000000000007 0.0 722
+723 0.00125002861022949 0.0 0.0 0.0 723
+724 0.0012509822845459 0.0 0.0 0.0 724
+725 0.00124502182006836 0.0 0.0 0.0 725
+726 0.00115799903869629 0.0 0.0 0.0 726
+727 0.00148391723632812 0.0 0.0 0.0 727
+728 0.00177001953125 0.0 0.0 0.0 728
+729 0.00183606147766113 0.00999999999999979 0.00999999999999979 0.0 729
+730 0.00171613693237305 0.0 0.0 0.0 730
+731 0.00128793716430664 0.0 0.0 0.0 731
+732 0.000819921493530273 0.0 0.0 0.0 732
+733 0.00124001502990723 0.0 0.0 0.0 733
+734 0.00124692916870117 0.0 0.0 0.0 734
+735 0.00124001502990723 0.0 0.0 0.0 735
+736 0.00123882293701172 0.0 0.0 0.0 736
+737 0.00124597549438477 0.00999999999999979 0.00999999999999979 0.0 737
+738 0.00124502182006836 0.0 0.0 0.0 738
+739 0.00124096870422363 0.0 0.0 0.0 739
+740 0.00124502182006836 0.0 0.0 0.0 740
+741 0.00124096870422363 0.0 0.0 0.0 741
+742 0.00124287605285645 0.0 0.0 0.0 742
+743 0.00124096870422363 0.0 0.0 0.0 743
+744 0.00124692916870117 0.00999999999999979 0.00999999999999979 0.0 744
+745 0.00138497352600098 0.0 0.0 0.0 745
+746 0.00129485130310059 0.0 0.0 0.0 746
+747 0.0012509822845459 0.0 0.0 0.0 747
+748 0.00124907493591309 0.0 0.0 0.0 748
+749 0.00123500823974609 0.0 0.0 0.0 749
+750 0.00124621391296387 0.0 0.0 0.0 750
+751 0.00124096870422363 0.0 0.0 0.0 751
+752 0.00123810768127441 0.0100000000000007 0.0100000000000007 0.0 752
+753 0.00124287605285645 0.0 0.0 0.0 753
+754 0.00124716758728027 0.0 0.0 0.0 754
+755 0.00124311447143555 0.0 0.0 0.0 755
+756 0.00124883651733398 0.0 0.0 0.0 756
+757 0.0014030933380127 0.0 0.0 0.0 757
+758 0.0220100879669189 0.0199999999999996 0.0199999999999996 0.0 758
+759 0.00328278541564941 0.00999999999999979 0.00999999999999979 0.0 759
+760 0.00999212265014648 0.00999999999999979 0.00999999999999979 0.0 760
+761 0.00151991844177246 0.0 0.0 0.0 761
+762 0.00131011009216309 0.0 0.0 0.0 762
+763 0.00128889083862305 0.0 0.0 0.0 763
+764 0.0012819766998291 0.0 0.0 0.0 764
+765 0.0012819766998291 0.0 0.0 0.0 765
+766 0.00126886367797852 0.0100000000000007 0.0100000000000007 0.0 766
+767 0.00125288963317871 0.0 0.0 0.0 767
+768 0.00125408172607422 0.0 0.0 0.0 768
+769 0.00125718116760254 0.0 0.0 0.0 769
+770 0.00125384330749512 0.0 0.0 0.0 770
+771 0.00125002861022949 0.0 0.0 0.0 771
+772 0.00124406814575195 0.0 0.0 0.0 772
+773 0.00125002861022949 0.00999999999999979 0.00999999999999979 0.0 773
+774 0.0012509822845459 0.0 0.0 0.0 774
+775 0.00124502182006836 0.0 0.0 0.0 775
+776 0.00124788284301758 0.0 0.0 0.0 776
+777 0.00125408172607422 0.0 0.0 0.0 777
+778 0.00125288963317871 0.0 0.0 0.0 778
+779 0.00124788284301758 0.0 0.0 0.0 779
+780 0.00124287605285645 0.0 0.0 0.0 780
+781 0.00125694274902344 0.00999999999999979 0.00999999999999979 0.0 781
+782 0.00124096870422363 0.0 0.0 0.0 782
+783 0.00123691558837891 0.0 0.0 0.0 783
+784 0.00124287605285645 0.0 0.0 0.0 784
+785 0.00124597549438477 0.0 0.0 0.0 785
+786 0.00123786926269531 0.0 0.0 0.0 786
+787 0.00124502182006836 0.0 0.0 0.0 787
+788 0.00124096870422363 0.0 0.0 0.0 788
+789 0.00124096870422363 0.00999999999999979 0.00999999999999979 0.0 789
+790 0.00123500823974609 0.0 0.0 0.0 790
+791 0.00124001502990723 0.0 0.0 0.0 791
+792 0.00124001502990723 0.0 0.0 0.0 792
+793 0.00123000144958496 0.0 0.0 0.0 793
+794 0.00124406814575195 0.0 0.0 0.0 794
+795 0.00123691558837891 0.0 0.0 0.0 795
+796 0.00123286247253418 0.0 0.0 0.0 796
+797 0.00123906135559082 0.0100000000000007 0.0100000000000007 0.0 797
+798 0.00120997428894043 0.0 0.0 0.0 798
+799 0.00156807899475098 0.0 0.0 0.0 799
+800 0.00123286247253418 0.0 0.0 0.0 800
+801 0.00125002861022949 0.0 0.0 0.0 801
+802 0.0012199878692627 0.0 0.0 0.0 802
+803 0.00123405456542969 0.0 0.0 0.0 803
+804 0.0012519359588623 0.00999999999999979 0.00999999999999979 0.0 804
+805 0.00124192237854004 0.0 0.0 0.0 805
+806 0.00124406814575195 0.0 0.0 0.0 806
+807 0.00124001502990723 0.0 0.0 0.0 807
+808 0.00124692916870117 0.0 0.0 0.0 808
+809 0.00125002861022949 0.0 0.0 0.0 809
+810 0.00125312805175781 0.0 0.0 0.0 810
+811 0.00126981735229492 0.0 0.0 0.0 811
+812 0.00124001502990723 0.00999999999999979 0.00999999999999979 0.0 812
+813 0.00124597549438477 0.0 0.0 0.0 813
+814 0.00126290321350098 0.0 0.0 0.0 814
+815 0.0310249328613281 0.0300000000000002 0.0300000000000002 0.0 815
+816 0.000841140747070312 0.0 0.0 0.0 816
+817 0.000878095626831055 0.0 0.0 0.0 817
+818 0.000874042510986328 0.0 0.0 0.0 818
+819 0.000869035720825195 0.0 0.0 0.0 819
+820 0.0012819766998291 0.0 0.0 0.0 820
+821 0.00133609771728516 0.00999999999999979 0.00999999999999979 0.0 821
+822 0.0012660026550293 0.0 0.0 0.0 822
+823 0.0013270378112793 0.0 0.0 0.0 823
+824 0.00125718116760254 0.0 0.0 0.0 824
+825 0.00124907493591309 0.0 0.0 0.0 825
+826 0.00137901306152344 0.0 0.0 0.0 826
+827 0.00125503540039062 0.0 0.0 0.0 827
+828 0.0012509822845459 0.0 0.0 0.0 828
+829 0.00126791000366211 0.00999999999999979 0.00999999999999979 0.0 829
+830 0.00128698348999023 0.0 0.0 0.0 830
+831 0.00125598907470703 0.0 0.0 0.0 831
+832 0.00135207176208496 0.0 0.0 0.0 832
+833 0.000869035720825195 0.0 0.0 0.0 833
+834 0.00125503540039062 0.0 0.0 0.0 834
+835 0.0012519359588623 0.0 0.0 0.0 835
+836 0.00126004219055176 0.0 0.0 0.0 836
+837 0.00126099586486816 0.0100000000000007 0.0100000000000007 0.0 837
+838 0.00181698799133301 0.0 0.0 0.0 838
+839 0.00126290321350098 0.0 0.0 0.0 839
+840 0.00124096870422363 0.0 0.0 0.0 840
+841 0.00118899345397949 0.0 0.0 0.0 841
+842 0.00124096870422363 0.0 0.0 0.0 842
+843 0.00123286247253418 0.0 0.0 0.0 843
+844 0.00165700912475586 0.00999999999999979 0.00999999999999979 0.0 844
+845 0.00125789642333984 0.0 0.0 0.0 845
+846 0.00123405456542969 0.0 0.0 0.0 846
+847 0.00123095512390137 0.0 0.0 0.0 847
+848 0.0012509822845459 0.0 0.0 0.0 848
+849 0.00123906135559082 0.0 0.0 0.0 849
+850 0.00165104866027832 0.0 0.0 0.0 850
+851 0.00123906135559082 0.00999999999999979 0.00999999999999979 0.0 851
+852 0.00123786926269531 0.0 0.0 0.0 852
+853 0.00120902061462402 0.0 0.0 0.0 853
+854 0.00130009651184082 0.0 0.0 0.0 854
+855 0.00124502182006836 0.0 0.0 0.0 855
+856 0.0016329288482666 0.0 0.0 0.0 856
+857 0.0012509822845459 0.0 0.0 0.0 857
+858 0.00124692916870117 0.0 0.0 0.0 858
+859 0.00129890441894531 0.00999999999999979 0.00999999999999979 0.0 859
+860 0.00123786926269531 0.0 0.0 0.0 860
+861 0.00123786926269531 0.0 0.0 0.0 861
+862 0.0016181468963623 0.0 0.0 0.0 862
+863 0.00124192237854004 0.0 0.0 0.0 863
+864 0.00124692916870117 0.0 0.0 0.0 864
+865 0.00124597549438477 0.0 0.0 0.0 865
+866 0.00124478340148926 0.0100000000000007 0.0100000000000007 0.0 866
+867 0.00123500823974609 0.0 0.0 0.0 867
+868 0.00165414810180664 0.0 0.0 0.0 868
+869 0.00124502182006836 0.0 0.0 0.0 869
+870 0.0012669563293457 0.0 0.0 0.0 870
+871 0.0018620491027832 0.0 0.0 0.0 871
+872 0.0325958728790283 0.04 0.04 0.0 872
+873 0.000857114791870117 0.0 0.0 0.0 873
+874 0.00117611885070801 0.0 0.0 0.0 874
+875 0.000876903533935547 0.0 0.0 0.0 875
+876 0.00108814239501953 0.0 0.0 0.0 876
+877 0.00129008293151855 0.0 0.0 0.0 877
+878 0.00138592720031738 0.0 0.0 0.0 878
+879 0.00126004219055176 0.0 0.0 0.0 879
+880 0.00133490562438965 0.00999999999999979 0.00999999999999979 0.0 880
+881 0.00133109092712402 0.0 0.0 0.0 881
+882 0.00126004219055176 0.0 0.0 0.0 882
+883 0.00134086608886719 0.0 0.0 0.0 883
+884 0.00124907493591309 0.0 0.0 0.0 884
+885 0.00122594833374023 0.0 0.0 0.0 885
+886 0.00130510330200195 0.0 0.0 0.0 886
+887 0.00134396553039551 0.0 0.0 0.0 887
+888 0.00126194953918457 0.00999999999999979 0.00999999999999979 0.0 888
+889 0.00120782852172852 0.0 0.0 0.0 889
+890 0.00124692916870117 0.0 0.0 0.0 890
+891 0.00125813484191895 0.0 0.0 0.0 891
+892 0.0012509822845459 0.0 0.0 0.0 892
+893 0.00136804580688477 0.0 0.0 0.0 893
+894 0.00125718116760254 0.0 0.0 0.0 894
+895 0.00125312805175781 0.00999999999999979 0.00999999999999979 0.0 895
+896 0.00126218795776367 0.0 0.0 0.0 896
+897 0.00123286247253418 0.0 0.0 0.0 897
+898 0.00124406814575195 0.0 0.0 0.0 898
+899 0.00131702423095703 0.0 0.0 0.0 899
+900 0.00123405456542969 0.0 0.0 0.0 900
+901 0.00121402740478516 0.0 0.0 0.0 901
+902 0.00123882293701172 0.0 0.0 0.0 902
+903 0.00123310089111328 0.00999999999999979 0.00999999999999979 0.0 903
+904 0.00124096870422363 0.0 0.0 0.0 904
+905 0.00147390365600586 0.0 0.0 0.0 905
+906 0.0012509822845459 0.0 0.0 0.0 906
+907 0.00124692916870117 0.0 0.0 0.0 907
+908 0.00124907493591309 0.0 0.0 0.0 908
+909 0.00124597549438477 0.0 0.0 0.0 909
+910 0.00124001502990723 0.0 0.0 0.0 910
+911 0.00142002105712891 0.0100000000000007 0.0100000000000007 0.0 911
+912 0.00124502182006836 0.0 0.0 0.0 912
+913 0.00124502182006836 0.0 0.0 0.0 913
+914 0.0012819766998291 0.0 0.0 0.0 914
+915 0.00123786926269531 0.0 0.0 0.0 915
+916 0.00124287605285645 0.0 0.0 0.0 916
+917 0.00142312049865723 0.0 0.0 0.0 917
+918 0.0012509822845459 0.00999999999999979 0.00999999999999979 0.0 918
+919 0.00124502182006836 0.0 0.0 0.0 919
+920 0.00124692916870117 0.0 0.0 0.0 920
+921 0.00124192237854004 0.0 0.0 0.0 921
+922 0.00119709968566895 0.0 0.0 0.0 922
+923 0.00140190124511719 0.0 0.0 0.0 923
+924 0.00125002861022949 0.0 0.0 0.0 924
+925 0.00124502182006836 0.0 0.0 0.0 925
+926 0.00124597549438477 0.00999999999999979 0.00999999999999979 0.0 926
+927 0.00127720832824707 0.0 0.0 0.0 927
+928 0.00126409530639648 0.0 0.0 0.0 928
+929 0.0312209129333496 0.0300000000000002 0.0300000000000002 0.0 929
+930 0.00214791297912598 0.0 0.0 0.0 930
+931 0.00183796882629395 0.0 0.0 0.0 931
+932 0.00143814086914062 0.00999999999999979 0.00999999999999979 0.0 932
+933 0.00145792961120605 0.0 0.0 0.0 933
+934 0.00152087211608887 0.0 0.0 0.0 934
+935 0.00213003158569336 0.0 0.0 0.0 935
+936 0.00166201591491699 0.0 0.0 0.0 936
+937 0.0016930103302002 0.0 0.0 0.0 937
+938 0.00139403343200684 0.00999999999999979 0.00999999999999979 0.0 938
+939 0.00214695930480957 0.0 0.0 0.0 939
+940 0.00102400779724121 0.0 0.0 0.0 940
+941 0.0012660026550293 0.0 0.0 0.0 941
+942 0.00126004219055176 0.0 0.0 0.0 942
+943 0.00126194953918457 0.0 0.0 0.0 943
+944 0.00125813484191895 0.0 0.0 0.0 944
+945 0.00152897834777832 0.0100000000000007 0.0100000000000007 0.0 945
+946 0.0012669563293457 0.0 0.0 0.0 946
+947 0.00125408172607422 0.0 0.0 0.0 947
+948 0.00125980377197266 0.0 0.0 0.0 948
+949 0.00126481056213379 0.0 0.0 0.0 949
+950 0.00125908851623535 0.0 0.0 0.0 950
+951 0.00138092041015625 0.0 0.0 0.0 951
+952 0.00125384330749512 0.00999999999999979 0.00999999999999979 0.0 952
+953 0.00108504295349121 0.0 0.0 0.0 953
+954 0.0012509822845459 0.0 0.0 0.0 954
+955 0.00125980377197266 0.0 0.0 0.0 955
+956 0.00131511688232422 0.0 0.0 0.0 956
+957 0.00130796432495117 0.0 0.0 0.0 957
+958 0.00124597549438477 0.0 0.0 0.0 958
+959 0.00125002861022949 0.0 0.0 0.0 959
+960 0.00124287605285645 0.00999999999999979 0.00999999999999979 0.0 960
+961 0.00124812126159668 0.0 0.0 0.0 961
+962 0.0012509822845459 0.0 0.0 0.0 962
+963 0.00130891799926758 0.0 0.0 0.0 963
+964 0.00123500823974609 0.0 0.0 0.0 964
+965 0.00124096870422363 0.0 0.0 0.0 965
+966 0.00124883651733398 0.0 0.0 0.0 966
+967 0.00124192237854004 0.0 0.0 0.0 967
+968 0.00124502182006836 0.00999999999999979 0.00999999999999979 0.0 968
+969 0.00124597549438477 0.0 0.0 0.0 969
+970 0.00130796432495117 0.0 0.0 0.0 970
+971 0.00124716758728027 0.0 0.0 0.0 971
+972 0.00125408172607422 0.0 0.0 0.0 972
+973 0.00125384330749512 0.0 0.0 0.0 973
+974 0.00124907493591309 0.0 0.0 0.0 974
+975 0.00124502182006836 0.0 0.0 0.0 975
+976 0.00131011009216309 0.0100000000000007 0.0100000000000007 0.0 976
+977 0.00125384330749512 0.0 0.0 0.0 977
+978 0.00124597549438477 0.0 0.0 0.0 978
+979 0.00125503540039062 0.0 0.0 0.0 979
+980 0.00125384330749512 0.0 0.0 0.0 980
+981 0.0012509822845459 0.0 0.0 0.0 981
+982 0.00131988525390625 0.0 0.0 0.0 982
+983 0.00126099586486816 0.00999999999999979 0.00999999999999979 0.0 983
+984 0.00126004219055176 0.0 0.0 0.0 984
+985 0.00127100944519043 0.0 0.0 0.0 985
+986 0.0304250717163086 0.0300000000000002 0.0300000000000002 0.0 986
+987 0.00131678581237793 0.0 0.0 0.0 987
+988 0.00130200386047363 0.0 0.0 0.0 988
+989 0.00139880180358887 0.0 0.0 0.0 989
+990 0.00517010688781738 0.0 0.0 0.0 990
+991 0.00128984451293945 0.00999999999999979 0.00999999999999979 0.0 991
+992 0.00125789642333984 0.0 0.0 0.0 992
+993 0.00152301788330078 0.0 0.0 0.0 993
+994 0.00125598907470703 0.0 0.0 0.0 994
+995 0.00125312805175781 0.0 0.0 0.0 995
+996 0.00125312805175781 0.0 0.0 0.0 996
+997 0.00125598907470703 0.0 0.0 0.0 997
+998 0.00134396553039551 0.0 0.0 0.0 998
+999 0.00124979019165039 0.00999999999999979 0.00999999999999979 0.0 999
+1000 0.00125598907470703 0.0 0.0 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log
new file mode 100644
index 000000000..ca6c64e43
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log
@@ -0,0 +1,81 @@
+========================== 2009-04-01T16:49:42 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'ParserBenchmarkExt' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+ParserBenchmarkExt#parser:
+ real total user system
+sum 1.733042240 1.770000000 1.760000000 0.010000000
+min 0.000833988 0.000000000 0.000000000 0.000000000
+std- -0.001838092 -0.003229209 -0.003232727 -0.000306228
+mean 0.001733042 0.001770000 0.001760000 0.000010000
+std+ 0.005304177 0.006769209 0.006752727 0.000326228
+max 0.032314062 0.040000000 0.040000000 0.010000000
+std 0.003571134 0.004999209 0.004992727 0.000316228
+std% 206.061583704 282.441194727 283.677695666 3162.277660168
+harm 0.001283614 nan nan nan
+geo 0.001337350 0.000000000 0.000000000 0.000000000
+q1 0.001236916 0.000000000 0.000000000 0.000000000
+med 0.001246929 0.000000000 0.000000000 0.000000000
+q3 0.001260996 0.000000000 0.000000000 0.000000000
+ 1000 577.01998 0.001733042
+ calls calls/sec secs/call
+
+ 0.03074 -|*
+ 0.02759 -|
+ 0.02444 -|
+ 0.02130 -|
+ 0.01815 -|
+ 0.01500 -|
+ 0.01185 -|
+ 0.00870 -|
+ 0.00556 -|
+ 0.00241 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00125, iqr=0.00002, factor=3.00):
+very_low=32 low=15 high=77 very_high=135
+
+Ljung-Box statistics: q=13.14182 (alpha=0.05, df=50).
+0.00000 < 0.95000 => No autocorrelation was detected.
+
+ParserBenchmarkExt#parser:
+ real total user system
+sum 1.624776602 1.620000000 1.620000000 0.000000000
+min 0.000819921 0.000000000 0.000000000 0.000000000
+std- -0.001936067 -0.003223194 -0.003223194 0.000000000
+mean 0.001805307 0.001800000 0.001800000 0.000000000
+std+ 0.005546681 0.006823194 0.006823194 0.000000000
+max 0.032595873 0.040000000 0.040000000 0.000000000
+std 0.003741374 0.005023194 0.005023194 0.000000000
+std% 207.243050150 279.066347558 279.066347558 nan
+harm 0.001297084 nan nan nan
+geo 0.001358799 0.000000000 0.000000000 0.000000000
+q1 0.001241922 0.000000000 0.000000000 0.000000000
+med 0.001249075 0.000000000 0.000000000 0.000000000
+q3 0.001264811 0.000000000 0.000000000 0.000000000
+ 900 553.92230 0.001805307
+ calls calls/sec secs/call
+
+ 0.03101 -|*
+ 0.02783 -|
+ 0.02465 -|
+ 0.02147 -|
+ 0.01830 -|
+ 0.01512 -|
+ 0.01194 -|
+ 0.00876 -|
+ 0.00559 -|
+ 0.00241 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00125, iqr=0.00002, factor=3.00):
+very_low=15 low=9 high=76 very_high=110
+
+Ljung-Box statistics: q=15.89429 (alpha=0.05, df=50).
+0.00000 < 0.95000 => No autocorrelation was detected.
+
+Truncated initial 100 measurements: 1000 -> 900 (-10.00%).
+========================== 2009-04-01T16:49:49 CEST ===========================
+
+Writing measurement data file '/data/scm/json/benchmarks/data/ParserBenchmarkExt#parser.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/ParserBenchmarkExt#parser-autocorrelation.dat'.
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat
new file mode 100644
index 000000000..40a0668a6
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.126526065077488
+3 -0.144961526627029
+4 -0.139357177406834
+5 -0.143974826894912
+6 -0.142298816838391
+7 -0.139337332621068
+8 -0.0804933565996591
+9 0.863154337738992
+10 -0.0856698326462466
+11 -0.139044499260128
+12 -0.144409577021306
+13 -0.139952610271037
+14 -0.137830644370195
+15 -0.138237560134025
+16 -0.0318228583907447
+17 0.762295174674438
+18 -0.0451085401986914
+19 -0.139574314980337
+20 -0.137706022735926
+21 -0.135000055250474
+22 -0.140944565680693
+23 -0.136209503772352
+24 0.0116248943043287
+25 0.668814012806624
+26 0.00194941922845652
+27 -0.132610614145838
+28 -0.110905629572418
+29 -0.142849770878147
+30 -0.143488824970324
+31 -0.134330197021416
+32 0.0538835449451642
+33 0.575132011890069
+34 0.0505429010331842
+35 -0.137467592425517
+36 -0.125877861208834
+37 -0.148631268110284
+38 -0.136115193781866
+39 -0.137935999911469
+40 0.0988849495063306
+41 0.486986888878156
+42 0.0878752779386658
+43 -0.132160917693119
+44 -0.129643145971886
+45 -0.149607998788336
+46 -0.13478438037923
+47 -0.133019295702461
+48 0.14888456218326
+49 0.393046641526692
+50 0.120499739018384
+51 -0.12075319894839
+52 -0.132962236637115
+53 -0.144429618272262
+54 -0.119605702139121
+55 -0.101682767008184
+56 0.152609045047458
+57 0.329588666724346
+58 0.139652155383137
+59 -0.114941895372878
+60 -0.126489834985415
+61 -0.139130898077927
+62 -0.137842155865592
+63 -0.0861253194251446
+64 0.150629648832854
+65 0.281018765279001
+66 0.13915358689329
+67 -0.0896859084267328
+68 -0.123313711110523
+69 -0.142874643960391
+70 -0.135495171639773
+71 -0.0711514410690874
+72 0.147596411956897
+73 0.251872397592371
+74 0.121839586873541
+75 -0.0575973326704366
+76 -0.126799299154496
+77 -0.144543550470945
+78 -0.124111534889387
+79 -0.0466899945416701
+80 0.131315152952299
+81 0.252160996580415
+82 0.10666721386194
+83 -0.0339037628702252
+84 -0.127183439268724
+85 -0.143132479164138
+86 -0.125851156910328
+87 -0.0147264358973224
+88 0.118449575410306
+89 0.201728736307241
+90 0.0886049712661605
+91 -0.00382129887238343
+92 -0.131751835679824
+93 -0.140792586519908
+94 -0.118637713578907
+95 0.02095681301022
+96 0.0813261521961686
+97 0.180482658314394
+98 0.0795745616300617
+99 0.0126200590172042
+100 -0.127051186194544
+101 -0.137444352404263
+102 -0.109978539446263
+103 0.0380230003474469
+104 0.0605417360053513
+105 0.171590136906878
+106 0.0604018417747588
+107 0.0402566049413917
+108 -0.100533719460918
+109 -0.140161784412186
+110 -0.10312957661735
+111 0.0485735840442751
+112 0.0373718997374129
+113 0.167648566872301
+114 0.0459260028708854
+115 0.046121183499996
+116 -0.110430068243273
+117 -0.140278458993756
+118 -0.0875776667752535
+119 0.0510626017064324
+120 0.0238451049454621
+121 0.16085061505561
+122 0.030276460935626
+123 0.0561232990819215
+124 -0.105464808595229
+125 -0.135546173373586
+126 -0.079801944025769
+127 0.0599654914699078
+128 0.0136534141192567
+129 0.15182365517752
+130 0.0197096306752212
+131 0.0534620866010349
+132 -0.0917414096626928
+133 -0.127172172660217
+134 -0.0514782042484449
+135 0.0685986797971808
+136 -0.00353858174559342
+137 0.142196102713977
+138 0.0134469000302172
+139 0.0396095015311617
+140 -0.0655242334449433
+141 -0.122832275916882
+142 -0.0479444786698279
+143 0.050751999392634
+144 -0.011019423438215
+145 0.132113807423818
+146 0.00290229828051553
+147 0.0324895304839574
+148 -0.0424435359166719
+149 -0.122337133535285
+150 -0.0293859066983028
+151 0.0383678650842516
+152 -0.0194742885265415
+153 0.126609912325987
+154 -0.00608808492180084
+155 0.0395330884838485
+156 -0.0368665742861527
+157 -0.121320946026168
+158 -0.0130016640468885
+159 0.0309861525800574
+160 -0.018558052599205
+161 0.137300590031426
+162 -0.00746032318164814
+163 0.0344072362770583
+164 -0.0323265667023796
+165 -0.108099357804514
+166 -0.00728009854612887
+167 0.0166450780849257
+168 -0.0143279526502486
+169 0.109076299549607
+170 -0.0115962562225386
+171 0.0177205211496241
+172 -0.0165802545828673
+173 -0.0995936967878659
+174 0.011605779237427
+175 0.00523220776952252
+176 -0.0161523464956781
+177 0.0989734877266892
+178 -0.0129792250545895
+179 0.00898322395475531
+180 -0.0153158199749067
+181 -0.0800824097692582
+182 0.0178200034942401
+183 -0.00474786676294106
+184 -0.0157551972778546
+185 0.0942532461909266
+186 -0.00969269130384397
+187 0.00652836785416871
+188 0.000910018587766529
+189 -0.0619232375104542
+190 0.0179928377991651
+191 -0.0159711302098274
+192 -0.018744717694339
+193 0.0877619939638119
+194 -0.00502556289883764
+195 -0.00667460786160017
+196 -0.0121723963071187
+197 -0.0449032831155359
+198 0.0212125953730812
+199 -0.0262860792829433
+200 -0.016162057795481
+201 0.0811913575034835
+202 -0.00330089426590078
+203 -0.0151519759511698
+204 -0.017960262928082
+205 -0.0215037814284608
+206 0.0182943543046035
+207 -0.0341747401956763
+208 -0.0146866352915169
+209 0.0792718771176078
+210 -0.00321919646839206
+211 -0.023611826169962
+212 -0.0126184079823646
+213 -0.000954698682123794
+214 0.0297339638938581
+215 -0.0312735654036501
+216 -0.0161173400247215
+217 0.0692180762363309
+218 -0.00283288277832248
+219 -0.0388702841271483
+220 0.00457538848515518
+221 0.017702534023738
+222 0.00544552208632338
+223 -0.0446102056961128
+224 -0.0135729757433799
+225 0.061318425794026
+226 -0.00494947349286398
+227 -0.0321768515141099
+228 0.00497720552190702
+229 0.0267952089554404
+230 -0.000738697332716776
+231 -0.0492659393491728
+232 -0.0148071186922711
+233 0.0545872347505704
+234 -0.00382673762292252
+235 -0.0282826124126036
+236 0.00794227173858329
+237 0.0378731489090914
+238 -0.00835973314997662
+239 -0.0447739268124712
+240 -0.0127983223158383
+241 0.0636581757214183
+242 -0.000854926428120144
+243 -0.0310943152069584
+244 -0.00259888627525403
+245 0.0558953643657078
+246 -0.0171154785163806
+247 -0.0391969466693341
+248 -0.0117324565371219
+249 0.0429666350675198
+250 -0.00749755396653516
+251 -0.0292116650124283
+252 -0.00980920002999956
+253 0.0728023253137216
+254 -0.0242433063094984
+255 -0.0319002210401708
+256 -0.0116887755426019
+257 0.0318202643673836
+258 -0.00934603617096265
+259 -0.0320628549574969
+260 -0.0138223876265734
+261 0.0891055411435177
+262 -0.0247651373213855
+263 -0.0309052036748624
+264 -0.0100532798596721
+265 0.0243378856936498
+266 -0.0045778331986359
+267 -0.026821752316485
+268 0.000989105341668746
+269 0.0888402056176568
+270 -0.0231248959628869
+271 -0.0335116780227126
+272 -0.0117587705487187
+273 0.0167906040316404
+274 -0.00329835726197584
+275 -0.0310756973538631
+276 -0.00167909352527941
+277 0.0731070181742769
+278 -0.0163827003248124
+279 -0.0314028257468305
+280 -0.00966921026548781
+281 0.0102706941067124
+282 0.00203072073029314
+283 -0.0308313739794282
+284 0.00547048142856235
+285 0.0539371640185639
+286 -0.00773101119983001
+287 -0.0303450446180751
+288 -0.00733600257056593
+289 0.00772935578415776
+290 0.00197958032226745
+291 -0.0273846524631412
+292 0.0112672702862109
+293 0.045049409831887
+294 0.00799728833473099
+295 -0.0200723316807648
+296 -0.00733856327080615
+297 -0.001791898850227
+298 0.00388503548910184
+299 -0.0339646317125627
+300 0.0269401380987506
+301 0.0295897394272477
+302 0.00882971838376906
+303 -0.0255032485942965
+304 -0.00586660773988975
+305 -0.0143116332821527
+306 0.00534299944397864
+307 -0.0288912695776605
+308 0.0357675762276391
+309 0.0162077381233435
+310 0.0175736980127429
+311 -0.0300119235674159
+312 -0.00563685913557697
+313 -0.0218208266576808
+314 0.00532212484976867
+315 -0.0165702155219983
+316 0.03160258037738
+317 0.0156089288371773
+318 0.0179977820150998
+319 -0.0255657663584924
+320 -0.00314013163781615
+321 -0.0174257276545932
+322 0.00856637995358983
+323 -0.00719462491658861
+324 0.0248064952084498
+325 0.0118797380566877
+326 0.0164280770611372
+327 -0.0202684072278218
+328 -0.000968003222461791
+329 -0.0392377749025386
+330 0.00616137008243444
+331 -0.00395889897053221
+332 0.0209975704367836
+333 0.0165669731399994
+334 0.0167876667126637
+335 -0.0162800034591445
+336 0.00157612684339945
+337 -0.0497601369515435
+338 0.00168009969601492
+339 -0.00390601780649794
+340 0.023648567413202
+341 0.0158640545767057
+342 0.0244736064929526
+343 -0.014150912333521
+344 0.00356083314932668
+345 -0.0588422955021098
+346 0.0064856866009032
+347 0.000344551175540443
+348 0.0364591845510023
+349 0.0166346451576227
+350 0.0251881929581815
+351 -0.01627179367963
+352 0.00180146013521436
+353 -0.0649333243287488
+354 0.00866862821696223
+355 -0.00279970209152114
+356 0.0263646717293285
+357 0.0211193247836195
+358 0.0214320318152118
+359 -0.0151817766787754
+360 0.00485821947887842
+361 -0.0715992844478512
+362 0.0108378220586832
+363 -0.00133094811006224
+364 0.0247532282729131
+365 0.016495069638089
+366 0.0229500626359929
+367 -0.0147226502159456
+368 0.00647045064867083
+369 -0.073385789691225
+370 0.0114312149907294
+371 0.00249982568991776
+372 0.0225934619182297
+373 0.0238409420604106
+374 0.0300604984923422
+375 -0.00852632300506627
+376 -0.000476408670694637
+377 -0.0669893069127702
+378 0.00708510482024032
+379 -0.00633855524099727
+380 0.0316293143381378
+381 0.0224467328328507
+382 0.024131620910292
+383 -0.0144420099990433
+384 -0.00656804302886437
+385 -0.0605047793511062
+386 -0.00244909720127004
+387 -0.00228283234187514
+388 0.0347630666059254
+389 0.0255372783174439
+390 0.0249118471215147
+391 -0.0156811043640799
+392 -0.0186780895478396
+393 -0.0500470638854078
+394 -0.0106681828115876
+395 0.00299348108637595
+396 0.0375478351991823
+397 0.0272676652644904
+398 0.0249262372804901
+399 -0.0128139590091909
+400 -0.0244260954570344
+401 -0.0296360177448727
+402 -0.0156522051426314
+403 0.00371335698467524
+404 0.0375532256529043
+405 0.025029221367199
+406 0.0252473835020561
+407 -0.00821195172190185
+408 -0.0340470970501328
+409 -0.0312374914683474
+410 -0.0253324219431086
+411 0.00556439075799471
+412 0.0343851616998114
+413 0.0296108649664041
+414 0.0244865536821279
+415 -0.00642396788124207
+416 -0.0381703614534087
+417 -0.0250381539188707
+418 -0.0339628157444566
+419 0.00243992182082179
+420 0.0377363310935231
+421 0.0279269519560789
+422 0.0330045526455719
+423 -0.00511644400658994
+424 -0.0450141067262116
+425 -0.0158485572785398
+426 -0.03936429400437
+427 0.00750953654479071
+428 0.0477707926390831
+429 0.0288151654666373
+430 0.0361802804944373
+431 -0.00712917753126239
+432 -0.0583334638414398
+433 -0.00267010949721538
+434 -0.0470917242637041
+435 0.00517042251078623
+436 0.037455528907572
+437 0.0343942996609878
+438 0.0332028694901519
+439 -0.00589078251875288
+440 -0.0637043911707992
+441 0.00666183788238349
+442 -0.0525517266899241
+443 0.00895232543554424
+444 0.0382697031000271
+445 0.0284021587291105
+446 0.0334942204660841
+447 -0.00596107650540415
+448 -0.0720966795946044
+449 0.0232447585917915
+450 -0.0608153052711438
+451 0.0116399374656849
+452 0.0381251008359883
+453 0.0346830496503291
+454 0.0398065018725046
+455 -0.000362012301347499
+456 -0.0785173577161933
+457 0.0300252474048187
+458 -0.0646382374089607
+459 0.00182900934772608
+460 0.0454064481406782
+461 0.0329664080833594
+462 0.0362011391795208
+463 -0.015347551228469
+464 -0.0671509681824761
+465 0.0296481877260799
+466 -0.0746946268126137
+467 0.00641586390856246
+468 0.0470505050556008
+469 0.0366327721242302
+470 0.0377150582080205
+471 -0.0257508722774105
+472 -0.0637151879640854
+473 0.0236744558402174
+474 -0.0680975388310196
+475 0.00255042565832294
+476 0.0512681657479446
+477 0.0403605713503443
+478 0.0359001859859639
+479 -0.029132074768914
+480 -0.0508034717438863
+481 0.0239527602817767
+482 -0.0575129877889322
+483 -0.00369721861473263
+484 0.0505988973989383
+485 0.0361467620291191
+486 0.0368416078787121
+487 -0.032834716815589
+488 -0.0434932898244011
+489 0.00911801422218572
+490 -0.0523537970034941
+491 -0.00821280045148764
+492 0.0487328578561805
+493 0.0392756061114285
+494 0.0353235938763974
+495 -0.0362172978867714
+496 -0.0301630804400009
+497 -0.00312318019738603
+498 -0.0442427016803628
+499 -0.0193549364510511
+500 0.0511246815814022
+501 0.0375525162491352
+502 0.0415223485757893
+503 -0.0434162929277164
+504 -0.0174703151437594
+505 -0.0123368071049746
+506 -0.030092552759096
+507 -0.0259859780907219
+508 0.0606752480087361
+509 0.0379827626715177
+510 0.0429850681863943
+511 -0.0519282882356438
+512 -0.0109290187868267
+513 -0.0198911294093943
+514 -0.0179805613817386
+515 -0.0373506310511416
+516 0.051718263130701
+517 0.0437679408364481
+518 0.0396991923289056
+519 -0.0598738380924832
+520 0.00227956370589332
+521 -0.0315948919060393
+522 -0.00689298816517704
+523 -0.0400683003822942
+524 0.0504116144670193
+525 0.0384452328799252
+526 0.0422779082777363
+527 -0.0628378541858099
+528 0.00648345925565532
+529 -0.0339074110875153
+530 0.00392215913901875
+531 -0.0447371320235012
+532 0.0499683975261213
+533 0.0445342493453758
+534 0.0358507522616787
+535 -0.0462975420467472
+536 0.0065134510940885
+537 -0.0446950607193122
+538 0.0078695055551158
+539 -0.0435564432715238
+540 0.0490054802985018
+541 0.0429751997079501
+542 0.0249996087628272
+543 -0.0442291516924361
+544 0.00869843705070359
+545 -0.0527698107871565
+546 0.00799130494240491
+547 -0.0323718744761137
+548 0.0410065929835765
+549 0.0475759092955819
+550 0.0175755467103812
+551 -0.0376302948184889
+552 0.00700412709467122
+553 -0.0608320774535298
+554 0.0048130064138099
+555 -0.0173352616909856
+556 0.0346973915783743
+557 0.0493903178904071
+558 0.0101108717892249
+559 -0.0265084973202414
+560 0.00358635362684098
+561 -0.0470576145955835
+562 9.30616028058754e-05
+563 -0.009328796983189
+564 0.0265128180743515
+565 0.047184891847067
+566 0.00219163772528874
+567 -0.0121413168884318
+568 -0.00749414671957915
+569 -0.0440813124278593
+570 -0.00813710471833781
+571 0.00114675437656366
+572 0.0162393335738264
+573 0.0504911799834256
+574 -0.00853374126083636
+575 0.000754234959055234
+576 -0.0117204282603961
+577 -0.0354583766676116
+578 -0.0192100536607529
+579 0.00839406418544501
+580 0.00960845163504427
+581 0.0469051048472684
+582 -0.00888902900418868
+583 0.0100099116353234
+584 -0.0179909146856837
+585 -0.0244293914853853
+586 -0.0256760479816353
+587 0.0212220748711766
+588 0.00632084475559719
+589 0.0387313178071368
+590 -0.000554587934313714
+591 0.0124601538908314
+592 -0.0295249733381573
+593 -0.0144520545351094
+594 -0.0331889907164869
+595 0.0212877712137735
+596 0.00590139546386316
+597 0.0273355576179403
+598 0.00735416770830889
+599 0.0128873818372069
+600 -0.0346175922714857
+601 -0.00857703845819032
+602 -0.0362631596335238
+603 0.0242701471795148
+604 0.0131286156780055
+605 0.00696270942062036
+606 0.0188195193146635
+607 0.0103462402033716
+608 -0.0417481445059436
+609 0.00414843805232896
+610 -0.041616927291058
+611 0.0282618294134973
+612 0.02337979916365
+613 -0.00673110780182958
+614 0.0290971868544386
+615 0.017105062059816
+616 -0.0516331546555055
+617 0.0142062007627548
+618 -0.046594757738246
+619 0.0214354322279795
+620 0.0395098993458107
+621 -0.0267793069789269
+622 0.0381323026116677
+623 0.0119813141067502
+624 -0.0521722164918075
+625 0.00907497826142658
+626 -0.0377414784171271
+627 0.0150907402651132
+628 0.0450797547657188
+629 -0.0367261749783528
+630 0.0474940016463238
+631 0.000764223750645765
+632 -0.0464350834773778
+633 0.00292816454844645
+634 -0.0345472431115147
+635 0.0140802099582887
+636 0.046733825449202
+637 -0.0331976317138726
+638 0.0505769917402539
+639 -0.00507624644834293
+640 -0.0344212973139547
+641 -0.00226163410076298
+642 -0.0197922791475835
+643 0.00383630490838536
+644 0.0363444998831405
+645 -0.0152447367341023
+646 0.0410735723819794
+647 -0.00866551034416046
+648 -0.0282028390344346
+649 -0.0138273162520216
+650 -0.013988974897117
+651 -0.00356215450658962
+652 0.0315292998347554
+653 0.00265684065928491
+654 0.0297462860635905
+655 -0.0132763024515043
+656 -0.0151844375022346
+657 -0.0222624267154824
+658 -0.00808783339763846
+659 -0.0118309039774407
+660 0.0257051832194354
+661 0.0139672196593361
+662 0.0297614515417377
+663 -0.021331361380431
+664 -0.00340733006761883
+665 -0.0283789637687968
+666 0.00461054911911345
+667 -0.018250569181885
+668 0.0226081124897128
+669 0.0323347720900023
+670 0.0223372263530966
+671 -0.0329163380381145
+672 0.00653265472132318
+673 -0.0348871958579168
+674 0.0141751097268468
+675 -0.0288075244305473
+676 0.00890270626763702
+677 0.0520479385647175
+678 0.0145072446621148
+679 -0.0415204263536339
+680 0.0171547215622114
+681 -0.0470557518960979
+682 0.0193254756646944
+683 -0.0255419271372531
+684 0.00688287993008186
+685 0.0526562424346814
+686 0.00589567882152875
+687 -0.0339847831638287
+688 0.02068125784698
+689 -0.0420544887083924
+690 0.013314784448658
+691 -0.0245768886587792
+692 0.00903037071195691
+693 0.0563846260400661
+694 -0.00286801368241955
+695 -0.0213844040017938
+696 0.0126629235111523
+697 -0.0309372292635961
+698 0.00276336704503089
+699 -0.015616452692981
+700 0.00419778210216804
+701 0.0536380666776548
+702 -0.012596502198999
+703 -0.0174715146408299
+704 0.00871952059420196
+705 -0.0227565257963439
+706 -0.00318256697092859
+707 -0.0038667173143475
+708 -0.00772968118848665
+709 0.0587207873901504
+710 -0.0193357475432715
+711 -0.0115269673972748
+712 -1.7421858581782e-05
+713 -0.012115015884252
+714 -0.0149797201478353
+715 0.00756590604451175
+716 -0.0126297132883264
+717 0.0594933008421939
+718 -0.0267304156748315
+719 0.00405070013394311
+720 -0.00821048967450404
+721 -0.000558386344514712
+722 -0.0178272992410061
+723 0.0152599286078378
+724 -0.0188510979465177
+725 0.056849489519984
+726 -0.0348880232368348
+727 0.0167352525344068
+728 -0.020642086446652
+729 0.00744701455708182
+730 -0.027702827538011
+731 0.0163569136090967
+732 -0.00705447320310994
+733 0.0411987341306314
+734 -0.0263596539233783
+735 0.0159406402225642
+736 -0.0248727169666328
+737 0.0157261169316672
+738 -0.039588636677443
+739 0.019694261902396
+740 0.00199064144206026
+741 0.0194114269206411
+742 -0.0122293779441828
+743 0.0185339904720133
+744 -0.0293392689309816
+745 0.0259396934186521
+746 -0.0358486717626121
+747 0.0137081983383313
+748 0.0135827148405382
+749 0.00581560048523093
+750 -0.00646581428956839
+751 0.0110071423563427
+752 -0.0246658880723862
+753 0.0234599435571564
+754 -0.0251762927530073
+755 0.00161483936854108
+756 0.0187635618473274
+757 -0.00741664776560292
+758 0.000689537114138283
+759 0.00538728043193201
+760 -0.0121682428833197
+761 0.0107275222262937
+762 -0.0128031079890448
+763 -0.0063592461488716
+764 0.0251504687162441
+765 -0.0239334767266835
+766 0.0114670525225061
+767 -0.00487523656435794
+768 -0.00763249778942318
+769 0.0104557895326864
+770 -0.00080890423935272
+771 -0.011995729852147
+772 0.0283817192968894
+773 -0.0287562177182345
+774 0.0217718323275436
+775 -0.0101305067053654
+776 0.0014155810398293
+777 0.00324589569032011
+778 0.00708416810583891
+779 -0.022169020480487
+780 0.0234205617460705
+781 -0.0208062585550248
+782 0.0203380109609699
+783 -0.020741474408173
+784 0.0135803686158102
+785 -0.00501416160524954
+786 0.0164731425495951
+787 -0.0268911165061168
+788 0.0106549298554577
+789 -0.00845501832015795
+790 0.023385887150049
+791 -0.0315824919189702
+792 0.0225937647734562
+793 -0.0122625199927789
+794 0.0237235394650212
+795 -0.027848735297458
+796 0.0102148026540408
+797 -0.00743306965465811
+798 0.0163964193052597
+799 -0.0205275094803387
+800 0.0268449934848731
+801 -0.0196194639874214
+802 0.0245047543387088
+803 -0.018846409722053
+804 0.00241958726037752
+805 -0.00956161998696891
+806 0.00999709244485242
+807 -0.010418326586979
+808 0.0168983481695472
+809 -0.0127566274792617
+810 0.0217393096303905
+811 -0.0103549544989814
+812 -0.00649684841130904
+813 -0.00620619985783303
+814 0.000695206197500287
+815 -0.00340809372595454
+816 0.0136404808756853
+817 -0.00453202592092646
+818 0.0101641460331084
+819 0.00219305363441266
+820 -0.01561469271582
+821 -0.00960597345375202
+822 -0.00481911400465912
+823 0.00944779427817189
+824 0.00716593193427114
+825 0.00794506991287553
+826 0.00465812347978461
+827 0.010359878693985
+828 -0.020236818592972
+829 -0.0111741972267443
+830 -0.0115950977160356
+831 0.020041269074572
+832 -0.00202251725285479
+833 0.015145433881013
+834 -0.00118772326275258
+835 0.0172802408084672
+836 -0.023141151004978
+837 -0.00684287010020396
+838 -0.0222362324134472
+839 0.0290833389346101
+840 -0.00863450139262045
+841 0.0198832975538718
+842 -0.0104466516619161
+843 0.0216180798136572
+844 -0.0224573860747524
+845 -0.0159317111021684
+846 -0.0124256114118245
+847 0.0319156051078274
+848 -0.020989683927269
+849 0.0331677982754718
+850 -0.0160779048828163
+851 0.0221942143966997
+852 -0.0207114091551809
+853 -0.0193864563297597
+854 -0.00631341525970981
+855 0.0256287918067823
+856 -0.0127670576748428
+857 0.0268901900517397
+858 -0.00929763294799435
+859 0.0179202360715882
+860 -0.0205297531444686
+861 -0.0205828726597419
+862 -0.00590540758107269
+863 0.0155451399031948
+864 -0.000875709073962753
+865 0.0168572022602374
+866 0.0028001228220118
+867 0.0104479294454913
+868 -0.0213679514358647
+869 -0.0190762037709474
+870 -0.00370777717818964
+871 0.00842042601552804
+872 0.010436753298379
+873 0.00801824546756709
+874 0.00905450943087241
+875 0.00193033358362754
+876 -0.0169120672468857
+877 -0.0180536990655791
+878 -0.00178520558336185
+879 0.00342242219620668
+880 0.0209308868044849
+881 0.00123969777653587
+882 0.0189079333389431
+883 -0.00681131675201787
+884 -0.0163080121259332
+885 -0.0199735256447265
+886 0.00366535906601146
+887 -0.00556880592163452
+888 0.0273660773092557
+889 -0.0056009291081872
+890 0.0258105464894864
+891 -0.0110454740226059
+892 -0.0163301324647326
+893 -0.0182941746735561
+894 0.00615903992467205
+895 -0.0162282546172766
+896 0.0386373258470084
+897 -0.0125315671068463
+898 0.0272787535301086
+899 -0.0123831641946371
+900 -0.0133878892299601
+901 -0.0190951688075489
+902 -0.00155326284649879
+903 -0.00410581328198279
+904 0.0316127784251008
+905 -0.00291818177314328
+906 0.0227531671125918
+907 -0.0109655434893085
+908 -0.012799308403064
+909 -0.0160017423860052
+910 -0.0119329107305064
+911 0.00364258505980213
+912 0.0217756860858317
+913 0.010678734327474
+914 0.0134293321905379
+915 -0.0116912782885493
+916 -0.0117630350181795
+917 -0.0135312586647217
+918 -0.0108968297221034
+919 0.00680452587364608
+920 0.0148747844715078
+921 0.0162949694832807
+922 0.00539910868322474
+923 -0.00933468939253505
+924 -0.0106686683836374
+925 -0.0124085659528643
+926 -0.0105711782287246
+927 0.00804235477237977
+928 0.00723801263775247
+929 0.0258061476363918
+930 -0.000684398388361734
+931 -0.00762103435599326
+932 -0.00904303753421588
+933 -0.00745301596275639
+934 -0.0103044124193686
+935 0.00595191617101465
+936 2.14978806537769e-05
+937 0.0352834100860169
+938 -0.00718396988767262
+939 -0.00837792361666858
+940 -0.00720830894781464
+941 -0.00721256609199517
+942 -0.0103563055654315
+943 0.0067689029813515
+944 -0.00615969185391731
+945 0.0366438822751357
+946 -0.00555322732762464
+947 -0.00559909850816345
+948 -0.00807226171468928
+949 -0.0072437466206792
+950 -0.00880657440286336
+951 -0.000406817302546885
+952 0.00334053871073266
+953 0.0282996182562531
+954 -0.00548530337183551
+955 -0.00508266404610792
+956 -0.00475991829082716
+957 -0.00556541448888507
+958 -0.00693102605261411
+959 -0.0068914951848352
+960 0.0124551723792496
+961 0.0205485192799428
+962 -0.0051215464298893
+963 -0.00544517946765895
+964 -0.00360902370385679
+965 -0.00389124817008502
+966 -0.00568418258247609
+967 -0.00451409289805204
+968 0.0126296974425642
+969 0.0119357974221847
+970 -0.00453960421739095
+971 -0.00389602063108262
+972 -0.00253945519375536
+973 -0.00246645747512712
+974 -0.00331176412956721
+975 -0.0045686818998509
+976 0.0119005284725565
+977 0.00477869960024375
+978 -0.00316972429661236
+979 -0.00294762637219811
+980 -0.00197263485163538
+981 -0.00240027919608702
+982 -0.00221728547295443
+983 -0.00268664184058333
+984 0.013078013292045
+985 -0.00054100792945422
+986 -0.000917736517605598
+987 -0.001567052283492
+988 -0.000836676486280892
+989 -0.00221208695388904
+990 -0.00248903162837629
+991 -0.0021625005351972
+992 0.0072477698974949
+993 0.00063353338379511
+994 0.000469110586525005
+995 -0.000441976909684745
+996 -0.000609378899765559
+997 -0.000809499361526555
+998 -0.0010684119522621
+999 -0.00124157520451844
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat
new file mode 100644
index 000000000..0d92cc377
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.0375239849090576 0.029999999999994 0.029999999999994 0.0 1
+2 0.0333089828491211 0.0300000000000011 0.0300000000000011 0.0 2
+3 0.0330851078033447 0.0399999999999991 0.0399999999999991 0.0 3
+4 0.0331559181213379 0.0300000000000011 0.0300000000000011 0.0 4
+5 0.0330770015716553 0.0300000000000011 0.0300000000000011 0.0 5
+6 0.0331110954284668 0.0399999999999991 0.0399999999999991 0.0 6
+7 0.0357470512390137 0.0300000000000011 0.0300000000000011 0.0 7
+8 0.0360550880432129 0.0399999999999991 0.0399999999999991 0.0 8
+9 0.0575530529022217 0.0600000000000023 0.0600000000000023 0.0 9
+10 0.0352299213409424 0.0300000000000011 0.0300000000000011 0.0 10
+11 0.0335679054260254 0.029999999999994 0.029999999999994 0.0 11
+12 0.0332560539245605 0.0400000000000063 0.0400000000000063 0.0 12
+13 0.0364248752593994 0.029999999999994 0.029999999999994 0.0 13
+14 0.033275842666626 0.0400000000000063 0.0400000000000063 0.0 14
+15 0.0336852073669434 0.029999999999994 0.029999999999994 0.0 15
+16 0.0334939956665039 0.0300000000000011 0.0300000000000011 0.0 16
+17 0.0582540035247803 0.0600000000000023 0.0600000000000023 0.0 17
+18 0.0354878902435303 0.0399999999999991 0.0399999999999991 0.0 18
+19 0.0385029315948486 0.0399999999999991 0.0399999999999991 0.0 19
+20 0.0362861156463623 0.0300000000000011 0.0300000000000011 0.0 20
+21 0.035506010055542 0.0399999999999991 0.0399999999999991 0.0 21
+22 0.0334300994873047 0.0300000000000011 0.0300000000000011 0.0 22
+23 0.0329139232635498 0.0399999999999991 0.0399999999999991 0.0 23
+24 0.0332398414611816 0.0300000000000011 0.0300000000000011 0.0 24
+25 0.0579190254211426 0.0600000000000023 0.0600000000000023 0.0 25
+26 0.0361781120300293 0.029999999999994 0.029999999999994 0.0 26
+27 0.0338189601898193 0.0400000000000063 0.0400000000000063 0.0 27
+28 0.0347120761871338 0.029999999999994 0.029999999999994 0.0 28
+29 0.0333528518676758 0.0399999999999991 0.0399999999999991 0.0 29
+30 0.0332620143890381 0.0300000000000011 0.0300000000000011 0.0 30
+31 0.0329258441925049 0.0300000000000011 0.0300000000000011 0.0 31
+32 0.033383846282959 0.0300000000000011 0.0300000000000011 0.0 32
+33 0.0601050853729248 0.0700000000000003 0.0700000000000003 0.0 33
+34 0.0353600978851318 0.0300000000000011 0.0300000000000011 0.0 34
+35 0.0334739685058594 0.0300000000000011 0.0300000000000011 0.0 35
+36 0.0333919525146484 0.0399999999999991 0.0399999999999991 0.0 36
+37 0.034959077835083 0.0300000000000011 0.0300000000000011 0.0 37
+38 0.0332329273223877 0.029999999999994 0.029999999999994 0.0 38
+39 0.0333740711212158 0.0400000000000063 0.0400000000000063 0.0 39
+40 0.0358071327209473 0.029999999999994 0.029999999999994 0.0 40
+41 0.0592548847198486 0.0600000000000023 0.0600000000000023 0.0 41
+42 0.0328431129455566 0.0399999999999991 0.0399999999999991 0.0 42
+43 0.0325570106506348 0.0300000000000011 0.0300000000000011 0.0 43
+44 0.0326550006866455 0.0300000000000011 0.0300000000000011 0.0 44
+45 0.0341711044311523 0.0300000000000011 0.0300000000000011 0.0 45
+46 0.0385479927062988 0.0300000000000011 0.0300000000000011 0.0 46
+47 0.0355618000030518 0.0399999999999991 0.0399999999999991 0.0 47
+48 0.0336899757385254 0.0300000000000011 0.0300000000000011 0.0 48
+49 0.0340290069580078 0.0399999999999991 0.0399999999999991 0.0 49
+50 0.057744026184082 0.0499999999999972 0.0499999999999972 0.0 50
+51 0.0332441329956055 0.0399999999999991 0.0399999999999991 0.0 51
+52 0.0334060192108154 0.0300000000000011 0.0300000000000011 0.0 52
+53 0.0331339836120605 0.0300000000000011 0.0300000000000011 0.0 53
+54 0.0364229679107666 0.0399999999999991 0.0399999999999991 0.0 54
+55 0.0333731174468994 0.0300000000000011 0.0300000000000011 0.0 55
+56 0.0333929061889648 0.0399999999999991 0.0399999999999991 0.0 56
+57 0.0332939624786377 0.0300000000000011 0.0300000000000011 0.0 57
+58 0.0580708980560303 0.0600000000000023 0.0600000000000023 0.0 58
+59 0.0334999561309814 0.0300000000000011 0.0300000000000011 0.0 59
+60 0.0361111164093018 0.0399999999999991 0.0399999999999991 0.0 60
+61 0.0338809490203857 0.0300000000000011 0.0300000000000011 0.0 61
+62 0.0334880352020264 0.0399999999999991 0.0399999999999991 0.0 62
+63 0.0335280895233154 0.029999999999994 0.029999999999994 0.0 63
+64 0.0350849628448486 0.0300000000000011 0.0300000000000011 0.0 64
+65 0.033484935760498 0.0399999999999991 0.0399999999999991 0.0 65
+66 0.0578420162200928 0.0500000000000043 0.0500000000000043 0.0 66
+67 0.0367329120635986 0.0399999999999991 0.0399999999999991 0.0 67
+68 0.0351338386535645 0.0399999999999991 0.0399999999999991 0.0 68
+69 0.0334072113037109 0.0300000000000011 0.0300000000000011 0.0 69
+70 0.0339431762695312 0.0300000000000011 0.0300000000000011 0.0 70
+71 0.0332098007202148 0.0399999999999991 0.0399999999999991 0.0 71
+72 0.034019947052002 0.0300000000000011 0.0300000000000011 0.0 72
+73 0.0393249988555908 0.0399999999999991 0.0399999999999991 0.0 73
+74 0.0685920715332031 0.0600000000000023 0.0600000000000023 0.0 74
+75 0.034276008605957 0.0399999999999991 0.0399999999999991 0.0 75
+76 0.0334501266479492 0.029999999999994 0.029999999999994 0.0 76
+77 0.0332150459289551 0.0300000000000011 0.0300000000000011 0.0 77
+78 0.0333437919616699 0.0399999999999991 0.0399999999999991 0.0 78
+79 0.0332369804382324 0.0300000000000011 0.0300000000000011 0.0 79
+80 0.0360598564147949 0.0399999999999991 0.0399999999999991 0.0 80
+81 0.0335109233856201 0.0300000000000011 0.0300000000000011 0.0 81
+82 0.058535099029541 0.0600000000000023 0.0600000000000023 0.0 82
+83 0.0335390567779541 0.0300000000000011 0.0300000000000011 0.0 83
+84 0.0335979461669922 0.0399999999999991 0.0399999999999991 0.0 84
+85 0.0331900119781494 0.0300000000000011 0.0300000000000011 0.0 85
+86 0.03330397605896 0.0300000000000011 0.0300000000000011 0.0 86
+87 0.0366411209106445 0.0399999999999991 0.0399999999999991 0.0 87
+88 0.0347549915313721 0.0300000000000011 0.0300000000000011 0.0 88
+89 0.0331470966339111 0.0399999999999991 0.0399999999999991 0.0 89
+90 0.0598249435424805 0.0599999999999952 0.0599999999999952 0.0 90
+91 0.0330801010131836 0.0300000000000011 0.0300000000000011 0.0 91
+92 0.0329310894012451 0.0300000000000011 0.0300000000000011 0.0 92
+93 0.032721996307373 0.0300000000000011 0.0300000000000011 0.0 93
+94 0.0355160236358643 0.0399999999999991 0.0399999999999991 0.0 94
+95 0.0339648723602295 0.0300000000000011 0.0300000000000011 0.0 95
+96 0.032512903213501 0.0399999999999991 0.0399999999999991 0.0 96
+97 0.0330419540405273 0.0300000000000011 0.0300000000000011 0.0 97
+98 0.0334761142730713 0.0300000000000011 0.0300000000000011 0.0 98
+99 0.0660569667816162 0.0700000000000003 0.0700000000000003 0.0 99
+100 0.0368058681488037 0.0399999999999991 0.0399999999999991 0.0 100
+101 0.0347878932952881 0.0300000000000011 0.0300000000000011 0.0 101
+102 0.0338079929351807 0.029999999999994 0.029999999999994 0.0 102
+103 0.0334770679473877 0.029999999999994 0.029999999999994 0.0 103
+104 0.0329740047454834 0.0300000000000011 0.0300000000000011 0.0 104
+105 0.0333049297332764 0.0300000000000011 0.0300000000000011 0.0 105
+106 0.033519983291626 0.0399999999999991 0.0399999999999991 0.0 106
+107 0.0611979961395264 0.0600000000000023 0.0600000000000023 0.0 107
+108 0.0340859889984131 0.0300000000000011 0.0300000000000011 0.0 108
+109 0.0335040092468262 0.0399999999999991 0.0399999999999991 0.0 109
+110 0.0334708690643311 0.0300000000000011 0.0300000000000011 0.0 110
+111 0.0335888862609863 0.0300000000000011 0.0300000000000011 0.0 111
+112 0.033301830291748 0.0399999999999991 0.0399999999999991 0.0 112
+113 0.0332660675048828 0.0300000000000011 0.0300000000000011 0.0 113
+114 0.0370340347290039 0.0399999999999991 0.0399999999999991 0.0 114
+115 0.0586259365081787 0.0599999999999952 0.0599999999999952 0.0 115
+116 0.0336349010467529 0.0300000000000011 0.0300000000000011 0.0 116
+117 0.0350830554962158 0.0300000000000011 0.0300000000000011 0.0 117
+118 0.033397912979126 0.0399999999999991 0.0399999999999991 0.0 118
+119 0.0334382057189941 0.0300000000000011 0.0300000000000011 0.0 119
+120 0.0333988666534424 0.0399999999999991 0.0399999999999991 0.0 120
+121 0.0362389087677002 0.0300000000000011 0.0300000000000011 0.0 121
+122 0.033973217010498 0.0399999999999991 0.0399999999999991 0.0 122
+123 0.0578141212463379 0.0499999999999972 0.0499999999999972 0.0 123
+124 0.033689022064209 0.0400000000000063 0.0400000000000063 0.0 124
+125 0.0340471267700195 0.029999999999994 0.029999999999994 0.0 125
+126 0.0395550727844238 0.0400000000000063 0.0400000000000063 0.0 126
+127 0.0365371704101562 0.0399999999999991 0.0399999999999991 0.0 127
+128 0.034188985824585 0.0300000000000011 0.0300000000000011 0.0 128
+129 0.0336990356445312 0.0399999999999991 0.0399999999999991 0.0 129
+130 0.033534049987793 0.029999999999994 0.029999999999994 0.0 130
+131 0.0577750205993652 0.0600000000000023 0.0600000000000023 0.0 131
+132 0.0339059829711914 0.0300000000000011 0.0300000000000011 0.0 132
+133 0.0334141254425049 0.0300000000000011 0.0300000000000011 0.0 133
+134 0.0364940166473389 0.0399999999999991 0.0399999999999991 0.0 134
+135 0.0346250534057617 0.0399999999999991 0.0399999999999991 0.0 135
+136 0.03348708152771 0.0300000000000011 0.0300000000000011 0.0 136
+137 0.0330390930175781 0.0300000000000011 0.0300000000000011 0.0 137
+138 0.0333828926086426 0.0399999999999991 0.0399999999999991 0.0 138
+139 0.0577211380004883 0.0499999999999972 0.0499999999999972 0.0 139
+140 0.0367538928985596 0.0399999999999991 0.0399999999999991 0.0 140
+141 0.0339748859405518 0.0300000000000011 0.0300000000000011 0.0 141
+142 0.0334391593933105 0.0399999999999991 0.0399999999999991 0.0 142
+143 0.0334470272064209 0.0300000000000011 0.0300000000000011 0.0 143
+144 0.0356760025024414 0.0399999999999991 0.0399999999999991 0.0 144
+145 0.0332551002502441 0.0300000000000011 0.0300000000000011 0.0 145
+146 0.0335030555725098 0.0300000000000011 0.0300000000000011 0.0 146
+147 0.0603840351104736 0.0600000000000023 0.0600000000000023 0.0 147
+148 0.033195972442627 0.0399999999999991 0.0399999999999991 0.0 148
+149 0.0326118469238281 0.0300000000000011 0.0300000000000011 0.0 149
+150 0.0324470996856689 0.029999999999994 0.029999999999994 0.0 150
+151 0.0330009460449219 0.0400000000000063 0.0400000000000063 0.0 151
+152 0.0324180126190186 0.029999999999994 0.029999999999994 0.0 152
+153 0.0400440692901611 0.0400000000000063 0.0400000000000063 0.0 153
+154 0.0362899303436279 0.029999999999994 0.029999999999994 0.0 154
+155 0.0349278450012207 0.0400000000000063 0.0400000000000063 0.0 155
+156 0.0600240230560303 0.0599999999999952 0.0599999999999952 0.0 156
+157 0.0334708690643311 0.0300000000000011 0.0300000000000011 0.0 157
+158 0.0335209369659424 0.0399999999999991 0.0399999999999991 0.0 158
+159 0.0335359573364258 0.0300000000000011 0.0300000000000011 0.0 159
+160 0.0334579944610596 0.0300000000000011 0.0300000000000011 0.0 160
+161 0.0362169742584229 0.0399999999999991 0.0399999999999991 0.0 161
+162 0.0338380336761475 0.0300000000000011 0.0300000000000011 0.0 162
+163 0.0335981845855713 0.0399999999999991 0.0399999999999991 0.0 163
+164 0.0578079223632812 0.0499999999999972 0.0499999999999972 0.0 164
+165 0.0334019660949707 0.0399999999999991 0.0399999999999991 0.0 165
+166 0.0331990718841553 0.0300000000000011 0.0300000000000011 0.0 166
+167 0.0360620021820068 0.0399999999999991 0.0399999999999991 0.0 167
+168 0.0344648361206055 0.0300000000000011 0.0300000000000011 0.0 168
+169 0.0341999530792236 0.0399999999999991 0.0399999999999991 0.0 169
+170 0.0331728458404541 0.0300000000000011 0.0300000000000011 0.0 170
+171 0.0350158214569092 0.0300000000000011 0.0300000000000011 0.0 171
+172 0.0580298900604248 0.0600000000000023 0.0600000000000023 0.0 172
+173 0.0335690975189209 0.0300000000000011 0.0300000000000011 0.0 173
+174 0.036384105682373 0.0399999999999991 0.0399999999999991 0.0 174
+175 0.034492015838623 0.0300000000000011 0.0300000000000011 0.0 175
+176 0.03336501121521 0.0399999999999991 0.0399999999999991 0.0 176
+177 0.0331079959869385 0.029999999999994 0.029999999999994 0.0 177
+178 0.0331339836120605 0.0300000000000011 0.0300000000000011 0.0 178
+179 0.0350081920623779 0.0399999999999991 0.0399999999999991 0.0 179
+180 0.0666470527648926 0.0700000000000003 0.0700000000000003 0.0 180
+181 0.0338301658630371 0.0300000000000011 0.0300000000000011 0.0 181
+182 0.0340950489044189 0.0300000000000011 0.0300000000000011 0.0 182
+183 0.0334529876708984 0.0399999999999991 0.0399999999999991 0.0 183
+184 0.0331630706787109 0.0300000000000011 0.0300000000000011 0.0 184
+185 0.0333731174468994 0.0300000000000011 0.0300000000000011 0.0 185
+186 0.0330700874328613 0.0399999999999991 0.0399999999999991 0.0 186
+187 0.0334250926971436 0.0300000000000011 0.0300000000000011 0.0 187
+188 0.0619869232177734 0.0600000000000023 0.0600000000000023 0.0 188
+189 0.0336270332336426 0.0399999999999991 0.0399999999999991 0.0 189
+190 0.0331699848175049 0.029999999999994 0.029999999999994 0.0 190
+191 0.033411979675293 0.0300000000000011 0.0300000000000011 0.0 191
+192 0.0346980094909668 0.0399999999999991 0.0399999999999991 0.0 192
+193 0.0330710411071777 0.0300000000000011 0.0300000000000011 0.0 193
+194 0.0360589027404785 0.0399999999999991 0.0399999999999991 0.0 194
+195 0.0341928005218506 0.0300000000000011 0.0300000000000011 0.0 195
+196 0.0596940517425537 0.0600000000000023 0.0600000000000023 0.0 196
+197 0.0352950096130371 0.0300000000000011 0.0300000000000011 0.0 197
+198 0.0335190296173096 0.0399999999999991 0.0399999999999991 0.0 198
+199 0.0334808826446533 0.0300000000000011 0.0300000000000011 0.0 199
+200 0.0335469245910645 0.0399999999999991 0.0399999999999991 0.0 200
+201 0.035862922668457 0.0300000000000011 0.0300000000000011 0.0 201
+202 0.034390926361084 0.0399999999999991 0.0399999999999991 0.0 202
+203 0.0333080291748047 0.0300000000000011 0.0300000000000011 0.0 203
+204 0.0580418109893799 0.0599999999999952 0.0599999999999952 0.0 204
+205 0.0345079898834229 0.0300000000000011 0.0300000000000011 0.0 205
+206 0.041719913482666 0.0499999999999972 0.0399999999999991 0.01 206
+207 0.0368390083312988 0.0399999999999991 0.0399999999999991 0.0 207
+208 0.0351078510284424 0.0300000000000011 0.0300000000000011 0.0 208
+209 0.0345809459686279 0.0399999999999991 0.0399999999999991 0.0 209
+210 0.0339300632476807 0.0300000000000011 0.0300000000000011 0.0 210
+211 0.0333361625671387 0.0399999999999991 0.0399999999999991 0.0 211
+212 0.0581560134887695 0.0600000000000023 0.0600000000000023 0.0 212
+213 0.0329880714416504 0.0300000000000011 0.0300000000000011 0.0 213
+214 0.0360338687896729 0.0300000000000011 0.0300000000000011 0.0 214
+215 0.0338609218597412 0.0399999999999991 0.0399999999999991 0.0 215
+216 0.0329849720001221 0.0300000000000011 0.0300000000000011 0.0 216
+217 0.0327110290527344 0.029999999999994 0.029999999999994 0.0 217
+218 0.0328159332275391 0.0400000000000063 0.0400000000000063 0.0 218
+219 0.0330610275268555 0.029999999999994 0.029999999999994 0.0 219
+220 0.03336501121521 0.0300000000000011 0.0300000000000011 0.0 220
+221 0.0611529350280762 0.0600000000000023 0.0600000000000023 0.0 221
+222 0.0351941585540771 0.0399999999999991 0.0399999999999991 0.0 222
+223 0.0333490371704102 0.0300000000000011 0.0300000000000011 0.0 223
+224 0.0350041389465332 0.0399999999999991 0.0399999999999991 0.0 224
+225 0.0333740711212158 0.0300000000000011 0.0300000000000011 0.0 225
+226 0.0332489013671875 0.0300000000000011 0.0300000000000011 0.0 226
+227 0.0336949825286865 0.0399999999999991 0.0399999999999991 0.0 227
+228 0.035956859588623 0.0300000000000011 0.0300000000000011 0.0 228
+229 0.0582809448242188 0.0599999999999952 0.0599999999999952 0.0 229
+230 0.0335919857025146 0.0300000000000011 0.0300000000000011 0.0 230
+231 0.0334489345550537 0.0399999999999991 0.0399999999999991 0.0 231
+232 0.0346810817718506 0.0300000000000011 0.0300000000000011 0.0 232
+233 0.0393500328063965 0.0399999999999991 0.0399999999999991 0.0 233
+234 0.0365040302276611 0.0399999999999991 0.0399999999999991 0.0 234
+235 0.0341880321502686 0.0300000000000011 0.0300000000000011 0.0 235
+236 0.0340659618377686 0.0399999999999991 0.0399999999999991 0.0 236
+237 0.0579462051391602 0.0500000000000043 0.0500000000000043 0.0 237
+238 0.0337111949920654 0.0399999999999991 0.0399999999999991 0.0 238
+239 0.0335190296173096 0.0300000000000011 0.0300000000000011 0.0 239
+240 0.0335848331451416 0.0399999999999991 0.0399999999999991 0.0 240
+241 0.0367398262023926 0.0300000000000011 0.0300000000000011 0.0 241
+242 0.0346360206604004 0.0399999999999991 0.0399999999999991 0.0 242
+243 0.0332989692687988 0.0300000000000011 0.0300000000000011 0.0 243
+244 0.0345680713653564 0.029999999999994 0.029999999999994 0.0 244
+245 0.0580320358276367 0.0600000000000023 0.0600000000000023 0.0 245
+246 0.0333890914916992 0.0399999999999991 0.0399999999999991 0.0 246
+247 0.0363030433654785 0.0300000000000011 0.0300000000000011 0.0 247
+248 0.0343329906463623 0.0399999999999991 0.0399999999999991 0.0 248
+249 0.0347940921783447 0.0300000000000011 0.0300000000000011 0.0 249
+250 0.0332629680633545 0.0300000000000011 0.0300000000000011 0.0 250
+251 0.0347621440887451 0.0399999999999991 0.0399999999999991 0.0 251
+252 0.0334999561309814 0.0300000000000011 0.0300000000000011 0.0 252
+253 0.0580670833587646 0.0600000000000023 0.0600000000000023 0.0 253
+254 0.0367870330810547 0.0399999999999991 0.0399999999999991 0.0 254
+255 0.0336589813232422 0.0300000000000011 0.0300000000000011 0.0 255
+256 0.0331900119781494 0.029999999999994 0.029999999999994 0.0 256
+257 0.0331740379333496 0.0399999999999991 0.0399999999999991 0.0 257
+258 0.0331830978393555 0.0300000000000011 0.0300000000000011 0.0 258
+259 0.037837028503418 0.0399999999999991 0.0399999999999991 0.0 259
+260 0.0366449356079102 0.0300000000000011 0.0300000000000011 0.0 260
+261 0.0612552165985107 0.0599999999999952 0.0599999999999952 0.0 261
+262 0.0344550609588623 0.0300000000000011 0.0300000000000011 0.0 262
+263 0.0333309173583984 0.0300000000000011 0.0300000000000011 0.0 263
+264 0.0331869125366211 0.0399999999999991 0.0399999999999991 0.0 264
+265 0.0332980155944824 0.0300000000000011 0.0300000000000011 0.0 265
+266 0.0332081317901611 0.0300000000000011 0.0300000000000011 0.0 266
+267 0.0328857898712158 0.0399999999999991 0.0399999999999991 0.0 267
+268 0.036323070526123 0.0300000000000011 0.0300000000000011 0.0 268
+269 0.0584030151367188 0.0599999999999952 0.0599999999999952 0.0 269
+270 0.0336670875549316 0.0399999999999991 0.0399999999999991 0.0 270
+271 0.0333220958709717 0.0300000000000011 0.0300000000000011 0.0 271
+272 0.0331919193267822 0.0300000000000011 0.0300000000000011 0.0 272
+273 0.0332930088043213 0.0399999999999991 0.0399999999999991 0.0 273
+274 0.0363700389862061 0.0300000000000011 0.0300000000000011 0.0 274
+275 0.0336799621582031 0.0399999999999991 0.0399999999999991 0.0 275
+276 0.0346400737762451 0.0300000000000011 0.0300000000000011 0.0 276
+277 0.0583391189575195 0.0600000000000023 0.0600000000000023 0.0 277
+278 0.0353269577026367 0.0300000000000011 0.0300000000000011 0.0 278
+279 0.0334451198577881 0.0399999999999991 0.0399999999999991 0.0 279
+280 0.0338170528411865 0.0300000000000011 0.0300000000000011 0.0 280
+281 0.0358221530914307 0.0399999999999991 0.0399999999999991 0.0 281
+282 0.033682107925415 0.0300000000000011 0.0300000000000011 0.0 282
+283 0.0331659317016602 0.029999999999994 0.029999999999994 0.0 283
+284 0.0337538719177246 0.0399999999999991 0.0399999999999991 0.0 284
+285 0.0577969551086426 0.0600000000000023 0.0600000000000023 0.0 285
+286 0.0399131774902344 0.0399999999999991 0.0399999999999991 0.0 286
+287 0.0358040332794189 0.0300000000000011 0.0300000000000011 0.0 287
+288 0.0327050685882568 0.0300000000000011 0.0300000000000011 0.0 288
+289 0.0338749885559082 0.0399999999999991 0.0399999999999991 0.0 289
+290 0.0324099063873291 0.0300000000000011 0.0300000000000011 0.0 290
+291 0.032336950302124 0.0300000000000011 0.0300000000000011 0.0 291
+292 0.0333211421966553 0.0399999999999991 0.0399999999999991 0.0 292
+293 0.0579719543457031 0.0499999999999972 0.0499999999999972 0.0 293
+294 0.0362699031829834 0.0399999999999991 0.0399999999999991 0.0 294
+295 0.0343790054321289 0.0300000000000011 0.0300000000000011 0.0 295
+296 0.0331552028656006 0.0399999999999991 0.0399999999999991 0.0 296
+297 0.0328569412231445 0.0300000000000011 0.0300000000000011 0.0 297
+298 0.0329990386962891 0.0300000000000011 0.0300000000000011 0.0 298
+299 0.0327639579772949 0.0399999999999991 0.0399999999999991 0.0 299
+300 0.0331850051879883 0.0300000000000011 0.0300000000000011 0.0 300
+301 0.0610020160675049 0.0600000000000023 0.0600000000000023 0.0 301
+302 0.0331580638885498 0.0300000000000011 0.0300000000000011 0.0 302
+303 0.0325980186462402 0.0399999999999991 0.0399999999999991 0.0 303
+304 0.0325989723205566 0.029999999999994 0.029999999999994 0.0 304
+305 0.0341310501098633 0.0300000000000011 0.0300000000000011 0.0 305
+306 0.0326070785522461 0.0399999999999991 0.0399999999999991 0.0 306
+307 0.032383918762207 0.0300000000000011 0.0300000000000011 0.0 307
+308 0.0361649990081787 0.0300000000000011 0.0300000000000011 0.0 308
+309 0.0585198402404785 0.0600000000000023 0.0600000000000023 0.0 309
+310 0.0331130027770996 0.0399999999999991 0.0399999999999991 0.0 310
+311 0.0329859256744385 0.0300000000000011 0.0300000000000011 0.0 311
+312 0.0329129695892334 0.0300000000000011 0.0300000000000011 0.0 312
+313 0.0405938625335693 0.0399999999999991 0.0399999999999991 0.0 313
+314 0.0329680442810059 0.0300000000000011 0.0300000000000011 0.0 314
+315 0.0359671115875244 0.0399999999999991 0.0399999999999991 0.0 315
+316 0.0347959995269775 0.0399999999999991 0.0399999999999991 0.0 316
+317 0.0335128307342529 0.0300000000000011 0.0300000000000011 0.0 317
+318 0.0581021308898926 0.0599999999999952 0.0599999999999952 0.0 318
+319 0.033390998840332 0.0300000000000011 0.0300000000000011 0.0 319
+320 0.0332300662994385 0.0300000000000011 0.0300000000000011 0.0 320
+321 0.0363011360168457 0.0399999999999991 0.0399999999999991 0.0 321
+322 0.0331549644470215 0.0300000000000011 0.0300000000000011 0.0 322
+323 0.0341241359710693 0.0399999999999991 0.0399999999999991 0.0 323
+324 0.0336441993713379 0.0300000000000011 0.0300000000000011 0.0 324
+325 0.0336179733276367 0.0300000000000011 0.0300000000000011 0.0 325
+326 0.0578069686889648 0.0599999999999952 0.0599999999999952 0.0 326
+327 0.0333080291748047 0.0400000000000063 0.0400000000000063 0.0 327
+328 0.0363671779632568 0.029999999999994 0.029999999999994 0.0 328
+329 0.0343098640441895 0.0400000000000063 0.0400000000000063 0.0 329
+330 0.033099889755249 0.029999999999994 0.029999999999994 0.0 330
+331 0.0332112312316895 0.0300000000000011 0.0300000000000011 0.0 331
+332 0.0349369049072266 0.0399999999999991 0.0399999999999991 0.0 332
+333 0.033397912979126 0.0300000000000011 0.0300000000000011 0.0 333
+334 0.0581459999084473 0.0600000000000023 0.0600000000000023 0.0 334
+335 0.0366590023040771 0.0300000000000011 0.0300000000000011 0.0 335
+336 0.0336220264434814 0.0399999999999991 0.0399999999999991 0.0 336
+337 0.0332498550415039 0.0300000000000011 0.0300000000000011 0.0 337
+338 0.0331971645355225 0.0399999999999991 0.0399999999999991 0.0 338
+339 0.0332369804382324 0.0300000000000011 0.0300000000000011 0.0 339
+340 0.0404288768768311 0.0399999999999991 0.0399999999999991 0.0 340
+341 0.0335631370544434 0.0300000000000011 0.0300000000000011 0.0 341
+342 0.0613040924072266 0.0599999999999952 0.0599999999999952 0.0 342
+343 0.0339159965515137 0.0399999999999991 0.0399999999999991 0.0 343
+344 0.0333619117736816 0.0300000000000011 0.0300000000000011 0.0 344
+345 0.0331740379333496 0.0300000000000011 0.0300000000000011 0.0 345
+346 0.0331220626831055 0.0399999999999991 0.0399999999999991 0.0 346
+347 0.0331380367279053 0.0300000000000011 0.0300000000000011 0.0 347
+348 0.0358641147613525 0.0399999999999991 0.0399999999999991 0.0 348
+349 0.0335299968719482 0.0300000000000011 0.0300000000000011 0.0 349
+350 0.0584430694580078 0.0600000000000023 0.0600000000000023 0.0 350
+351 0.0353488922119141 0.029999999999994 0.029999999999994 0.0 351
+352 0.03336501121521 0.0400000000000063 0.0400000000000063 0.0 352
+353 0.0332889556884766 0.029999999999994 0.029999999999994 0.0 353
+354 0.0334041118621826 0.0300000000000011 0.0300000000000011 0.0 354
+355 0.0363349914550781 0.0399999999999991 0.0399999999999991 0.0 355
+356 0.0346698760986328 0.0300000000000011 0.0300000000000011 0.0 356
+357 0.0335850715637207 0.0399999999999991 0.0399999999999991 0.0 357
+358 0.0599031448364258 0.0600000000000023 0.0600000000000023 0.0 358
+359 0.0340287685394287 0.0300000000000011 0.0300000000000011 0.0 359
+360 0.0335278511047363 0.0300000000000011 0.0300000000000011 0.0 360
+361 0.0349221229553223 0.0399999999999991 0.0399999999999991 0.0 361
+362 0.0355300903320312 0.0300000000000011 0.0300000000000011 0.0 362
+363 0.0349609851837158 0.0399999999999991 0.0399999999999991 0.0 363
+364 0.0329630374908447 0.0300000000000011 0.0300000000000011 0.0 364
+365 0.0333020687103271 0.0399999999999991 0.0399999999999991 0.0 365
+366 0.065701961517334 0.0599999999999952 0.0599999999999952 0.0 366
+367 0.0337100028991699 0.0400000000000063 0.0400000000000063 0.0 367
+368 0.0366199016571045 0.029999999999994 0.029999999999994 0.0 368
+369 0.0340349674224854 0.0400000000000063 0.0400000000000063 0.0 369
+370 0.0338621139526367 0.029999999999994 0.029999999999994 0.0 370
+371 0.0332958698272705 0.0300000000000011 0.0300000000000011 0.0 371
+372 0.0330479145050049 0.0399999999999991 0.0399999999999991 0.0 372
+373 0.033778190612793 0.0300000000000011 0.0300000000000011 0.0 373
+374 0.0588729381561279 0.0600000000000023 0.0600000000000023 0.0 374
+375 0.036099910736084 0.0399999999999991 0.0399999999999991 0.0 375
+376 0.0358579158782959 0.0300000000000011 0.0300000000000011 0.0 376
+377 0.03354811668396 0.0399999999999991 0.0399999999999991 0.0 377
+378 0.0334241390228271 0.0300000000000011 0.0300000000000011 0.0 378
+379 0.0335249900817871 0.0300000000000011 0.0300000000000011 0.0 379
+380 0.0329539775848389 0.0399999999999991 0.0399999999999991 0.0 380
+381 0.0334098339080811 0.0300000000000011 0.0300000000000011 0.0 381
+382 0.0632669925689697 0.0599999999999952 0.0599999999999952 0.0 382
+383 0.033499002456665 0.0399999999999991 0.0399999999999991 0.0 383
+384 0.0333430767059326 0.0300000000000011 0.0300000000000011 0.0 384
+385 0.03495192527771 0.0300000000000011 0.0300000000000011 0.0 385
+386 0.0333530902862549 0.0399999999999991 0.0399999999999991 0.0 386
+387 0.0335168838500977 0.0300000000000011 0.0300000000000011 0.0 387
+388 0.0355610847473145 0.0399999999999991 0.0399999999999991 0.0 388
+389 0.0336718559265137 0.0300000000000011 0.0300000000000011 0.0 389
+390 0.0594749450683594 0.0600000000000023 0.0600000000000023 0.0 390
+391 0.03342604637146 0.029999999999994 0.029999999999994 0.0 391
+392 0.0333490371704102 0.0400000000000063 0.0400000000000063 0.0 392
+393 0.0401210784912109 0.0399999999999991 0.0399999999999991 0.0 393
+394 0.0331671237945557 0.0300000000000011 0.0300000000000011 0.0 394
+395 0.0364630222320557 0.0399999999999991 0.0399999999999991 0.0 395
+396 0.0339119434356689 0.0300000000000011 0.0300000000000011 0.0 396
+397 0.0332529544830322 0.029999999999994 0.029999999999994 0.0 397
+398 0.0581979751586914 0.0600000000000023 0.0600000000000023 0.0 398
+399 0.0337510108947754 0.0300000000000011 0.0300000000000011 0.0 399
+400 0.0334861278533936 0.0300000000000011 0.0300000000000011 0.0 400
+401 0.0362730026245117 0.0300000000000011 0.0300000000000011 0.0 401
+402 0.03330397605896 0.0399999999999991 0.0399999999999991 0.0 402
+403 0.0347201824188232 0.0300000000000011 0.0300000000000011 0.0 403
+404 0.0331459045410156 0.0399999999999991 0.0399999999999991 0.0 404
+405 0.0333847999572754 0.0300000000000011 0.0300000000000011 0.0 405
+406 0.0580871105194092 0.0599999999999952 0.0599999999999952 0.0 406
+407 0.0334339141845703 0.0300000000000011 0.0300000000000011 0.0 407
+408 0.0370500087738037 0.0399999999999991 0.0399999999999991 0.0 408
+409 0.0344600677490234 0.0300000000000011 0.0300000000000011 0.0 409
+410 0.0331830978393555 0.0399999999999991 0.0399999999999991 0.0 410
+411 0.0335149765014648 0.0300000000000011 0.0300000000000011 0.0 411
+412 0.0346379280090332 0.0300000000000011 0.0300000000000011 0.0 412
+413 0.0334169864654541 0.0399999999999991 0.0399999999999991 0.0 413
+414 0.0582180023193359 0.0600000000000023 0.0600000000000023 0.0 414
+415 0.0361251831054688 0.0300000000000011 0.0300000000000011 0.0 415
+416 0.0350911617279053 0.0399999999999991 0.0399999999999991 0.0 416
+417 0.0334968566894531 0.0300000000000011 0.0300000000000011 0.0 417
+418 0.0332348346710205 0.029999999999994 0.029999999999994 0.0 418
+419 0.0332620143890381 0.0400000000000063 0.0400000000000063 0.0 419
+420 0.0409719944000244 0.0399999999999991 0.0399999999999991 0.0 420
+421 0.0333600044250488 0.0300000000000011 0.0300000000000011 0.0 421
+422 0.0630040168762207 0.0599999999999952 0.0599999999999952 0.0 422
+423 0.0343139171600342 0.0399999999999991 0.0399999999999991 0.0 423
+424 0.0333878993988037 0.0300000000000011 0.0300000000000011 0.0 424
+425 0.0333099365234375 0.0300000000000011 0.0300000000000011 0.0 425
+426 0.0331859588623047 0.0399999999999991 0.0399999999999991 0.0 426
+427 0.0331718921661377 0.0300000000000011 0.0300000000000011 0.0 427
+428 0.0377118587493896 0.0399999999999991 0.0399999999999991 0.0 428
+429 0.0332839488983154 0.0300000000000011 0.0300000000000011 0.0 429
+430 0.0597720146179199 0.0600000000000023 0.0600000000000023 0.0 430
+431 0.0336380004882812 0.029999999999994 0.029999999999994 0.0 431
+432 0.0333139896392822 0.0400000000000063 0.0400000000000063 0.0 432
+433 0.0331470966339111 0.029999999999994 0.029999999999994 0.0 433
+434 0.0334060192108154 0.0300000000000011 0.0300000000000011 0.0 434
+435 0.0361709594726562 0.0399999999999991 0.0399999999999991 0.0 435
+436 0.0336370468139648 0.0300000000000011 0.0300000000000011 0.0 436
+437 0.0333271026611328 0.0399999999999991 0.0399999999999991 0.0 437
+438 0.0596990585327148 0.0500000000000043 0.0500000000000043 0.0 438
+439 0.0337719917297363 0.0399999999999991 0.0399999999999991 0.0 439
+440 0.0335121154785156 0.0300000000000011 0.0300000000000011 0.0 440
+441 0.0355470180511475 0.0399999999999991 0.0399999999999991 0.0 441
+442 0.0341551303863525 0.0300000000000011 0.0300000000000011 0.0 442
+443 0.033562183380127 0.0399999999999991 0.0399999999999991 0.0 443
+444 0.033012866973877 0.0300000000000011 0.0300000000000011 0.0 444
+445 0.0334839820861816 0.029999999999994 0.029999999999994 0.0 445
+446 0.064687967300415 0.0700000000000003 0.0700000000000003 0.0 446
+447 0.0336949825286865 0.0300000000000011 0.0300000000000011 0.0 447
+448 0.0361959934234619 0.0399999999999991 0.0399999999999991 0.0 448
+449 0.0349109172821045 0.0300000000000011 0.0300000000000011 0.0 449
+450 0.0339109897613525 0.0399999999999991 0.0399999999999991 0.0 450
+451 0.0331861972808838 0.0300000000000011 0.0300000000000011 0.0 451
+452 0.0328741073608398 0.0300000000000011 0.0300000000000011 0.0 452
+453 0.0332541465759277 0.0399999999999991 0.0399999999999991 0.0 453
+454 0.0579590797424316 0.0500000000000043 0.0500000000000043 0.0 454
+455 0.0366909503936768 0.0399999999999991 0.0399999999999991 0.0 455
+456 0.0345089435577393 0.0300000000000011 0.0300000000000011 0.0 456
+457 0.0332140922546387 0.0399999999999991 0.0399999999999991 0.0 457
+458 0.0330581665039062 0.029999999999994 0.029999999999994 0.0 458
+459 0.0331969261169434 0.0300000000000011 0.0300000000000011 0.0 459
+460 0.0328719615936279 0.0399999999999991 0.0399999999999991 0.0 460
+461 0.033440113067627 0.0300000000000011 0.0300000000000011 0.0 461
+462 0.0617790222167969 0.0600000000000023 0.0600000000000023 0.0 462
+463 0.033750057220459 0.0300000000000011 0.0300000000000011 0.0 463
+464 0.0332808494567871 0.0399999999999991 0.0399999999999991 0.0 464
+465 0.0350358486175537 0.0300000000000011 0.0300000000000011 0.0 465
+466 0.0332400798797607 0.0399999999999991 0.0399999999999991 0.0 466
+467 0.0332620143890381 0.0300000000000011 0.0300000000000011 0.0 467
+468 0.0343048572540283 0.0300000000000011 0.0300000000000011 0.0 468
+469 0.0357210636138916 0.0399999999999991 0.0399999999999991 0.0 469
+470 0.0584299564361572 0.0599999999999952 0.0599999999999952 0.0 470
+471 0.0334739685058594 0.0300000000000011 0.0300000000000011 0.0 471
+472 0.0334410667419434 0.0300000000000011 0.0300000000000011 0.0 472
+473 0.0423488616943359 0.0499999999999972 0.0499999999999972 0.0 473
+474 0.033174991607666 0.0300000000000011 0.0300000000000011 0.0 474
+475 0.0360331535339355 0.0300000000000011 0.0300000000000011 0.0 475
+476 0.036052942276001 0.0399999999999991 0.0399999999999991 0.0 476
+477 0.0333659648895264 0.0300000000000011 0.0300000000000011 0.0 477
+478 0.0577530860900879 0.0600000000000023 0.0600000000000023 0.0 478
+479 0.0335140228271484 0.0399999999999991 0.0399999999999991 0.0 479
+480 0.0333487987518311 0.0300000000000011 0.0300000000000011 0.0 480
+481 0.0346870422363281 0.0300000000000011 0.0300000000000011 0.0 481
+482 0.0349428653717041 0.0399999999999991 0.0399999999999991 0.0 482
+483 0.0336499214172363 0.0300000000000011 0.0300000000000011 0.0 483
+484 0.0331089496612549 0.0399999999999991 0.0399999999999991 0.0 484
+485 0.0334107875823975 0.029999999999994 0.029999999999994 0.0 485
+486 0.0580129623413086 0.0600000000000023 0.0600000000000023 0.0 486
+487 0.0336880683898926 0.0300000000000011 0.0300000000000011 0.0 487
+488 0.0364341735839844 0.0399999999999991 0.0399999999999991 0.0 488
+489 0.0356800556182861 0.0300000000000011 0.0300000000000011 0.0 489
+490 0.033689022064209 0.0399999999999991 0.0399999999999991 0.0 490
+491 0.0335180759429932 0.0300000000000011 0.0300000000000011 0.0 491
+492 0.0345418453216553 0.0300000000000011 0.0300000000000011 0.0 492
+493 0.0336930751800537 0.0399999999999991 0.0399999999999991 0.0 493
+494 0.0580000877380371 0.0600000000000023 0.0600000000000023 0.0 494
+495 0.0361080169677734 0.029999999999994 0.029999999999994 0.0 495
+496 0.0336720943450928 0.0400000000000063 0.0400000000000063 0.0 496
+497 0.0333058834075928 0.029999999999994 0.029999999999994 0.0 497
+498 0.0333189964294434 0.0300000000000011 0.0300000000000011 0.0 498
+499 0.0332541465759277 0.0399999999999991 0.0399999999999991 0.0 499
+500 0.0402250289916992 0.0399999999999991 0.0399999999999991 0.0 500
+501 0.0334169864654541 0.0300000000000011 0.0300000000000011 0.0 501
+502 0.0628290176391602 0.0600000000000023 0.0600000000000023 0.0 502
+503 0.0341489315032959 0.0399999999999991 0.0399999999999991 0.0 503
+504 0.0333640575408936 0.0300000000000011 0.0300000000000011 0.0 504
+505 0.03312087059021 0.0300000000000011 0.0300000000000011 0.0 505
+506 0.0330550670623779 0.0399999999999991 0.0399999999999991 0.0 506
+507 0.0333640575408936 0.0300000000000011 0.0300000000000011 0.0 507
+508 0.0347590446472168 0.0300000000000011 0.0300000000000011 0.0 508
+509 0.0346050262451172 0.0399999999999991 0.0399999999999991 0.0 509
+510 0.0589158535003662 0.0599999999999952 0.0599999999999952 0.0 510
+511 0.0335807800292969 0.0300000000000011 0.0300000000000011 0.0 511
+512 0.0333380699157715 0.0399999999999991 0.0399999999999991 0.0 512
+513 0.0332279205322266 0.0300000000000011 0.0300000000000011 0.0 513
+514 0.0332310199737549 0.0300000000000011 0.0300000000000011 0.0 514
+515 0.0361509323120117 0.0399999999999991 0.0399999999999991 0.0 515
+516 0.0350699424743652 0.0300000000000011 0.0300000000000011 0.0 516
+517 0.0337638854980469 0.0399999999999991 0.0399999999999991 0.0 517
+518 0.0580861568450928 0.0600000000000023 0.0600000000000023 0.0 518
+519 0.035269021987915 0.0300000000000011 0.0300000000000011 0.0 519
+520 0.0334429740905762 0.029999999999994 0.029999999999994 0.0 520
+521 0.0334320068359375 0.0400000000000063 0.0400000000000063 0.0 521
+522 0.0365338325500488 0.029999999999994 0.029999999999994 0.0 522
+523 0.0335922241210938 0.0400000000000063 0.0400000000000063 0.0 523
+524 0.0331869125366211 0.029999999999994 0.029999999999994 0.0 524
+525 0.0333640575408936 0.0300000000000011 0.0300000000000011 0.0 525
+526 0.0657279491424561 0.0700000000000003 0.0700000000000003 0.0 526
+527 0.0335869789123535 0.0300000000000011 0.0300000000000011 0.0 527
+528 0.0365140438079834 0.0399999999999991 0.0399999999999991 0.0 528
+529 0.033782958984375 0.0300000000000011 0.0300000000000011 0.0 529
+530 0.0337071418762207 0.0399999999999991 0.0399999999999991 0.0 530
+531 0.0332880020141602 0.0300000000000011 0.0300000000000011 0.0 531
+532 0.0329639911651611 0.0300000000000011 0.0300000000000011 0.0 532
+533 0.033315896987915 0.0399999999999991 0.0399999999999991 0.0 533
+534 0.0582611560821533 0.0499999999999972 0.0499999999999972 0.0 534
+535 0.0367379188537598 0.0399999999999991 0.0399999999999991 0.0 535
+536 0.033797025680542 0.0400000000000063 0.0400000000000063 0.0 536
+537 0.0335040092468262 0.029999999999994 0.029999999999994 0.0 537
+538 0.0333931446075439 0.0300000000000011 0.0300000000000011 0.0 538
+539 0.033318042755127 0.0399999999999991 0.0399999999999991 0.0 539
+540 0.0329570770263672 0.0300000000000011 0.0300000000000011 0.0 540
+541 0.0334439277648926 0.0300000000000011 0.0300000000000011 0.0 541
+542 0.0605781078338623 0.0600000000000023 0.0600000000000023 0.0 542
+543 0.0348639488220215 0.0399999999999991 0.0399999999999991 0.0 543
+544 0.0333831310272217 0.0300000000000011 0.0300000000000011 0.0 544
+545 0.0333919525146484 0.029999999999994 0.029999999999994 0.0 545
+546 0.0348379611968994 0.0400000000000063 0.0400000000000063 0.0 546
+547 0.0334489345550537 0.029999999999994 0.029999999999994 0.0 547
+548 0.0333089828491211 0.0400000000000063 0.0400000000000063 0.0 548
+549 0.0365209579467773 0.029999999999994 0.029999999999994 0.0 549
+550 0.0601961612701416 0.0600000000000023 0.0600000000000023 0.0 550
+551 0.0337119102478027 0.0300000000000011 0.0300000000000011 0.0 551
+552 0.0332701206207275 0.0399999999999991 0.0399999999999991 0.0 552
+553 0.0401608943939209 0.0399999999999991 0.0399999999999991 0.0 553
+554 0.0333070755004883 0.0300000000000011 0.0300000000000011 0.0 554
+555 0.0364260673522949 0.0399999999999991 0.0399999999999991 0.0 555
+556 0.0348329544067383 0.0300000000000011 0.0300000000000011 0.0 556
+557 0.0339481830596924 0.0399999999999991 0.0399999999999991 0.0 557
+558 0.0576767921447754 0.0499999999999972 0.0499999999999972 0.0 558
+559 0.0335049629211426 0.0300000000000011 0.0300000000000011 0.0 559
+560 0.0332691669464111 0.029999999999994 0.029999999999994 0.0 560
+561 0.0332450866699219 0.0400000000000063 0.0400000000000063 0.0 561
+562 0.037883996963501 0.029999999999994 0.029999999999994 0.0 562
+563 0.0370709896087646 0.0400000000000063 0.0400000000000063 0.0 563
+564 0.0331628322601318 0.029999999999994 0.029999999999994 0.0 564
+565 0.0335371494293213 0.0399999999999991 0.0399999999999991 0.0 565
+566 0.0579180717468262 0.0500000000000043 0.0500000000000043 0.0 566
+567 0.0335509777069092 0.0399999999999991 0.0399999999999991 0.0 567
+568 0.0369341373443604 0.0300000000000011 0.0300000000000011 0.0 568
+569 0.0334761142730713 0.0399999999999991 0.0399999999999991 0.0 569
+570 0.0333311557769775 0.0300000000000011 0.0300000000000011 0.0 570
+571 0.0333850383758545 0.0300000000000011 0.0300000000000011 0.0 571
+572 0.0344130992889404 0.0399999999999991 0.0399999999999991 0.0 572
+573 0.0333690643310547 0.0300000000000011 0.0300000000000011 0.0 573
+574 0.0581290721893311 0.0599999999999952 0.0599999999999952 0.0 574
+575 0.0367560386657715 0.0399999999999991 0.0399999999999991 0.0 575
+576 0.0336780548095703 0.0300000000000011 0.0300000000000011 0.0 576
+577 0.0331878662109375 0.0300000000000011 0.0300000000000011 0.0 577
+578 0.0332210063934326 0.0399999999999991 0.0399999999999991 0.0 578
+579 0.0332109928131104 0.0300000000000011 0.0300000000000011 0.0 579
+580 0.0409071445465088 0.0399999999999991 0.0399999999999991 0.0 580
+581 0.033595085144043 0.0300000000000011 0.0300000000000011 0.0 581
+582 0.0607550144195557 0.0600000000000023 0.0600000000000023 0.0 582
+583 0.0355041027069092 0.0399999999999991 0.0399999999999991 0.0 583
+584 0.0334818363189697 0.0300000000000011 0.0300000000000011 0.0 584
+585 0.0333139896392822 0.0399999999999991 0.0399999999999991 0.0 585
+586 0.0332391262054443 0.0300000000000011 0.0300000000000011 0.0 586
+587 0.0332348346710205 0.029999999999994 0.029999999999994 0.0 587
+588 0.0332849025726318 0.0400000000000063 0.0400000000000063 0.0 588
+589 0.0360300540924072 0.029999999999994 0.029999999999994 0.0 589
+590 0.0599799156188965 0.0600000000000023 0.0600000000000023 0.0 590
+591 0.0335240364074707 0.0399999999999991 0.0399999999999991 0.0 591
+592 0.0333631038665771 0.0300000000000011 0.0300000000000011 0.0 592
+593 0.0332529544830322 0.0300000000000011 0.0300000000000011 0.0 593
+594 0.0335328578948975 0.0399999999999991 0.0399999999999991 0.0 594
+595 0.0370910167694092 0.0300000000000011 0.0300000000000011 0.0 595
+596 0.0335230827331543 0.0399999999999991 0.0399999999999991 0.0 596
+597 0.0337550640106201 0.0300000000000011 0.0300000000000011 0.0 597
+598 0.0580778121948242 0.0599999999999952 0.0599999999999952 0.0 598
+599 0.0352489948272705 0.0300000000000011 0.0300000000000011 0.0 599
+600 0.0334210395812988 0.0399999999999991 0.0399999999999991 0.0 600
+601 0.0336451530456543 0.0300000000000011 0.0300000000000011 0.0 601
+602 0.0362639427185059 0.0399999999999991 0.0399999999999991 0.0 602
+603 0.0335409641265869 0.0300000000000011 0.0300000000000011 0.0 603
+604 0.0330269336700439 0.0300000000000011 0.0300000000000011 0.0 604
+605 0.033350944519043 0.0399999999999991 0.0399999999999991 0.0 605
+606 0.0649051666259766 0.0600000000000023 0.0600000000000023 0.0 606
+607 0.0337560176849365 0.0399999999999991 0.0399999999999991 0.0 607
+608 0.0365309715270996 0.0300000000000011 0.0300000000000011 0.0 608
+609 0.0352151393890381 0.0399999999999991 0.0399999999999991 0.0 609
+610 0.0339179039001465 0.0300000000000011 0.0300000000000011 0.0 610
+611 0.0331799983978271 0.0300000000000011 0.0300000000000011 0.0 611
+612 0.0330498218536377 0.0399999999999991 0.0399999999999991 0.0 612
+613 0.0336270332336426 0.0300000000000011 0.0300000000000011 0.0 613
+614 0.0577888488769531 0.0599999999999952 0.0599999999999952 0.0 614
+615 0.0366761684417725 0.0399999999999991 0.0399999999999991 0.0 615
+616 0.0336871147155762 0.0300000000000011 0.0300000000000011 0.0 616
+617 0.0334889888763428 0.0300000000000011 0.0300000000000011 0.0 617
+618 0.033146858215332 0.0399999999999991 0.0399999999999991 0.0 618
+619 0.0333569049835205 0.0300000000000011 0.0300000000000011 0.0 619
+620 0.0330309867858887 0.0300000000000011 0.0300000000000011 0.0 620
+621 0.0333929061889648 0.0399999999999991 0.0399999999999991 0.0 621
+622 0.0609011650085449 0.0600000000000023 0.0600000000000023 0.0 622
+623 0.0338809490203857 0.0300000000000011 0.0300000000000011 0.0 623
+624 0.0332272052764893 0.029999999999994 0.029999999999994 0.0 624
+625 0.0336441993713379 0.0399999999999991 0.0399999999999991 0.0 625
+626 0.035059928894043 0.0300000000000011 0.0300000000000011 0.0 626
+627 0.0334160327911377 0.0399999999999991 0.0399999999999991 0.0 627
+628 0.0334069728851318 0.0300000000000011 0.0300000000000011 0.0 628
+629 0.0366249084472656 0.0399999999999991 0.0399999999999991 0.0 629
+630 0.0583260059356689 0.0500000000000043 0.0500000000000043 0.0 630
+631 0.0333540439605713 0.0399999999999991 0.0399999999999991 0.0 631
+632 0.0333960056304932 0.0300000000000011 0.0300000000000011 0.0 632
+633 0.0413072109222412 0.0399999999999991 0.0399999999999991 0.0 633
+634 0.0332448482513428 0.0399999999999991 0.0399999999999991 0.0 634
+635 0.0363118648529053 0.0300000000000011 0.0300000000000011 0.0 635
+636 0.035132884979248 0.0399999999999991 0.0399999999999991 0.0 636
+637 0.0339901447296143 0.0300000000000011 0.0300000000000011 0.0 637
+638 0.0578219890594482 0.0599999999999952 0.0599999999999952 0.0 638
+639 0.0334219932556152 0.0300000000000011 0.0300000000000011 0.0 639
+640 0.0333530902862549 0.0399999999999991 0.0399999999999991 0.0 640
+641 0.033282995223999 0.0300000000000011 0.0300000000000011 0.0 641
+642 0.0364758968353271 0.0399999999999991 0.0399999999999991 0.0 642
+643 0.0333881378173828 0.0300000000000011 0.0300000000000011 0.0 643
+644 0.0334060192108154 0.0300000000000011 0.0300000000000011 0.0 644
+645 0.0334770679473877 0.0399999999999991 0.0399999999999991 0.0 645
+646 0.0579509735107422 0.0500000000000043 0.0500000000000043 0.0 646
+647 0.0336329936981201 0.0399999999999991 0.0399999999999991 0.0 647
+648 0.0373489856719971 0.0399999999999991 0.0399999999999991 0.0 648
+649 0.0342509746551514 0.0300000000000011 0.0300000000000011 0.0 649
+650 0.0337338447570801 0.0300000000000011 0.0300000000000011 0.0 650
+651 0.0333359241485596 0.0399999999999991 0.0399999999999991 0.0 651
+652 0.0332560539245605 0.029999999999994 0.029999999999994 0.0 652
+653 0.034912109375 0.029999999999994 0.0300000000000011 0.0 653
+654 0.0582709312438965 0.0600000000000023 0.0600000000000023 0.0 654
+655 0.0366790294647217 0.0400000000000063 0.0400000000000063 0.0 655
+656 0.0336661338806152 0.0299999999999869 0.0299999999999869 0.0 656
+657 0.0334138870239258 0.0400000000000063 0.0400000000000063 0.0 657
+658 0.033390998840332 0.0300000000000011 0.0300000000000011 0.0 658
+659 0.0330209732055664 0.0300000000000011 0.0300000000000011 0.0 659
+660 0.0407001972198486 0.039999999999992 0.039999999999992 0.0 660
+661 0.0335381031036377 0.0400000000000063 0.0400000000000063 0.0 661
+662 0.0610449314117432 0.0600000000000023 0.0600000000000023 0.0 662
+663 0.0341410636901855 0.0300000000000011 0.0300000000000011 0.0 663
+664 0.0333421230316162 0.039999999999992 0.039999999999992 0.0 664
+665 0.0331799983978271 0.0300000000000011 0.0300000000000011 0.0 665
+666 0.0331680774688721 0.0300000000000011 0.0300000000000011 0.0 666
+667 0.0328528881072998 0.0400000000000063 0.0400000000000063 0.0 667
+668 0.0334010124206543 0.0300000000000011 0.0300000000000011 0.0 668
+669 0.0363960266113281 0.0300000000000011 0.0300000000000011 0.0 669
+670 0.058311939239502 0.0599999999999881 0.0599999999999881 0.0 670
+671 0.03330397605896 0.0400000000000063 0.0400000000000063 0.0 671
+672 0.0332088470458984 0.0300000000000011 0.0300000000000011 0.0 672
+673 0.0331571102142334 0.0300000000000011 0.0300000000000011 0.0 673
+674 0.0347979068756104 0.039999999999992 0.039999999999992 0.0 674
+675 0.0361380577087402 0.0300000000000011 0.0300000000000011 0.0 675
+676 0.0341131687164307 0.0400000000000063 0.0400000000000063 0.0 676
+677 0.03476881980896 0.0300000000000011 0.0300000000000011 0.0 677
+678 0.058121919631958 0.0600000000000023 0.0600000000000023 0.0 678
+679 0.0350527763366699 0.0300000000000011 0.0300000000000011 0.0 679
+680 0.0333900451660156 0.039999999999992 0.039999999999992 0.0 680
+681 0.033829927444458 0.0300000000000011 0.0300000000000011 0.0 681
+682 0.0363891124725342 0.0400000000000063 0.0400000000000063 0.0 682
+683 0.0345211029052734 0.0299999999999869 0.0299999999999869 0.0 683
+684 0.0335590839385986 0.0400000000000063 0.0400000000000063 0.0 684
+685 0.0574600696563721 0.0499999999999972 0.0499999999999972 0.0 685
+686 0.041471004486084 0.0499999999999972 0.0499999999999972 0.0 686
+687 0.0334889888763428 0.0300000000000011 0.0300000000000011 0.0 687
+688 0.0362579822540283 0.0400000000000063 0.0400000000000063 0.0 688
+689 0.033682107925415 0.0300000000000011 0.0300000000000011 0.0 689
+690 0.0352790355682373 0.0300000000000011 0.0300000000000011 0.0 690
+691 0.033221960067749 0.039999999999992 0.039999999999992 0.0 691
+692 0.0330390930175781 0.0300000000000011 0.0300000000000011 0.0 692
+693 0.0577991008758545 0.0600000000000023 0.0600000000000023 0.0 693
+694 0.0340001583099365 0.0300000000000011 0.0300000000000011 0.0 694
+695 0.0366599559783936 0.0400000000000063 0.0400000000000063 0.0 695
+696 0.0336761474609375 0.0299999999999869 0.0299999999999869 0.0 696
+697 0.0338170528411865 0.0400000000000063 0.0400000000000063 0.0 697
+698 0.0334699153900146 0.0300000000000011 0.0300000000000011 0.0 698
+699 0.0334680080413818 0.0300000000000011 0.0300000000000011 0.0 699
+700 0.0334641933441162 0.039999999999992 0.039999999999992 0.0 700
+701 0.0584831237792969 0.0700000000000074 0.0600000000000023 0.01 701
+702 0.0371170043945312 0.0300000000000011 0.0300000000000011 0.0 702
+703 0.0348899364471436 0.0400000000000063 0.0400000000000063 0.0 703
+704 0.0332977771759033 0.0300000000000011 0.0300000000000011 0.0 704
+705 0.0337090492248535 0.0300000000000011 0.0300000000000011 0.0 705
+706 0.0363600254058838 0.039999999999992 0.039999999999992 0.0 706
+707 0.0332589149475098 0.0300000000000011 0.0300000000000011 0.0 707
+708 0.0335700511932373 0.0300000000000011 0.0300000000000011 0.0 708
+709 0.0618710517883301 0.0699999999999932 0.0699999999999932 0.0 709
+710 0.0338459014892578 0.0300000000000011 0.0300000000000011 0.0 710
+711 0.0334110260009766 0.0300000000000011 0.0300000000000011 0.0 711
+712 0.0332870483398438 0.0400000000000063 0.0400000000000063 0.0 712
+713 0.0403330326080322 0.039999999999992 0.039999999999992 0.0 713
+714 0.0332109928131104 0.0300000000000011 0.0300000000000011 0.0 714
+715 0.0362699031829834 0.0400000000000063 0.0400000000000063 0.0 715
+716 0.0349149703979492 0.0300000000000011 0.0300000000000011 0.0 716
+717 0.0590531826019287 0.0600000000000023 0.0600000000000023 0.0 717
+718 0.0336310863494873 0.039999999999992 0.039999999999992 0.0 718
+719 0.0333178043365479 0.0300000000000011 0.0300000000000011 0.0 719
+720 0.0332901477813721 0.0300000000000011 0.0300000000000011 0.0 720
+721 0.0332920551300049 0.0400000000000063 0.0400000000000063 0.0 721
+722 0.0363869667053223 0.0300000000000011 0.0300000000000011 0.0 722
+723 0.0335569381713867 0.039999999999992 0.039999999999992 0.0 723
+724 0.0336151123046875 0.0300000000000011 0.0300000000000011 0.0 724
+725 0.0579018592834473 0.0600000000000023 0.0600000000000023 0.0 725
+726 0.0334959030151367 0.0300000000000011 0.0300000000000011 0.0 726
+727 0.0332579612731934 0.0300000000000011 0.0300000000000011 0.0 727
+728 0.0363228321075439 0.039999999999992 0.039999999999992 0.0 728
+729 0.034060001373291 0.0300000000000011 0.0300000000000011 0.0 729
+730 0.0342481136322021 0.0400000000000063 0.0400000000000063 0.0 730
+731 0.033174991607666 0.0300000000000011 0.0300000000000011 0.0 731
+732 0.0333402156829834 0.039999999999992 0.039999999999992 0.0 732
+733 0.0594391822814941 0.0499999999999972 0.0499999999999972 0.0 733
+734 0.0340390205383301 0.0400000000000063 0.0400000000000063 0.0 734
+735 0.0368988513946533 0.0300000000000011 0.0300000000000011 0.0 735
+736 0.036196231842041 0.039999999999992 0.039999999999992 0.0 736
+737 0.0333859920501709 0.0300000000000011 0.0300000000000011 0.0 737
+738 0.0332441329956055 0.0400000000000063 0.0400000000000063 0.0 738
+739 0.0330839157104492 0.0300000000000011 0.0300000000000011 0.0 739
+740 0.0413918495178223 0.039999999999992 0.039999999999992 0.0 740
+741 0.0612490177154541 0.0600000000000023 0.0600000000000023 0.0 741
+742 0.0341551303863525 0.0300000000000011 0.0300000000000011 0.0 742
+743 0.035499095916748 0.0400000000000063 0.0400000000000063 0.0 743
+744 0.0333080291748047 0.0300000000000011 0.0300000000000011 0.0 744
+745 0.0331649780273438 0.039999999999992 0.039999999999992 0.0 745
+746 0.0332601070404053 0.0300000000000011 0.0300000000000011 0.0 746
+747 0.0330040454864502 0.0300000000000011 0.0300000000000011 0.0 747
+748 0.0333499908447266 0.0400000000000063 0.0400000000000063 0.0 748
+749 0.0617849826812744 0.0599999999999881 0.0599999999999881 0.0 749
+750 0.0337250232696533 0.0300000000000011 0.0300000000000011 0.0 750
+751 0.0336470603942871 0.0400000000000063 0.0400000000000063 0.0 751
+752 0.0334620475769043 0.0300000000000011 0.0300000000000011 0.0 752
+753 0.0332620143890381 0.0300000000000011 0.0300000000000011 0.0 753
+754 0.0332539081573486 0.039999999999992 0.039999999999992 0.0 754
+755 0.036297082901001 0.0300000000000011 0.0300000000000011 0.0 755
+756 0.0344269275665283 0.0400000000000063 0.0400000000000063 0.0 756
+757 0.0584709644317627 0.0499999999999972 0.0499999999999972 0.0 757
+758 0.0336380004882812 0.0300000000000011 0.0300000000000011 0.0 758
+759 0.0352699756622314 0.0300000000000011 0.0300000000000011 0.0 759
+760 0.0333750247955322 0.039999999999992 0.039999999999992 0.0 760
+761 0.0338349342346191 0.0300000000000011 0.0300000000000011 0.0 761
+762 0.0356252193450928 0.0400000000000063 0.0400000000000063 0.0 762
+763 0.0349218845367432 0.0299999999999869 0.0299999999999869 0.0 763
+764 0.0333728790283203 0.0300000000000011 0.0300000000000011 0.0 764
+765 0.057542085647583 0.0600000000000023 0.0600000000000023 0.0 765
+766 0.040518045425415 0.0400000000000063 0.0400000000000063 0.0 766
+767 0.0333969593048096 0.039999999999992 0.039999999999992 0.0 767
+768 0.036506175994873 0.0300000000000011 0.0300000000000011 0.0 768
+769 0.034682035446167 0.0400000000000063 0.0400000000000063 0.0 769
+770 0.0337419509887695 0.0300000000000011 0.0300000000000011 0.0 770
+771 0.0334620475769043 0.0300000000000011 0.0300000000000011 0.0 771
+772 0.0577020645141602 0.0600000000000023 0.0600000000000023 0.0 772
+773 0.0334780216217041 0.039999999999992 0.039999999999992 0.0 773
+774 0.0334508419036865 0.0300000000000011 0.0300000000000011 0.0 774
+775 0.036329984664917 0.0300000000000011 0.0300000000000011 0.0 775
+776 0.0336270332336426 0.039999999999992 0.039999999999992 0.0 776
+777 0.0338649749755859 0.0300000000000011 0.0300000000000011 0.0 777
+778 0.0331289768218994 0.0400000000000063 0.0400000000000063 0.0 778
+779 0.0331418514251709 0.0300000000000011 0.0300000000000011 0.0 779
+780 0.0577938556671143 0.0600000000000023 0.0600000000000023 0.0 780
+781 0.0363731384277344 0.0300000000000011 0.0300000000000011 0.0 781
+782 0.0350909233093262 0.039999999999992 0.039999999999992 0.0 782
+783 0.0350501537322998 0.0300000000000011 0.0300000000000011 0.0 783
+784 0.0335679054260254 0.0400000000000063 0.0400000000000063 0.0 784
+785 0.0334410667419434 0.0300000000000011 0.0300000000000011 0.0 785
+786 0.0349650382995605 0.0300000000000011 0.0300000000000011 0.0 786
+787 0.0338919162750244 0.039999999999992 0.039999999999992 0.0 787
+788 0.060966968536377 0.0600000000000023 0.0600000000000023 0.0 788
+789 0.0341048240661621 0.0300000000000011 0.0300000000000011 0.0 789
+790 0.0336289405822754 0.039999999999992 0.039999999999992 0.0 790
+791 0.0333750247955322 0.0300000000000011 0.0300000000000011 0.0 791
+792 0.0333640575408936 0.0300000000000011 0.0300000000000011 0.0 792
+793 0.0411760807037354 0.0499999999999972 0.0499999999999972 0.0 793
+794 0.0330638885498047 0.0300000000000011 0.0300000000000011 0.0 794
+795 0.0362119674682617 0.0300000000000011 0.0300000000000011 0.0 795
+796 0.0589008331298828 0.0499999999999972 0.0499999999999972 0.0 796
+797 0.0335359573364258 0.0400000000000063 0.0400000000000063 0.0 797
+798 0.0333008766174316 0.0300000000000011 0.0300000000000011 0.0 798
+799 0.0347950458526611 0.0300000000000011 0.0300000000000011 0.0 799
+800 0.0332999229431152 0.039999999999992 0.039999999999992 0.0 800
+801 0.033350944519043 0.0300000000000011 0.0300000000000011 0.0 801
+802 0.0362880229949951 0.0400000000000063 0.0400000000000063 0.0 802
+803 0.0351760387420654 0.0299999999999869 0.0299999999999869 0.0 803
+804 0.0578329563140869 0.0600000000000023 0.0600000000000023 0.0 804
+805 0.0334799289703369 0.0300000000000011 0.0300000000000011 0.0 805
+806 0.0332357883453369 0.0400000000000063 0.0400000000000063 0.0 806
+807 0.0333900451660156 0.0300000000000011 0.0300000000000011 0.0 807
+808 0.0362451076507568 0.039999999999992 0.039999999999992 0.0 808
+809 0.0333170890808105 0.0300000000000011 0.0300000000000011 0.0 809
+810 0.0343527793884277 0.0400000000000063 0.0400000000000063 0.0 810
+811 0.0335409641265869 0.0300000000000011 0.0300000000000011 0.0 811
+812 0.0592930316925049 0.0600000000000023 0.0600000000000023 0.0 812
+813 0.0335829257965088 0.0299999999999869 0.0299999999999869 0.0 813
+814 0.033574104309082 0.0300000000000011 0.0300000000000011 0.0 814
+815 0.0360231399536133 0.0400000000000063 0.0400000000000063 0.0 815
+816 0.033574104309082 0.0300000000000011 0.0300000000000011 0.0 816
+817 0.0337851047515869 0.039999999999992 0.039999999999992 0.0 817
+818 0.0332200527191162 0.0300000000000011 0.0300000000000011 0.0 818
+819 0.0334579944610596 0.0300000000000011 0.0300000000000011 0.0 819
+820 0.063668966293335 0.0600000000000023 0.0600000000000023 0.0 820
+821 0.0360410213470459 0.0300000000000011 0.0300000000000011 0.0 821
+822 0.0340430736541748 0.039999999999992 0.039999999999992 0.0 822
+823 0.0340561866760254 0.0300000000000011 0.0300000000000011 0.0 823
+824 0.0331687927246094 0.0400000000000063 0.0400000000000063 0.0 824
+825 0.0331730842590332 0.0300000000000011 0.0300000000000011 0.0 825
+826 0.0330498218536377 0.0300000000000011 0.0300000000000011 0.0 826
+827 0.0333058834075928 0.039999999999992 0.039999999999992 0.0 827
+828 0.0610239505767822 0.0600000000000023 0.0600000000000023 0.0 828
+829 0.0348649024963379 0.0300000000000011 0.0300000000000011 0.0 829
+830 0.0334899425506592 0.039999999999992 0.039999999999992 0.0 830
+831 0.0332210063934326 0.0300000000000011 0.0300000000000011 0.0 831
+832 0.0332589149475098 0.0300000000000011 0.0300000000000011 0.0 832
+833 0.0330421924591064 0.0400000000000063 0.0400000000000063 0.0 833
+834 0.033440113067627 0.0300000000000011 0.0300000000000011 0.0 834
+835 0.0366320610046387 0.039999999999992 0.039999999999992 0.0 835
+836 0.0392351150512695 0.039999999999992 0.039999999999992 0.0 836
+837 0.0332860946655273 0.0400000000000063 0.0400000000000063 0.0 837
+838 0.0337049961090088 0.0300000000000011 0.0300000000000011 0.0 838
+839 0.0346989631652832 0.0300000000000011 0.0300000000000011 0.0 839
+840 0.0334670543670654 0.039999999999992 0.039999999999992 0.0 840
+841 0.0332751274108887 0.0300000000000011 0.0300000000000011 0.0 841
+842 0.0364458560943604 0.0400000000000063 0.0400000000000063 0.0 842
+843 0.0590341091156006 0.0600000000000023 0.0600000000000023 0.0 843
+844 0.0335009098052979 0.0300000000000011 0.0300000000000011 0.0 844
+845 0.0332801342010498 0.0300000000000011 0.0300000000000011 0.0 845
+846 0.0411808490753174 0.0499999999999972 0.0499999999999972 0.0 846
+847 0.0332710742950439 0.0300000000000011 0.0300000000000011 0.0 847
+848 0.0353641510009766 0.0300000000000011 0.0300000000000011 0.0 848
+849 0.0346250534057617 0.039999999999992 0.039999999999992 0.0 849
+850 0.0339748859405518 0.0300000000000011 0.0300000000000011 0.0 850
+851 0.0577869415283203 0.0600000000000023 0.0600000000000023 0.0 851
+852 0.0328571796417236 0.0300000000000011 0.0300000000000011 0.0 852
+853 0.0324909687042236 0.039999999999992 0.039999999999992 0.0 853
+854 0.0326740741729736 0.0300000000000011 0.0300000000000011 0.0 854
+855 0.035412073135376 0.0300000000000011 0.0300000000000011 0.0 855
+856 0.0338008403778076 0.0400000000000063 0.0400000000000063 0.0 856
+857 0.0328540802001953 0.0300000000000011 0.0300000000000011 0.0 857
+858 0.0333800315856934 0.0300000000000011 0.0300000000000011 0.0 858
+859 0.057999849319458 0.0600000000000023 0.0600000000000023 0.0 859
+860 0.0334048271179199 0.039999999999992 0.039999999999992 0.0 860
+861 0.0332610607147217 0.0300000000000011 0.0300000000000011 0.0 861
+862 0.0369820594787598 0.0400000000000063 0.0400000000000063 0.0 862
+863 0.0350849628448486 0.0299999999999869 0.0299999999999869 0.0 863
+864 0.0332708358764648 0.0300000000000011 0.0300000000000011 0.0 864
+865 0.0333819389343262 0.0400000000000063 0.0400000000000063 0.0 865
+866 0.0360109806060791 0.0300000000000011 0.0300000000000011 0.0 866
+867 0.058070182800293 0.0600000000000023 0.0600000000000023 0.0 867
+868 0.0367460250854492 0.039999999999992 0.039999999999992 0.0 868
+869 0.0335311889648438 0.0300000000000011 0.0300000000000011 0.0 869
+870 0.034480094909668 0.0400000000000063 0.0400000000000063 0.0 870
+871 0.0331480503082275 0.0300000000000011 0.0300000000000011 0.0 871
+872 0.0331017971038818 0.0300000000000011 0.0300000000000011 0.0 872
+873 0.0400230884552002 0.039999999999992 0.039999999999992 0.0 873
+874 0.0334382057189941 0.0400000000000063 0.0400000000000063 0.0 874
+875 0.0614311695098877 0.0600000000000023 0.0600000000000023 0.0 875
+876 0.0357120037078857 0.0299999999999869 0.0299999999999869 0.0 876
+877 0.0331881046295166 0.0400000000000063 0.0400000000000063 0.0 877
+878 0.0333230495452881 0.0300000000000011 0.0300000000000011 0.0 878
+879 0.033128023147583 0.0300000000000011 0.0300000000000011 0.0 879
+880 0.0331029891967773 0.039999999999992 0.039999999999992 0.0 880
+881 0.0331718921661377 0.0300000000000011 0.0300000000000011 0.0 881
+882 0.0365970134735107 0.0400000000000063 0.0400000000000063 0.0 882
+883 0.0594449043273926 0.0499999999999972 0.0499999999999972 0.0 883
+884 0.0333600044250488 0.0400000000000063 0.0400000000000063 0.0 884
+885 0.0332062244415283 0.0300000000000011 0.0300000000000011 0.0 885
+886 0.0332579612731934 0.0300000000000011 0.0300000000000011 0.0 886
+887 0.033174991607666 0.039999999999992 0.039999999999992 0.0 887
+888 0.033627986907959 0.0300000000000011 0.0300000000000011 0.0 888
+889 0.0363061428070068 0.0400000000000063 0.0400000000000063 0.0 889
+890 0.0346910953521729 0.0299999999999869 0.0299999999999869 0.0 890
+891 0.0577399730682373 0.0600000000000023 0.0600000000000023 0.0 891
+892 0.0351190567016602 0.0300000000000011 0.0300000000000011 0.0 892
+893 0.0334410667419434 0.0300000000000011 0.0300000000000011 0.0 893
+894 0.0332920551300049 0.0300000000000011 0.0300000000000011 0.0 894
+895 0.0356509685516357 0.039999999999992 0.039999999999992 0.0 895
+896 0.0329999923706055 0.0300000000000011 0.0300000000000011 0.0 896
+897 0.0350220203399658 0.0400000000000063 0.0400000000000063 0.0 897
+898 0.0576491355895996 0.0499999999999972 0.0499999999999972 0.0 898
+899 0.0413708686828613 0.0400000000000063 0.0400000000000063 0.0 899
+900 0.0334579944610596 0.039999999999992 0.039999999999992 0.0 900
+901 0.0331728458404541 0.0300000000000011 0.0300000000000011 0.0 901
+902 0.0366899967193604 0.0400000000000063 0.0400000000000063 0.0 902
+903 0.0341849327087402 0.0299999999999869 0.0299999999999869 0.0 903
+904 0.0330212116241455 0.0300000000000011 0.0300000000000011 0.0 904
+905 0.0330519676208496 0.0400000000000063 0.0400000000000063 0.0 905
+906 0.0578551292419434 0.0600000000000023 0.0600000000000023 0.0 906
+907 0.0339560508728027 0.0300000000000011 0.0300000000000011 0.0 907
+908 0.0368251800537109 0.039999999999992 0.039999999999992 0.0 908
+909 0.0336120128631592 0.0300000000000011 0.0300000000000011 0.0 909
+910 0.0353670120239258 0.0400000000000063 0.0400000000000063 0.0 910
+911 0.0335800647735596 0.0300000000000011 0.0300000000000011 0.0 911
+912 0.0334420204162598 0.0300000000000011 0.0300000000000011 0.0 912
+913 0.0334601402282715 0.039999999999992 0.039999999999992 0.0 913
+914 0.058056116104126 0.0499999999999972 0.0499999999999972 0.0 914
+915 0.0368549823760986 0.0400000000000063 0.0400000000000063 0.0 915
+916 0.0347049236297607 0.039999999999992 0.039999999999992 0.0 916
+917 0.0332660675048828 0.0300000000000011 0.0300000000000011 0.0 917
+918 0.03336501121521 0.0300000000000011 0.0300000000000011 0.0 918
+919 0.0346500873565674 0.0400000000000063 0.0400000000000063 0.0 919
+920 0.0330588817596436 0.0300000000000011 0.0300000000000011 0.0 920
+921 0.0336630344390869 0.0300000000000011 0.0300000000000011 0.0 921
+922 0.0604748725891113 0.0600000000000023 0.0600000000000023 0.0 922
+923 0.0347628593444824 0.039999999999992 0.039999999999992 0.0 923
+924 0.0331780910491943 0.0300000000000011 0.0300000000000011 0.0 924
+925 0.0331499576568604 0.0300000000000011 0.0300000000000011 0.0 925
+926 0.0402188301086426 0.0400000000000063 0.0400000000000063 0.0 926
+927 0.0330500602722168 0.039999999999992 0.039999999999992 0.0 927
+928 0.0330708026885986 0.0300000000000011 0.0300000000000011 0.0 928
+929 0.036876916885376 0.0400000000000063 0.0400000000000063 0.0 929
+930 0.0586659908294678 0.0599999999999881 0.0599999999999881 0.0 930
+931 0.0333189964294434 0.0300000000000011 0.0300000000000011 0.0 931
+932 0.0332140922546387 0.0300000000000011 0.0300000000000011 0.0 932
+933 0.0332601070404053 0.0400000000000063 0.0400000000000063 0.0 933
+934 0.033146858215332 0.0300000000000011 0.0300000000000011 0.0 934
+935 0.0361688137054443 0.039999999999992 0.039999999999992 0.0 935
+936 0.0331850051879883 0.0300000000000011 0.0300000000000011 0.0 936
+937 0.0338339805603027 0.0300000000000011 0.0300000000000011 0.0 937
+938 0.0579109191894531 0.0600000000000023 0.0600000000000023 0.0 938
+939 0.0335099697113037 0.0300000000000011 0.0300000000000011 0.0 939
+940 0.0332717895507812 0.039999999999992 0.039999999999992 0.0 940
+941 0.0332541465759277 0.0300000000000011 0.0300000000000011 0.0 941
+942 0.0368809700012207 0.0400000000000063 0.0400000000000063 0.0 942
+943 0.0335171222686768 0.0300000000000011 0.0300000000000011 0.0 943
+944 0.0335350036621094 0.0300000000000011 0.0300000000000011 0.0 944
+945 0.0578980445861816 0.0600000000000023 0.0600000000000023 0.0 945
+946 0.0351078510284424 0.039999999999992 0.039999999999992 0.0 946
+947 0.0334479808807373 0.0300000000000011 0.0300000000000011 0.0 947
+948 0.033311128616333 0.0300000000000011 0.0300000000000011 0.0 948
+949 0.0363750457763672 0.0400000000000063 0.0400000000000063 0.0 949
+950 0.033627986907959 0.0299999999999869 0.0299999999999869 0.0 950
+951 0.033160924911499 0.0400000000000063 0.0400000000000063 0.0 951
+952 0.033203125 0.0300000000000011 0.0300000000000011 0.0 952
+953 0.0647599697113037 0.0600000000000023 0.0600000000000023 0.0 953
+954 0.0328559875488281 0.039999999999992 0.039999999999992 0.0 954
+955 0.0357460975646973 0.0300000000000011 0.0300000000000011 0.0 955
+956 0.033236026763916 0.0400000000000063 0.0400000000000063 0.0 956
+957 0.0331499576568604 0.0300000000000011 0.0300000000000011 0.0 957
+958 0.0325798988342285 0.0300000000000011 0.0300000000000011 0.0 958
+959 0.0328090190887451 0.0300000000000011 0.0300000000000011 0.0 959
+960 0.033491849899292 0.039999999999992 0.039999999999992 0.0 960
+961 0.0579450130462646 0.0600000000000023 0.0600000000000023 0.0 961
+962 0.0369048118591309 0.0300000000000011 0.0300000000000011 0.0 962
+963 0.0337331295013428 0.039999999999992 0.039999999999992 0.0 963
+964 0.0333647727966309 0.0300000000000011 0.0300000000000011 0.0 964
+965 0.0332319736480713 0.0300000000000011 0.0300000000000011 0.0 965
+966 0.033174991607666 0.0400000000000063 0.0400000000000063 0.0 966
+967 0.0331299304962158 0.0300000000000011 0.0300000000000011 0.0 967
+968 0.0334961414337158 0.0300000000000011 0.0300000000000011 0.0 968
+969 0.0604250431060791 0.0600000000000023 0.0600000000000023 0.0 969
+970 0.0347049236297607 0.039999999999992 0.039999999999992 0.0 970
+971 0.0334169864654541 0.0300000000000011 0.0300000000000011 0.0 971
+972 0.0332670211791992 0.0400000000000063 0.0400000000000063 0.0 972
+973 0.0347368717193604 0.0300000000000011 0.0300000000000011 0.0 973
+974 0.0333490371704102 0.0299999999999869 0.0299999999999869 0.0 974
+975 0.033484935760498 0.0400000000000063 0.0400000000000063 0.0 975
+976 0.0361530780792236 0.0300000000000011 0.0300000000000011 0.0 976
+977 0.0591049194335938 0.0600000000000023 0.0600000000000023 0.0 977
+978 0.0333170890808105 0.039999999999992 0.039999999999992 0.0 978
+979 0.0332751274108887 0.0300000000000011 0.0300000000000011 0.0 979
+980 0.0404400825500488 0.0400000000000063 0.0400000000000063 0.0 980
+981 0.0332608222961426 0.0300000000000011 0.0300000000000011 0.0 981
+982 0.0361859798431396 0.039999999999992 0.039999999999992 0.0 982
+983 0.0338070392608643 0.0300000000000011 0.0300000000000011 0.0 983
+984 0.0339329242706299 0.0400000000000063 0.0400000000000063 0.0 984
+985 0.0576000213623047 0.0499999999999972 0.0499999999999972 0.0 985
+986 0.0332310199737549 0.0400000000000063 0.0400000000000063 0.0 986
+987 0.0331230163574219 0.0299999999999869 0.0299999999999869 0.0 987
+988 0.0332698822021484 0.0300000000000011 0.0300000000000011 0.0 988
+989 0.0362260341644287 0.0400000000000063 0.0400000000000063 0.0 989
+990 0.0335850715637207 0.0300000000000011 0.0300000000000011 0.0 990
+991 0.0335838794708252 0.039999999999992 0.039999999999992 0.0 991
+992 0.0581378936767578 0.0600000000000023 0.0600000000000023 0.0 992
+993 0.0338449478149414 0.0300000000000011 0.0300000000000011 0.0 993
+994 0.0334839820861816 0.0300000000000011 0.0300000000000011 0.0 994
+995 0.0354399681091309 0.0400000000000063 0.0400000000000063 0.0 995
+996 0.0348441600799561 0.0300000000000011 0.0300000000000011 0.0 996
+997 0.033607006072998 0.039999999999992 0.039999999999992 0.0 997
+998 0.0334219932556152 0.0300000000000011 0.0300000000000011 0.0 998
+999 0.0331289768218994 0.0300000000000011 0.0300000000000011 0.0 999
+1000 0.0591549873352051 0.0600000000000023 0.0600000000000023 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log
new file mode 100644
index 000000000..abfc0d4e5
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log
@@ -0,0 +1,82 @@
+========================== 2009-04-01T16:48:20 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'ParserBenchmarkPure' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+ParserBenchmarkPure#parser:
+ real total user system
+sum 37.410897017 37.380000000 37.360000000 0.020000000
+min 0.032916069 0.030000000 0.030000000 0.000000000
+std- 0.029058517 0.027934111 0.027951551 -0.000426990
+mean 0.037410897 0.037380000 0.037360000 0.000020000
+std+ 0.045763277 0.046825889 0.046768449 0.000466990
+max 0.068524122 0.070000000 0.070000000 0.010000000
+std 0.008352380 0.009445889 0.009408449 0.000446990
+std% 22.326062222 25.269901841 25.183215569 2234.948544149
+harm 0.036161242 0.035525181 0.035515868 nan
+geo 0.036699193 0.036372385 0.036358664 0.000000000
+q1 0.033462286 0.030000000 0.030000000 0.000000000
+med 0.033834100 0.040000000 0.040000000 0.000000000
+q3 0.036020756 0.040000000 0.040000000 0.000000000
+ 1000 26.73018 0.037410897
+ calls calls/sec secs/call
+
+ 0.06674 -|
+ 0.06318 -|*
+ 0.05962 -|******
+ 0.05606 -|*
+ 0.05250 -|
+ 0.04894 -|
+ 0.04538 -|
+ 0.04182 -|*
+ 0.03826 -|****
+ 0.03470 -|**************************************************
+
+Outliers detected with box plot algo (median=0.03383, iqr=0.00256, factor=3.00):
+high=35 very_high=121
+
+Ljung-Box statistics: q=2505.23586 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+ParserBenchmarkPure#parser:
+ real total user system
+sum 37.376162529 37.280000000 37.260000000 0.020000000
+min 0.032336950 0.030000000 0.030000000 0.000000000
+std- 0.028895529 0.027756750 0.027774096 -0.000426990
+mean 0.037376163 0.037280000 0.037260000 0.000020000
+std+ 0.045856796 0.046803250 0.046745904 0.000466990
+max 0.068592072 0.070000000 0.070000000 0.010000000
+std 0.008480634 0.009523250 0.009485904 0.000446990
+std% 22.689953522 25.545198741 25.458680636 2234.948544149
+harm 0.036080414 0.035400319 0.035391071 nan
+geo 0.036638902 0.036256656 0.036242979 0.000000000
+q1 0.033310235 0.030000000 0.030000000 0.000000000
+med 0.033644676 0.030000000 0.030000000 0.000000000
+q3 0.036110342 0.040000000 0.040000000 0.000000000
+ 1000 26.75502 0.037376163
+ calls calls/sec secs/call
+
+ 0.06678 -|
+ 0.06315 -|*
+ 0.05953 -|*******
+ 0.05590 -|
+ 0.05228 -|
+ 0.04865 -|
+ 0.04503 -|
+ 0.04140 -|**
+ 0.03778 -|********
+ 0.03415 -|**************************************************
+
+Outliers detected with box plot algo (median=0.03364, iqr=0.00280, factor=3.00):
+high=33 very_high=124
+
+Ljung-Box statistics: q=3251.86614 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:49:38 CEST ===========================
+
+Writing measurement data file '/data/scm/json/benchmarks/data/ParserBenchmarkPure#parser.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/ParserBenchmarkPure#parser-autocorrelation.dat'.
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat
new file mode 100644
index 000000000..17c5d6f42
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.155070059967971
+3 -0.138640912344721
+4 -0.139479328635323
+5 -0.143780851624976
+6 -0.131974028031826
+7 -0.131846874465781
+8 -0.0297449586146407
+9 0.845922970552183
+10 -0.159296984935386
+11 -0.138285991843348
+12 -0.134537533789242
+13 -0.131577093324224
+14 -0.125691308156566
+15 -0.132970073437043
+16 0.0701610897537414
+17 0.726509328882366
+18 -0.155563464936531
+19 -0.130583532910968
+20 -0.130321215707134
+21 -0.128053370668094
+22 -0.131414104117502
+23 -0.143370315509163
+24 0.167753265713558
+25 0.62702138447293
+26 -0.141554127399372
+27 -0.115269798845456
+28 -0.136445627883801
+29 -0.132820637414474
+30 -0.135080622216643
+31 -0.144602952408704
+32 0.276623173612157
+33 0.525501850891615
+34 -0.139450017650941
+35 -0.134162769453426
+36 -0.140949499976629
+37 -0.132215037534107
+38 -0.128279804339387
+39 -0.136810773207112
+40 0.379134129717981
+41 0.416977891767592
+42 -0.140192442908231
+43 -0.13892710741734
+44 -0.137436044286789
+45 -0.12612058061194
+46 -0.123633038155193
+47 -0.137070098406579
+48 0.472544339120691
+49 0.301863391448336
+50 -0.137675443743332
+51 -0.132184661720946
+52 -0.121519101402595
+53 -0.115776688296262
+54 -0.131478499025051
+55 -0.116275192910739
+56 0.513473974254625
+57 0.227814467008427
+58 -0.129625218043982
+59 -0.125216745459882
+60 -0.125935112946914
+61 -0.130109252240931
+62 -0.135733419564075
+63 -0.0889814647212915
+64 0.559816239969457
+65 0.163620887268623
+66 -0.126594899689712
+67 -0.127716578736114
+68 -0.128558799740727
+69 -0.132714253074456
+70 -0.132981927789806
+71 -0.0463125531444366
+72 0.581465412089299
+73 0.0982819048234013
+74 -0.129982480706599
+75 -0.133771142860062
+76 -0.126274218030991
+77 -0.123223469867868
+78 -0.11895869982128
+79 0.0160445617942978
+80 0.549313085089554
+81 0.0523653189850826
+82 -0.129204586675343
+83 -0.127677297248879
+84 -0.11959366617596
+85 -0.118162084235907
+86 -0.129587964492176
+87 0.0651465727581341
+88 0.512663258282342
+89 0.0223897667771226
+90 -0.118248096115527
+91 -0.123885682842303
+92 -0.117535431833331
+93 -0.121345328959052
+94 -0.133999463136408
+95 0.135326455911309
+96 0.463805777555027
+97 0.00311864739783577
+98 -0.114421979094575
+99 -0.128164506124927
+100 -0.122080031865248
+101 -0.127022342388225
+102 -0.12151335276331
+103 0.208878191673693
+104 0.419309330326886
+105 -0.0174799014199824
+106 -0.12009985269644
+107 -0.131417368471035
+108 -0.121134843634553
+109 -0.120666756344282
+110 -0.105725377626208
+111 0.262489561386311
+112 0.354541905467325
+113 -0.0429415817022358
+114 -0.118506332455011
+115 -0.127753774809165
+116 -0.109476116043001
+117 -0.119418083275649
+118 -0.0854522404041955
+119 0.302906589860581
+120 0.286896207128895
+121 -0.0493387013179091
+122 -0.111479392930294
+123 -0.123008951924811
+124 -0.106573141028928
+125 -0.126135643791708
+126 -0.0577076665067928
+127 0.311292557510419
+128 0.249513559300441
+129 -0.0437015056466829
+130 -0.10140472809797
+131 -0.125545283680022
+132 -0.113851927275127
+133 -0.129070941594458
+134 -0.0206722811383723
+135 0.33013248984195
+136 0.20961947786441
+137 -0.0505286003858023
+138 -0.118483870649077
+139 -0.129232461148704
+140 -0.110922591820262
+141 -0.126965629548802
+142 0.0286192948484217
+143 0.337096243794888
+144 0.169248086740963
+145 -0.0654190423907559
+146 -0.120486323653649
+147 -0.127288129860007
+148 -0.103891665783828
+149 -0.124659309493563
+150 0.0654747872813297
+151 0.339088871793489
+152 0.117694381111953
+153 -0.069800715562458
+154 -0.113826839844647
+155 -0.112055163352168
+156 -0.0970154053292618
+157 -0.12192255176261
+158 0.0946677686276986
+159 0.319767630968006
+160 0.0962983917333902
+161 -0.0684068034695184
+162 -0.112118295167087
+163 -0.114032731963194
+164 -0.110895191829693
+165 -0.12490942207346
+166 0.150898199785889
+167 0.291628773924692
+168 0.0856114574594624
+169 -0.0734234204063937
+170 -0.114367902362174
+171 -0.118059154641348
+172 -0.112572722725924
+173 -0.103481698557819
+174 0.173284813389025
+175 0.278003056900596
+176 0.0650604673280916
+177 -0.0868193733027222
+178 -0.11924430409928
+179 -0.113850555498896
+180 -0.104056053166332
+181 -0.0706195733056155
+182 0.195014655464426
+183 0.251621304231625
+184 0.0441497783679571
+185 -0.0959128518254443
+186 -0.114114295397473
+187 -0.10361116463172
+188 -0.107664797628733
+189 -0.0474401968360638
+190 0.192034834911418
+191 0.224134275351347
+192 0.0395907319098148
+193 -0.0949220934593083
+194 -0.110602484889644
+195 -0.100717728255861
+196 -0.112049320791611
+197 -0.0238825067986291
+198 0.201018888376214
+199 0.200211719960315
+200 0.0376449870339866
+201 -0.0991903665462876
+202 -0.116672120770685
+203 -0.104917842447271
+204 -0.116982682663512
+205 0.0162721560678791
+206 0.204021816160558
+207 0.207342785121829
+208 0.00663694227997103
+209 -0.106521500277643
+210 -0.116317595851116
+211 -0.104116328257713
+212 -0.112167749776831
+213 0.0615103449414028
+214 0.199609635845337
+215 0.172676627738091
+216 -0.0173787071397098
+217 -0.104939889867195
+218 -0.112425821733991
+219 -0.0953637703798143
+220 -0.093052367494033
+221 0.0644616034737725
+222 0.21086820069092
+223 0.135486543334319
+224 -0.0210787666638188
+225 -0.0993320996511885
+226 -0.109562190043721
+227 -0.0908673948537397
+228 -0.0914456089142807
+229 0.077581460778825
+230 0.208551872164277
+231 0.116140101018818
+232 -0.0163102277997069
+233 -0.0916236078939407
+234 -0.111987175847954
+235 -0.0967383768271821
+236 -0.0826408025523878
+237 0.0966321189661173
+238 0.217509001187049
+239 0.0915108637148122
+240 -0.0253671941695331
+241 -0.104462116651977
+242 -0.11348746907754
+243 -0.0959006192794962
+244 -0.0612059863164585
+245 0.113695227895139
+246 0.208511810998661
+247 0.0766780695718476
+248 -0.0378625564901882
+249 -0.10618641671093
+250 -0.109982771242569
+251 -0.0926244918680679
+252 -0.0406078163763886
+253 0.124817056851144
+254 0.194848461762426
+255 0.053597534522723
+256 -0.0438252920201072
+257 -0.0998946597604676
+258 -0.0959760154259235
+259 -0.090197307047542
+260 -0.0257502198933741
+261 0.136762854179184
+262 0.168912763917697
+263 0.048323842970136
+264 -0.0436786423512219
+265 -0.100740525834715
+266 -0.0977845042725835
+267 -0.0927358458760765
+268 -0.0166810260413945
+269 0.146292226604344
+270 0.158004011117704
+271 0.0463090919867654
+272 -0.0508649026224276
+273 -0.100538901603337
+274 -0.0991902746655388
+275 -0.0968540899423071
+276 0.0148153955144431
+277 0.142136683921793
+278 0.150608238602075
+279 0.0366986042958235
+280 -0.0623139712087233
+281 -0.104975317080266
+282 -0.0956029621068854
+283 -0.0890770998720019
+284 0.0548354482192922
+285 0.133209397126082
+286 0.135583138300418
+287 0.0272435880371227
+288 -0.0714230928286135
+289 -0.0994192940032151
+290 -0.088773103919012
+291 -0.0841613176265042
+292 0.0592558849502553
+293 0.125376924612805
+294 0.129920277737479
+295 0.0195010407479747
+296 -0.0711393383891102
+297 -0.0966110162658782
+298 -0.0881783407707736
+299 -0.0770822025982766
+300 0.066971190635949
+301 0.132833571859132
+302 0.106070818363025
+303 0.0264050368313431
+304 -0.0786120187871163
+305 -0.099744480101871
+306 -0.0903116034438872
+307 -0.0727258814461179
+308 0.0805880901984141
+309 0.152764049007061
+310 0.0897693593924932
+311 0.0244183980184888
+312 -0.0913585727715549
+313 -0.101610527844229
+314 -0.0890784444186723
+315 -0.0580505722105439
+316 0.10438372554223
+317 0.13749147221931
+318 0.0759708703685098
+319 0.0047310993987612
+320 -0.0918433949431894
+321 -0.0973283709859868
+322 -0.0830381658731675
+323 -0.0375501533905209
+324 0.104260628790112
+325 0.136767805598137
+326 0.0649623096294137
+327 -0.0111381353615883
+328 -0.0902174271151667
+329 -0.0900084947503609
+330 -0.0845603027974476
+331 -0.0222484905680352
+332 0.10044110265699
+333 0.137209031622297
+334 0.0512317724372533
+335 -0.00469813974344492
+336 -0.0852660869649502
+337 -0.0936856764672113
+338 -0.0810781749410849
+339 -0.0111001728500522
+340 0.103897631604526
+341 0.131709630700509
+342 0.0454986930271181
+343 -0.0154461854075281
+344 -0.0950428147360073
+345 -0.0917481808403137
+346 -0.0819073492712917
+347 0.0124487690676487
+348 0.108988172807393
+349 0.12289144923052
+350 0.0405329244459299
+351 -0.0278261263679556
+352 -0.0969672128436255
+353 -0.0868716693424195
+354 -0.0819407369083838
+355 0.035944491369377
+356 0.107744673984401
+357 0.112575623631055
+358 0.0263346758872926
+359 -0.0328420504056899
+360 -0.0908205706813633
+361 -0.0750870093565662
+362 -0.0805597459059112
+363 0.0581570376747647
+364 0.0865463018735628
+365 0.116540878273595
+366 0.0199948600453009
+367 -0.03533657508366
+368 -0.0918593012174403
+369 -0.0794617415964357
+370 -0.0787014627401186
+371 0.0674476303755033
+372 0.087942973565642
+373 0.104930936427726
+374 0.0273053506001638
+375 -0.0464030903226921
+376 -0.0892541387964512
+377 -0.0826842259404731
+378 -0.071374986057042
+379 0.0807180550904197
+380 0.0929177969009142
+381 0.0862437690352589
+382 0.0286028161793366
+383 -0.0593261076213299
+384 -0.0910657756760768
+385 -0.0789683507405574
+386 -0.0550314183063351
+387 0.100805664939276
+388 0.0897320960012182
+389 0.067010863731299
+390 0.0261048090556462
+391 -0.0659316696174206
+392 -0.086786864764739
+393 -0.0733845242014095
+394 -0.0405465879929758
+395 0.0859517679001778
+396 0.0936250494518407
+397 0.0524562962824195
+398 0.0270919515769923
+399 -0.0676718513969418
+400 -0.0824139549961516
+401 -0.0758274382046422
+402 -0.021973546868283
+403 0.075410664358751
+404 0.104172119247351
+405 0.0343795991613305
+406 0.0358573471696254
+407 -0.0790257754948948
+408 -0.0826103755113398
+409 -0.0802175095763564
+410 -0.00408772816730303
+411 0.0797817450643218
+412 0.10269754375399
+413 0.0435425040893042
+414 0.0151375915059022
+415 -0.082224988149043
+416 -0.0825565105203654
+417 -0.0696184362192416
+418 0.00170781584040336
+419 0.0936874402227218
+420 0.0877595224369305
+421 0.0362572112929432
+422 -0.000752383773564971
+423 -0.0819270792159826
+424 -0.0773158381537405
+425 -0.0651464418900243
+426 0.0233879760162931
+427 0.0833911120244448
+428 0.0867605850712271
+429 0.0258451549993298
+430 -0.00489040153892436
+431 -0.0813233842666857
+432 -0.0691569813607638
+433 -0.0684545819114933
+434 0.0396563587473597
+435 0.0716165433337824
+436 0.0861256506553954
+437 0.0246435046549525
+438 -0.00567840565516219
+439 -0.0766446108871898
+440 -0.0734501086613091
+441 -0.0625863247444175
+442 0.0405008658019374
+443 0.0751250312042876
+444 0.0937777476669092
+445 0.0157135360029692
+446 -0.0185119034061188
+447 -0.0834731849818629
+448 -0.0721596446426834
+449 -0.0539848776994025
+450 0.0482803239352817
+451 0.0865159532050759
+452 0.0758518110612569
+453 0.0183167125626064
+454 -0.0302067075389182
+455 -0.0836849146728332
+456 -0.0680915900681338
+457 -0.0453151677467697
+458 0.0635811903828984
+459 0.0735228836096314
+460 0.0668774855582583
+461 0.0155517569389754
+462 -0.0361902584803522
+463 -0.0772526293731969
+464 -0.0599993945121568
+465 -0.0350025604255705
+466 0.0675409442225932
+467 0.0626588958411958
+468 0.0628618478913283
+469 0.0182100018474144
+470 -0.0393572049932932
+471 -0.0769465863807705
+472 -0.0669019696984521
+473 -0.0307690547029792
+474 0.0787650857298563
+475 0.0555937053005102
+476 0.0591286536064479
+477 0.0236864710611653
+478 -0.0510348446259402
+479 -0.0750230625326582
+480 -0.0692429698123807
+481 -0.0136046303961235
+482 0.074650527480705
+483 0.0576038372995368
+484 0.0514169146679383
+485 0.0235780875676953
+486 -0.0619450461800331
+487 -0.0775574009249976
+488 -0.0561458830522187
+489 -0.00509801117317696
+490 0.0804313785186439
+491 0.0577719157969876
+492 0.03898688881339
+493 0.0241595263048843
+494 -0.0685591657894399
+495 -0.0723076795891697
+496 -0.0523226231903489
+497 0.00373957683716917
+498 0.0717069979485176
+499 0.0550717482683905
+500 0.0403995445989468
+501 0.0113079953085825
+502 -0.0649276537000009
+503 -0.06649843954063
+504 -0.0560505708705572
+505 0.0137761579457734
+506 0.0702863631617265
+507 0.0541404684830862
+508 0.0443433883094673
+509 -0.00133780696150024
+510 -0.0665134068108655
+511 -0.0657601321121601
+512 -0.0607034011107588
+513 0.0213546383342833
+514 0.0775077767181889
+515 0.063458353376667
+516 0.0389609528439854
+517 -0.0108770067728056
+518 -0.0688616436130423
+519 -0.065807838377633
+520 -0.0591899626361279
+521 0.0477995260084885
+522 0.069819996106301
+523 0.0493499046172744
+524 0.0332730594271413
+525 -0.0200687475895302
+526 -0.0673172583961927
+527 -0.0608118592717286
+528 -0.046481250749937
+529 0.0514180414158432
+530 0.0671097463271896
+531 0.0400867520372663
+532 0.0333984982834754
+533 -0.0264838317178022
+534 -0.0659983240048536
+535 -0.0542885590490045
+536 -0.0401453467006326
+537 0.0485625723714385
+538 0.0635239092110429
+539 0.0345979294218286
+540 0.0399929330334083
+541 -0.028147715594677
+542 -0.0619139995393741
+543 -0.0586913999576994
+544 -0.0334649755872845
+545 0.0516737635834675
+546 0.0645253644882226
+547 0.0345307867743962
+548 0.0400603616259159
+549 -0.0423531962375596
+550 -0.0672300807914405
+551 -0.0587843856721668
+552 -0.0232646807886831
+553 0.058345982518284
+554 0.0665917961516256
+555 0.0274860012958233
+556 0.0415598244265968
+557 -0.0545146822234879
+558 -0.0677685109591305
+559 -0.0552725887508413
+560 -0.0125012238487659
+561 0.0625075581718202
+562 0.066971444471093
+563 0.0129232540938186
+564 0.0392980506706601
+565 -0.05908734296345
+566 -0.0607304242571567
+567 -0.0493112113842046
+568 0.00071062117125135
+569 0.0653734421725974
+570 0.0469205167937502
+571 0.0252022285127285
+572 0.0269428623042389
+573 -0.0554040258813037
+574 -0.0594329262955446
+575 -0.0472055457536386
+576 -0.00273760356981996
+577 0.0642743964669037
+578 0.0419312704866381
+579 0.0399122296513867
+580 0.0132186725236814
+581 -0.0547466706460982
+582 -0.0579756221767372
+583 -0.0511476715833451
+584 0.00601423910448657
+585 0.0689373246423459
+586 0.0353940033868963
+587 0.0425778157862413
+588 0.00424129603039375
+589 -0.0586697203651189
+590 -0.059002595522944
+591 -0.0470191336291943
+592 0.0244211578887408
+593 0.0714176288385068
+594 0.0293208317804955
+595 0.0369996210742842
+596 -0.00457553552424864
+597 -0.0559531047561718
+598 -0.0523918096467366
+599 -0.0446664312862491
+600 0.0316320734850762
+601 0.0644602080811167
+602 0.0199863627247641
+603 0.0369746309809726
+604 -0.00948602618598588
+605 -0.0504144894458729
+606 -0.0498443845352435
+607 -0.0444638507903543
+608 0.0391189013974007
+609 0.0628424781970596
+610 0.0112347649830505
+611 0.041452654212153
+612 -0.0137347497952992
+613 -0.0506892746398375
+614 -0.0511072669077967
+615 -0.0477234466444133
+616 0.048705448350975
+617 0.0667627851388053
+618 0.0115120265386804
+619 0.0461383553267045
+620 -0.0255620287525987
+621 -0.0530260247588348
+622 -0.0518381410417808
+623 -0.034700796376516
+624 0.0438063518562166
+625 0.0798836058195734
+626 -0.00243894245318495
+627 0.0406243460796687
+628 -0.0332199890358811
+629 -0.0523350080049007
+630 -0.0477070167478482
+631 -0.0215305402264588
+632 0.0472394359550523
+633 0.0694737083559497
+634 -0.00372172457388709
+635 0.0391809172600764
+636 -0.0382719971378076
+637 -0.0501961995371232
+638 -0.042738214015656
+639 -0.0140839477377811
+640 0.0442885931768186
+641 0.0581346694204897
+642 -0.000477976111666972
+643 0.044566527743489
+644 -0.0396856402477227
+645 -0.0466626145007252
+646 -0.0480864305333951
+647 -0.00726442405889962
+648 0.0459497867910762
+649 0.0529082222445075
+650 0.0147432426130685
+651 0.0267433571795441
+652 -0.0446692520126606
+653 -0.0497203066081803
+654 -0.0480919421757669
+655 0.00345954210366673
+656 0.0509913399433936
+657 0.0467433070314585
+658 0.0252001648134732
+659 0.0106946846977517
+660 -0.0484551606819746
+661 -0.0500758070505588
+662 -0.0440163401232168
+663 0.0148218474037118
+664 0.0526365008291643
+665 0.0397902946591361
+666 0.0206689888910779
+667 0.00207265111858896
+668 -0.0440452489670014
+669 -0.0447792337914997
+670 -0.0286381554427784
+671 0.00640869437792482
+672 0.057153163903739
+673 0.0304890998129141
+674 0.0230136624918959
+675 -0.00281506118608654
+676 -0.0387242678971035
+677 -0.044929991903093
+678 -0.0345193810230013
+679 0.00492460337689268
+680 0.0679821172192718
+681 0.0219950472241659
+682 0.0289438385002853
+683 -0.00781136170677615
+684 -0.0388612390832975
+685 -0.0438680272774733
+686 -0.0376131497506628
+687 0.0139348600467974
+688 0.0615101213028946
+689 0.0249115734544766
+690 0.0331598636184604
+691 -0.0195415991964588
+692 -0.0396395679788538
+693 -0.0456649577394422
+694 -0.0344136244069955
+695 0.031200395934606
+696 0.0562012519733673
+697 0.0260663012747182
+698 0.0295359686001106
+699 -0.0291311572903775
+700 -0.0371203313810216
+701 -0.0424418146790537
+702 -0.0303746199454463
+703 0.0388492858751788
+704 0.0424481679100295
+705 0.0263584605497916
+706 0.0288712604390293
+707 -0.0341554547083513
+708 -0.0333021072203847
+709 -0.0383392296141879
+710 -0.030923211248435
+711 0.0471145773235206
+712 0.032067317539082
+713 0.0263399585846731
+714 0.0323937671311792
+715 -0.0392772990043492
+716 -0.0317758252581109
+717 -0.0407689976562314
+718 -0.0327532575849971
+719 0.0558983521943971
+720 0.026320879417627
+721 0.0457775828616138
+722 0.0162704705253485
+723 -0.0410862090233348
+724 -0.0334511325087015
+725 -0.0413337594074423
+726 -0.0301113850535044
+727 0.0700417742596319
+728 0.0210871230961877
+729 0.0496617422305004
+730 -0.00408251250355076
+731 -0.0406821339716385
+732 -0.0329210563908783
+733 -0.0378798823957753
+734 -0.0166612213666539
+735 0.0622559233401728
+736 0.0220631815362089
+737 0.0480937159816023
+738 -0.0123428856122574
+739 -0.0375402198111287
+740 -0.0309453130567288
+741 -0.0353256252179894
+742 -0.00536945125430805
+743 0.0496444169496324
+744 0.0204929366248046
+745 0.0499533569480695
+746 -0.0174935751544407
+747 -0.0286134919496942
+748 -0.0305151115655182
+749 -0.0370057423961568
+750 0.00182606608143132
+751 0.0417928304144692
+752 0.0232491015772242
+753 0.0556033683720853
+754 -0.0281117547926764
+755 -0.030035318580472
+756 -0.0330573966633533
+757 -0.0365260598388687
+758 0.0111750942979797
+759 0.0374827782514529
+760 0.0257453279628935
+761 0.0580299290244595
+762 -0.0358087395388202
+763 -0.0338231237069173
+764 -0.0328610625099181
+765 -0.0336222121488749
+766 0.0234186100148553
+767 0.0293361050839678
+768 0.0383060243360171
+769 0.0358879458606336
+770 -0.0363117922484678
+771 -0.0310100414844719
+772 -0.0298340231919974
+773 -0.0258481757762449
+774 0.033493341046757
+775 0.0172146853910682
+776 0.0455221955873717
+777 0.0204498758334694
+778 -0.033692934640153
+779 -0.0254246875075756
+780 -0.0321408035488926
+781 -0.0179574084831518
+782 0.0214789164114721
+783 0.019638114859952
+784 0.0455930828635699
+785 0.0178984964416421
+786 -0.0300055577311117
+787 -0.0240917794268532
+788 -0.0321597467853985
+789 -0.0210401731167207
+790 0.0230111556897733
+791 0.0217566052979974
+792 0.0489917866644012
+793 0.0104440982676834
+794 -0.0301428802473305
+795 -0.0258951028342734
+796 -0.03187192392573
+797 -0.0176269050708972
+798 0.027393570534183
+799 0.0263875715311133
+800 0.0486779658212448
+801 -0.00102291484615847
+802 -0.0300556523736458
+803 -0.023857819156972
+804 -0.0280605128257784
+805 -0.0146115387847382
+806 0.0244907923259942
+807 0.0247824841072157
+808 0.0494074681728141
+809 -0.0095960873131345
+810 -0.0267959528999005
+811 -0.0203312406902549
+812 -0.0260311947802059
+813 -0.0131484879600813
+814 0.0230120193265332
+815 0.0228091639758259
+816 0.051666749222434
+817 -0.0152576501369182
+818 -0.0250358027329496
+819 -0.0190314982739485
+820 -0.0266605188325892
+821 -0.0144373958898868
+822 0.0237380994329812
+823 0.0260374801079161
+824 0.0586957834829624
+825 -0.022457849542461
+826 -0.0262980585565696
+827 -0.0200584452117297
+828 -0.0266876132871316
+829 -0.0129290645560979
+830 0.0289095571745369
+831 0.0354539766084729
+832 0.0392777761914384
+833 -0.0238771076358964
+834 -0.0245018601036372
+835 -0.0205517186652316
+836 -0.0234327204627339
+837 -0.00933955244847433
+838 0.0296367828905565
+839 0.0459917434926111
+840 0.0186744768510845
+841 -0.0234505177518883
+842 -0.0215210406113312
+843 -0.01812563049523
+844 -0.0212885529434847
+845 -0.0088234522037928
+846 0.0280281842675072
+847 0.045730091253579
+848 0.0136208433079523
+849 -0.0205058386168346
+850 -0.0163481209061992
+851 -0.017230164457982
+852 -0.0230906563738739
+853 -0.00937085079532756
+854 0.0286089438226922
+855 0.0501679772526387
+856 0.00511934527865221
+857 -0.0188740591732872
+858 -0.017123441437589
+859 -0.0185029603009925
+860 -0.0202624384779385
+861 -0.0103662518808214
+862 0.0316765684721357
+863 0.0535962784902621
+864 -0.00257262435536896
+865 -0.0176721411023214
+866 -0.0194221796537958
+867 -0.0180419513954025
+868 -0.0173325086944974
+869 -0.00890051108382059
+870 0.0333845873727604
+871 0.0544120911411167
+872 -0.0112929673408612
+873 -0.0180526419713337
+874 -0.0167143497616369
+875 -0.0157948604767141
+876 -0.0130148291547908
+877 -0.0066614174930643
+878 0.0306666725820053
+879 0.0540685898200517
+880 -0.0179887040186856
+881 -0.0155749350538922
+882 -0.015542452853135
+883 -0.0149949065113926
+884 -0.0134739305361601
+885 -0.0082822064674981
+886 0.0415180058769115
+887 0.037756025074253
+888 -0.0148899027592997
+889 -0.013090094291838
+890 -0.0153014397425967
+891 -0.0135012972355123
+892 -0.015585448733386
+893 -0.00788737374502331
+894 0.0535415797928148
+895 0.0217926147381109
+896 -0.01363175489377
+897 -0.012354773771845
+898 -0.0155285058724365
+899 -0.0135036893080631
+900 -0.0125236766180776
+901 -0.00637080628552419
+902 0.0605226042557018
+903 0.0112303280281208
+904 -0.0133912061642023
+905 -0.0124502459337457
+906 -0.0142998634027549
+907 -0.0099981269727546
+908 -0.0122633402331702
+909 -0.00567413706716593
+910 0.0595172409685727
+911 0.00326019370638518
+912 -0.0128841193059995
+913 -0.0102224824574885
+914 -0.0116469346046309
+915 -0.00776357295252222
+916 -0.0118848925539363
+917 -0.00433896685705348
+918 0.0567076341120711
+919 -0.00300835870741313
+920 -0.0107647074857665
+921 -0.00845164093060122
+922 -0.0106818140369162
+923 -0.00761048402311565
+924 -0.0114674108324614
+925 -0.00417421313051504
+926 0.0598773670187433
+927 -0.00747931723570069
+928 -0.00927920131574313
+929 -0.00986810999500912
+930 -0.0104075730217127
+931 -0.00695169167094114
+932 -0.0109784274186893
+933 0.00811872232461237
+934 0.0430158981401019
+935 -0.00722859498851006
+936 -0.00990312674945696
+937 -0.00920124918803136
+938 -0.00908355760957161
+939 -0.00496962170124263
+940 -0.00878291146198605
+941 0.0194043242975934
+942 0.0256780783722546
+943 -0.00897052689874001
+944 -0.00954900138754423
+945 -0.00713164082441335
+946 -0.00673138670048183
+947 -0.00311543034312673
+948 -0.00793377494765913
+949 0.0199694046973212
+950 0.0180051634303271
+951 -0.00731841589233604
+952 -0.0061524475893558
+953 -0.00552246177877621
+954 -0.00405347414382562
+955 -0.00502519204794434
+956 -0.00735520719380658
+957 0.0201391483118552
+958 0.0115351551478785
+959 -0.00595396340022971
+960 -0.0044658313778136
+961 -0.00466635333434365
+962 -0.00505971330517482
+963 -0.00426347088471071
+964 -0.00630201264403959
+965 0.0226924063931286
+966 0.00532856864375404
+967 -0.00456693836529996
+968 -0.00500848518452319
+969 -0.00521286355162228
+970 -0.00466691800162192
+971 -0.00261192567994811
+972 -0.00365801738266432
+973 0.0244751515715762
+974 -0.00293671804465107
+975 -0.0036023990997325
+976 -0.00448873920500162
+977 -0.00365131282800052
+978 -0.00180880871887979
+979 -0.00132104428035144
+980 0.00742840409816276
+981 0.00626148410583357
+982 -0.00316720508921753
+983 -0.00304702341715472
+984 -0.0023682711547723
+985 -0.00118323799369014
+986 -3.66599346965767e-05
+987 -0.000324399710172427
+988 0.00733954118289635
+989 -0.00225809776707784
+990 -0.00133635779017759
+991 -0.00134850512655973
+992 -0.000434310902574387
+993 -0.000233992853297238
+994 0.000360461316321191
+995 -0.000531725699132137
+996 -0.000471000549829534
+997 0.000486792668870103
+998 0.000364177523187972
+999 0.000256019411210032
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat
new file mode 100644
index 000000000..e51dc44f0
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.0337560176849365 0.0300000000000011 0.0300000000000011 0.0 1
+2 0.0330429077148438 0.029999999999994 0.029999999999994 0.0 2
+3 0.0369691848754883 0.0400000000000063 0.0400000000000063 0.0 3
+4 0.0330410003662109 0.029999999999994 0.029999999999994 0.0 4
+5 0.0346219539642334 0.0400000000000063 0.0400000000000063 0.0 5
+6 0.0324759483337402 0.029999999999994 0.029999999999994 0.0 6
+7 0.0320150852203369 0.0300000000000011 0.0300000000000011 0.0 7
+8 0.0320718288421631 0.0300000000000011 0.0300000000000011 0.0 8
+9 0.0765988826751709 0.0799999999999983 0.0799999999999983 0.0 9
+10 0.0331180095672607 0.0300000000000011 0.0300000000000011 0.0 10
+11 0.0346410274505615 0.0399999999999991 0.0399999999999991 0.0 11
+12 0.0330672264099121 0.0300000000000011 0.0300000000000011 0.0 12
+13 0.0326869487762451 0.0300000000000011 0.0300000000000011 0.0 13
+14 0.0323951244354248 0.0399999999999991 0.0399999999999991 0.0 14
+15 0.0317728519439697 0.0300000000000011 0.0300000000000011 0.0 15
+16 0.0336828231811523 0.0300000000000011 0.0300000000000011 0.0 16
+17 0.0816280841827393 0.0799999999999983 0.0799999999999983 0.0 17
+18 0.0336179733276367 0.0399999999999991 0.0399999999999991 0.0 18
+19 0.0329349040985107 0.0300000000000011 0.0300000000000011 0.0 19
+20 0.0328211784362793 0.0300000000000011 0.0300000000000011 0.0 20
+21 0.0326688289642334 0.0300000000000011 0.0300000000000011 0.0 21
+22 0.0329129695892334 0.0399999999999991 0.0399999999999991 0.0 22
+23 0.0351161956787109 0.0300000000000011 0.0300000000000011 0.0 23
+24 0.073289155960083 0.0799999999999983 0.0799999999999983 0.0 24
+25 0.0333049297332764 0.0300000000000011 0.0300000000000011 0.0 25
+26 0.0327980518341064 0.029999999999994 0.029999999999994 0.0 26
+27 0.0333559513092041 0.0400000000000063 0.0400000000000063 0.0 27
+28 0.0331299304962158 0.029999999999994 0.029999999999994 0.0 28
+29 0.0361030101776123 0.0300000000000011 0.0300000000000011 0.0 29
+30 0.0326149463653564 0.0399999999999991 0.0399999999999991 0.0 30
+31 0.0354421138763428 0.0300000000000011 0.0300000000000011 0.0 31
+32 0.0737769603729248 0.0799999999999983 0.0799999999999983 0.0 32
+33 0.0334198474884033 0.0300000000000011 0.0300000000000011 0.0 33
+34 0.0328729152679443 0.0300000000000011 0.0300000000000011 0.0 34
+35 0.0363237857818604 0.0399999999999991 0.0399999999999991 0.0 35
+36 0.0331850051879883 0.0300000000000011 0.0300000000000011 0.0 36
+37 0.033970832824707 0.0399999999999991 0.0399999999999991 0.0 37
+38 0.0325729846954346 0.0300000000000011 0.0300000000000011 0.0 38
+39 0.0321781635284424 0.0300000000000011 0.0300000000000011 0.0 39
+40 0.0730009078979492 0.0700000000000003 0.0700000000000003 0.0 40
+41 0.0354671478271484 0.0399999999999991 0.0399999999999991 0.0 41
+42 0.0329980850219727 0.0300000000000011 0.0300000000000011 0.0 42
+43 0.0432839393615723 0.0499999999999972 0.0499999999999972 0.0 43
+44 0.0330131053924561 0.0300000000000011 0.0300000000000011 0.0 44
+45 0.032541036605835 0.0300000000000011 0.0300000000000011 0.0 45
+46 0.0323638916015625 0.0300000000000011 0.0300000000000011 0.0 46
+47 0.0322492122650146 0.0399999999999991 0.0399999999999991 0.0 47
+48 0.0752780437469482 0.0700000000000003 0.0700000000000003 0.0 48
+49 0.0334651470184326 0.0300000000000011 0.0300000000000011 0.0 49
+50 0.0330009460449219 0.0399999999999991 0.0399999999999991 0.0 50
+51 0.0331478118896484 0.0300000000000011 0.0300000000000011 0.0 51
+52 0.0328009128570557 0.029999999999994 0.029999999999994 0.0 52
+53 0.0326621532440186 0.0400000000000063 0.0400000000000063 0.0 53
+54 0.0325331687927246 0.029999999999994 0.029999999999994 0.0 54
+55 0.0355179309844971 0.0300000000000011 0.0300000000000011 0.0 55
+56 0.0758390426635742 0.0800000000000054 0.0800000000000054 0.0 56
+57 0.0330648422241211 0.029999999999994 0.029999999999994 0.0 57
+58 0.0333669185638428 0.0399999999999991 0.0399999999999991 0.0 58
+59 0.0331768989562988 0.0300000000000011 0.0300000000000011 0.0 59
+60 0.0326540470123291 0.0300000000000011 0.0300000000000011 0.0 60
+61 0.036034107208252 0.0399999999999991 0.0399999999999991 0.0 61
+62 0.0326058864593506 0.0300000000000011 0.0300000000000011 0.0 62
+63 0.032081127166748 0.0300000000000011 0.0300000000000011 0.0 63
+64 0.0732240676879883 0.0799999999999983 0.0799999999999983 0.0 64
+65 0.0332009792327881 0.0300000000000011 0.0300000000000011 0.0 65
+66 0.0333409309387207 0.0300000000000011 0.0300000000000011 0.0 66
+67 0.0352249145507812 0.0399999999999991 0.0399999999999991 0.0 67
+68 0.0328779220581055 0.0300000000000011 0.0300000000000011 0.0 68
+69 0.0408899784088135 0.0399999999999991 0.0399999999999991 0.0 69
+70 0.0330538749694824 0.0399999999999991 0.0399999999999991 0.0 70
+71 0.0315990447998047 0.0300000000000011 0.0300000000000011 0.0 71
+72 0.0723180770874023 0.0700000000000003 0.0700000000000003 0.0 72
+73 0.0360608100891113 0.0399999999999991 0.0399999999999991 0.0 73
+74 0.0332560539245605 0.0300000000000011 0.0300000000000011 0.0 74
+75 0.0337710380554199 0.0300000000000011 0.0300000000000011 0.0 75
+76 0.0330729484558105 0.0399999999999991 0.0399999999999991 0.0 76
+77 0.0325820446014404 0.0300000000000011 0.0300000000000011 0.0 77
+78 0.0323619842529297 0.029999999999994 0.029999999999994 0.0 78
+79 0.0319099426269531 0.0300000000000011 0.0300000000000011 0.0 79
+80 0.0756161212921143 0.0800000000000054 0.0800000000000054 0.0 80
+81 0.0331521034240723 0.029999999999994 0.029999999999994 0.0 81
+82 0.0353209972381592 0.0400000000000063 0.0400000000000063 0.0 82
+83 0.0330510139465332 0.029999999999994 0.029999999999994 0.0 83
+84 0.03314208984375 0.0300000000000011 0.0300000000000011 0.0 84
+85 0.03261399269104 0.0300000000000011 0.0300000000000011 0.0 85
+86 0.0322940349578857 0.0399999999999991 0.0399999999999991 0.0 86
+87 0.034559965133667 0.0300000000000011 0.0300000000000011 0.0 87
+88 0.0729730129241943 0.0700000000000003 0.0700000000000003 0.0 88
+89 0.033174991607666 0.0399999999999991 0.0399999999999991 0.0 89
+90 0.0331950187683105 0.0300000000000011 0.0300000000000011 0.0 90
+91 0.032789945602417 0.0300000000000011 0.0300000000000011 0.0 91
+92 0.032573938369751 0.0399999999999991 0.0399999999999991 0.0 92
+93 0.0352959632873535 0.0300000000000011 0.0300000000000011 0.0 93
+94 0.0322601795196533 0.0300000000000011 0.0300000000000011 0.0 94
+95 0.0399200916290283 0.0399999999999991 0.0399999999999991 0.0 95
+96 0.0733668804168701 0.0799999999999983 0.0799999999999983 0.0 96
+97 0.0330679416656494 0.0300000000000011 0.0300000000000011 0.0 97
+98 0.0331020355224609 0.0300000000000011 0.0300000000000011 0.0 98
+99 0.0338099002838135 0.0399999999999991 0.0399999999999991 0.0 99
+100 0.0351119041442871 0.0300000000000011 0.0300000000000011 0.0 100
+101 0.0325391292572021 0.0399999999999991 0.0399999999999991 0.0 101
+102 0.0326120853424072 0.0300000000000011 0.0300000000000011 0.0 102
+103 0.0314269065856934 0.029999999999994 0.029999999999994 0.0 103
+104 0.0736079216003418 0.0700000000000003 0.0700000000000003 0.0 104
+105 0.0331168174743652 0.0399999999999991 0.0399999999999991 0.0 105
+106 0.0369949340820312 0.0300000000000011 0.0300000000000011 0.0 106
+107 0.033034086227417 0.0399999999999991 0.0399999999999991 0.0 107
+108 0.0347108840942383 0.0300000000000011 0.0300000000000011 0.0 108
+109 0.0326550006866455 0.0300000000000011 0.0300000000000011 0.0 109
+110 0.032649040222168 0.0399999999999991 0.0399999999999991 0.0 110
+111 0.0317308902740479 0.0300000000000011 0.0300000000000011 0.0 111
+112 0.075963020324707 0.0700000000000003 0.0700000000000003 0.0 112
+113 0.0332450866699219 0.0399999999999991 0.0399999999999991 0.0 113
+114 0.0340969562530518 0.0300000000000011 0.0300000000000011 0.0 114
+115 0.0331099033355713 0.0300000000000011 0.0300000000000011 0.0 115
+116 0.0326979160308838 0.0399999999999991 0.0399999999999991 0.0 116
+117 0.0322890281677246 0.0300000000000011 0.0300000000000011 0.0 117
+118 0.0321509838104248 0.0300000000000011 0.0300000000000011 0.0 118
+119 0.0315690040588379 0.029999999999994 0.029999999999994 0.0 119
+120 0.0853371620178223 0.0900000000000034 0.0900000000000034 0.0 120
+121 0.0338900089263916 0.0300000000000011 0.0300000000000011 0.0 121
+122 0.0330648422241211 0.0399999999999991 0.0399999999999991 0.0 122
+123 0.0330510139465332 0.0300000000000011 0.0300000000000011 0.0 123
+124 0.0327119827270508 0.0300000000000011 0.0300000000000011 0.0 124
+125 0.0324461460113525 0.029999999999994 0.029999999999994 0.0 125
+126 0.036160945892334 0.0400000000000063 0.0400000000000063 0.0 126
+127 0.0314981937408447 0.029999999999994 0.029999999999994 0.0 127
+128 0.073836088180542 0.0800000000000054 0.0800000000000054 0.0 128
+129 0.0328719615936279 0.029999999999994 0.029999999999994 0.0 129
+130 0.0332820415496826 0.0300000000000011 0.0300000000000011 0.0 130
+131 0.0329020023345947 0.0300000000000011 0.0300000000000011 0.0 131
+132 0.0362491607666016 0.0399999999999991 0.0399999999999991 0.0 132
+133 0.0325329303741455 0.0300000000000011 0.0300000000000011 0.0 133
+134 0.0340819358825684 0.0399999999999991 0.0399999999999991 0.0 134
+135 0.0319511890411377 0.0300000000000011 0.0300000000000011 0.0 135
+136 0.0739138126373291 0.0700000000000003 0.0700000000000003 0.0 136
+137 0.0330600738525391 0.0300000000000011 0.0300000000000011 0.0 137
+138 0.0359530448913574 0.0399999999999991 0.0399999999999991 0.0 138
+139 0.0330100059509277 0.0300000000000011 0.0300000000000011 0.0 139
+140 0.0330448150634766 0.0399999999999991 0.0399999999999991 0.0 140
+141 0.0330119132995605 0.0300000000000011 0.0300000000000011 0.0 141
+142 0.0321979522705078 0.0300000000000011 0.0300000000000011 0.0 142
+143 0.0314090251922607 0.029999999999994 0.029999999999994 0.0 143
+144 0.0762948989868164 0.0800000000000054 0.0800000000000054 0.0 144
+145 0.0330369472503662 0.0300000000000011 0.0300000000000011 0.0 145
+146 0.0413818359375 0.0399999999999991 0.0399999999999991 0.0 146
+147 0.0336639881134033 0.0399999999999991 0.0399999999999991 0.0 147
+148 0.032634973526001 0.0300000000000011 0.0300000000000011 0.0 148
+149 0.0324230194091797 0.029999999999994 0.029999999999994 0.0 149
+150 0.0322530269622803 0.0400000000000063 0.0400000000000063 0.0 150
+151 0.0314328670501709 0.029999999999994 0.029999999999994 0.0 151
+152 0.0764839649200439 0.0700000000000003 0.0700000000000003 0.0 152
+153 0.0351881980895996 0.0400000000000063 0.0400000000000063 0.0 153
+154 0.0330648422241211 0.029999999999994 0.029999999999994 0.0 154
+155 0.0328710079193115 0.0399999999999991 0.0399999999999991 0.0 155
+156 0.032764196395874 0.0300000000000011 0.0300000000000011 0.0 156
+157 0.0323169231414795 0.0300000000000011 0.0300000000000011 0.0 157
+158 0.0350921154022217 0.0399999999999991 0.0399999999999991 0.0 158
+159 0.0315439701080322 0.0300000000000011 0.0300000000000011 0.0 159
+160 0.0760791301727295 0.0700000000000003 0.0700000000000003 0.0 160
+161 0.0333390235900879 0.0399999999999991 0.0399999999999991 0.0 161
+162 0.0331790447235107 0.0300000000000011 0.0300000000000011 0.0 162
+163 0.0328421592712402 0.0300000000000011 0.0300000000000011 0.0 163
+164 0.0354018211364746 0.0399999999999991 0.0399999999999991 0.0 164
+165 0.0326108932495117 0.0300000000000011 0.0300000000000011 0.0 165
+166 0.0330290794372559 0.0300000000000011 0.0300000000000011 0.0 166
+167 0.0316469669342041 0.0300000000000011 0.0300000000000011 0.0 167
+168 0.0735650062561035 0.0799999999999983 0.0799999999999983 0.0 168
+169 0.0328128337860107 0.0300000000000011 0.0300000000000011 0.0 169
+170 0.034276008605957 0.0399999999999991 0.0399999999999991 0.0 170
+171 0.0350871086120605 0.0300000000000011 0.0300000000000011 0.0 171
+172 0.0402491092681885 0.0399999999999991 0.0399999999999991 0.0 172
+173 0.033289909362793 0.0300000000000011 0.0300000000000011 0.0 173
+174 0.0319631099700928 0.0399999999999991 0.0399999999999991 0.0 174
+175 0.0314111709594727 0.029999999999994 0.029999999999994 0.0 175
+176 0.0736920833587646 0.0700000000000003 0.0700000000000003 0.0 176
+177 0.0366611480712891 0.0400000000000063 0.0400000000000063 0.0 177
+178 0.0331029891967773 0.029999999999994 0.029999999999994 0.0 178
+179 0.0331480503082275 0.0300000000000011 0.0300000000000011 0.0 179
+180 0.0324270725250244 0.0399999999999991 0.0399999999999991 0.0 180
+181 0.0324950218200684 0.0300000000000011 0.0300000000000011 0.0 181
+182 0.032120943069458 0.0300000000000011 0.0300000000000011 0.0 182
+183 0.0316941738128662 0.0300000000000011 0.0300000000000011 0.0 183
+184 0.0764799118041992 0.0799999999999983 0.0799999999999983 0.0 184
+185 0.0351009368896484 0.0300000000000011 0.0300000000000011 0.0 185
+186 0.0331439971923828 0.0399999999999991 0.0399999999999991 0.0 186
+187 0.0333070755004883 0.0300000000000011 0.0300000000000011 0.0 187
+188 0.0326988697052002 0.0300000000000011 0.0300000000000011 0.0 188
+189 0.0324010848999023 0.0399999999999991 0.0399999999999991 0.0 189
+190 0.0343129634857178 0.0300000000000011 0.0300000000000011 0.0 190
+191 0.0317180156707764 0.0300000000000011 0.0300000000000011 0.0 191
+192 0.0754880905151367 0.0799999999999983 0.0799999999999983 0.0 192
+193 0.0328428745269775 0.0300000000000011 0.0300000000000011 0.0 193
+194 0.0328872203826904 0.029999999999994 0.029999999999994 0.0 194
+195 0.0326900482177734 0.0400000000000063 0.0400000000000063 0.0 195
+196 0.0326938629150391 0.029999999999994 0.029999999999994 0.0 196
+197 0.036156177520752 0.0400000000000063 0.0400000000000063 0.0 197
+198 0.0402121543884277 0.029999999999994 0.029999999999994 0.0 198
+199 0.0345208644866943 0.0400000000000063 0.0400000000000063 0.0 199
+200 0.0736300945281982 0.0699999999999932 0.0699999999999932 0.0 200
+201 0.0329070091247559 0.0400000000000063 0.0400000000000063 0.0 201
+202 0.0329358577728271 0.029999999999994 0.029999999999994 0.0 202
+203 0.0367400646209717 0.0400000000000063 0.0400000000000063 0.0 203
+204 0.0326740741729736 0.029999999999994 0.029999999999994 0.0 204
+205 0.0328309535980225 0.0300000000000011 0.0300000000000011 0.0 205
+206 0.0319180488586426 0.0300000000000011 0.0300000000000011 0.0 206
+207 0.0315039157867432 0.0300000000000011 0.0300000000000011 0.0 207
+208 0.073983907699585 0.0799999999999983 0.0799999999999983 0.0 208
+209 0.0354940891265869 0.0300000000000011 0.0300000000000011 0.0 209
+210 0.0329270362854004 0.0399999999999991 0.0399999999999991 0.0 210
+211 0.0364441871643066 0.0300000000000011 0.0300000000000011 0.0 211
+212 0.0326921939849854 0.0300000000000011 0.0300000000000011 0.0 212
+213 0.0329389572143555 0.0399999999999991 0.0399999999999991 0.0 213
+214 0.0320320129394531 0.0300000000000011 0.0300000000000011 0.0 214
+215 0.0314679145812988 0.0300000000000011 0.0300000000000011 0.0 215
+216 0.0766069889068604 0.0799999999999983 0.0799999999999983 0.0 216
+217 0.0343639850616455 0.0300000000000011 0.0300000000000011 0.0 217
+218 0.0331821441650391 0.0399999999999991 0.0399999999999991 0.0 218
+219 0.0328841209411621 0.0300000000000011 0.0300000000000011 0.0 219
+220 0.0324678421020508 0.029999999999994 0.029999999999994 0.0 220
+221 0.0323128700256348 0.0300000000000011 0.0300000000000011 0.0 221
+222 0.0320940017700195 0.0399999999999991 0.0399999999999991 0.0 222
+223 0.084298849105835 0.0800000000000054 0.0800000000000054 0.0 223
+224 0.0338959693908691 0.0300000000000011 0.0300000000000011 0.0 224
+225 0.0326578617095947 0.0399999999999991 0.0399999999999991 0.0 225
+226 0.0329980850219727 0.029999999999994 0.029999999999994 0.0 226
+227 0.0328388214111328 0.0300000000000011 0.0300000000000011 0.0 227
+228 0.0324342250823975 0.0399999999999991 0.0399999999999991 0.0 228
+229 0.0363619327545166 0.0300000000000011 0.0300000000000011 0.0 229
+230 0.0319449901580811 0.0300000000000011 0.0300000000000011 0.0 230
+231 0.0728111267089844 0.0799999999999983 0.0799999999999983 0.0 231
+232 0.0331339836120605 0.0300000000000011 0.0300000000000011 0.0 232
+233 0.0330288410186768 0.0300000000000011 0.0300000000000011 0.0 233
+234 0.0328319072723389 0.0399999999999991 0.0399999999999991 0.0 234
+235 0.0353119373321533 0.0300000000000011 0.0300000000000011 0.0 235
+236 0.0324058532714844 0.0300000000000011 0.0300000000000011 0.0 236
+237 0.0343661308288574 0.0399999999999991 0.0399999999999991 0.0 237
+238 0.0319287776947021 0.0300000000000011 0.0300000000000011 0.0 238
+239 0.0734179019927979 0.0700000000000003 0.0700000000000003 0.0 239
+240 0.0330750942230225 0.0399999999999991 0.0399999999999991 0.0 240
+241 0.0359859466552734 0.0300000000000011 0.0300000000000011 0.0 241
+242 0.0331950187683105 0.0399999999999991 0.0399999999999991 0.0 242
+243 0.0336649417877197 0.0300000000000011 0.0300000000000011 0.0 243
+244 0.0327489376068115 0.0300000000000011 0.0300000000000011 0.0 244
+245 0.0324509143829346 0.029999999999994 0.029999999999994 0.0 245
+246 0.0315418243408203 0.0399999999999991 0.0399999999999991 0.0 246
+247 0.0725250244140625 0.0700000000000003 0.0700000000000003 0.0 247
+248 0.0361208915710449 0.0300000000000011 0.0300000000000011 0.0 248
+249 0.040661096572876 0.0399999999999991 0.0399999999999991 0.0 249
+250 0.0346300601959229 0.0400000000000063 0.0400000000000063 0.0 250
+251 0.0325310230255127 0.029999999999994 0.029999999999994 0.0 251
+252 0.032663106918335 0.0300000000000011 0.0300000000000011 0.0 252
+253 0.0323901176452637 0.0399999999999991 0.0399999999999991 0.0 253
+254 0.0314888954162598 0.0300000000000011 0.0300000000000011 0.0 254
+255 0.0757758617401123 0.0700000000000003 0.0700000000000003 0.0 255
+256 0.0334639549255371 0.0399999999999991 0.0399999999999991 0.0 256
+257 0.032958984375 0.0300000000000011 0.0300000000000011 0.0 257
+258 0.0329427719116211 0.0300000000000011 0.0300000000000011 0.0 258
+259 0.0325839519500732 0.0399999999999991 0.0399999999999991 0.0 259
+260 0.0327038764953613 0.0300000000000011 0.0300000000000011 0.0 260
+261 0.0347969532012939 0.0300000000000011 0.0300000000000011 0.0 261
+262 0.0313179492950439 0.0399999999999991 0.0399999999999991 0.0 262
+263 0.0764021873474121 0.0700000000000003 0.0700000000000003 0.0 263
+264 0.0333998203277588 0.0300000000000011 0.0300000000000011 0.0 264
+265 0.0331900119781494 0.0399999999999991 0.0399999999999991 0.0 265
+266 0.0328788757324219 0.0300000000000011 0.0300000000000011 0.0 266
+267 0.0352470874786377 0.0399999999999991 0.0399999999999991 0.0 267
+268 0.0326640605926514 0.0300000000000011 0.0300000000000011 0.0 268
+269 0.0323259830474854 0.029999999999994 0.029999999999994 0.0 269
+270 0.0321478843688965 0.0300000000000011 0.0300000000000011 0.0 270
+271 0.0730900764465332 0.0799999999999983 0.0799999999999983 0.0 271
+272 0.032844066619873 0.0300000000000011 0.0300000000000011 0.0 272
+273 0.0331649780273438 0.0300000000000011 0.0300000000000011 0.0 273
+274 0.0364649295806885 0.0399999999999991 0.0399999999999991 0.0 274
+275 0.0396530628204346 0.0399999999999991 0.0399999999999991 0.0 275
+276 0.0334179401397705 0.0300000000000011 0.0300000000000011 0.0 276
+277 0.0320639610290527 0.0300000000000011 0.0300000000000011 0.0 277
+278 0.0313940048217773 0.0399999999999991 0.0399999999999991 0.0 278
+279 0.0731561183929443 0.0700000000000003 0.0700000000000003 0.0 279
+280 0.0364029407501221 0.0399999999999991 0.0399999999999991 0.0 280
+281 0.0330798625946045 0.0300000000000011 0.0300000000000011 0.0 281
+282 0.0338191986083984 0.0300000000000011 0.0300000000000011 0.0 282
+283 0.0326099395751953 0.0399999999999991 0.0399999999999991 0.0 283
+284 0.0324950218200684 0.0300000000000011 0.0300000000000011 0.0 284
+285 0.0321521759033203 0.0300000000000011 0.0300000000000011 0.0 285
+286 0.0321328639984131 0.0300000000000011 0.0300000000000011 0.0 286
+287 0.0761940479278564 0.0799999999999983 0.0799999999999983 0.0 287
+288 0.0365800857543945 0.0300000000000011 0.0300000000000011 0.0 288
+289 0.0353879928588867 0.0399999999999991 0.0399999999999991 0.0 289
+290 0.0333998203277588 0.0300000000000011 0.0300000000000011 0.0 290
+291 0.0328271389007568 0.029999999999994 0.029999999999994 0.0 291
+292 0.0326738357543945 0.0400000000000063 0.0400000000000063 0.0 292
+293 0.0339128971099854 0.029999999999994 0.029999999999994 0.0 293
+294 0.0325300693511963 0.0300000000000011 0.0300000000000011 0.0 294
+295 0.0739338397979736 0.0800000000000054 0.0800000000000054 0.0 295
+296 0.0328948497772217 0.029999999999994 0.029999999999994 0.0 296
+297 0.0328888893127441 0.0300000000000011 0.0300000000000011 0.0 297
+298 0.0327708721160889 0.0399999999999991 0.0399999999999991 0.0 298
+299 0.0325500965118408 0.0300000000000011 0.0300000000000011 0.0 299
+300 0.0354809761047363 0.0300000000000011 0.0300000000000011 0.0 300
+301 0.0396809577941895 0.0399999999999991 0.0399999999999991 0.0 301
+302 0.0334930419921875 0.0399999999999991 0.0399999999999991 0.0 302
+303 0.0734050273895264 0.0700000000000003 0.0700000000000003 0.0 303
+304 0.0328478813171387 0.0300000000000011 0.0300000000000011 0.0 304
+305 0.0329740047454834 0.0399999999999991 0.0399999999999991 0.0 305
+306 0.0364749431610107 0.0300000000000011 0.0300000000000011 0.0 306
+307 0.0326058864593506 0.0300000000000011 0.0300000000000011 0.0 307
+308 0.0327680110931396 0.0399999999999991 0.0399999999999991 0.0 308
+309 0.0319027900695801 0.0300000000000011 0.0300000000000011 0.0 309
+310 0.0315032005310059 0.0300000000000011 0.0300000000000011 0.0 310
+311 0.073652982711792 0.0700000000000003 0.0700000000000003 0.0 311
+312 0.0356411933898926 0.0399999999999991 0.0399999999999991 0.0 312
+313 0.0330371856689453 0.0300000000000011 0.0300000000000011 0.0 313
+314 0.0342891216278076 0.0399999999999991 0.0399999999999991 0.0 314
+315 0.0345110893249512 0.0300000000000011 0.0300000000000011 0.0 315
+316 0.032926082611084 0.029999999999994 0.029999999999994 0.0 316
+317 0.031851053237915 0.0399999999999991 0.0399999999999991 0.0 317
+318 0.0316848754882812 0.0300000000000011 0.0300000000000011 0.0 318
+319 0.0761759281158447 0.0700000000000003 0.0700000000000003 0.0 319
+320 0.0328528881072998 0.0399999999999991 0.0399999999999991 0.0 320
+321 0.0334789752960205 0.0300000000000011 0.0300000000000011 0.0 321
+322 0.0328638553619385 0.0300000000000011 0.0300000000000011 0.0 322
+323 0.0323901176452637 0.0399999999999991 0.0399999999999991 0.0 323
+324 0.0323100090026855 0.0300000000000011 0.0300000000000011 0.0 324
+325 0.0324501991271973 0.0300000000000011 0.0300000000000011 0.0 325
+326 0.0336298942565918 0.0300000000000011 0.0300000000000011 0.0 326
+327 0.0810260772705078 0.0899999999999963 0.0899999999999963 0.0 327
+328 0.0327072143554688 0.0300000000000011 0.0300000000000011 0.0 328
+329 0.0328741073608398 0.0300000000000011 0.0300000000000011 0.0 329
+330 0.0328249931335449 0.0300000000000011 0.0300000000000011 0.0 330
+331 0.0325191020965576 0.0399999999999991 0.0399999999999991 0.0 331
+332 0.0351779460906982 0.0300000000000011 0.0300000000000011 0.0 332
+333 0.0318300724029541 0.0300000000000011 0.0300000000000011 0.0 333
+334 0.075192928314209 0.0799999999999983 0.0799999999999983 0.0 334
+335 0.0331308841705322 0.0300000000000011 0.0300000000000011 0.0 335
+336 0.0328052043914795 0.029999999999994 0.029999999999994 0.0 336
+337 0.0331370830535889 0.0400000000000063 0.0400000000000063 0.0 337
+338 0.0356910228729248 0.029999999999994 0.029999999999994 0.0 338
+339 0.0324921607971191 0.0400000000000063 0.0400000000000063 0.0 339
+340 0.0324490070343018 0.029999999999994 0.029999999999994 0.0 340
+341 0.0341949462890625 0.0300000000000011 0.0300000000000011 0.0 341
+342 0.0734210014343262 0.0799999999999983 0.0799999999999983 0.0 342
+343 0.0332908630371094 0.0300000000000011 0.0300000000000011 0.0 343
+344 0.0332479476928711 0.0300000000000011 0.0300000000000011 0.0 344
+345 0.0360391139984131 0.0399999999999991 0.0399999999999991 0.0 345
+346 0.0328700542449951 0.0300000000000011 0.0300000000000011 0.0 346
+347 0.0346879959106445 0.0399999999999991 0.0399999999999991 0.0 347
+348 0.0322730541229248 0.0300000000000011 0.0300000000000011 0.0 348
+349 0.0316729545593262 0.0300000000000011 0.0300000000000011 0.0 349
+350 0.0730090141296387 0.0700000000000003 0.0700000000000003 0.0 350
+351 0.0364499092102051 0.0399999999999991 0.0399999999999991 0.0 351
+352 0.0416209697723389 0.0399999999999991 0.0399999999999991 0.0 352
+353 0.0340771675109863 0.0399999999999991 0.0399999999999991 0.0 353
+354 0.0326759815216064 0.0300000000000011 0.0300000000000011 0.0 354
+355 0.0324649810791016 0.0300000000000011 0.0300000000000011 0.0 355
+356 0.032310962677002 0.0300000000000011 0.0300000000000011 0.0 356
+357 0.0313961505889893 0.0300000000000011 0.0300000000000011 0.0 357
+358 0.0751090049743652 0.0799999999999983 0.0799999999999983 0.0 358
+359 0.0351879596710205 0.0399999999999991 0.0399999999999991 0.0 359
+360 0.0331299304962158 0.0300000000000011 0.0300000000000011 0.0 360
+361 0.0328550338745117 0.0300000000000011 0.0300000000000011 0.0 361
+362 0.0325639247894287 0.029999999999994 0.029999999999994 0.0 362
+363 0.0325849056243896 0.0400000000000063 0.0400000000000063 0.0 363
+364 0.0344219207763672 0.029999999999994 0.029999999999994 0.0 364
+365 0.0323021411895752 0.0300000000000011 0.0300000000000011 0.0 365
+366 0.0760447978973389 0.0800000000000054 0.0800000000000054 0.0 366
+367 0.0335848331451416 0.029999999999994 0.029999999999994 0.0 367
+368 0.0331020355224609 0.0399999999999991 0.0399999999999991 0.0 368
+369 0.0329232215881348 0.0300000000000011 0.0300000000000011 0.0 369
+370 0.0328400135040283 0.0300000000000011 0.0300000000000011 0.0 370
+371 0.0363020896911621 0.0399999999999991 0.0399999999999991 0.0 371
+372 0.0322511196136475 0.0300000000000011 0.0300000000000011 0.0 372
+373 0.0333948135375977 0.0300000000000011 0.0300000000000011 0.0 373
+374 0.0732510089874268 0.0799999999999983 0.0799999999999983 0.0 374
+375 0.032930850982666 0.0300000000000011 0.0300000000000011 0.0 375
+376 0.0330500602722168 0.0300000000000011 0.0300000000000011 0.0 376
+377 0.0361061096191406 0.0399999999999991 0.0399999999999991 0.0 377
+378 0.0395760536193848 0.0399999999999991 0.0399999999999991 0.0 378
+379 0.0334169864654541 0.0300000000000011 0.0300000000000011 0.0 379
+380 0.0320568084716797 0.0300000000000011 0.0300000000000011 0.0 380
+381 0.0315189361572266 0.0399999999999991 0.0399999999999991 0.0 381
+382 0.0733020305633545 0.0700000000000003 0.0700000000000003 0.0 382
+383 0.0355980396270752 0.0399999999999991 0.0399999999999991 0.0 383
+384 0.0331339836120605 0.0300000000000011 0.0300000000000011 0.0 384
+385 0.0331411361694336 0.0300000000000011 0.0300000000000011 0.0 385
+386 0.0324721336364746 0.0300000000000011 0.0300000000000011 0.0 386
+387 0.0324320793151855 0.0399999999999991 0.0399999999999991 0.0 387
+388 0.0321850776672363 0.029999999999994 0.029999999999994 0.0 388
+389 0.0315890312194824 0.0300000000000011 0.0300000000000011 0.0 389
+390 0.0761289596557617 0.0800000000000054 0.0800000000000054 0.0 390
+391 0.033301830291748 0.029999999999994 0.029999999999994 0.0 391
+392 0.035081148147583 0.0300000000000011 0.0300000000000011 0.0 392
+393 0.0335009098052979 0.0399999999999991 0.0399999999999991 0.0 393
+394 0.0326759815216064 0.0300000000000011 0.0300000000000011 0.0 394
+395 0.0327270030975342 0.0300000000000011 0.0300000000000011 0.0 395
+396 0.0323770046234131 0.0399999999999991 0.0399999999999991 0.0 396
+397 0.0347421169281006 0.0300000000000011 0.0300000000000011 0.0 397
+398 0.0752899646759033 0.0799999999999983 0.0799999999999983 0.0 398
+399 0.0327789783477783 0.0300000000000011 0.0300000000000011 0.0 399
+400 0.032951831817627 0.0300000000000011 0.0300000000000011 0.0 400
+401 0.03273606300354 0.0300000000000011 0.0300000000000011 0.0 401
+402 0.0324621200561523 0.0399999999999991 0.0399999999999991 0.0 402
+403 0.0350461006164551 0.0300000000000011 0.0300000000000011 0.0 403
+404 0.0376379489898682 0.0399999999999991 0.0399999999999991 0.0 404
+405 0.0354411602020264 0.0300000000000011 0.0300000000000011 0.0 405
+406 0.0734958648681641 0.0799999999999983 0.0799999999999983 0.0 406
+407 0.0329210758209229 0.0300000000000011 0.0300000000000011 0.0 407
+408 0.0329289436340332 0.0300000000000011 0.0300000000000011 0.0 408
+409 0.0354850292205811 0.0399999999999991 0.0399999999999991 0.0 409
+410 0.0325729846954346 0.0300000000000011 0.0300000000000011 0.0 410
+411 0.0327589511871338 0.0399999999999991 0.0399999999999991 0.0 411
+412 0.0319170951843262 0.0300000000000011 0.0300000000000011 0.0 412
+413 0.031519889831543 0.029999999999994 0.029999999999994 0.0 413
+414 0.0742340087890625 0.0700000000000003 0.0700000000000003 0.0 414
+415 0.0346739292144775 0.0399999999999991 0.0399999999999991 0.0 415
+416 0.0351288318634033 0.0300000000000011 0.0300000000000011 0.0 416
+417 0.0329630374908447 0.0399999999999991 0.0399999999999991 0.0 417
+418 0.0367558002471924 0.0300000000000011 0.0300000000000011 0.0 418
+419 0.0328981876373291 0.0300000000000011 0.0300000000000011 0.0 419
+420 0.0320210456848145 0.0399999999999991 0.0399999999999991 0.0 420
+421 0.031790018081665 0.0300000000000011 0.0300000000000011 0.0 421
+422 0.0784010887145996 0.0799999999999983 0.0799999999999983 0.0 422
+423 0.0330309867858887 0.0300000000000011 0.0300000000000011 0.0 423
+424 0.0335760116577148 0.0300000000000011 0.0300000000000011 0.0 424
+425 0.0327050685882568 0.0399999999999991 0.0399999999999991 0.0 425
+426 0.0326788425445557 0.0300000000000011 0.0300000000000011 0.0 426
+427 0.032289981842041 0.0300000000000011 0.0300000000000011 0.0 427
+428 0.0317809581756592 0.0300000000000011 0.0300000000000011 0.0 428
+429 0.0816869735717773 0.0899999999999963 0.0899999999999963 0.0 429
+430 0.035430908203125 0.0300000000000011 0.0300000000000011 0.0 430
+431 0.0327348709106445 0.0300000000000011 0.0300000000000011 0.0 431
+432 0.0328209400177002 0.0399999999999991 0.0399999999999991 0.0 432
+433 0.0328578948974609 0.0300000000000011 0.0300000000000011 0.0 433
+434 0.0324020385742188 0.0300000000000011 0.0300000000000011 0.0 434
+435 0.0351409912109375 0.0399999999999991 0.0399999999999991 0.0 435
+436 0.0321168899536133 0.0300000000000011 0.0300000000000011 0.0 436
+437 0.0726029872894287 0.0700000000000003 0.0700000000000003 0.0 437
+438 0.0331008434295654 0.029999999999994 0.029999999999994 0.0 438
+439 0.0328960418701172 0.0399999999999991 0.0399999999999991 0.0 439
+440 0.0328078269958496 0.0300000000000011 0.0300000000000011 0.0 440
+441 0.0326459407806396 0.0300000000000011 0.0300000000000011 0.0 441
+442 0.0361838340759277 0.0399999999999991 0.0399999999999991 0.0 442
+443 0.0322508811950684 0.0300000000000011 0.0300000000000011 0.0 443
+444 0.0355379581451416 0.0399999999999991 0.0399999999999991 0.0 444
+445 0.0736260414123535 0.0700000000000003 0.0700000000000003 0.0 445
+446 0.0333738327026367 0.0300000000000011 0.0300000000000011 0.0 446
+447 0.0333800315856934 0.0399999999999991 0.0399999999999991 0.0 447
+448 0.0369861125946045 0.0300000000000011 0.0300000000000011 0.0 448
+449 0.033034086227417 0.0399999999999991 0.0399999999999991 0.0 449
+450 0.034984827041626 0.0300000000000011 0.0300000000000011 0.0 450
+451 0.0323779582977295 0.0300000000000011 0.0300000000000011 0.0 451
+452 0.0319168567657471 0.0399999999999991 0.0399999999999991 0.0 452
+453 0.0730609893798828 0.0700000000000003 0.0700000000000003 0.0 453
+454 0.0357108116149902 0.0399999999999991 0.0399999999999991 0.0 454
+455 0.0403239727020264 0.0399999999999991 0.0399999999999991 0.0 455
+456 0.033923864364624 0.0300000000000011 0.0300000000000011 0.0 456
+457 0.0325479507446289 0.0300000000000011 0.0300000000000011 0.0 457
+458 0.0323481559753418 0.0300000000000011 0.0300000000000011 0.0 458
+459 0.0323350429534912 0.0399999999999991 0.0399999999999991 0.0 459
+460 0.0314900875091553 0.0300000000000011 0.0300000000000011 0.0 460
+461 0.075538158416748 0.0700000000000003 0.0700000000000003 0.0 461
+462 0.0340449810028076 0.0399999999999991 0.0399999999999991 0.0 462
+463 0.0331201553344727 0.0300000000000011 0.0300000000000011 0.0 463
+464 0.0330970287322998 0.029999999999994 0.029999999999994 0.0 464
+465 0.0326929092407227 0.0399999999999991 0.0399999999999991 0.0 465
+466 0.0326869487762451 0.0300000000000011 0.0300000000000011 0.0 466
+467 0.0325558185577393 0.0300000000000011 0.0300000000000011 0.0 467
+468 0.0355589389801025 0.0399999999999991 0.0399999999999991 0.0 468
+469 0.0771338939666748 0.0700000000000003 0.0700000000000003 0.0 469
+470 0.0334289073944092 0.0399999999999991 0.0399999999999991 0.0 470
+471 0.0330390930175781 0.0300000000000011 0.0300000000000011 0.0 471
+472 0.0329241752624512 0.0300000000000011 0.0300000000000011 0.0 472
+473 0.0327908992767334 0.0399999999999991 0.0399999999999991 0.0 473
+474 0.0363669395446777 0.0300000000000011 0.0300000000000011 0.0 474
+475 0.0322010517120361 0.0300000000000011 0.0300000000000011 0.0 475
+476 0.0328471660614014 0.0399999999999991 0.0399999999999991 0.0 476
+477 0.0735671520233154 0.0700000000000003 0.0700000000000003 0.0 477
+478 0.0327999591827393 0.0300000000000011 0.0300000000000011 0.0 478
+479 0.0329790115356445 0.0399999999999991 0.0399999999999991 0.0 479
+480 0.0350720882415771 0.0300000000000011 0.0300000000000011 0.0 480
+481 0.0392179489135742 0.0399999999999991 0.0399999999999991 0.0 481
+482 0.0342378616333008 0.0399999999999991 0.0399999999999991 0.0 482
+483 0.0319888591766357 0.0300000000000011 0.0300000000000011 0.0 483
+484 0.0314619541168213 0.0300000000000011 0.0300000000000011 0.0 484
+485 0.0736970901489258 0.0700000000000003 0.0700000000000003 0.0 485
+486 0.0357317924499512 0.0399999999999991 0.0399999999999991 0.0 486
+487 0.0331878662109375 0.0300000000000011 0.0300000000000011 0.0 487
+488 0.033804178237915 0.0399999999999991 0.0399999999999991 0.0 488
+489 0.0325119495391846 0.0300000000000011 0.0300000000000011 0.0 489
+490 0.0325300693511963 0.029999999999994 0.029999999999994 0.0 490
+491 0.0321159362792969 0.0300000000000011 0.0300000000000011 0.0 491
+492 0.0320580005645752 0.0399999999999991 0.0399999999999991 0.0 492
+493 0.075861930847168 0.0700000000000003 0.0700000000000003 0.0 493
+494 0.033599853515625 0.0399999999999991 0.0399999999999991 0.0 494
+495 0.0367560386657715 0.0300000000000011 0.0300000000000011 0.0 495
+496 0.0333199501037598 0.0300000000000011 0.0300000000000011 0.0 496
+497 0.0325191020965576 0.0399999999999991 0.0399999999999991 0.0 497
+498 0.0327298641204834 0.0300000000000011 0.0300000000000011 0.0 498
+499 0.0322799682617188 0.0300000000000011 0.0300000000000011 0.0 499
+500 0.0348708629608154 0.0399999999999991 0.0399999999999991 0.0 500
+501 0.0749578475952148 0.0700000000000003 0.0700000000000003 0.0 501
+502 0.0332460403442383 0.0399999999999991 0.0399999999999991 0.0 502
+503 0.0331079959869385 0.0300000000000011 0.0300000000000011 0.0 503
+504 0.0328578948974609 0.0300000000000011 0.0300000000000011 0.0 504
+505 0.032494068145752 0.0300000000000011 0.0300000000000011 0.0 505
+506 0.0351459980010986 0.0399999999999991 0.0399999999999991 0.0 506
+507 0.0394799709320068 0.0500000000000043 0.0399999999999991 0.01 507
+508 0.0342020988464355 0.0300000000000011 0.0300000000000011 0.0 508
+509 0.0742120742797852 0.0799999999999983 0.0799999999999983 0.0 509
+510 0.0330269336700439 0.0300000000000011 0.0300000000000011 0.0 510
+511 0.032991886138916 0.0300000000000011 0.0300000000000011 0.0 511
+512 0.0354578495025635 0.0399999999999991 0.0399999999999991 0.0 512
+513 0.0327198505401611 0.0300000000000011 0.0300000000000011 0.0 513
+514 0.0336050987243652 0.029999999999994 0.029999999999994 0.0 514
+515 0.0318880081176758 0.0400000000000063 0.0400000000000063 0.0 515
+516 0.0725610256195068 0.0699999999999932 0.0699999999999932 0.0 516
+517 0.0332450866699219 0.0300000000000011 0.0300000000000011 0.0 517
+518 0.0342578887939453 0.0399999999999991 0.0399999999999991 0.0 518
+519 0.035430908203125 0.0300000000000011 0.0300000000000011 0.0 519
+520 0.032912015914917 0.0399999999999991 0.0399999999999991 0.0 520
+521 0.0366041660308838 0.0300000000000011 0.0300000000000011 0.0 521
+522 0.0328991413116455 0.0300000000000011 0.0300000000000011 0.0 522
+523 0.0319130420684814 0.0399999999999991 0.0399999999999991 0.0 523
+524 0.07318115234375 0.0700000000000003 0.0700000000000003 0.0 524
+525 0.0363700389862061 0.0399999999999991 0.0399999999999991 0.0 525
+526 0.033411979675293 0.0300000000000011 0.0300000000000011 0.0 526
+527 0.0364720821380615 0.0399999999999991 0.0399999999999991 0.0 527
+528 0.0327281951904297 0.0300000000000011 0.0300000000000011 0.0 528
+529 0.0325851440429688 0.0300000000000011 0.0300000000000011 0.0 529
+530 0.0322520732879639 0.0300000000000011 0.0300000000000011 0.0 530
+531 0.0316128730773926 0.0399999999999991 0.0399999999999991 0.0 531
+532 0.0813291072845459 0.0799999999999983 0.0799999999999983 0.0 532
+533 0.0356478691101074 0.0300000000000011 0.0300000000000011 0.0 533
+534 0.0330061912536621 0.0300000000000011 0.0300000000000011 0.0 534
+535 0.0327270030975342 0.0399999999999991 0.0399999999999991 0.0 535
+536 0.032696008682251 0.0300000000000011 0.0300000000000011 0.0 536
+537 0.032243013381958 0.0300000000000011 0.0300000000000011 0.0 537
+538 0.0348541736602783 0.0399999999999991 0.0399999999999991 0.0 538
+539 0.031674861907959 0.0300000000000011 0.0300000000000011 0.0 539
+540 0.0754058361053467 0.0700000000000003 0.0700000000000003 0.0 540
+541 0.0328490734100342 0.0399999999999991 0.0399999999999991 0.0 541
+542 0.0332391262054443 0.029999999999994 0.029999999999994 0.0 542
+543 0.0331962108612061 0.0300000000000011 0.0300000000000011 0.0 543
+544 0.0350210666656494 0.0399999999999991 0.0399999999999991 0.0 544
+545 0.0324161052703857 0.0300000000000011 0.0300000000000011 0.0 545
+546 0.031865119934082 0.0300000000000011 0.0300000000000011 0.0 546
+547 0.0355000495910645 0.0399999999999991 0.0399999999999991 0.0 547
+548 0.0733621120452881 0.0700000000000003 0.0700000000000003 0.0 548
+549 0.0331029891967773 0.0300000000000011 0.0300000000000011 0.0 549
+550 0.0332908630371094 0.0399999999999991 0.0399999999999991 0.0 550
+551 0.0365278720855713 0.0300000000000011 0.0300000000000011 0.0 551
+552 0.0326669216156006 0.0399999999999991 0.0399999999999991 0.0 552
+553 0.0345711708068848 0.0300000000000011 0.0300000000000011 0.0 553
+554 0.0320999622344971 0.0300000000000011 0.0300000000000011 0.0 554
+555 0.0315120220184326 0.0300000000000011 0.0300000000000011 0.0 555
+556 0.0733709335327148 0.0700000000000003 0.0700000000000003 0.0 556
+557 0.0357170104980469 0.0300000000000011 0.0300000000000011 0.0 557
+558 0.0411560535430908 0.0399999999999991 0.0399999999999991 0.0 558
+559 0.0337309837341309 0.0399999999999991 0.0399999999999991 0.0 559
+560 0.0325090885162354 0.0300000000000011 0.0300000000000011 0.0 560
+561 0.0326089859008789 0.0300000000000011 0.0300000000000011 0.0 561
+562 0.032412052154541 0.029999999999994 0.029999999999994 0.0 562
+563 0.0314450263977051 0.0300000000000011 0.0300000000000011 0.0 563
+564 0.0781939029693604 0.0700000000000003 0.0700000000000003 0.0 564
+565 0.0359461307525635 0.0399999999999991 0.0399999999999991 0.0 565
+566 0.0339870452880859 0.0300000000000011 0.0300000000000011 0.0 566
+567 0.0329389572143555 0.0399999999999991 0.0399999999999991 0.0 567
+568 0.0336530208587646 0.029999999999994 0.029999999999994 0.0 568
+569 0.0326399803161621 0.0300000000000011 0.0300000000000011 0.0 569
+570 0.0351450443267822 0.0399999999999991 0.0399999999999991 0.0 570
+571 0.0314168930053711 0.0300000000000011 0.0300000000000011 0.0 571
+572 0.0775408744812012 0.0800000000000054 0.0800000000000054 0.0 572
+573 0.032926082611084 0.029999999999994 0.029999999999994 0.0 573
+574 0.0330569744110107 0.0300000000000011 0.0300000000000011 0.0 574
+575 0.0329349040985107 0.0300000000000011 0.0300000000000011 0.0 575
+576 0.0327939987182617 0.0399999999999991 0.0399999999999991 0.0 576
+577 0.035599946975708 0.0300000000000011 0.0300000000000011 0.0 577
+578 0.0321230888366699 0.0399999999999991 0.0399999999999991 0.0 578
+579 0.0320999622344971 0.0300000000000011 0.0300000000000011 0.0 579
+580 0.0739450454711914 0.0700000000000003 0.0700000000000003 0.0 580
+581 0.0332319736480713 0.0300000000000011 0.0300000000000011 0.0 581
+582 0.0331840515136719 0.0300000000000011 0.0300000000000011 0.0 582
+583 0.0358431339263916 0.0300000000000011 0.0300000000000011 0.0 583
+584 0.0413031578063965 0.0499999999999972 0.0499999999999972 0.0 584
+585 0.0345101356506348 0.0300000000000011 0.0300000000000011 0.0 585
+586 0.0317580699920654 0.0300000000000011 0.0300000000000011 0.0 586
+587 0.0729880332946777 0.0799999999999983 0.0799999999999983 0.0 587
+588 0.0332069396972656 0.0300000000000011 0.0300000000000011 0.0 588
+589 0.036264181137085 0.0300000000000011 0.0300000000000011 0.0 589
+590 0.0331530570983887 0.0399999999999991 0.0399999999999991 0.0 590
+591 0.0343399047851562 0.0300000000000011 0.0300000000000011 0.0 591
+592 0.0326418876647949 0.0300000000000011 0.0300000000000011 0.0 592
+593 0.0326697826385498 0.0300000000000011 0.0300000000000011 0.0 593
+594 0.0320968627929688 0.0299999999999869 0.029999999999994 0.0 594
+595 0.0752952098846436 0.0800000000000125 0.0800000000000054 0.0 595
+596 0.0330331325531006 0.0299999999999869 0.029999999999994 0.0 596
+597 0.0343711376190186 0.0300000000000011 0.0300000000000011 0.0 597
+598 0.035207986831665 0.0400000000000063 0.0400000000000063 0.0 598
+599 0.0326581001281738 0.0300000000000011 0.0300000000000011 0.0 599
+600 0.0325701236724854 0.0300000000000011 0.0300000000000011 0.0 600
+601 0.0330169200897217 0.039999999999992 0.039999999999992 0.0 601
+602 0.0319371223449707 0.0300000000000011 0.0300000000000011 0.0 602
+603 0.0774281024932861 0.0799999999999983 0.0799999999999983 0.0 603
+604 0.033113956451416 0.0300000000000011 0.0300000000000011 0.0 604
+605 0.0331709384918213 0.0300000000000011 0.0300000000000011 0.0 605
+606 0.0327689647674561 0.0300000000000011 0.0300000000000011 0.0 606
+607 0.0324411392211914 0.0400000000000063 0.0400000000000063 0.0 607
+608 0.0325808525085449 0.0299999999999869 0.0299999999999869 0.0 608
+609 0.0360062122344971 0.0400000000000063 0.0400000000000063 0.0 609
+610 0.041234016418457 0.0400000000000063 0.0400000000000063 0.0 610
+611 0.0736250877380371 0.0699999999999932 0.0699999999999932 0.0 611
+612 0.0329921245574951 0.0300000000000011 0.0300000000000011 0.0 612
+613 0.0332169532775879 0.0400000000000063 0.0400000000000063 0.0 613
+614 0.0327460765838623 0.0299999999999869 0.0299999999999869 0.0 614
+615 0.0364718437194824 0.0400000000000063 0.0400000000000063 0.0 615
+616 0.0324280261993408 0.0300000000000011 0.0300000000000011 0.0 616
+617 0.0323798656463623 0.0300000000000011 0.0300000000000011 0.0 617
+618 0.031386137008667 0.0300000000000011 0.0300000000000011 0.0 618
+619 0.0726630687713623 0.0799999999999983 0.0799999999999983 0.0 619
+620 0.0328989028930664 0.0300000000000011 0.0300000000000011 0.0 620
+621 0.0358729362487793 0.0300000000000011 0.0300000000000011 0.0 621
+622 0.0327029228210449 0.039999999999992 0.039999999999992 0.0 622
+623 0.0342001914978027 0.0300000000000011 0.0300000000000011 0.0 623
+624 0.0347521305084229 0.0400000000000063 0.0400000000000063 0.0 624
+625 0.0318779945373535 0.0300000000000011 0.0300000000000011 0.0 625
+626 0.0316078662872314 0.0300000000000011 0.0300000000000011 0.0 626
+627 0.0768020153045654 0.0699999999999932 0.0699999999999932 0.0 627
+628 0.0332560539245605 0.0400000000000063 0.0400000000000063 0.0 628
+629 0.0345439910888672 0.0300000000000011 0.0300000000000011 0.0 629
+630 0.033174991607666 0.039999999999992 0.039999999999992 0.0 630
+631 0.0327689647674561 0.0300000000000011 0.0300000000000011 0.0 631
+632 0.0324020385742188 0.0300000000000011 0.0300000000000011 0.0 632
+633 0.0320298671722412 0.0300000000000011 0.0300000000000011 0.0 633
+634 0.0313320159912109 0.0300000000000011 0.0300000000000011 0.0 634
+635 0.0831730365753174 0.0900000000000034 0.0900000000000034 0.0 635
+636 0.0344598293304443 0.0299999999999869 0.0299999999999869 0.0 636
+637 0.0330190658569336 0.0400000000000063 0.0400000000000063 0.0 637
+638 0.033113956451416 0.0300000000000011 0.0300000000000011 0.0 638
+639 0.032689094543457 0.0300000000000011 0.0300000000000011 0.0 639
+640 0.0323820114135742 0.0300000000000011 0.0300000000000011 0.0 640
+641 0.034714937210083 0.039999999999992 0.039999999999992 0.0 641
+642 0.0318310260772705 0.0300000000000011 0.0300000000000011 0.0 642
+643 0.0750701427459717 0.0700000000000074 0.0700000000000074 0.0 643
+644 0.0330171585083008 0.039999999999992 0.039999999999992 0.0 644
+645 0.0331709384918213 0.0300000000000011 0.0300000000000011 0.0 645
+646 0.0328099727630615 0.0300000000000011 0.0300000000000011 0.0 646
+647 0.0354018211364746 0.0400000000000063 0.0400000000000063 0.0 647
+648 0.0324749946594238 0.0300000000000011 0.0300000000000011 0.0 648
+649 0.0331239700317383 0.0300000000000011 0.0300000000000011 0.0 649
+650 0.0337600708007812 0.039999999999992 0.039999999999992 0.0 650
+651 0.0735490322113037 0.0700000000000074 0.0700000000000074 0.0 651
+652 0.0332188606262207 0.0300000000000011 0.0300000000000011 0.0 652
+653 0.0344240665435791 0.039999999999992 0.039999999999992 0.0 653
+654 0.0346159934997559 0.0300000000000011 0.0300000000000011 0.0 654
+655 0.0326159000396729 0.0400000000000063 0.0400000000000063 0.0 655
+656 0.0342769622802734 0.0299999999999869 0.0299999999999869 0.0 656
+657 0.0318350791931152 0.0300000000000011 0.0300000000000011 0.0 657
+658 0.0315489768981934 0.0300000000000011 0.0300000000000011 0.0 658
+659 0.0741128921508789 0.0799999999999983 0.0799999999999983 0.0 659
+660 0.0384690761566162 0.0400000000000063 0.0400000000000063 0.0 660
+661 0.0412099361419678 0.0400000000000063 0.0400000000000063 0.0 661
+662 0.0339169502258301 0.0299999999999869 0.0299999999999869 0.0 662
+663 0.0325090885162354 0.0300000000000011 0.0300000000000011 0.0 663
+664 0.0323750972747803 0.0400000000000063 0.0400000000000063 0.0 664
+665 0.0319221019744873 0.0300000000000011 0.0300000000000011 0.0 665
+666 0.0757949352264404 0.0699999999999932 0.0699999999999932 0.0 666
+667 0.0332348346710205 0.0400000000000063 0.0400000000000063 0.0 667
+668 0.0343492031097412 0.0300000000000011 0.0300000000000011 0.0 668
+669 0.0330471992492676 0.0300000000000011 0.0300000000000011 0.0 669
+670 0.0328240394592285 0.039999999999992 0.039999999999992 0.0 670
+671 0.0326519012451172 0.0300000000000011 0.0300000000000011 0.0 671
+672 0.0323309898376465 0.0300000000000011 0.0300000000000011 0.0 672
+673 0.0348069667816162 0.0400000000000063 0.0400000000000063 0.0 673
+674 0.0734519958496094 0.0699999999999932 0.0699999999999932 0.0 674
+675 0.0358669757843018 0.0400000000000063 0.0400000000000063 0.0 675
+676 0.0329530239105225 0.0300000000000011 0.0300000000000011 0.0 676
+677 0.033228874206543 0.0300000000000011 0.0300000000000011 0.0 677
+678 0.0329709053039551 0.039999999999992 0.039999999999992 0.0 678
+679 0.0349721908569336 0.0300000000000011 0.0300000000000011 0.0 679
+680 0.0329270362854004 0.0300000000000011 0.0300000000000011 0.0 680
+681 0.0317440032958984 0.0400000000000063 0.0400000000000063 0.0 681
+682 0.0737960338592529 0.0699999999999932 0.0699999999999932 0.0 682
+683 0.0329961776733398 0.0300000000000011 0.0300000000000011 0.0 683
+684 0.0329370498657227 0.0400000000000063 0.0400000000000063 0.0 684
+685 0.033027172088623 0.0299999999999869 0.0299999999999869 0.0 685
+686 0.0384509563446045 0.0400000000000063 0.0400000000000063 0.0 686
+687 0.0391240119934082 0.0400000000000063 0.0400000000000063 0.0 687
+688 0.0333750247955322 0.0299999999999869 0.0299999999999869 0.0 688
+689 0.0313661098480225 0.0300000000000011 0.0300000000000011 0.0 689
+690 0.0728821754455566 0.0700000000000074 0.0700000000000074 0.0 690
+691 0.0328829288482666 0.039999999999992 0.039999999999992 0.0 691
+692 0.0367858409881592 0.0300000000000011 0.0300000000000011 0.0 692
+693 0.032905101776123 0.0400000000000063 0.0400000000000063 0.0 693
+694 0.0336589813232422 0.0300000000000011 0.0300000000000011 0.0 694
+695 0.0322878360748291 0.0300000000000011 0.0300000000000011 0.0 695
+696 0.0319581031799316 0.0300000000000011 0.0300000000000011 0.0 696
+697 0.0315032005310059 0.039999999999992 0.039999999999992 0.0 697
+698 0.0756649971008301 0.0700000000000074 0.0700000000000074 0.0 698
+699 0.0332357883453369 0.039999999999992 0.039999999999992 0.0 699
+700 0.0345721244812012 0.0300000000000011 0.0300000000000011 0.0 700
+701 0.035128116607666 0.0300000000000011 0.0300000000000011 0.0 701
+702 0.0327088832855225 0.0400000000000063 0.0400000000000063 0.0 702
+703 0.032559871673584 0.0300000000000011 0.0300000000000011 0.0 703
+704 0.0327198505401611 0.0300000000000011 0.0300000000000011 0.0 704
+705 0.0315008163452148 0.0299999999999869 0.0299999999999869 0.0 705
+706 0.0784509181976318 0.0800000000000125 0.0800000000000125 0.0 706
+707 0.032890796661377 0.039999999999992 0.039999999999992 0.0 707
+708 0.0331568717956543 0.0300000000000011 0.0300000000000011 0.0 708
+709 0.0327529907226562 0.0300000000000011 0.0300000000000011 0.0 709
+710 0.0325257778167725 0.0300000000000011 0.0300000000000011 0.0 710
+711 0.0323739051818848 0.039999999999992 0.039999999999992 0.0 711
+712 0.0377719402313232 0.0300000000000011 0.0300000000000011 0.0 712
+713 0.0389621257781982 0.0400000000000063 0.0400000000000063 0.0 713
+714 0.0756630897521973 0.0799999999999983 0.0799999999999983 0.0 714
+715 0.0329148769378662 0.0300000000000011 0.0300000000000011 0.0 715
+716 0.0330750942230225 0.0400000000000063 0.0400000000000063 0.0 716
+717 0.0328159332275391 0.0299999999999869 0.0299999999999869 0.0 717
+718 0.0366039276123047 0.0300000000000011 0.0300000000000011 0.0 718
+719 0.032505989074707 0.0400000000000063 0.0400000000000063 0.0 719
+720 0.0332479476928711 0.0300000000000011 0.0300000000000011 0.0 720
+721 0.0314240455627441 0.0300000000000011 0.0300000000000011 0.0 721
+722 0.0737588405609131 0.0799999999999983 0.0799999999999983 0.0 722
+723 0.0348548889160156 0.0300000000000011 0.0300000000000011 0.0 723
+724 0.0358438491821289 0.0300000000000011 0.0300000000000011 0.0 724
+725 0.0327739715576172 0.0300000000000011 0.0300000000000011 0.0 725
+726 0.0338411331176758 0.0300000000000011 0.0300000000000011 0.0 726
+727 0.0345768928527832 0.0400000000000063 0.0400000000000063 0.0 727
+728 0.0319709777832031 0.0300000000000011 0.0300000000000011 0.0 728
+729 0.0316281318664551 0.0300000000000011 0.0300000000000011 0.0 729
+730 0.0774428844451904 0.0799999999999983 0.0799999999999983 0.0 730
+731 0.0331730842590332 0.0300000000000011 0.0300000000000011 0.0 731
+732 0.0344212055206299 0.0300000000000011 0.0300000000000011 0.0 732
+733 0.0328938961029053 0.039999999999992 0.039999999999992 0.0 733
+734 0.032724142074585 0.0300000000000011 0.0300000000000011 0.0 734
+735 0.0324850082397461 0.0300000000000011 0.0300000000000011 0.0 735
+736 0.031792163848877 0.0300000000000011 0.0300000000000011 0.0 736
+737 0.0799460411071777 0.0799999999999983 0.0799999999999983 0.0 737
+738 0.0354650020599365 0.0400000000000063 0.0400000000000063 0.0 738
+739 0.0343890190124512 0.0299999999999869 0.0299999999999869 0.0 739
+740 0.0328691005706787 0.0400000000000063 0.0400000000000063 0.0 740
+741 0.0328059196472168 0.0300000000000011 0.0300000000000011 0.0 741
+742 0.0325958728790283 0.0300000000000011 0.0300000000000011 0.0 742
+743 0.0322740077972412 0.039999999999992 0.039999999999992 0.0 743
+744 0.0356390476226807 0.0300000000000011 0.0300000000000011 0.0 744
+745 0.0736830234527588 0.0700000000000074 0.0700000000000074 0.0 745
+746 0.0331189632415771 0.0300000000000011 0.0300000000000011 0.0 746
+747 0.0331828594207764 0.0300000000000011 0.0300000000000011 0.0 747
+748 0.0329599380493164 0.0300000000000011 0.0300000000000011 0.0 748
+749 0.0325560569763184 0.0400000000000063 0.0400000000000063 0.0 749
+750 0.0352969169616699 0.0300000000000011 0.0300000000000011 0.0 750
+751 0.0321471691131592 0.0300000000000011 0.0300000000000011 0.0 751
+752 0.0331270694732666 0.039999999999992 0.039999999999992 0.0 752
+753 0.0755550861358643 0.0700000000000074 0.0700000000000074 0.0 753
+754 0.0331971645355225 0.039999999999992 0.039999999999992 0.0 754
+755 0.0333280563354492 0.0300000000000011 0.0300000000000011 0.0 755
+756 0.0349440574645996 0.0300000000000011 0.0300000000000011 0.0 756
+757 0.0327320098876953 0.0400000000000063 0.0400000000000063 0.0 757
+758 0.0337162017822266 0.0300000000000011 0.0300000000000011 0.0 758
+759 0.0320689678192139 0.0299999999999869 0.0299999999999869 0.0 759
+760 0.0315940380096436 0.0300000000000011 0.0300000000000011 0.0 760
+761 0.0736989974975586 0.0800000000000125 0.0800000000000125 0.0 761
+762 0.0331079959869385 0.0299999999999869 0.0299999999999869 0.0 762
+763 0.0434081554412842 0.0400000000000063 0.0400000000000063 0.0 763
+764 0.0350160598754883 0.0400000000000063 0.0400000000000063 0.0 764
+765 0.0333938598632812 0.0299999999999869 0.0299999999999869 0.0 765
+766 0.0325360298156738 0.0400000000000063 0.0400000000000063 0.0 766
+767 0.032012939453125 0.0300000000000011 0.0300000000000011 0.0 767
+768 0.031588077545166 0.0300000000000011 0.0300000000000011 0.0 768
+769 0.0773451328277588 0.0799999999999983 0.0799999999999983 0.0 769
+770 0.0328960418701172 0.0300000000000011 0.0300000000000011 0.0 770
+771 0.0350039005279541 0.0300000000000011 0.0300000000000011 0.0 771
+772 0.0326879024505615 0.039999999999992 0.039999999999992 0.0 772
+773 0.0326569080352783 0.0300000000000011 0.0300000000000011 0.0 773
+774 0.0326459407806396 0.0300000000000011 0.0300000000000011 0.0 774
+775 0.0321180820465088 0.0300000000000011 0.0300000000000011 0.0 775
+776 0.0343871116638184 0.0400000000000063 0.0400000000000063 0.0 776
+777 0.0758569240570068 0.0799999999999983 0.0799999999999983 0.0 777
+778 0.0349979400634766 0.0300000000000011 0.0300000000000011 0.0 778
+779 0.0329880714416504 0.0300000000000011 0.0300000000000011 0.0 779
+780 0.0330510139465332 0.039999999999992 0.039999999999992 0.0 780
+781 0.0328168869018555 0.0300000000000011 0.0300000000000011 0.0 781
+782 0.0347089767456055 0.0300000000000011 0.0300000000000011 0.0 782
+783 0.0322279930114746 0.0400000000000063 0.0400000000000063 0.0 783
+784 0.0752460956573486 0.0699999999999932 0.0699999999999932 0.0 784
+785 0.0333998203277588 0.0300000000000011 0.0300000000000011 0.0 785
+786 0.0327608585357666 0.0400000000000063 0.0400000000000063 0.0 786
+787 0.032987117767334 0.0300000000000011 0.0300000000000011 0.0 787
+788 0.0328860282897949 0.0299999999999869 0.0299999999999869 0.0 788
+789 0.0421018600463867 0.0500000000000114 0.0500000000000114 0.0 789
+790 0.0354950428009033 0.0300000000000011 0.0300000000000011 0.0 790
+791 0.0326569080352783 0.0299999999999869 0.0299999999999869 0.0 791
+792 0.072484016418457 0.0800000000000125 0.0800000000000125 0.0 792
+793 0.0332272052764893 0.0300000000000011 0.0300000000000011 0.0 793
+794 0.0329101085662842 0.0299999999999869 0.0299999999999869 0.0 794
+795 0.0368521213531494 0.0400000000000063 0.0400000000000063 0.0 795
+796 0.0328860282897949 0.0300000000000011 0.0300000000000011 0.0 796
+797 0.0351109504699707 0.039999999999992 0.039999999999992 0.0 797
+798 0.0322809219360352 0.0300000000000011 0.0300000000000011 0.0 798
+799 0.0317561626434326 0.0300000000000011 0.0300000000000011 0.0 799
+800 0.0744378566741943 0.0799999999999983 0.0799999999999983 0.0 800
+801 0.0369539260864258 0.0300000000000011 0.0300000000000011 0.0 801
+802 0.0338389873504639 0.0400000000000063 0.0400000000000063 0.0 802
+803 0.0353808403015137 0.0300000000000011 0.0300000000000011 0.0 803
+804 0.0346858501434326 0.039999999999992 0.039999999999992 0.0 804
+805 0.0324549674987793 0.0300000000000011 0.0300000000000011 0.0 805
+806 0.0338549613952637 0.0300000000000011 0.0300000000000011 0.0 806
+807 0.0316150188446045 0.0300000000000011 0.0300000000000011 0.0 807
+808 0.0747511386871338 0.0799999999999983 0.0799999999999983 0.0 808
+809 0.0340969562530518 0.0300000000000011 0.0300000000000011 0.0 809
+810 0.0330560207366943 0.0300000000000011 0.0300000000000011 0.0 810
+811 0.0328769683837891 0.0400000000000063 0.0400000000000063 0.0 811
+812 0.0325078964233398 0.0300000000000011 0.0300000000000011 0.0 812
+813 0.0323269367218018 0.0300000000000011 0.0300000000000011 0.0 813
+814 0.0345659255981445 0.039999999999992 0.039999999999992 0.0 814
+815 0.0393409729003906 0.0300000000000011 0.0300000000000011 0.0 815
+816 0.0769538879394531 0.0799999999999983 0.0799999999999983 0.0 816
+817 0.0329430103302002 0.0300000000000011 0.0300000000000011 0.0 817
+818 0.033038854598999 0.0400000000000063 0.0400000000000063 0.0 818
+819 0.0329020023345947 0.0300000000000011 0.0300000000000011 0.0 819
+820 0.0346760749816895 0.0299999999999869 0.0299999999999869 0.0 820
+821 0.0338461399078369 0.0400000000000063 0.0400000000000063 0.0 821
+822 0.0328898429870605 0.0300000000000011 0.0300000000000011 0.0 822
+823 0.0318491458892822 0.0300000000000011 0.0300000000000011 0.0 823
+824 0.0737371444702148 0.0799999999999983 0.0799999999999983 0.0 824
+825 0.032710075378418 0.0300000000000011 0.0300000000000011 0.0 825
+826 0.0330679416656494 0.0300000000000011 0.0300000000000011 0.0 826
+827 0.0366559028625488 0.039999999999992 0.039999999999992 0.0 827
+828 0.0327389240264893 0.0300000000000011 0.0300000000000011 0.0 828
+829 0.0343880653381348 0.0400000000000063 0.0400000000000063 0.0 829
+830 0.0338549613952637 0.0300000000000011 0.0300000000000011 0.0 830
+831 0.0315511226654053 0.0300000000000011 0.0300000000000011 0.0 831
+832 0.0741341114044189 0.0699999999999932 0.0699999999999932 0.0 832
+833 0.0351898670196533 0.0400000000000063 0.0400000000000063 0.0 833
+834 0.0331771373748779 0.0300000000000011 0.0300000000000011 0.0 834
+835 0.0344979763031006 0.039999999999992 0.039999999999992 0.0 835
+836 0.0324339866638184 0.0300000000000011 0.0300000000000011 0.0 836
+837 0.0324251651763916 0.0300000000000011 0.0300000000000011 0.0 837
+838 0.0322468280792236 0.0400000000000063 0.0400000000000063 0.0 838
+839 0.0315029621124268 0.0300000000000011 0.0300000000000011 0.0 839
+840 0.0842621326446533 0.0799999999999983 0.0799999999999983 0.0 840
+841 0.035271167755127 0.039999999999992 0.039999999999992 0.0 841
+842 0.0329780578613281 0.0300000000000011 0.0300000000000011 0.0 842
+843 0.0328261852264404 0.0300000000000011 0.0300000000000011 0.0 843
+844 0.032487154006958 0.0300000000000011 0.0300000000000011 0.0 844
+845 0.0325088500976562 0.0300000000000011 0.0300000000000011 0.0 845
+846 0.0327229499816895 0.0299999999999869 0.0299999999999869 0.0 846
+847 0.0770940780639648 0.0800000000000125 0.0800000000000125 0.0 847
+848 0.0332331657409668 0.0299999999999869 0.0299999999999869 0.0 848
+849 0.0330700874328613 0.0300000000000011 0.0300000000000011 0.0 849
+850 0.0333080291748047 0.0400000000000063 0.0400000000000063 0.0 850
+851 0.0327019691467285 0.0300000000000011 0.0300000000000011 0.0 851
+852 0.0325930118560791 0.0300000000000011 0.0300000000000011 0.0 852
+853 0.0363738536834717 0.039999999999992 0.039999999999992 0.0 853
+854 0.0318160057067871 0.0300000000000011 0.0300000000000011 0.0 854
+855 0.0756251811981201 0.0799999999999983 0.0799999999999983 0.0 855
+856 0.0331168174743652 0.0300000000000011 0.0300000000000011 0.0 856
+857 0.0332381725311279 0.0300000000000011 0.0300000000000011 0.0 857
+858 0.0331380367279053 0.0400000000000063 0.0400000000000063 0.0 858
+859 0.0359609127044678 0.0300000000000011 0.0300000000000011 0.0 859
+860 0.0326030254364014 0.0300000000000011 0.0300000000000011 0.0 860
+861 0.0326559543609619 0.039999999999992 0.039999999999992 0.0 861
+862 0.0313940048217773 0.0300000000000011 0.0300000000000011 0.0 862
+863 0.0721480846405029 0.0700000000000074 0.0700000000000074 0.0 863
+864 0.0329670906066895 0.0300000000000011 0.0300000000000011 0.0 864
+865 0.0358521938323975 0.039999999999992 0.039999999999992 0.0 865
+866 0.0417828559875488 0.0400000000000063 0.0400000000000063 0.0 866
+867 0.0335261821746826 0.039999999999992 0.039999999999992 0.0 867
+868 0.032412052154541 0.0300000000000011 0.0300000000000011 0.0 868
+869 0.0315959453582764 0.0300000000000011 0.0300000000000011 0.0 869
+870 0.0313148498535156 0.0300000000000011 0.0300000000000011 0.0 870
+871 0.0756919384002686 0.0799999999999983 0.0799999999999983 0.0 871
+872 0.033372163772583 0.0300000000000011 0.0300000000000011 0.0 872
+873 0.0342988967895508 0.0300000000000011 0.0300000000000011 0.0 873
+874 0.0328269004821777 0.039999999999992 0.039999999999992 0.0 874
+875 0.0327079296112061 0.0300000000000011 0.0300000000000011 0.0 875
+876 0.0325889587402344 0.0300000000000011 0.0300000000000011 0.0 876
+877 0.0320539474487305 0.0300000000000011 0.0300000000000011 0.0 877
+878 0.0315239429473877 0.0400000000000063 0.0400000000000063 0.0 878
+879 0.0760519504547119 0.0699999999999932 0.0699999999999932 0.0 879
+880 0.0334291458129883 0.0300000000000011 0.0300000000000011 0.0 880
+881 0.0349709987640381 0.0400000000000063 0.0400000000000063 0.0 881
+882 0.0328500270843506 0.0300000000000011 0.0300000000000011 0.0 882
+883 0.0326099395751953 0.0300000000000011 0.0300000000000011 0.0 883
+884 0.0326600074768066 0.039999999999992 0.039999999999992 0.0 884
+885 0.0347640514373779 0.0300000000000011 0.0300000000000011 0.0 885
+886 0.0317268371582031 0.0300000000000011 0.0300000000000011 0.0 886
+887 0.0741100311279297 0.0799999999999983 0.0799999999999983 0.0 887
+888 0.0328361988067627 0.0300000000000011 0.0300000000000011 0.0 888
+889 0.0330181121826172 0.0300000000000011 0.0300000000000011 0.0 889
+890 0.0327560901641846 0.0400000000000063 0.0400000000000063 0.0 890
+891 0.0344109535217285 0.0299999999999869 0.0299999999999869 0.0 891
+892 0.0412158966064453 0.0400000000000063 0.0400000000000063 0.0 892
+893 0.03265380859375 0.0400000000000063 0.0400000000000063 0.0 893
+894 0.0321509838104248 0.0299999999999869 0.0299999999999869 0.0 894
+895 0.0741260051727295 0.0700000000000074 0.0700000000000074 0.0 895
+896 0.0328559875488281 0.0300000000000011 0.0300000000000011 0.0 896
+897 0.0330810546875 0.039999999999992 0.039999999999992 0.0 897
+898 0.0366909503936768 0.0300000000000011 0.0300000000000011 0.0 898
+899 0.0327630043029785 0.0400000000000063 0.0400000000000063 0.0 899
+900 0.0326259136199951 0.0300000000000011 0.0300000000000011 0.0 900
+901 0.031965970993042 0.0300000000000011 0.0300000000000011 0.0 901
+902 0.0730900764465332 0.0699999999999932 0.0699999999999932 0.0 902
+903 0.0331590175628662 0.0400000000000063 0.0400000000000063 0.0 903
+904 0.0365490913391113 0.0300000000000011 0.0300000000000011 0.0 904
+905 0.0330300331115723 0.039999999999992 0.039999999999992 0.0 905
+906 0.0332710742950439 0.0300000000000011 0.0300000000000011 0.0 906
+907 0.0344429016113281 0.0300000000000011 0.0300000000000011 0.0 907
+908 0.032494068145752 0.0400000000000063 0.0400000000000063 0.0 908
+909 0.0318870544433594 0.0300000000000011 0.0300000000000011 0.0 909
+910 0.0748629570007324 0.0699999999999932 0.0699999999999932 0.0 910
+911 0.0334439277648926 0.0400000000000063 0.0400000000000063 0.0 911
+912 0.0351619720458984 0.0300000000000011 0.0300000000000011 0.0 912
+913 0.0328991413116455 0.039999999999992 0.039999999999992 0.0 913
+914 0.0326261520385742 0.0300000000000011 0.0300000000000011 0.0 914
+915 0.0323889255523682 0.0300000000000011 0.0300000000000011 0.0 915
+916 0.0323429107666016 0.0300000000000011 0.0300000000000011 0.0 916
+917 0.0321781635284424 0.039999999999992 0.039999999999992 0.0 917
+918 0.0845181941986084 0.0800000000000125 0.0800000000000125 0.0 918
+919 0.0327539443969727 0.0299999999999869 0.0299999999999869 0.0 919
+920 0.0328059196472168 0.0300000000000011 0.0300000000000011 0.0 920
+921 0.0324711799621582 0.0400000000000063 0.0400000000000063 0.0 921
+922 0.0323400497436523 0.0300000000000011 0.0300000000000011 0.0 922
+923 0.0321018695831299 0.0300000000000011 0.0300000000000011 0.0 923
+924 0.0361039638519287 0.039999999999992 0.039999999999992 0.0 924
+925 0.0316181182861328 0.0300000000000011 0.0300000000000011 0.0 925
+926 0.0748419761657715 0.0700000000000074 0.0700000000000074 0.0 926
+927 0.0332598686218262 0.039999999999992 0.039999999999992 0.0 927
+928 0.0332441329956055 0.0300000000000011 0.0300000000000011 0.0 928
+929 0.0330359935760498 0.0300000000000011 0.0300000000000011 0.0 929
+930 0.0358648300170898 0.0400000000000063 0.0400000000000063 0.0 930
+931 0.0327050685882568 0.0300000000000011 0.0300000000000011 0.0 931
+932 0.0349700450897217 0.039999999999992 0.039999999999992 0.0 932
+933 0.0338780879974365 0.0300000000000011 0.0300000000000011 0.0 933
+934 0.0738511085510254 0.0700000000000074 0.0700000000000074 0.0 934
+935 0.0332021713256836 0.039999999999992 0.039999999999992 0.0 935
+936 0.0359549522399902 0.0300000000000011 0.0300000000000011 0.0 936
+937 0.0331430435180664 0.0400000000000063 0.0400000000000063 0.0 937
+938 0.0340991020202637 0.0300000000000011 0.0300000000000011 0.0 938
+939 0.0326049327850342 0.0299999999999869 0.0299999999999869 0.0 939
+940 0.0325651168823242 0.0400000000000063 0.0400000000000063 0.0 940
+941 0.0317420959472656 0.0300000000000011 0.0300000000000011 0.0 941
+942 0.0775351524353027 0.0799999999999983 0.0799999999999983 0.0 942
+943 0.0417890548706055 0.0400000000000063 0.0400000000000063 0.0 943
+944 0.0358331203460693 0.0300000000000011 0.0300000000000011 0.0 944
+945 0.0328278541564941 0.039999999999992 0.039999999999992 0.0 945
+946 0.0325720310211182 0.0300000000000011 0.0300000000000011 0.0 946
+947 0.0324339866638184 0.0300000000000011 0.0300000000000011 0.0 947
+948 0.0318090915679932 0.0300000000000011 0.0300000000000011 0.0 948
+949 0.0755469799041748 0.0799999999999983 0.0799999999999983 0.0 949
+950 0.0346879959106445 0.0300000000000011 0.0300000000000011 0.0 950
+951 0.0329141616821289 0.039999999999992 0.039999999999992 0.0 951
+952 0.0330381393432617 0.0300000000000011 0.0300000000000011 0.0 952
+953 0.0330090522766113 0.0300000000000011 0.0300000000000011 0.0 953
+954 0.0340299606323242 0.0400000000000063 0.0400000000000063 0.0 954
+955 0.0325748920440674 0.0300000000000011 0.0300000000000011 0.0 955
+956 0.0356650352478027 0.039999999999992 0.039999999999992 0.0 956
+957 0.0749011039733887 0.0700000000000074 0.0700000000000074 0.0 957
+958 0.0347681045532227 0.0300000000000011 0.0300000000000011 0.0 958
+959 0.0330829620361328 0.039999999999992 0.039999999999992 0.0 959
+960 0.0334758758544922 0.0300000000000011 0.0300000000000011 0.0 960
+961 0.0329201221466064 0.0300000000000011 0.0300000000000011 0.0 961
+962 0.0358650684356689 0.0400000000000063 0.0400000000000063 0.0 962
+963 0.0327301025390625 0.0300000000000011 0.0300000000000011 0.0 963
+964 0.03354811668396 0.039999999999992 0.039999999999992 0.0 964
+965 0.0745160579681396 0.0700000000000074 0.0700000000000074 0.0 965
+966 0.0329270362854004 0.0300000000000011 0.0300000000000011 0.0 966
+967 0.0329809188842773 0.039999999999992 0.039999999999992 0.0 967
+968 0.0393757820129395 0.0300000000000011 0.0300000000000011 0.0 968
+969 0.0380401611328125 0.0300000000000011 0.0300000000000011 0.0 969
+970 0.0357730388641357 0.039999999999992 0.039999999999992 0.0 970
+971 0.0322329998016357 0.0300000000000011 0.0300000000000011 0.0 971
+972 0.0315341949462891 0.0300000000000011 0.0300000000000011 0.0 972
+973 0.0736370086669922 0.0799999999999983 0.0799999999999983 0.0 973
+974 0.0357208251953125 0.0300000000000011 0.0300000000000011 0.0 974
+975 0.0331871509552002 0.0400000000000063 0.0400000000000063 0.0 975
+976 0.0338621139526367 0.0300000000000011 0.0300000000000011 0.0 976
+977 0.03261399269104 0.0299999999999869 0.0299999999999869 0.0 977
+978 0.0324549674987793 0.0300000000000011 0.0300000000000011 0.0 978
+979 0.0323319435119629 0.0400000000000063 0.0400000000000063 0.0 979
+980 0.0314400196075439 0.0300000000000011 0.0300000000000011 0.0 980
+981 0.0762598514556885 0.0699999999999932 0.0699999999999932 0.0 981
+982 0.0347981452941895 0.0400000000000063 0.0400000000000063 0.0 982
+983 0.0366230010986328 0.0400000000000063 0.0300000000000011 0.01 983
+984 0.0328900814056396 0.039999999999992 0.039999999999992 0.0 984
+985 0.032588005065918 0.0300000000000011 0.0300000000000011 0.0 985
+986 0.0326781272888184 0.0300000000000011 0.0300000000000011 0.0 986
+987 0.0319411754608154 0.0300000000000011 0.0300000000000011 0.0 987
+988 0.0342800617218018 0.0400000000000063 0.0400000000000063 0.0 988
+989 0.0760009288787842 0.0699999999999932 0.0699999999999932 0.0 989
+990 0.0328078269958496 0.0400000000000063 0.0400000000000063 0.0 990
+991 0.0330369472503662 0.0300000000000011 0.0300000000000011 0.0 991
+992 0.0326659679412842 0.0300000000000011 0.0300000000000011 0.0 992
+993 0.0325169563293457 0.0300000000000011 0.0300000000000011 0.0 993
+994 0.0384469032287598 0.039999999999992 0.039999999999992 0.0 994
+995 0.035956859588623 0.0400000000000063 0.0400000000000063 0.0 995
+996 0.075498104095459 0.0699999999999932 0.0699999999999932 0.0 996
+997 0.0330910682678223 0.0300000000000011 0.0300000000000011 0.0 997
+998 0.0327069759368896 0.0300000000000011 0.0300000000000011 0.0 998
+999 0.0329201221466064 0.0300000000000011 0.0300000000000011 0.0 999
+1000 0.0352790355682373 0.039999999999992 0.039999999999992 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log
new file mode 100644
index 000000000..f349db14e
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log
@@ -0,0 +1,82 @@
+========================== 2009-04-01T16:46:56 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'ParserBenchmarkRails' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+ParserBenchmarkRails#parser:
+ real total user system
+sum 38.690086126 38.620000000 38.610000000 0.010000000
+min 0.031255007 0.030000000 0.030000000 0.000000000
+std- 0.025022178 0.024277709 0.024265187 -0.000306228
+mean 0.038690086 0.038620000 0.038610000 0.000010000
+std+ 0.052357994 0.052962291 0.052954813 0.000326228
+max 0.083594084 0.090000000 0.090000000 0.010000000
+std 0.013667908 0.014342291 0.014344813 0.000316228
+std% 35.326641197 37.136951469 37.153104057 3162.277660168
+harm 0.035964441 0.035345750 0.035335342 nan
+geo 0.037048388 0.036703287 0.036692729 0.000000000
+q1 0.032610178 0.030000000 0.030000000 0.000000000
+med 0.033129930 0.030000000 0.030000000 0.000000000
+q3 0.035388470 0.040000000 0.040000000 0.000000000
+ 1000 25.84641 0.038690086
+ calls calls/sec secs/call
+
+ 0.08098 -|*
+ 0.07574 -|*****
+ 0.07051 -|**
+ 0.06528 -|
+ 0.06004 -|
+ 0.05481 -|
+ 0.04957 -|
+ 0.04434 -|*
+ 0.03911 -|***
+ 0.03387 -|**************************************************
+
+Outliers detected with box plot algo (median=0.03313, iqr=0.00278, factor=3.00):
+high=47 very_high=124
+
+Ljung-Box statistics: q=5276.52020 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+ParserBenchmarkRails#parser:
+ real total user system
+sum 38.814780235 38.730000000 38.710000000 0.020000000
+min 0.031314850 0.030000000 0.030000000 0.000000000
+std- 0.024801114 0.023975177 0.023956914 -0.000426990
+mean 0.038814780 0.038730000 0.038710000 0.000020000
+std+ 0.052828447 0.053484823 0.053463086 0.000466990
+max 0.085337162 0.090000000 0.090000000 0.010000000
+std 0.014013666 0.014754823 0.014753086 0.000446990
+std% 36.103943796 38.096625621 38.111821850 2234.948544149
+harm 0.035975867 0.035320781 0.035304155 nan
+geo 0.037101026 0.036725170 0.036706415 0.000000000
+q1 0.032611191 0.030000000 0.030000000 0.000000000
+med 0.033082008 0.030000000 0.030000000 0.000000000
+q3 0.035308182 0.040000000 0.040000000 0.000000000
+ 1000 25.76338 0.038814780
+ calls calls/sec secs/call
+
+ 0.08264 -|*
+ 0.07723 -|***
+ 0.07183 -|****
+ 0.06643 -|
+ 0.06103 -|
+ 0.05562 -|
+ 0.05022 -|
+ 0.04482 -|
+ 0.03942 -|**
+ 0.03402 -|**************************************************
+
+Outliers detected with box plot algo (median=0.03308, iqr=0.00270, factor=3.00):
+high=43 very_high=127
+
+Ljung-Box statistics: q=3451.96535 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:48:17 CEST ===========================
+
+Writing measurement data file '/data/scm/json/benchmarks/data/ParserBenchmarkRails#parser.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/ParserBenchmarkRails#parser-autocorrelation.dat'.
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat
new file mode 100644
index 000000000..f32d17f64
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.0162844496545126
+3 -0.0217599649154442
+4 -0.0158858309903125
+5 -0.0200808613960338
+6 -0.0259529053941171
+7 -0.0301975414696179
+8 -0.0250675870796551
+9 -0.0285985946623563
+10 -0.0307680893851068
+11 -0.0288265198488383
+12 -0.0271571829024007
+13 -0.0301250298936937
+14 -0.0226181132137933
+15 -0.0294060805772707
+16 -0.0337045155176462
+17 -0.0318194303001094
+18 -0.0292065217707409
+19 -0.0302440574139168
+20 -0.0358556403201638
+21 -0.0277391993235684
+22 -0.0302464277108834
+23 -0.0324555396059655
+24 -0.0281812881852202
+25 -0.022546962678309
+26 -0.0303404504420409
+27 -0.0284646539775073
+28 -0.028171618962038
+29 -0.028565092958004
+30 -0.0291690975621738
+31 -0.0281712395665202
+32 -0.0238379726807203
+33 -0.0294236975427878
+34 -0.0208882165043777
+35 -0.0209638384059497
+36 -0.0161683101478742
+37 -0.0198997973165107
+38 0.435257874984686
+39 0.458604874110641
+40 0.0237621756843474
+41 -0.0234662943892799
+42 -0.0132052112478708
+43 -0.0232550385773748
+44 -0.0265177529080711
+45 -0.0295042353148468
+46 -0.0248888514316335
+47 -0.0267548816775851
+48 -0.0301945196949619
+49 -0.0256866572019894
+50 -0.0261353739728522
+51 -0.0245073925246022
+52 -0.0267569882760944
+53 -0.0290607941928704
+54 -0.030612533159521
+55 -0.0324276179436348
+56 -0.0294828176269951
+57 -0.0302074451537584
+58 -0.0308924549200688
+59 -0.0272193925170758
+60 -0.0310943839021242
+61 -0.0282313865089381
+62 -0.0273610010809688
+63 -0.0250425898280312
+64 -0.0269825367863249
+65 -0.030293343792881
+66 -0.0285829676042798
+67 -0.0259669504450748
+68 -0.028423496235617
+69 -0.0286177493293173
+70 -0.0239113501418138
+71 -0.0226730211754719
+72 -0.0216274261753708
+73 -0.0175668930237053
+74 -0.016987706219544
+75 0.281860410751591
+76 0.25297384526533
+77 0.306701827698567
+78 0.0194414665764478
+79 -0.0243796783451221
+80 -0.0146952129609066
+81 -0.0229107323358625
+82 -0.02476592170182
+83 -0.0262150166126129
+84 -0.0233100425521956
+85 -0.0263455380004048
+86 -0.0253912832942502
+87 -0.0245622723440493
+88 -0.0225180917608497
+89 -0.0292400873158552
+90 -0.0255215645749941
+91 -0.02586826799364
+92 -0.0315849501291156
+93 -0.0319172083894574
+94 -0.0270097346640797
+95 -0.0278372423315524
+96 -0.0306627817548168
+97 -0.0258127345919013
+98 -0.0256340599415291
+99 -0.0270400681439884
+100 -0.0271863267200993
+101 -0.0223938908865392
+102 -0.0269881932444538
+103 -0.0286873034752439
+104 -0.0268085508356207
+105 -0.0250531313567446
+106 -0.0272655637793525
+107 -0.025337879180265
+108 -0.0187629329024022
+109 -0.0223207452723449
+110 -0.0185411706942619
+111 -0.0173591745979572
+112 0.212695002726406
+113 0.176100874201248
+114 0.181136796368959
+115 0.217985852640763
+116 0.0189775496631967
+117 -0.022070943088181
+118 -0.0198858953377023
+119 -0.0228614172431068
+120 -0.0222026156678026
+121 -0.026520195666479
+122 -0.0234557540286227
+123 -0.0222031583717324
+124 -0.0222512221835737
+125 -0.021957746397543
+126 -0.0268087376735115
+127 -0.0273093034119188
+128 -0.0245103124601919
+129 -0.0263347996406397
+130 -0.0312278911250281
+131 -0.0305253475957555
+132 -0.0261963547332742
+133 -0.0274617303870749
+134 -0.0243124109128202
+135 -0.0262235240356464
+136 -0.0239085429783869
+137 -0.0287564527494295
+138 -0.0249876754449911
+139 -0.0197254570216898
+140 -0.0266321665979349
+141 -0.0266120249498159
+142 -0.0248056589461695
+143 -0.0221257923724317
+144 -0.024933311620115
+145 -0.0196549868192828
+146 -0.0207328295283175
+147 -0.0200920805093202
+148 -0.0173063409154936
+149 0.175654369820573
+150 0.0996760311141833
+151 0.142600408151497
+152 0.175452601030937
+153 0.135092911757026
+154 0.015666937752102
+155 -0.0206532136473774
+156 -0.0225660207506427
+157 -0.0220914796170182
+158 -0.0212748341146881
+159 -0.0211831500010699
+160 -0.0199475712567065
+161 -0.0198090360921562
+162 -0.023406680899725
+163 -0.0238338433694836
+164 -0.0256046135139069
+165 -0.0242954498172123
+166 -0.0258660266004111
+167 -0.0269522804569596
+168 -0.0297189079034543
+169 -0.0286038809350082
+170 -0.0243084923873978
+171 -0.0257061323195295
+172 -0.0223670193406507
+173 -0.0230581197957092
+174 -0.0259009025367238
+175 -0.0257560518519552
+176 -0.023090387902458
+177 -0.0203272749388722
+178 -0.0249609826618749
+179 -0.0273749728570153
+180 -0.0232630581935224
+181 -0.0184293362184845
+182 -0.0227584354744901
+183 -0.0189661792281422
+184 -0.0231761259199879
+185 -0.0160634507453316
+186 0.135019288045276
+187 0.0659826079670161
+188 0.135226742645858
+189 0.0605819921567246
+190 0.212733971580529
+191 0.0594662500140067
+192 0.0196656779913871
+193 -0.0198404313214719
+194 -0.0234794798625044
+195 -0.020228110441232
+196 -0.0239711309581977
+197 -0.0213996457420545
+198 -0.0198198390682184
+199 -0.01837620236681
+200 -0.0252904949340885
+201 -0.0209512502626924
+202 -0.0221289412896572
+203 -0.027427908823154
+204 -0.0239458508129429
+205 -0.0247739743326578
+206 -0.0286549975885985
+207 -0.0274257626339078
+208 -0.0209339353182737
+209 -0.0217393583916566
+210 -0.0210676960785699
+211 -0.0244413756252707
+212 -0.0230553337146913
+213 -0.0249257698225569
+214 -0.0209961742884786
+215 -0.0187589223013789
+216 -0.0231441227112562
+217 -0.0256128148841961
+218 -0.0189996873737005
+219 -0.0186032704051841
+220 -0.024896664851184
+221 -0.0154586003532082
+222 -0.016622451190913
+223 0.10528876877612
+224 0.0616792976302413
+225 0.105381487366677
+226 0.0698781422585297
+227 0.0526859362556473
+228 0.252676201792791
+229 -0.0158777502042575
+230 0.0182465167560402
+231 -0.0189176416281867
+232 -0.0223947199370044
+233 -0.0187514827185257
+234 -0.0221421724471967
+235 -0.0189743029127782
+236 -0.0169132380201002
+237 -0.0244680755831848
+238 -0.0218734587520481
+239 -0.0186581914256442
+240 -0.026130481429307
+241 -0.0259336502285975
+242 -0.0243902837001253
+243 -0.0237554283001736
+244 -0.0260009623695832
+245 -0.0207407789914843
+246 -0.0195359028544637
+247 -0.0255947955165555
+248 -0.0192742650096326
+249 -0.02317092217707
+250 -0.0220804794353722
+251 -0.0231629589394634
+252 -0.01815715732966
+253 -0.0168380962328354
+254 -0.0240542649472067
+255 -0.0203501818767696
+256 -0.0171903409693322
+257 -0.0223563828072372
+258 -0.019940801207438
+259 -0.0169291109293721
+260 0.0608679690137956
+261 0.0647081802938391
+262 0.100717554509044
+263 0.0239520468414546
+264 0.0698991274638046
+265 0.0905559637290508
+266 0.178937593759438
+267 0.0219556620146547
+268 -0.0179147413001344
+269 -0.0178917963661612
+270 -0.0182758940871145
+271 -0.0193697306175885
+272 -0.0204671858114412
+273 -0.0171408579409368
+274 -0.0182409872271859
+275 -0.0211824035120345
+276 -0.0235000843866101
+277 -0.0202924958876639
+278 -0.0248505379989764
+279 -0.0220226888126351
+280 -0.0245762806223724
+281 -0.0252042782672907
+282 -0.0216801171879857
+283 -0.0210832689857307
+284 -0.0192213765705103
+285 -0.0220158312276208
+286 -0.0210439300781706
+287 -0.0209875936956392
+288 -0.0206630619760563
+289 -0.0216178400849402
+290 -0.0196909009290242
+291 -0.0174466524982222
+292 -0.0194381489522717
+293 -0.0214825111756293
+294 -0.0174953699462574
+295 -0.022683312446492
+296 -0.0180848133159409
+297 0.0254210486852796
+298 0.0654897828406648
+299 0.0986617374019184
+300 0.0211653698985848
+301 0.03519273754644
+302 0.0994229074199349
+303 0.0569927637089909
+304 0.144208154176788
+305 0.025634547369068
+306 -0.0192573217261146
+307 -0.0134291320771703
+308 -0.0186225883596377
+309 -0.0192924485153545
+310 -0.0212788468915268
+311 -0.0142437809504701
+312 -0.0164846225770394
+313 -0.0230149302918458
+314 -0.0226862925961795
+315 -0.0182027935965825
+316 -0.0223705185857763
+317 -0.0216288175818581
+318 -0.023788812144948
+319 -0.0211845254108688
+320 -0.0222450219207216
+321 -0.0187600056472826
+322 -0.0187902396176198
+323 -0.0195634679662719
+324 -0.0194501685935753
+325 -0.0190333705450752
+326 -0.0204687388385914
+327 -0.0200297119812042
+328 -0.0157733409782519
+329 -0.0164084747060388
+330 -0.0203726921633815
+331 -0.0190072727071644
+332 -0.018178093048503
+333 -0.0159556448940802
+334 -0.013791115173629
+335 0.066803434121925
+336 0.0987477853719105
+337 0.0244839447881098
+338 0.031202350625353
+339 0.0196479023204289
+340 0.141228694216934
+341 0.0175097275718119
+342 0.105954014939689
+343 0.0253759965520281
+344 -0.0116344384079018
+345 -0.0169720879403278
+346 -0.0193914989969224
+347 -0.019089553717436
+348 -0.0156466666300242
+349 -0.0156456435188142
+350 -0.0181150256079739
+351 -0.0223467109479219
+352 -0.0214801527438239
+353 -0.019082414276624
+354 -0.0178557951992504
+355 -0.0228090603341919
+356 -0.0204157042896649
+357 -0.0221410379160091
+358 -0.0199425390855694
+359 -0.018118375890382
+360 -0.0150454629858717
+361 -0.0183129793049915
+362 -0.0204645202101881
+363 -0.0174866608721183
+364 -0.0154096032136416
+365 -0.0179571796427601
+366 -0.0134888272478049
+367 -0.0176851479177383
+368 -0.0193002648975602
+369 -0.0189078544862062
+370 -0.0144320773947494
+371 -0.011260111407965
+372 0.0215572902035114
+373 0.100524914108148
+374 0.0219084872557524
+375 0.0354856193633486
+376 0.0229331908137013
+377 0.0626022532746132
+378 0.0969282134458387
+379 0.0189295482330605
+380 0.0617228180411101
+381 0.0425011894350961
+382 -0.0181588301030469
+383 -0.0171392718695313
+384 -0.0178324205119472
+385 -0.0156705733083666
+386 -0.0146663905947814
+387 -0.0173238224981501
+388 -0.0182073556277454
+389 -0.0204929470007114
+390 -0.0197959652809142
+391 -0.0178487074910014
+392 -0.0191264027449998
+393 -0.0190642154579731
+394 -0.0203166425576961
+395 -0.0188935352488649
+396 -0.0201224460748975
+397 -0.0141844683481906
+398 -0.0139898462786534
+399 -0.0198574924165857
+400 -0.0193966985699962
+401 -0.0164995946916847
+402 -0.0117403653932513
+403 -0.0158736541749091
+404 -0.0156974457240632
+405 -0.0181167763150603
+406 -0.0166788566307347
+407 -0.0180975807807039
+408 -0.0102853501517902
+409 -0.0153437162204268
+410 0.0979710078754703
+411 0.021440871598228
+412 0.0371454198455733
+413 0.0253571102027273
+414 0.0227276443059152
+415 0.101915236805497
+416 0.0635405858848997
+417 0.0221661378891733
+418 0.0270996559475876
+419 0.0299928379379863
+420 -0.0177873081118276
+421 -0.0176051191151391
+422 -0.0117281303593379
+423 -0.013306366759538
+424 -0.0189331445465995
+425 -0.015865418271051
+426 -0.0158088029122447
+427 -0.0187419731224742
+428 -0.0196315339939659
+429 -0.0154861746215526
+430 -0.0178360876528894
+431 -0.0193319397318428
+432 -0.0177297199409179
+433 -0.0183554889687674
+434 -0.0184208823533688
+435 -0.0122396577357641
+436 -0.0123492917667745
+437 -0.0175439953526604
+438 -0.0186111019818843
+439 -0.00971961709959576
+440 -0.0143165389296264
+441 -0.0164005922843576
+442 -0.0132806214338558
+443 -0.0153897804907211
+444 -0.0149226610955752
+445 -0.0161580725559834
+446 -0.0117152404534544
+447 0.0615441203316674
+448 0.0305601601558433
+449 0.0350768852591798
+450 0.026542742159402
+451 0.0220127678478309
+452 0.0626392669570081
+453 0.0651304401691263
+454 0.066454641622587
+455 0.0262150734837409
+456 -0.00708907991883236
+457 0.0224899268420003
+458 -0.0167773922489159
+459 -0.0122552342075114
+460 -0.00995490362784316
+461 -0.0177867736928084
+462 -0.018356900570592
+463 -0.0148615016520588
+464 -0.0148993799153167
+465 -0.0174924308469937
+466 -0.0139062884527871
+467 -0.0169155699762039
+468 -0.0176151358623509
+469 -0.018529629596926
+470 -0.0171234732753041
+471 -0.0168099527879603
+472 -0.0156260281448611
+473 -0.00797509847063728
+474 -0.0133340343499158
+475 -0.0168972023036313
+476 -0.0113479057717735
+477 -0.011961189414667
+478 -0.0152906312825423
+479 -0.0155644967932215
+480 -0.014521215308577
+481 -0.0128622749529332
+482 -0.0141888481401611
+483 -0.0161851374362205
+484 0.0249171103679042
+485 0.0252660269585891
+486 0.04058752667661
+487 0.0258186659046098
+488 0.0275225862715478
+489 0.0600609383170762
+490 0.0261628314767615
+491 0.0691832852264942
+492 0.0694273292329222
+493 -0.0138918138869676
+494 0.0281497919118445
+495 -0.0119297582637103
+496 -0.012445722104394
+497 -0.0152365517205078
+498 -0.0119682770076481
+499 -0.0168102415511826
+500 -0.0132602321806542
+501 -0.0162749170085761
+502 -0.0157874247447598
+503 -0.0143314681097962
+504 -0.0151373301279301
+505 -0.0162736515060562
+506 -0.0170997245763158
+507 -0.0169869002644868
+508 -0.0154802036412146
+509 -0.013854038240204
+510 -0.0151485070183504
+511 -0.00869753773999478
+512 -0.0140737135993086
+513 -0.0107650436900842
+514 -0.0132962323606625
+515 -0.0136429601231209
+516 -0.0155057052143115
+517 -0.0134332443796962
+518 -0.0123129109820222
+519 -0.0142180018449239
+520 -0.0150177576005828
+521 -0.0161252950528183
+522 0.0264250568660815
+523 0.0408783547796429
+524 0.031194610084782
+525 0.0288728641454938
+526 0.0641676357746677
+527 0.0239853005273055
+528 0.0300072680816552
+529 0.0736945294998491
+530 0.028012956538805
+531 0.0259732719006342
+532 -0.00990928630211568
+533 -0.0087387605842169
+534 -0.0137746654626445
+535 -0.0141412876283256
+536 -0.010029400862279
+537 -0.0150007749725246
+538 -0.0121537714685441
+539 -0.0144839491934252
+540 -0.0137950679588151
+541 -0.0155551392121605
+542 -0.0128911409577839
+543 -0.0152961676840741
+544 -0.0161369826243907
+545 -0.0148527760929147
+546 -0.013870773562618
+547 -0.0137226194734097
+548 -0.0113656379568685
+549 -0.00845176980813718
+550 -0.00933414448879775
+551 -0.0133281147011412
+552 -0.0122165348746803
+553 -0.0127303042014063
+554 -0.0128365256419083
+555 -0.0108554430140539
+556 -0.0130979026563391
+557 -0.0146601295923265
+558 -0.0142350683827201
+559 -0.0142543119821695
+560 0.0401428501979482
+561 0.0303680401593431
+562 0.0331394093682309
+563 0.0624790224369076
+564 0.0289179010523467
+565 0.0269736807010873
+566 0.0294760499995686
+567 0.0747760714226703
+568 -0.00997931599998069
+569 0.0266265362948006
+570 -0.00721129513546175
+571 -0.0127302032302545
+572 -0.0136267162889966
+573 -0.0142066353702017
+574 -0.00991164196188114
+575 -0.00996166830564141
+576 -0.0131573176468314
+577 -0.011434640474236
+578 -0.0148706383443339
+579 -0.0134129396964773
+580 -0.0113895405779604
+581 -0.0153189154780471
+582 -0.0150199426352393
+583 -0.0124159111813235
+584 -0.0113435779166304
+585 -0.00971798266945597
+586 -0.0123095479872052
+587 -0.00269803517441434
+588 -0.0127678761964892
+589 -0.0119102487047385
+590 -0.0115043060345689
+591 -0.0106658386617928
+592 -0.0106600448522206
+593 -0.011659738958058
+594 -0.01106663155357
+595 -0.0120386853981255
+596 -0.0127481791971609
+597 -0.00537363830084228
+598 0.0314689202072348
+599 0.032654353162099
+600 0.0639978451412954
+601 0.0283236694256126
+602 0.0317693531084274
+603 0.027542761382292
+604 0.02698217718116
+605 0.0361622659750207
+606 0.0320247155873757
+607 -0.00813391858463189
+608 -0.0089593887672382
+609 -0.0119010871906848
+610 -0.0124880990128273
+611 -0.0121364351320394
+612 -0.00971670182824936
+613 -0.0102177605462013
+614 -0.00898879705064074
+615 -0.013228009191572
+616 -0.012444080731119
+617 -0.0125819657984578
+618 -0.0106457926520048
+619 -0.0137483281342092
+620 -0.0135504808411789
+621 -0.0114612446080959
+622 -0.00821287310238534
+623 -0.0104378096847016
+624 -0.00593940096538122
+625 -0.00945814044610632
+626 -0.0101588782962685
+627 -0.0111243964828339
+628 -0.00950644868084363
+629 -0.00843830240019815
+630 -0.0122240327224205
+631 -0.0121911767968013
+632 -0.0106320087647656
+633 -0.0091538953720945
+634 -0.00833412226908421
+635 -0.00479924172227301
+636 0.0335905043465549
+637 0.0695170041831408
+638 0.0270790255635657
+639 0.0321106733648098
+640 0.0313560382377176
+641 0.0282951882582407
+642 0.0286246187371558
+643 -0.0063978013638528
+644 0.0304346790629898
+645 -0.0101048058759809
+646 -0.00730849974907403
+647 -0.010438994695384
+648 -0.0112449830718235
+649 -0.0113664024129399
+650 -0.00608318090180963
+651 -0.00840928737010642
+652 -0.0108644455614179
+653 -0.010794161792753
+654 -0.0114845408302525
+655 -0.0109919991005556
+656 -0.00951218627321188
+657 -0.0117973727840752
+658 -0.0116097431098058
+659 -0.00670996120713619
+660 -0.0087566923862707
+661 -0.00768893771119313
+662 -0.00792227368859181
+663 -0.0072108108823534
+664 -0.00863418502611649
+665 -0.00848535095588438
+666 -0.00750079906528092
+667 -0.00902829779223548
+668 -0.0104029286615084
+669 -0.00972615613411735
+670 -0.00909686229570264
+671 -0.00489514770930345
+672 -0.00695727933803365
+673 -0.00291923866250643
+674 0.0692585752006358
+675 0.0338324022772704
+676 0.0312432314045003
+677 0.0301206988202449
+678 0.0318944076704347
+679 0.0308282822415121
+680 -0.00918999100874598
+681 0.0315959820198552
+682 -0.00790274938593563
+683 -0.00905781884326524
+684 -0.00978094259623583
+685 -0.00713889275972127
+686 -0.00961735482798763
+687 -0.00462928907883874
+688 -0.00708992015115961
+689 -0.0103894616795413
+690 -0.00975021468154266
+691 -0.0104107842274988
+692 -0.00992064479267111
+693 -0.0101176695314485
+694 -0.0104463991054629
+695 -0.00746960217815067
+696 -0.00654218027790495
+697 -0.0072389149982618
+698 -0.00618599001631964
+699 -0.00987786436517789
+700 -0.00673370918278097
+701 -0.00741759762031304
+702 -0.00541549527991575
+703 -0.00791781857083014
+704 -0.00787381692952382
+705 -0.00794395001729855
+706 -0.00931768673974245
+707 -0.00885678465821695
+708 -0.0052821815238511
+709 -0.00521693921004783
+710 -0.00576093393541424
+711 0.0319052243530813
+712 0.0335565990727355
+713 0.0359823614765673
+714 0.0310776016839443
+715 0.0324813323954347
+716 0.0341278653693179
+717 -0.00771207564784067
+718 0.0276493611582263
+719 -0.00348763960636761
+720 -0.00758712167000528
+721 -0.00857064851604708
+722 -0.00851623359127258
+723 -0.00860306547563313
+724 -0.00613401688706074
+725 -0.00513329277378087
+726 -0.00905815149013341
+727 -0.00906250727280879
+728 -0.00928036762666381
+729 -0.00830114918655625
+730 -0.00888782794632727
+731 -0.00904256610543205
+732 -0.00874136315610037
+733 -0.00531018786452449
+734 -0.00629165130613466
+735 -0.00755517067228936
+736 -0.00836182239325517
+737 -0.00809350876481861
+738 -0.00404124535306633
+739 -0.00561644195626163
+740 -0.00642305805867293
+741 -0.00816305467996883
+742 -0.00843581049472936
+743 -0.00672325206596123
+744 -0.00617215358093702
+745 -0.00402751925690743
+746 -0.00479725155053775
+747 -0.00342071760962384
+748 -0.0076001254677333
+749 0.0344911275393927
+750 0.0357890953530814
+751 0.0369236838641285
+752 0.0337953594669526
+753 0.0341196656886643
+754 -0.00659802662549373
+755 0.0315371138736742
+756 -0.00562959157006591
+757 -0.00365306265936607
+758 -0.00637937791804702
+759 -0.00728163692006943
+760 -0.00728167255033979
+761 -0.00486863763712198
+762 -0.00700194438994883
+763 -0.00488445712486066
+764 -0.00785107429883577
+765 -0.00743663889427734
+766 -0.0075555414143233
+767 -0.0082175974779749
+768 -0.00762712314452127
+769 -0.00716801816399294
+770 -0.00420432905589099
+771 -0.00646377431872973
+772 -0.00627655191972345
+773 -0.0068281800863105
+774 -0.00646314628967681
+775 -0.00545387418053753
+776 -0.00272565261231244
+777 -0.00644191975512085
+778 -0.00690509982226062
+779 -0.00709925853315763
+780 -0.00694005333594523
+781 -0.00625875545170498
+782 -0.00292200977585102
+783 -0.00321016024715532
+784 -0.00336849507857711
+785 -0.00596633161271771
+786 -0.00616166058124168
+787 0.03411477548233
+788 0.03523911486873
+789 0.039313174460712
+790 0.0358510918513492
+791 -0.00378913539308921
+792 0.0304194265074042
+793 -0.0038004308918757
+794 -0.00607189262016905
+795 -0.00587612619804128
+796 -0.00189219359140836
+797 -0.00616375618998826
+798 -0.00388685360401677
+799 -0.00556254294258616
+800 -0.00661778351426878
+801 -0.00382440352172051
+802 -0.00647820073687594
+803 -0.00624655145167987
+804 -0.00667068925870065
+805 -0.00648578196572712
+806 -0.0051558107815927
+807 -0.00231291615968645
+808 -0.00505615473087768
+809 -0.00587295803700975
+810 -0.00558124863643099
+811 -0.00536491992472214
+812 -0.00398836838292933
+813 -0.00377202632549738
+814 -0.002354118299516
+815 -0.00450512819274966
+816 -0.0052767354763421
+817 -0.00524186198269607
+818 -0.00538929450465706
+819 -0.00531625688326681
+820 -0.00559074601189695
+821 -0.00531052145605409
+822 -0.00506016636387018
+823 -0.00558340516310152
+824 -0.00480493075033995
+825 0.0322805865937449
+826 0.0378874582814526
+827 0.0388905020209905
+828 0.00140630493053477
+829 0.0327652229435057
+830 -0.00223687990639532
+831 -0.00415072629779562
+832 -0.00449816632891999
+833 -0.00471900257056604
+834 -0.00380655567933039
+835 -0.00208013080352473
+836 -0.00399065266148802
+837 -0.00487092683399181
+838 -0.0050959015942598
+839 -0.00191592007441914
+840 -0.00461100733700934
+841 -0.00502472638398927
+842 -0.00505288732904903
+843 -0.00438730255591126
+844 -0.00306177948534003
+845 -0.00375916415653544
+846 -0.00446006819331235
+847 -0.00529861753336898
+848 -0.00366324407821308
+849 -0.00260207768467577
+850 -0.00307568973842944
+851 -0.00423298618954815
+852 -0.00402026548184328
+853 -0.00146181843080695
+854 -0.00349341567107831
+855 -0.00433554634082064
+856 -0.00410204223433599
+857 -0.00434967848256952
+858 -0.00421703547450881
+859 -0.00382881572564153
+860 -0.00423970806851707
+861 -0.00437449172653197
+862 -0.00400502122442197
+863 0.0346819215614161
+864 0.0348750856830455
+865 -0.00265543722265669
+866 0.0380644512814575
+867 -5.14244684871617e-05
+868 -0.0029850292925082
+869 -0.00280199446175912
+870 -0.00310596389994767
+871 -0.00343511488292023
+872 -0.000171378148703489
+873 -0.0024459240224584
+874 -0.00327675207097342
+875 -0.00348581260906698
+876 -0.00355868259309655
+877 -0.000312461719204031
+878 -0.00355336474543735
+879 -0.00357392139745643
+880 -0.00290172241076185
+881 -0.00208381746845654
+882 -0.00191420039525358
+883 -0.00288084255403359
+884 -0.00402165110428679
+885 -0.00363823711845451
+886 -0.00105719975984341
+887 -0.00194304900141352
+888 -0.0028117193732005
+889 -0.00272354659953838
+890 -0.00269119684418979
+891 -0.0024739833326293
+892 -0.00264720107421195
+893 -0.00266281337322763
+894 -0.00271486287490391
+895 -0.0025966883492992
+896 -0.00275998355842941
+897 -0.00285830804400797
+898 -0.00283220277180079
+899 -0.00268773055778214
+900 -0.00284073923200707
+901 0.0353145424004993
+902 -0.00160304708129049
+903 0.0348425254145825
+904 2.8677502125498e-05
+905 0.000437164769156674
+906 -0.000353406460783275
+907 -0.00195469155311098
+908 -0.00181504012345376
+909 0.000213017105712491
+910 -0.001310254306005
+911 -0.00211504011023419
+912 -0.00220453472901432
+913 -0.00221445718259423
+914 -0.0019385529058544
+915 -0.00242106879847995
+916 0.000515093602106525
+917 -0.00157522783064606
+918 -0.000809182215147043
+919 -0.00125292469032103
+920 -0.00240883966759777
+921 -0.0021786367875747
+922 -0.00240937489397921
+923 -0.00116795158553355
+924 -0.000727426386542781
+925 -0.00133194403721344
+926 -0.00124546108708765
+927 -0.00148107783605636
+928 -0.00142616980555449
+929 -0.00146243841366756
+930 -0.0015283737803334
+931 -0.00154540562504725
+932 -0.00155805559628689
+933 -0.00151938623493131
+934 -0.00165541232298659
+935 -0.00168144891364875
+936 -0.00132559687940882
+937 -0.00160394278309398
+938 -0.0017363807642805
+939 -0.00167995411949275
+940 0.0354478346047755
+941 0.00106969481951657
+942 -0.000561313854486038
+943 -0.000457998303574142
+944 -0.000583885106294125
+945 -0.000525159904309248
+946 -0.000517315333414318
+947 -0.000721221933781515
+948 -0.000829549124890304
+949 -8.82882583545919e-05
+950 -0.000766770294365053
+951 -0.000811881521540676
+952 -0.000891788154480318
+953 -0.000934560208414364
+954 -0.00079422177360351
+955 -0.000838129010273254
+956 -0.000963325512884482
+957 -0.00102235934683932
+958 -0.00106440392780229
+959 -0.000989883649450528
+960 0.000386274557612681
+961 -0.000389777489444674
+962 -0.00118692846255399
+963 -5.09408200005586e-06
+964 -5.89078730563787e-05
+965 -1.47060551334381e-05
+966 -0.000136166417132319
+967 -0.000121512032975118
+968 -0.00017156987502174
+969 -0.000156708081095913
+970 -0.000153840321519638
+971 -0.000310390758729453
+972 -0.000312404884024801
+973 -0.000200418566814807
+974 -0.000375662527155661
+975 -0.000354596399099672
+976 -0.000424295858947903
+977 -4.46088202453899e-06
+978 0.00224800854296348
+979 0.000523082860817624
+980 0.00048326199320117
+981 0.000448693340206397
+982 0.000421635212488891
+983 0.000437949926365211
+984 0.000428040241678261
+985 0.000391002232599501
+986 0.00036566913933478
+987 0.000381018446039441
+988 0.000321514512415979
+989 0.000287957422008028
+990 0.000255617051800765
+991 0.000221662354369779
+992 0.000188701605125869
+993 0.00016002049297156
+994 0.000127317707925566
+995 9.31667901426005e-05
+996 6.3380231067732e-05
+997 3.423275902354e-05
+998 -2.14223799528709e-06
+999 -3.67741480724576e-05
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat
new file mode 100644
index 000000000..484b94708
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.00562119483947754 0.00999999999999979 0.00999999999999979 0.0 1
+2 0.00404691696166992 0.0 0.0 0.0 2
+3 0.00373387336730957 0.00999999999999979 0.00999999999999979 0.0 3
+4 0.00375699996948242 0.0 0.0 0.0 4
+5 0.00371694564819336 0.0 0.0 0.0 5
+6 0.00381088256835938 0.0100000000000007 0.0100000000000007 0.0 6
+7 0.00370693206787109 0.0 0.0 0.0 7
+8 0.00368213653564453 0.00999999999999979 0.00999999999999979 0.0 8
+9 0.0037529468536377 0.0 0.0 0.0 9
+10 0.00371718406677246 0.0 0.0 0.0 10
+11 0.00370693206787109 0.00999999999999979 0.00999999999999979 0.0 11
+12 0.00371503829956055 0.0 0.0 0.0 12
+13 0.00367999076843262 0.0 0.0 0.0 13
+14 0.0037379264831543 0.00999999999999979 0.00999999999999979 0.0 14
+15 0.00368285179138184 0.0 0.0 0.0 15
+16 0.0036928653717041 0.00999999999999979 0.00999999999999979 0.0 16
+17 0.00363802909851074 0.0 0.0 0.0 17
+18 0.00420713424682617 0.0 0.0 0.0 18
+19 0.0046851634979248 0.0100000000000007 0.0100000000000007 0.0 19
+20 0.00365090370178223 0.0 0.0 0.0 20
+21 0.0036470890045166 0.00999999999999979 0.00999999999999979 0.0 21
+22 0.00363302230834961 0.0 0.0 0.0 22
+23 0.00362706184387207 0.0 0.0 0.0 23
+24 0.00369381904602051 0.00999999999999979 0.00999999999999979 0.0 24
+25 0.00363802909851074 0.0 0.0 0.0 25
+26 0.00362586975097656 0.0 0.0 0.0 26
+27 0.0036308765411377 0.00999999999999979 0.00999999999999979 0.0 27
+28 0.00364899635314941 0.0 0.0 0.0 28
+29 0.00363993644714355 0.0100000000000007 0.0100000000000007 0.0 29
+30 0.0036160945892334 0.0 0.0 0.0 30
+31 0.00362014770507812 0.0 0.0 0.0 31
+32 0.0036470890045166 0.00999999999999979 0.00999999999999979 0.0 32
+33 0.00372695922851562 0.0 0.0 0.0 33
+34 0.00366806983947754 0.0 0.0 0.0 34
+35 0.00362205505371094 0.00999999999999979 0.00999999999999979 0.0 35
+36 0.00366711616516113 0.0 0.0 0.0 36
+37 0.00369906425476074 0.00999999999999979 0.00999999999999979 0.0 37
+38 0.00364184379577637 0.0 0.0 0.0 38
+39 0.0289762020111084 0.0300000000000002 0.0300000000000002 0.0 39
+40 0.00372695922851562 0.0 0.0 0.0 40
+41 0.00367403030395508 0.00999999999999979 0.00999999999999979 0.0 41
+42 0.00373101234436035 0.0 0.0 0.0 42
+43 0.00379014015197754 0.0 0.0 0.0 43
+44 0.00367498397827148 0.0100000000000007 0.0100000000000007 0.0 44
+45 0.00369691848754883 0.0 0.0 0.0 45
+46 0.00368881225585938 0.0 0.0 0.0 46
+47 0.00369405746459961 0.00999999999999979 0.00999999999999979 0.0 47
+48 0.00369095802307129 0.0 0.0 0.0 48
+49 0.00370192527770996 0.00999999999999979 0.00999999999999979 0.0 49
+50 0.00373387336730957 0.0 0.0 0.0 50
+51 0.00370502471923828 0.0 0.0 0.0 51
+52 0.00367999076843262 0.00999999999999979 0.00999999999999979 0.0 52
+53 0.00374007225036621 0.0 0.0 0.0 53
+54 0.00364995002746582 0.0 0.0 0.0 54
+55 0.00367188453674316 0.0100000000000007 0.0100000000000007 0.0 55
+56 0.00363993644714355 0.0 0.0 0.0 56
+57 0.00365900993347168 0.00999999999999979 0.00999999999999979 0.0 57
+58 0.0036160945892334 0.0 0.0 0.0 58
+59 0.00369095802307129 0.0 0.0 0.0 59
+60 0.00452899932861328 0.00999999999999979 0.00999999999999979 0.0 60
+61 0.00462913513183594 0.0 0.0 0.0 61
+62 0.00413894653320312 0.00999999999999979 0.00999999999999979 0.0 62
+63 0.0036470890045166 0.0 0.0 0.0 63
+64 0.00361418724060059 0.0 0.0 0.0 64
+65 0.00383710861206055 0.0100000000000007 0.0100000000000007 0.0 65
+66 0.00362491607666016 0.0 0.0 0.0 66
+67 0.0036318302154541 0.0 0.0 0.0 67
+68 0.0036311149597168 0.00999999999999979 0.00999999999999979 0.0 68
+69 0.00365900993347168 0.0 0.0 0.0 69
+70 0.00515103340148926 0.00999999999999979 0.00999999999999979 0.0 70
+71 0.00363993644714355 0.0 0.0 0.0 71
+72 0.00365900993347168 0.0 0.0 0.0 72
+73 0.00374507904052734 0.00999999999999979 0.00999999999999979 0.0 73
+74 0.00366497039794922 0.0 0.0 0.0 74
+75 0.00367498397827148 0.00999999999999979 0.00999999999999979 0.0 75
+76 0.0036470890045166 0.0 0.0 0.0 76
+77 0.00451517105102539 0.0 0.0 0.0 77
+78 0.0300049781799316 0.0300000000000002 0.0300000000000002 0.0 78
+79 0.00374197959899902 0.00999999999999979 0.00999999999999979 0.0 79
+80 0.00371098518371582 0.0 0.0 0.0 80
+81 0.00372600555419922 0.0 0.0 0.0 81
+82 0.00376200675964355 0.0100000000000007 0.0100000000000007 0.0 82
+83 0.00369596481323242 0.0 0.0 0.0 83
+84 0.00372099876403809 0.00999999999999979 0.00999999999999979 0.0 84
+85 0.00370216369628906 0.0 0.0 0.0 85
+86 0.00374007225036621 0.0 0.0 0.0 86
+87 0.00369381904602051 0.00999999999999979 0.00999999999999979 0.0 87
+88 0.00372195243835449 0.0 0.0 0.0 88
+89 0.00368881225585938 0.0 0.0 0.0 89
+90 0.00371909141540527 0.00999999999999979 0.00999999999999979 0.0 90
+91 0.00371909141540527 0.0 0.0 0.0 91
+92 0.00366497039794922 0.0100000000000007 0.0100000000000007 0.0 92
+93 0.00366401672363281 0.0 0.0 0.0 93
+94 0.00378704071044922 0.0 0.0 0.0 94
+95 0.00365710258483887 0.00999999999999979 0.00999999999999979 0.0 95
+96 0.00405406951904297 0.0 0.0 0.0 96
+97 0.00365591049194336 0.0 0.0 0.0 97
+98 0.00371098518371582 0.00999999999999979 0.00999999999999979 0.0 98
+99 0.00363802909851074 0.0 0.0 0.0 99
+100 0.0036461353302002 0.00999999999999979 0.00999999999999979 0.0 100
+101 0.00359797477722168 0.0 0.0 0.0 101
+102 0.00361990928649902 0.0 0.0 0.0 102
+103 0.00364899635314941 0.0100000000000007 0.0100000000000007 0.0 103
+104 0.00359296798706055 0.0 0.0 0.0 104
+105 0.00363802909851074 0.0 0.0 0.0 105
+106 0.00417685508728027 0.00999999999999979 0.00999999999999979 0.0 106
+107 0.00371980667114258 0.0 0.0 0.0 107
+108 0.0036470890045166 0.00999999999999979 0.00999999999999979 0.0 108
+109 0.00368213653564453 0.0 0.0 0.0 109
+110 0.00360202789306641 0.0 0.0 0.0 110
+111 0.00362992286682129 0.00999999999999979 0.00999999999999979 0.0 111
+112 0.0036311149597168 0.0 0.0 0.0 112
+113 0.00362801551818848 0.0 0.0 0.0 113
+114 0.00364995002746582 0.0100000000000007 0.0100000000000007 0.0 114
+115 0.00370001792907715 0.0 0.0 0.0 115
+116 0.0305509567260742 0.0299999999999994 0.0299999999999994 0.0 116
+117 0.00376200675964355 0.0100000000000007 0.0100000000000007 0.0 117
+118 0.0038001537322998 0.0 0.0 0.0 118
+119 0.00374984741210938 0.0 0.0 0.0 119
+120 0.00397920608520508 0.00999999999999979 0.00999999999999979 0.0 120
+121 0.00372481346130371 0.0 0.0 0.0 121
+122 0.00369715690612793 0.0 0.0 0.0 122
+123 0.00371694564819336 0.00999999999999979 0.00999999999999979 0.0 123
+124 0.00372195243835449 0.0 0.0 0.0 124
+125 0.00375914573669434 0.00999999999999979 0.00999999999999979 0.0 125
+126 0.00368499755859375 0.0 0.0 0.0 126
+127 0.00371503829956055 0.0 0.0 0.0 127
+128 0.00380897521972656 0.00999999999999979 0.00999999999999979 0.0 128
+129 0.00403499603271484 0.0 0.0 0.0 129
+130 0.00370502471923828 0.0100000000000007 0.0100000000000007 0.0 130
+131 0.00371289253234863 0.0 0.0 0.0 131
+132 0.00365591049194336 0.0 0.0 0.0 132
+133 0.00368094444274902 0.00999999999999979 0.00999999999999979 0.0 133
+134 0.0036768913269043 0.0 0.0 0.0 134
+135 0.00362706184387207 0.0 0.0 0.0 135
+136 0.00366616249084473 0.00999999999999979 0.00999999999999979 0.0 136
+137 0.0036470890045166 0.0 0.0 0.0 137
+138 0.00362181663513184 0.0 0.0 0.0 138
+139 0.00364089012145996 0.00999999999999979 0.00999999999999979 0.0 139
+140 0.00363707542419434 0.0 0.0 0.0 140
+141 0.00359892845153809 0.0100000000000007 0.0100000000000007 0.0 141
+142 0.00361514091491699 0.0 0.0 0.0 142
+143 0.00365495681762695 0.0 0.0 0.0 143
+144 0.00371885299682617 0.00999999999999979 0.00999999999999979 0.0 144
+145 0.00364208221435547 0.0 0.0 0.0 145
+146 0.00365304946899414 0.0 0.0 0.0 146
+147 0.00368404388427734 0.00999999999999979 0.00999999999999979 0.0 147
+148 0.00365900993347168 0.0 0.0 0.0 148
+149 0.00368785858154297 0.00999999999999979 0.00999999999999979 0.0 149
+150 0.003662109375 0.0 0.0 0.0 150
+151 0.00363397598266602 0.0 0.0 0.0 151
+152 0.00362491607666016 0.0100000000000007 0.0100000000000007 0.0 152
+153 0.00366687774658203 0.0 0.0 0.0 153
+154 0.0295231342315674 0.0299999999999994 0.0299999999999994 0.0 154
+155 0.00366806983947754 0.0 0.0 0.0 155
+156 0.00370311737060547 0.0100000000000007 0.0100000000000007 0.0 156
+157 0.0037238597869873 0.0 0.0 0.0 157
+158 0.00376701354980469 0.00999999999999979 0.00999999999999979 0.0 158
+159 0.0036771297454834 0.0 0.0 0.0 159
+160 0.00372195243835449 0.0 0.0 0.0 160
+161 0.00371599197387695 0.00999999999999979 0.00999999999999979 0.0 161
+162 0.00371003150939941 0.0 0.0 0.0 162
+163 0.00369811058044434 0.0 0.0 0.0 163
+164 0.00378203392028809 0.00999999999999979 0.00999999999999979 0.0 164
+165 0.00370502471923828 0.0 0.0 0.0 165
+166 0.00371003150939941 0.0100000000000007 0.0100000000000007 0.0 166
+167 0.00371599197387695 0.0 0.0 0.0 167
+168 0.00370192527770996 0.0 0.0 0.0 168
+169 0.00369501113891602 0.00999999999999979 0.00999999999999979 0.0 169
+170 0.00369691848754883 0.0 0.0 0.0 170
+171 0.00400686264038086 0.0 0.0 0.0 171
+172 0.00524497032165527 0.00999999999999979 0.00999999999999979 0.0 172
+173 0.00366020202636719 0.0 0.0 0.0 173
+174 0.00366806983947754 0.00999999999999979 0.00999999999999979 0.0 174
+175 0.00367379188537598 0.0 0.0 0.0 175
+176 0.00362706184387207 0.0 0.0 0.0 176
+177 0.00365996360778809 0.0100000000000007 0.0100000000000007 0.0 177
+178 0.00365900993347168 0.0 0.0 0.0 178
+179 0.00363492965698242 0.00999999999999979 0.00999999999999979 0.0 179
+180 0.00363397598266602 0.0 0.0 0.0 180
+181 0.00366401672363281 0.0 0.0 0.0 181
+182 0.00363302230834961 0.00999999999999979 0.00999999999999979 0.0 182
+183 0.00364494323730469 0.0 0.0 0.0 183
+184 0.00361990928649902 0.0 0.0 0.0 184
+185 0.00379490852355957 0.00999999999999979 0.00999999999999979 0.0 185
+186 0.0036468505859375 0.0 0.0 0.0 186
+187 0.00370502471923828 0.00999999999999979 0.00999999999999979 0.0 187
+188 0.00387907028198242 0.0 0.0 0.0 188
+189 0.00541114807128906 0.0 0.0 0.0 189
+190 0.00428199768066406 0.0100000000000007 0.0100000000000007 0.0 190
+191 0.00368618965148926 0.0 0.0 0.0 191
+192 0.0293948650360107 0.0299999999999994 0.0299999999999994 0.0 192
+193 0.00434708595275879 0.0100000000000007 0.0100000000000007 0.0 193
+194 0.00372600555419922 0.0 0.0 0.0 194
+195 0.00628900527954102 0.00999999999999979 0.00999999999999979 0.0 195
+196 0.00624394416809082 0.0 0.0 0.0 196
+197 0.00649094581604004 0.00999999999999979 0.00999999999999979 0.0 197
+198 0.00419712066650391 0.0 0.0 0.0 198
+199 0.00371003150939941 0.00999999999999979 0.00999999999999979 0.0 199
+200 0.0037531852722168 0.0 0.0 0.0 200
+201 0.00369119644165039 0.0 0.0 0.0 201
+202 0.00369000434875488 0.0100000000000007 0.0100000000000007 0.0 202
+203 0.00372099876403809 0.0 0.0 0.0 203
+204 0.00369000434875488 0.00999999999999979 0.00999999999999979 0.0 204
+205 0.00371885299682617 0.0 0.0 0.0 205
+206 0.00367903709411621 0.0 0.0 0.0 206
+207 0.00364303588867188 0.00999999999999979 0.00999999999999979 0.0 207
+208 0.0037541389465332 0.0 0.0 0.0 208
+209 0.00364303588867188 0.0 0.0 0.0 209
+210 0.00363898277282715 0.00999999999999979 0.00999999999999979 0.0 210
+211 0.00363588333129883 0.0 0.0 0.0 211
+212 0.00367999076843262 0.0100000000000007 0.0100000000000007 0.0 212
+213 0.00364208221435547 0.0 0.0 0.0 213
+214 0.00365614891052246 0.0 0.0 0.0 214
+215 0.00363779067993164 0.00999999999999979 0.00999999999999979 0.0 215
+216 0.00362610816955566 0.0 0.0 0.0 216
+217 0.0036470890045166 0.0 0.0 0.0 217
+218 0.00366711616516113 0.00999999999999979 0.00999999999999979 0.0 218
+219 0.00364995002746582 0.0 0.0 0.0 219
+220 0.0036308765411377 0.0 0.0 0.0 220
+221 0.0036308765411377 0.00999999999999979 0.00999999999999979 0.0 221
+222 0.00362896919250488 0.0 0.0 0.0 222
+223 0.00364899635314941 0.0100000000000007 0.0100000000000007 0.0 223
+224 0.00365805625915527 0.0 0.0 0.0 224
+225 0.00364589691162109 0.0 0.0 0.0 225
+226 0.00363683700561523 0.00999999999999979 0.00999999999999979 0.0 226
+227 0.00364995002746582 0.0 0.0 0.0 227
+228 0.00421810150146484 0.0 0.0 0.0 228
+229 0.00510215759277344 0.00999999999999979 0.00999999999999979 0.0 229
+230 0.0295019149780273 0.0300000000000002 0.0300000000000002 0.0 230
+231 0.00370287895202637 0.0 0.0 0.0 231
+232 0.00370287895202637 0.00999999999999979 0.00999999999999979 0.0 232
+233 0.00372409820556641 0.0 0.0 0.0 233
+234 0.00373697280883789 0.0 0.0 0.0 234
+235 0.00371003150939941 0.00999999999999979 0.00999999999999979 0.0 235
+236 0.00374388694763184 0.0 0.0 0.0 236
+237 0.00366711616516113 0.00999999999999979 0.00999999999999979 0.0 237
+238 0.00371408462524414 0.0 0.0 0.0 238
+239 0.0048530101776123 0.0 0.0 0.0 239
+240 0.00423502922058105 0.0100000000000007 0.0100000000000007 0.0 240
+241 0.00370502471923828 0.0 0.0 0.0 241
+242 0.00370383262634277 0.00999999999999979 0.00999999999999979 0.0 242
+243 0.00366306304931641 0.0 0.0 0.0 243
+244 0.00367593765258789 0.0 0.0 0.0 244
+245 0.00371599197387695 0.00999999999999979 0.00999999999999979 0.0 245
+246 0.00369501113891602 0.0 0.0 0.0 246
+247 0.00366902351379395 0.0 0.0 0.0 247
+248 0.00362110137939453 0.00999999999999979 0.00999999999999979 0.0 248
+249 0.00362896919250488 0.0 0.0 0.0 249
+250 0.00362896919250488 0.0100000000000007 0.0100000000000007 0.0 250
+251 0.00362205505371094 0.0 0.0 0.0 251
+252 0.00364923477172852 0.0 0.0 0.0 252
+253 0.00362801551818848 0.00999999999999979 0.00999999999999979 0.0 253
+254 0.00369715690612793 0.0 0.0 0.0 254
+255 0.00363993644714355 0.0 0.0 0.0 255
+256 0.00364518165588379 0.00999999999999979 0.00999999999999979 0.0 256
+257 0.00360393524169922 0.0 0.0 0.0 257
+258 0.00365090370178223 0.00999999999999979 0.00999999999999979 0.0 258
+259 0.00365996360778809 0.0 0.0 0.0 259
+260 0.00363016128540039 0.0 0.0 0.0 260
+261 0.00363707542419434 0.0100000000000007 0.0100000000000007 0.0 261
+262 0.00364112854003906 0.0 0.0 0.0 262
+263 0.00367903709411621 0.0 0.0 0.0 263
+264 0.00365304946899414 0.00999999999999979 0.00999999999999979 0.0 264
+265 0.00365900993347168 0.0 0.0 0.0 265
+266 0.00364804267883301 0.00999999999999979 0.00999999999999979 0.0 266
+267 0.00368404388427734 0.0 0.0 0.0 267
+268 0.02935791015625 0.0300000000000002 0.0300000000000002 0.0 268
+269 0.00368499755859375 0.0 0.0 0.0 269
+270 0.00371789932250977 0.00999999999999979 0.00999999999999979 0.0 270
+271 0.0037848949432373 0.0 0.0 0.0 271
+272 0.00371384620666504 0.0 0.0 0.0 272
+273 0.00371098518371582 0.00999999999999979 0.00999999999999979 0.0 273
+274 0.00377702713012695 0.0 0.0 0.0 274
+275 0.00371503829956055 0.0 0.0 0.0 275
+276 0.00372791290283203 0.0100000000000007 0.0100000000000007 0.0 276
+277 0.00372004508972168 0.0 0.0 0.0 277
+278 0.00366806983947754 0.00999999999999979 0.00999999999999979 0.0 278
+279 0.00369620323181152 0.0 0.0 0.0 279
+280 0.00374603271484375 0.0 0.0 0.0 280
+281 0.00559902191162109 0.00999999999999979 0.00999999999999979 0.0 281
+282 0.00370311737060547 0.0 0.0 0.0 282
+283 0.00371289253234863 0.00999999999999979 0.00999999999999979 0.0 283
+284 0.00368905067443848 0.0 0.0 0.0 284
+285 0.0037989616394043 0.0 0.0 0.0 285
+286 0.00368595123291016 0.00999999999999979 0.0100000000000007 0.0 286
+287 0.00365710258483887 0.0 0.0 0.0 287
+288 0.00366306304931641 0.00999999999999979 0.00999999999999979 0.0 288
+289 0.00366091728210449 0.0 0.0 0.0 289
+290 0.00363683700561523 0.0 0.0 0.0 290
+291 0.00508499145507812 0.00999999999999979 0.00999999999999979 0.0 291
+292 0.00364899635314941 0.0 0.0 0.0 292
+293 0.00364184379577637 0.0 0.0 0.0 293
+294 0.00365900993347168 0.00999999999999979 0.00999999999999979 0.0 294
+295 0.00361919403076172 0.0 0.0 0.0 295
+296 0.00365996360778809 0.00999999999999979 0.00999999999999979 0.0 296
+297 0.00385499000549316 0.0 0.0 0.0 297
+298 0.00486421585083008 0.0 0.0 0.0 298
+299 0.00370907783508301 0.00999999999999979 0.00999999999999979 0.0 299
+300 0.00366020202636719 0.0 0.0 0.0 300
+301 0.00364780426025391 0.00999999999999979 0.00999999999999979 0.0 301
+302 0.00360703468322754 0.0 0.0 0.0 302
+303 0.00366711616516113 0.0 0.0 0.0 303
+304 0.00365304946899414 0.0100000000000016 0.0100000000000016 0.0 304
+305 0.0293490886688232 0.0299999999999994 0.0299999999999994 0.0 305
+306 0.00373411178588867 0.0 0.0 0.0 306
+307 0.00367593765258789 0.0 0.0 0.0 307
+308 0.0037379264831543 0.00999999999999979 0.00999999999999979 0.0 308
+309 0.00373697280883789 0.0 0.0 0.0 309
+310 0.00374507904052734 0.0 0.0 0.0 310
+311 0.00374889373779297 0.00999999999999979 0.00999999999999979 0.0 311
+312 0.00372195243835449 0.0 0.0 0.0 312
+313 0.00367879867553711 0.00999999999999979 0.00999999999999979 0.0 313
+314 0.00386714935302734 0.0 0.0 0.0 314
+315 0.00381088256835938 0.0 0.0 0.0 315
+316 0.00370597839355469 0.00999999999999979 0.00999999999999979 0.0 316
+317 0.00370287895202637 0.0 0.0 0.0 317
+318 0.00370883941650391 0.0 0.0 0.0 318
+319 0.0037989616394043 0.0100000000000016 0.0100000000000016 0.0 319
+320 0.00371098518371582 0.0 0.0 0.0 320
+321 0.00366806983947754 0.00999999999999979 0.00999999999999979 0.0 321
+322 0.00365209579467773 0.0 0.0 0.0 322
+323 0.00365400314331055 0.0 0.0 0.0 323
+324 0.00365710258483887 0.00999999999999979 0.00999999999999979 0.0 324
+325 0.00365400314331055 0.0 0.0 0.0 325
+326 0.00417399406433105 0.00999999999999979 0.00999999999999979 0.0 326
+327 0.00363588333129883 0.0 0.0 0.0 327
+328 0.00362396240234375 0.0 0.0 0.0 328
+329 0.00364899635314941 0.00999999999999979 0.00999999999999979 0.0 329
+330 0.0036461353302002 0.0 0.0 0.0 330
+331 0.00362610816955566 0.0 0.0 0.0 331
+332 0.00365710258483887 0.00999999999999979 0.00999999999999979 0.0 332
+333 0.00365900993347168 0.0 0.0 0.0 333
+334 0.00363802909851074 0.0 0.0 0.0 334
+335 0.00365495681762695 0.00999999999999979 0.00999999999999979 0.0 335
+336 0.0036931037902832 0.0 0.0 0.0 336
+337 0.00366592407226562 0.00999999999999979 0.00999999999999979 0.0 337
+338 0.0036778450012207 0.0 0.0 0.0 338
+339 0.00438904762268066 0.0 0.0 0.0 339
+340 0.00471091270446777 0.0100000000000016 0.0100000000000016 0.0 340
+341 0.00389599800109863 0.0 0.0 0.0 341
+342 0.00366497039794922 0.00999999999999979 0.00999999999999979 0.0 342
+343 0.0298199653625488 0.0299999999999994 0.0299999999999994 0.0 343
+344 0.00373697280883789 0.0 0.0 0.0 344
+345 0.00366497039794922 0.0 0.0 0.0 345
+346 0.00375890731811523 0.00999999999999979 0.00999999999999979 0.0 346
+347 0.00376486778259277 0.0 0.0 0.0 347
+348 0.00379490852355957 0.00999999999999979 0.00999999999999979 0.0 348
+349 0.00371098518371582 0.0 0.0 0.0 349
+350 0.00410985946655273 0.0 0.0 0.0 350
+351 0.00371313095092773 0.00999999999999979 0.00999999999999979 0.0 351
+352 0.00372481346130371 0.0 0.0 0.0 352
+353 0.00371789932250977 0.0 0.0 0.0 353
+354 0.00374507904052734 0.00999999999999979 0.00999999999999979 0.0 354
+355 0.00374102592468262 0.0 0.0 0.0 355
+356 0.00371098518371582 0.0100000000000016 0.0100000000000016 0.0 356
+357 0.00369906425476074 0.0 0.0 0.0 357
+358 0.00367617607116699 0.0 0.0 0.0 358
+359 0.00366997718811035 0.00999999999999979 0.00999999999999979 0.0 359
+360 0.00365996360778809 0.0 0.0 0.0 360
+361 0.00363588333129883 0.0 0.0 0.0 361
+362 0.00361990928649902 0.00999999999999979 0.00999999999999979 0.0 362
+363 0.00364589691162109 0.0 0.0 0.0 363
+364 0.00363492965698242 0.00999999999999979 0.00999999999999979 0.0 364
+365 0.00372695922851562 0.0 0.0 0.0 365
+366 0.00362396240234375 0.0 0.0 0.0 366
+367 0.00363707542419434 0.00999999999999979 0.00999999999999979 0.0 367
+368 0.0036921501159668 0.0 0.0 0.0 368
+369 0.00365710258483887 0.0 0.0 0.0 369
+370 0.00361800193786621 0.00999999999999979 0.00999999999999979 0.0 370
+371 0.00367903709411621 0.0 0.0 0.0 371
+372 0.00365805625915527 0.00999999999999979 0.00999999999999979 0.0 372
+373 0.00367999076843262 0.0 0.0 0.0 373
+374 0.00368404388427734 0.0 0.0 0.0 374
+375 0.00368690490722656 0.00999999999999979 0.00999999999999979 0.0 375
+376 0.00374794006347656 0.0 0.0 0.0 376
+377 0.00366997718811035 0.0 0.0 0.0 377
+378 0.00365018844604492 0.0100000000000016 0.0100000000000016 0.0 378
+379 0.0036780834197998 0.0 0.0 0.0 379
+380 0.00370216369628906 0.00999999999999979 0.00999999999999979 0.0 380
+381 0.0293450355529785 0.0199999999999996 0.0199999999999996 0.0 381
+382 0.00373005867004395 0.00999999999999979 0.00999999999999979 0.0 382
+383 0.00366306304931641 0.0 0.0 0.0 383
+384 0.00376296043395996 0.00999999999999979 0.00999999999999979 0.0 384
+385 0.00380301475524902 0.0 0.0 0.0 385
+386 0.00372815132141113 0.0 0.0 0.0 386
+387 0.00371193885803223 0.00999999999999979 0.00999999999999979 0.0 387
+388 0.00368499755859375 0.0 0.0 0.0 388
+389 0.00373601913452148 0.0 0.0 0.0 389
+390 0.00371694564819336 0.00999999999999979 0.00999999999999979 0.0 390
+391 0.00372791290283203 0.0 0.0 0.0 391
+392 0.00531101226806641 0.0100000000000016 0.0100000000000016 0.0 392
+393 0.00371789932250977 0.0 0.0 0.0 393
+394 0.00370097160339355 0.00999999999999979 0.00999999999999979 0.0 394
+395 0.00369906425476074 0.0 0.0 0.0 395
+396 0.00373601913452148 0.0 0.0 0.0 396
+397 0.00371694564819336 0.00999999999999979 0.00999999999999979 0.0 397
+398 0.00365591049194336 0.0 0.0 0.0 398
+399 0.00403714179992676 0.0 0.0 0.0 399
+400 0.00364208221435547 0.00999999999999979 0.00999999999999979 0.0 400
+401 0.00365400314331055 0.0 0.0 0.0 401
+402 0.00364089012145996 0.00999999999999979 0.00999999999999979 0.0 402
+403 0.00363302230834961 0.0 0.0 0.0 403
+404 0.00365090370178223 0.0 0.0 0.0 404
+405 0.00374603271484375 0.00999999999999979 0.00999999999999979 0.0 405
+406 0.00363278388977051 0.0 0.0 0.0 406
+407 0.00362515449523926 0.0 0.0 0.0 407
+408 0.00372409820556641 0.00999999999999979 0.00999999999999979 0.0 408
+409 0.00486588478088379 0.0 0.0 0.0 409
+410 0.00364303588867188 0.00999999999999979 0.00999999999999979 0.0 410
+411 0.00371599197387695 0.0 0.0 0.0 411
+412 0.0036618709564209 0.0 0.0 0.0 412
+413 0.00363707542419434 0.00999999999999979 0.00999999999999979 0.0 413
+414 0.00367593765258789 0.0 0.0 0.0 414
+415 0.00361990928649902 0.0 0.0 0.0 415
+416 0.00365900993347168 0.0100000000000016 0.0100000000000016 0.0 416
+417 0.00365614891052246 0.0 0.0 0.0 417
+418 0.00370597839355469 0.00999999999999979 0.00999999999999979 0.0 418
+419 0.0359270572662354 0.0299999999999994 0.0299999999999994 0.0 419
+420 0.00371479988098145 0.00999999999999979 0.00999999999999979 0.0 420
+421 0.00369119644165039 0.0 0.0 0.0 421
+422 0.00375699996948242 0.0 0.0 0.0 422
+423 0.00374388694763184 0.00999999999999979 0.00999999999999979 0.0 423
+424 0.00373291969299316 0.0 0.0 0.0 424
+425 0.00372982025146484 0.0 0.0 0.0 425
+426 0.00370216369628906 0.00999999999999979 0.00999999999999979 0.0 426
+427 0.00371408462524414 0.0 0.0 0.0 427
+428 0.0037078857421875 0.0100000000000016 0.0100000000000016 0.0 428
+429 0.00379300117492676 0.0 0.0 0.0 429
+430 0.00373482704162598 0.0 0.0 0.0 430
+431 0.00374007225036621 0.00999999999999979 0.00999999999999979 0.0 431
+432 0.00367999076843262 0.0 0.0 0.0 432
+433 0.00372695922851562 0.0 0.0 0.0 433
+434 0.00371384620666504 0.00999999999999979 0.00999999999999979 0.0 434
+435 0.0036170482635498 0.0 0.0 0.0 435
+436 0.00364899635314941 0.00999999999999979 0.00999999999999979 0.0 436
+437 0.00367283821105957 0.0 0.0 0.0 437
+438 0.0036160945892334 0.0 0.0 0.0 438
+439 0.00362205505371094 0.00999999999999979 0.00999999999999979 0.0 439
+440 0.00364518165588379 0.0 0.0 0.0 440
+441 0.0036780834197998 0.0 0.0 0.0 441
+442 0.00361800193786621 0.00999999999999979 0.00999999999999979 0.0 442
+443 0.00362396240234375 0.0 0.0 0.0 443
+444 0.00362610816955566 0.00999999999999979 0.00999999999999979 0.0 444
+445 0.00364804267883301 0.0 0.0 0.0 445
+446 0.00360488891601562 0.0 0.0 0.0 446
+447 0.00363397598266602 0.00999999999999979 0.00999999999999979 0.0 447
+448 0.00361299514770508 0.0 0.0 0.0 448
+449 0.00390100479125977 0.0 0.0 0.0 449
+450 0.00565385818481445 0.0100000000000016 0.0100000000000016 0.0 450
+451 0.00366592407226562 0.0 0.0 0.0 451
+452 0.00364398956298828 0.00999999999999979 0.00999999999999979 0.0 452
+453 0.00362896919250488 0.0 0.0 0.0 453
+454 0.0036618709564209 0.0 0.0 0.0 454
+455 0.00370502471923828 0.00999999999999979 0.00999999999999979 0.0 455
+456 0.00375580787658691 0.0 0.0 0.0 456
+457 0.029231071472168 0.0299999999999994 0.0299999999999994 0.0 457
+458 0.00371885299682617 0.0 0.0 0.0 458
+459 0.00371003150939941 0.0 0.0 0.0 459
+460 0.00493097305297852 0.0 0.0 0.0 460
+461 0.00378513336181641 0.00999999999999979 0.00999999999999979 0.0 461
+462 0.0037388801574707 0.0 0.0 0.0 462
+463 0.00383710861206055 0.0 0.0 0.0 463
+464 0.00370407104492188 0.00999999999999979 0.00999999999999979 0.0 464
+465 0.0037388801574707 0.0 0.0 0.0 465
+466 0.00373196601867676 0.0100000000000016 0.0100000000000016 0.0 466
+467 0.00371599197387695 0.0 0.0 0.0 467
+468 0.00373697280883789 0.0 0.0 0.0 468
+469 0.00368809700012207 0.00999999999999979 0.00999999999999979 0.0 469
+470 0.00370502471923828 0.0 0.0 0.0 470
+471 0.0036771297454834 0.0 0.0 0.0 471
+472 0.00364899635314941 0.00999999999999979 0.00999999999999979 0.0 472
+473 0.00366902351379395 0.0 0.0 0.0 473
+474 0.00365710258483887 0.00999999999999979 0.00999999999999979 0.0 474
+475 0.00371217727661133 0.0 0.0 0.0 475
+476 0.00365495681762695 0.0 0.0 0.0 476
+477 0.0036308765411377 0.00999999999999979 0.00999999999999979 0.0 477
+478 0.00365710258483887 0.0 0.0 0.0 478
+479 0.00364899635314941 0.0 0.0 0.0 479
+480 0.00360703468322754 0.00999999999999979 0.00999999999999979 0.0 480
+481 0.0036318302154541 0.0 0.0 0.0 481
+482 0.00359702110290527 0.0 0.0 0.0 482
+483 0.00360584259033203 0.00999999999999979 0.00999999999999979 0.0 483
+484 0.00364303588867188 0.0 0.0 0.0 484
+485 0.00361490249633789 0.00999999999999979 0.00999999999999979 0.0 485
+486 0.00365281105041504 0.0 0.0 0.0 486
+487 0.00365591049194336 0.0 0.0 0.0 487
+488 0.00358986854553223 0.0100000000000016 0.0100000000000016 0.0 488
+489 0.00365304946899414 0.0 0.0 0.0 489
+490 0.00380802154541016 0.0 0.0 0.0 490
+491 0.00366997718811035 0.00999999999999979 0.00999999999999979 0.0 491
+492 0.00363612174987793 0.0 0.0 0.0 492
+493 0.003662109375 0.00999999999999979 0.00999999999999979 0.0 493
+494 0.00367617607116699 0.0 0.0 0.0 494
+495 0.0286951065063477 0.0299999999999994 0.0299999999999994 0.0 495
+496 0.00378203392028809 0.0 0.0 0.0 496
+497 0.00374603271484375 0.00999999999999979 0.00999999999999979 0.0 497
+498 0.00373005867004395 0.0 0.0 0.0 498
+499 0.00371003150939941 0.0 0.0 0.0 499
+500 0.00367212295532227 0.00999999999999979 0.00999999999999979 0.0 500
+501 0.00379490852355957 0.0 0.0 0.0 501
+502 0.00532388687133789 0.0100000000000016 0.0100000000000016 0.0 502
+503 0.00412988662719727 0.0 0.0 0.0 503
+504 0.00371408462524414 0.0 0.0 0.0 504
+505 0.00367403030395508 0.00999999999999979 0.00999999999999979 0.0 505
+506 0.00383114814758301 0.0 0.0 0.0 506
+507 0.00376319885253906 0.00999999999999979 0.00999999999999979 0.0 507
+508 0.00370383262634277 0.0 0.0 0.0 508
+509 0.00366592407226562 0.0 0.0 0.0 509
+510 0.00369906425476074 0.00999999999999979 0.00999999999999979 0.0 510
+511 0.00367116928100586 0.0 0.0 0.0 511
+512 0.00511002540588379 0.0 0.0 0.0 512
+513 0.00360512733459473 0.00999999999999979 0.00999999999999979 0.0 513
+514 0.00369119644165039 0.0 0.0 0.0 514
+515 0.0036311149597168 0.00999999999999979 0.00999999999999979 0.0 515
+516 0.0036771297454834 0.0 0.0 0.0 516
+517 0.00361800193786621 0.0 0.0 0.0 517
+518 0.0038139820098877 0.00999999999999979 0.00999999999999979 0.0 518
+519 0.00537514686584473 0.0 0.0 0.0 519
+520 0.00412893295288086 0.00999999999999979 0.00999999999999979 0.0 520
+521 0.00373005867004395 0.0 0.0 0.0 521
+522 0.00365996360778809 0.0 0.0 0.0 522
+523 0.00364303588867188 0.00999999999999979 0.00999999999999979 0.0 523
+524 0.00367403030395508 0.0 0.0 0.0 524
+525 0.00364589691162109 0.0100000000000016 0.0100000000000016 0.0 525
+526 0.00364398956298828 0.0 0.0 0.0 526
+527 0.00363898277282715 0.0 0.0 0.0 527
+528 0.00362682342529297 0.00999999999999979 0.00999999999999979 0.0 528
+529 0.00360894203186035 0.0 0.0 0.0 529
+530 0.00366091728210449 0.0 0.0 0.0 530
+531 0.00367999076843262 0.00999999999999979 0.00999999999999979 0.0 531
+532 0.0291500091552734 0.0299999999999994 0.0299999999999994 0.0 532
+533 0.00369596481323242 0.0 0.0 0.0 533
+534 0.00374984741210938 0.0 0.0 0.0 534
+535 0.00383186340332031 0.00999999999999979 0.00999999999999979 0.0 535
+536 0.00389409065246582 0.0 0.0 0.0 536
+537 0.00370407104492188 0.00999999999999979 0.00999999999999979 0.0 537
+538 0.0037238597869873 0.0 0.0 0.0 538
+539 0.00371479988098145 0.0 0.0 0.0 539
+540 0.00371289253234863 0.0100000000000016 0.0100000000000016 0.0 540
+541 0.00380897521972656 0.0 0.0 0.0 541
+542 0.00371193885803223 0.0 0.0 0.0 542
+543 0.0036928653717041 0.00999999999999979 0.00999999999999979 0.0 543
+544 0.00368285179138184 0.0 0.0 0.0 544
+545 0.00370407104492188 0.00999999999999979 0.00999999999999979 0.0 545
+546 0.00371193885803223 0.0 0.0 0.0 546
+547 0.00420904159545898 0.0 0.0 0.0 547
+548 0.00372791290283203 0.00999999999999979 0.00999999999999979 0.0 548
+549 0.0037071704864502 0.0 0.0 0.0 549
+550 0.00366401672363281 0.00999999999999979 0.00999999999999979 0.0 550
+551 0.00365710258483887 0.0 0.0 0.0 551
+552 0.00364494323730469 0.0 0.0 0.0 552
+553 0.00368499755859375 0.00999999999999979 0.00999999999999979 0.0 553
+554 0.00366806983947754 0.0 0.0 0.0 554
+555 0.00361418724060059 0.0 0.0 0.0 555
+556 0.00361394882202148 0.00999999999999979 0.00999999999999979 0.0 556
+557 0.00365090370178223 0.0 0.0 0.0 557
+558 0.00361990928649902 0.0 0.0 0.0 558
+559 0.0036468505859375 0.00999999999999979 0.00999999999999979 0.0 559
+560 0.0040891170501709 0.0 0.0 0.0 560
+561 0.00469303131103516 0.0100000000000016 0.0100000000000016 0.0 561
+562 0.00363516807556152 0.0 0.0 0.0 562
+563 0.00363516807556152 0.0 0.0 0.0 563
+564 0.00361895561218262 0.00999999999999979 0.00999999999999979 0.0 564
+565 0.00365996360778809 0.0 0.0 0.0 565
+566 0.00366783142089844 0.00999999999999979 0.00999999999999979 0.0 566
+567 0.00374007225036621 0.0 0.0 0.0 567
+568 0.00392389297485352 0.0 0.0 0.0 568
+569 0.0294678211212158 0.0299999999999994 0.0299999999999994 0.0 569
+570 0.00389218330383301 0.00999999999999979 0.00999999999999979 0.0 570
+571 0.00545501708984375 0.0 0.0 0.0 571
+572 0.00444793701171875 0.00999999999999979 0.00999999999999979 0.0 572
+573 0.00378513336181641 0.0 0.0 0.0 573
+574 0.00372600555419922 0.0 0.0 0.0 574
+575 0.00369596481323242 0.00999999999999979 0.00999999999999979 0.0 575
+576 0.00376510620117188 0.0 0.0 0.0 576
+577 0.00368714332580566 0.0100000000000016 0.0100000000000016 0.0 577
+578 0.00371885299682617 0.0 0.0 0.0 578
+579 0.00372505187988281 0.0 0.0 0.0 579
+580 0.00372815132141113 0.00999999999999979 0.00999999999999979 0.0 580
+581 0.00370502471923828 0.0 0.0 0.0 581
+582 0.00371503829956055 0.0 0.0 0.0 582
+583 0.00371503829956055 0.00999999999999979 0.00999999999999979 0.0 583
+584 0.00370287895202637 0.0 0.0 0.0 584
+585 0.00371599197387695 0.00999999999999979 0.00999999999999979 0.0 585
+586 0.00377798080444336 0.0 0.0 0.0 586
+587 0.00368595123291016 0.0 0.0 0.0 587
+588 0.00366497039794922 0.00999999999999979 0.00999999999999979 0.0 588
+589 0.00367999076843262 0.0 0.0 0.0 589
+590 0.0036320686340332 0.0 0.0 0.0 590
+591 0.00362491607666016 0.00999999999999979 0.00999999999999979 0.0 591
+592 0.00367593765258789 0.0 0.0 0.0 592
+593 0.0036461353302002 0.00999999999999979 0.00999999999999979 0.0 593
+594 0.00365996360778809 0.0 0.0 0.0 594
+595 0.003662109375 0.0 0.0 0.0 595
+596 0.00364398956298828 0.00999999999999979 0.00999999999999979 0.0 596
+597 0.00371479988098145 0.0 0.0 0.0 597
+598 0.00362610816955566 0.0 0.0 0.0 598
+599 0.00365614891052246 0.0100000000000016 0.0100000000000016 0.0 599
+600 0.00365400314331055 0.0 0.0 0.0 600
+601 0.00364089012145996 0.00999999999999979 0.00999999999999979 0.0 601
+602 0.00363492965698242 0.0 0.0 0.0 602
+603 0.0036320686340332 0.0 0.0 0.0 603
+604 0.00364089012145996 0.00999999999999979 0.00999999999999979 0.0 604
+605 0.00368785858154297 0.0 0.0 0.0 605
+606 0.00367999076843262 0.0 0.0 0.0 606
+607 0.0295491218566895 0.0299999999999994 0.0299999999999994 0.0 607
+608 0.00367212295532227 0.00999999999999979 0.00999999999999979 0.0 608
+609 0.00368118286132812 0.0 0.0 0.0 609
+610 0.00368499755859375 0.0 0.0 0.0 610
+611 0.00374102592468262 0.00999999999999979 0.00999999999999979 0.0 611
+612 0.00428009033203125 0.0 0.0 0.0 612
+613 0.00475502014160156 0.0100000000000016 0.0100000000000016 0.0 613
+614 0.00373005867004395 0.0 0.0 0.0 614
+615 0.00372791290283203 0.00999999999999979 0.00999999999999979 0.0 615
+616 0.00373196601867676 0.0 0.0 0.0 616
+617 0.00375008583068848 0.0 0.0 0.0 617
+618 0.00374102592468262 0.00999999999999979 0.00999999999999979 0.0 618
+619 0.00374102592468262 0.0 0.0 0.0 619
+620 0.00369095802307129 0.0 0.0 0.0 620
+621 0.00368785858154297 0.00999999999999979 0.00999999999999979 0.0 621
+622 0.00369095802307129 0.0 0.0 0.0 622
+623 0.0036778450012207 0.00999999999999979 0.00999999999999979 0.0 623
+624 0.0036468505859375 0.0 0.0 0.0 624
+625 0.00369906425476074 0.0 0.0 0.0 625
+626 0.00376510620117188 0.00999999999999979 0.00999999999999979 0.0 626
+627 0.00364899635314941 0.0 0.0 0.0 627
+628 0.00363397598266602 0.0 0.0 0.0 628
+629 0.00383210182189941 0.00999999999999979 0.00999999999999979 0.0 629
+630 0.00394892692565918 0.0 0.0 0.0 630
+631 0.00367307662963867 0.00999999999999979 0.00999999999999979 0.0 631
+632 0.0036311149597168 0.0 0.0 0.0 632
+633 0.00366497039794922 0.0 0.0 0.0 633
+634 0.00363707542419434 0.00999999999999979 0.00999999999999979 0.0 634
+635 0.0036308765411377 0.0 0.0 0.0 635
+636 0.00362706184387207 0.0 0.0 0.0 636
+637 0.00366306304931641 0.0100000000000016 0.0100000000000016 0.0 637
+638 0.0036468505859375 0.0 0.0 0.0 638
+639 0.00365710258483887 0.0 0.0 0.0 639
+640 0.00370287895202637 0.00999999999999979 0.00999999999999979 0.0 640
+641 0.00424313545227051 0.0 0.0 0.0 641
+642 0.00360798835754395 0.00999999999999979 0.00999999999999979 0.0 642
+643 0.00641298294067383 0.0 0.0 0.0 643
+644 0.0336699485778809 0.0399999999999991 0.0399999999999991 0.0 644
+645 0.00376391410827637 0.0 0.0 0.0 645
+646 0.00372314453125 0.0 0.0 0.0 646
+647 0.00375103950500488 0.00999999999999979 0.00999999999999979 0.0 647
+648 0.00373101234436035 0.0 0.0 0.0 648
+649 0.00373196601867676 0.0 0.0 0.0 649
+650 0.00368499755859375 0.0100000000000016 0.0100000000000016 0.0 650
+651 0.00377416610717773 0.0 0.0 0.0 651
+652 0.00371193885803223 0.00999999999999979 0.00999999999999979 0.0 652
+653 0.0036919116973877 0.0 0.0 0.0 653
+654 0.00371813774108887 0.0 0.0 0.0 654
+655 0.00372219085693359 0.00999999999999979 0.00999999999999979 0.0 655
+656 0.00370907783508301 0.0 0.0 0.0 656
+657 0.00366401672363281 0.0 0.0 0.0 657
+658 0.00366806983947754 0.00999999999999979 0.00999999999999979 0.0 658
+659 0.00368309020996094 0.0 0.0 0.0 659
+660 0.00367307662963867 0.00999999999999979 0.00999999999999979 0.0 660
+661 0.00363898277282715 0.0 0.0 0.0 661
+662 0.003662109375 0.0 0.0 0.0 662
+663 0.00363707542419434 0.00999999999999979 0.00999999999999979 0.0 663
+664 0.00363302230834961 0.0 0.0 0.0 664
+665 0.00366091728210449 0.0 0.0 0.0 665
+666 0.0036771297454834 0.00999999999999979 0.00999999999999979 0.0 666
+667 0.00365710258483887 0.0 0.0 0.0 667
+668 0.00360703468322754 0.00999999999999979 0.00999999999999979 0.0 668
+669 0.00365900993347168 0.0 0.0 0.0 669
+670 0.00479602813720703 0.0 0.0 0.0 670
+671 0.0047600269317627 0.0100000000000016 0.0100000000000016 0.0 671
+672 0.00367999076843262 0.0 0.0 0.0 672
+673 0.00362992286682129 0.00999999999999979 0.00999999999999979 0.0 673
+674 0.00359392166137695 0.0 0.0 0.0 674
+675 0.00365710258483887 0.0 0.0 0.0 675
+676 0.00364899635314941 0.00999999999999979 0.00999999999999979 0.0 676
+677 0.00373482704162598 0.0 0.0 0.0 677
+678 0.00359201431274414 0.0 0.0 0.0 678
+679 0.00365900993347168 0.00999999999999979 0.00999999999999979 0.0 679
+680 0.0036919116973877 0.0 0.0 0.0 680
+681 0.00368595123291016 0.00999999999999979 0.00999999999999979 0.0 681
+682 0.0298888683319092 0.0299999999999994 0.0299999999999994 0.0 682
+683 0.00371694564819336 0.0 0.0 0.0 683
+684 0.00372409820556641 0.0 0.0 0.0 684
+685 0.00371193885803223 0.00999999999999979 0.00999999999999979 0.0 685
+686 0.00372695922851562 0.0 0.0 0.0 686
+687 0.00368809700012207 0.0 0.0 0.0 687
+688 0.0036931037902832 0.0100000000000016 0.0100000000000016 0.0 688
+689 0.00371003150939941 0.0 0.0 0.0 689
+690 0.00369119644165039 0.0 0.0 0.0 690
+691 0.00370192527770996 0.0 0.0 0.0 691
+692 0.00372600555419922 0.0 0.0 0.0 692
+693 0.00372099876403809 0.00999999999999979 0.00999999999999979 0.0 693
+694 0.00371193885803223 0.0 0.0 0.0 694
+695 0.00369095802307129 0.0 0.0 0.0 695
+696 0.00366783142089844 0.00999999999999979 0.00999999999999979 0.0 696
+697 0.00373601913452148 0.0 0.0 0.0 697
+698 0.00366497039794922 0.0 0.0 0.0 698
+699 0.00366806983947754 0.0 0.0 0.0 699
+700 0.00364398956298828 0.0 0.0 0.0 700
+701 0.00358295440673828 0.00999999999999979 0.00999999999999979 0.0 701
+702 0.00363898277282715 0.0 0.0 0.0 702
+703 0.00365304946899414 0.0 0.0 0.0 703
+704 0.00369596481323242 0.00999999999999979 0.00999999999999979 0.0 704
+705 0.00362300872802734 0.0 0.0 0.0 705
+706 0.00362801551818848 0.0 0.0 0.0 706
+707 0.00364899635314941 0.00999999999999979 0.00999999999999979 0.0 707
+708 0.00362491607666016 0.0 0.0 0.0 708
+709 0.00363707542419434 0.0100000000000016 0.0100000000000016 0.0 709
+710 0.00364804267883301 0.0 0.0 0.0 710
+711 0.00362610816955566 0.0 0.0 0.0 711
+712 0.00368213653564453 0.00999999999999979 0.00999999999999979 0.0 712
+713 0.00364398956298828 0.0 0.0 0.0 713
+714 0.00365400314331055 0.0 0.0 0.0 714
+715 0.00364518165588379 0.00999999999999979 0.00999999999999979 0.0 715
+716 0.00361394882202148 0.0 0.0 0.0 716
+717 0.00368309020996094 0.00999999999999979 0.00999999999999979 0.0 717
+718 0.00363492965698242 0.0 0.0 0.0 718
+719 0.0291500091552734 0.0299999999999994 0.0299999999999994 0.0 719
+720 0.00372695922851562 0.0 0.0 0.0 720
+721 0.00369691848754883 0.00999999999999979 0.00999999999999979 0.0 721
+722 0.0036919116973877 0.0 0.0 0.0 722
+723 0.00575518608093262 0.0100000000000016 0.0100000000000016 0.0 723
+724 0.00409793853759766 0.0 0.0 0.0 724
+725 0.00376510620117188 0.0 0.0 0.0 725
+726 0.00382494926452637 0.00999999999999979 0.00999999999999979 0.0 726
+727 0.00373482704162598 0.0 0.0 0.0 727
+728 0.00375699996948242 0.0 0.0 0.0 728
+729 0.00374197959899902 0.00999999999999979 0.00999999999999979 0.0 729
+730 0.00372695922851562 0.0 0.0 0.0 730
+731 0.00370311737060547 0.00999999999999979 0.00999999999999979 0.0 731
+732 0.00367593765258789 0.0 0.0 0.0 732
+733 0.00520992279052734 0.0 0.0 0.0 733
+734 0.00372195243835449 0.00999999999999979 0.00999999999999979 0.0 734
+735 0.00368905067443848 0.0 0.0 0.0 735
+736 0.00366616249084473 0.00999999999999979 0.00999999999999979 0.0 736
+737 0.00368809700012207 0.0 0.0 0.0 737
+738 0.00368499755859375 0.0 0.0 0.0 738
+739 0.00387406349182129 0.00999999999999979 0.00999999999999979 0.0 739
+740 0.00513005256652832 0.0 0.0 0.0 740
+741 0.0036470890045166 0.00999999999999979 0.00999999999999979 0.0 741
+742 0.00371885299682617 0.0 0.0 0.0 742
+743 0.00364398956298828 0.0 0.0 0.0 743
+744 0.00364589691162109 0.00999999999999979 0.00999999999999979 0.0 744
+745 0.00363993644714355 0.0 0.0 0.0 745
+746 0.00364089012145996 0.0 0.0 0.0 746
+747 0.00361490249633789 0.0100000000000016 0.0100000000000016 0.0 747
+748 0.00366783142089844 0.0 0.0 0.0 748
+749 0.00363898277282715 0.0 0.0 0.0 749
+750 0.00363612174987793 0.00999999999999979 0.00999999999999979 0.0 750
+751 0.0036470890045166 0.0 0.0 0.0 751
+752 0.00362300872802734 0.00999999999999979 0.00999999999999979 0.0 752
+753 0.00365209579467773 0.0 0.0 0.0 753
+754 0.00367999076843262 0.0 0.0 0.0 754
+755 0.0036628246307373 0.00999999999999979 0.00999999999999979 0.0 755
+756 0.0293610095977783 0.0299999999999994 0.0299999999999994 0.0 756
+757 0.00370907783508301 0.0 0.0 0.0 757
+758 0.00370001792907715 0.0 0.0 0.0 758
+759 0.00371313095092773 0.00999999999999979 0.00999999999999979 0.0 759
+760 0.00373601913452148 0.0 0.0 0.0 760
+761 0.00375699996948242 0.0100000000000016 0.0100000000000016 0.0 761
+762 0.00379014015197754 0.0 0.0 0.0 762
+763 0.00373101234436035 0.0 0.0 0.0 763
+764 0.00369596481323242 0.00999999999999979 0.00999999999999979 0.0 764
+765 0.00373291969299316 0.0 0.0 0.0 765
+766 0.0037081241607666 0.0 0.0 0.0 766
+767 0.00425601005554199 0.00999999999999979 0.00999999999999979 0.0 767
+768 0.00375699996948242 0.0 0.0 0.0 768
+769 0.0037529468536377 0.00999999999999979 0.00999999999999979 0.0 769
+770 0.00371789932250977 0.0 0.0 0.0 770
+771 0.0037229061126709 0.0 0.0 0.0 771
+772 0.00371003150939941 0.00999999999999979 0.00999999999999979 0.0 772
+773 0.00370311737060547 0.0 0.0 0.0 773
+774 0.00365304946899414 0.0 0.0 0.0 774
+775 0.00366783142089844 0.00999999999999979 0.00999999999999979 0.0 775
+776 0.00362801551818848 0.0 0.0 0.0 776
+777 0.00360703468322754 0.00999999999999979 0.00999999999999979 0.0 777
+778 0.00365209579467773 0.0 0.0 0.0 778
+779 0.00366592407226562 0.0 0.0 0.0 779
+780 0.0036308765411377 0.00999999999999979 0.00999999999999979 0.0 780
+781 0.00458216667175293 0.0 0.0 0.0 781
+782 0.00462603569030762 0.0100000000000016 0.0100000000000016 0.0 782
+783 0.00362300872802734 0.0 0.0 0.0 783
+784 0.00360298156738281 0.0 0.0 0.0 784
+785 0.00363993644714355 0.00999999999999979 0.00999999999999979 0.0 785
+786 0.00367403030395508 0.0 0.0 0.0 786
+787 0.00365209579467773 0.0 0.0 0.0 787
+788 0.00373411178588867 0.00999999999999979 0.00999999999999979 0.0 788
+789 0.0038609504699707 0.0 0.0 0.0 789
+790 0.00365781784057617 0.00999999999999979 0.00999999999999979 0.0 790
+791 0.00362110137939453 0.0 0.0 0.0 791
+792 0.00369000434875488 0.0 0.0 0.0 792
+793 0.0307409763336182 0.0299999999999994 0.0299999999999994 0.0 793
+794 0.00374913215637207 0.00999999999999979 0.00999999999999979 0.0 794
+795 0.00369882583618164 0.0 0.0 0.0 795
+796 0.00370097160339355 0.00999999999999979 0.00999999999999979 0.0 796
+797 0.00375890731811523 0.0 0.0 0.0 797
+798 0.00378894805908203 0.0 0.0 0.0 798
+799 0.00387096405029297 0.0100000000000016 0.0100000000000016 0.0 799
+800 0.00368213653564453 0.0 0.0 0.0 800
+801 0.00372719764709473 0.0 0.0 0.0 801
+802 0.00373101234436035 0.00999999999999979 0.00999999999999979 0.0 802
+803 0.00372600555419922 0.0 0.0 0.0 803
+804 0.00373411178588867 0.00999999999999979 0.00999999999999979 0.0 804
+805 0.00366687774658203 0.0 0.0 0.0 805
+806 0.00370907783508301 0.0 0.0 0.0 806
+807 0.0036921501159668 0.00999999999999979 0.00999999999999979 0.0 807
+808 0.00377511978149414 0.0 0.0 0.0 808
+809 0.00365090370178223 0.0 0.0 0.0 809
+810 0.00374388694763184 0.00999999999999979 0.00999999999999979 0.0 810
+811 0.0036778450012207 0.0 0.0 0.0 811
+812 0.0036780834197998 0.00999999999999979 0.00999999999999979 0.0 812
+813 0.00362801551818848 0.0 0.0 0.0 813
+814 0.00365304946899414 0.0 0.0 0.0 814
+815 0.00363516807556152 0.00999999999999979 0.00999999999999979 0.0 815
+816 0.00369000434875488 0.0 0.0 0.0 816
+817 0.00373196601867676 0.0 0.0 0.0 817
+818 0.00360512733459473 0.00999999999999979 0.00999999999999979 0.0 818
+819 0.00361204147338867 0.0 0.0 0.0 819
+820 0.00362610816955566 0.0100000000000016 0.0100000000000016 0.0 820
+821 0.00365090370178223 0.0 0.0 0.0 821
+822 0.00360703468322754 0.0 0.0 0.0 822
+823 0.00362896919250488 0.00999999999999979 0.00999999999999979 0.0 823
+824 0.0036468505859375 0.0 0.0 0.0 824
+825 0.0036320686340332 0.0 0.0 0.0 825
+826 0.00362610816955566 0.00999999999999979 0.00999999999999979 0.0 826
+827 0.00365090370178223 0.0 0.0 0.0 827
+828 0.00363516807556152 0.00999999999999979 0.00999999999999979 0.0 828
+829 0.00368213653564453 0.0 0.0 0.0 829
+830 0.0292301177978516 0.0299999999999994 0.0299999999999994 0.0 830
+831 0.0037531852722168 0.0 0.0 0.0 831
+832 0.00371718406677246 0.00999999999999979 0.00999999999999979 0.0 832
+833 0.0037989616394043 0.0 0.0 0.0 833
+834 0.00615215301513672 0.0100000000000016 0.0100000000000016 0.0 834
+835 0.00377607345581055 0.0 0.0 0.0 835
+836 0.00370907783508301 0.0 0.0 0.0 836
+837 0.00371098518371582 0.00999999999999979 0.00999999999999979 0.0 837
+838 0.00375103950500488 0.0 0.0 0.0 838
+839 0.00372099876403809 0.0 0.0 0.0 839
+840 0.00375795364379883 0.00999999999999979 0.00999999999999979 0.0 840
+841 0.00370502471923828 0.0 0.0 0.0 841
+842 0.00369787216186523 0.00999999999999979 0.00999999999999979 0.0 842
+843 0.00369501113891602 0.0 0.0 0.0 843
+844 0.00370883941650391 0.0 0.0 0.0 844
+845 0.00371408462524414 0.00999999999999979 0.00999999999999979 0.0 845
+846 0.00368404388427734 0.0 0.0 0.0 846
+847 0.0038149356842041 0.0 0.0 0.0 847
+848 0.00367403030395508 0.00999999999999979 0.00999999999999979 0.0 848
+849 0.00365686416625977 0.0 0.0 0.0 849
+850 0.00383400917053223 0.00999999999999979 0.00999999999999979 0.0 850
+851 0.00394606590270996 0.0 0.0 0.0 851
+852 0.00365996360778809 0.0 0.0 0.0 852
+853 0.00365495681762695 0.00999999999999979 0.00999999999999979 0.0 853
+854 0.00370621681213379 0.0 0.0 0.0 854
+855 0.0036461353302002 0.0 0.0 0.0 855
+856 0.00365281105041504 0.00999999999999979 0.00999999999999979 0.0 856
+857 0.00365686416625977 0.0 0.0 0.0 857
+858 0.00365400314331055 0.0100000000000016 0.0100000000000016 0.0 858
+859 0.00363683700561523 0.0 0.0 0.0 859
+860 0.00365209579467773 0.0 0.0 0.0 860
+861 0.00365614891052246 0.00999999999999979 0.00999999999999979 0.0 861
+862 0.00419211387634277 0.0 0.0 0.0 862
+863 0.00362920761108398 0.0 0.0 0.0 863
+864 0.0062098503112793 0.0 0.0 0.0 864
+865 0.00613093376159668 0.00999999999999979 0.00999999999999979 0.0 865
+866 0.00604104995727539 0.0 0.0 0.0 866
+867 0.0290992259979248 0.0299999999999994 0.0299999999999994 0.0 867
+868 0.00398516654968262 0.00999999999999979 0.00999999999999979 0.0 868
+869 0.00370597839355469 0.0 0.0 0.0 869
+870 0.00374913215637207 0.0 0.0 0.0 870
+871 0.00371384620666504 0.0100000000000016 0.0100000000000016 0.0 871
+872 0.00374984741210938 0.0 0.0 0.0 872
+873 0.00371623039245605 0.00999999999999979 0.00999999999999979 0.0 873
+874 0.00370502471923828 0.0 0.0 0.0 874
+875 0.00371003150939941 0.0 0.0 0.0 875
+876 0.00368094444274902 0.00999999999999979 0.00999999999999979 0.0 876
+877 0.00372886657714844 0.0 0.0 0.0 877
+878 0.00374293327331543 0.0 0.0 0.0 878
+879 0.00372195243835449 0.00999999999999979 0.00999999999999979 0.0 879
+880 0.00373101234436035 0.0 0.0 0.0 880
+881 0.00373005867004395 0.00999999999999979 0.00999999999999979 0.0 881
+882 0.00367903709411621 0.0 0.0 0.0 882
+883 0.00371694564819336 0.0 0.0 0.0 883
+884 0.00383996963500977 0.00999999999999979 0.00999999999999979 0.0 884
+885 0.00367379188537598 0.0 0.0 0.0 885
+886 0.00366806983947754 0.0 0.0 0.0 886
+887 0.0036468505859375 0.00999999999999979 0.00999999999999979 0.0 887
+888 0.00361895561218262 0.0 0.0 0.0 888
+889 0.00358295440673828 0.00999999999999979 0.00999999999999979 0.0 889
+890 0.00368213653564453 0.0 0.0 0.0 890
+891 0.0056309700012207 0.0 0.0 0.0 891
+892 0.00402593612670898 0.0 0.0 0.0 892
+893 0.00361013412475586 0.0 0.0 0.0 893
+894 0.00365805625915527 0.00999999999999979 0.00999999999999979 0.0 894
+895 0.00363683700561523 0.0 0.0 0.0 895
+896 0.00369787216186523 0.0 0.0 0.0 896
+897 0.00366902351379395 0.00999999999999979 0.00999999999999979 0.0 897
+898 0.00373387336730957 0.0 0.0 0.0 898
+899 0.00364398956298828 0.00999999999999979 0.00999999999999979 0.0 899
+900 0.00363802909851074 0.0 0.0 0.0 900
+901 0.00359702110290527 0.0 0.0 0.0 901
+902 0.00368213653564453 0.00999999999999979 0.00999999999999979 0.0 902
+903 0.00368189811706543 0.0 0.0 0.0 903
+904 0.0309450626373291 0.0299999999999994 0.0299999999999994 0.0 904
+905 0.00368690490722656 0.0 0.0 0.0 905
+906 0.00371503829956055 0.00999999999999979 0.00999999999999979 0.0 906
+907 0.00382113456726074 0.0 0.0 0.0 907
+908 0.00382494926452637 0.0100000000000016 0.0100000000000016 0.0 908
+909 0.00365877151489258 0.0 0.0 0.0 909
+910 0.00371003150939941 0.0 0.0 0.0 910
+911 0.00370597839355469 0.00999999999999979 0.00999999999999979 0.0 911
+912 0.00368905067443848 0.0 0.0 0.0 912
+913 0.00370502471923828 0.0 0.0 0.0 913
+914 0.00374197959899902 0.00999999999999979 0.00999999999999979 0.0 914
+915 0.00374484062194824 0.0 0.0 0.0 915
+916 0.00371503829956055 0.00999999999999979 0.00999999999999979 0.0 916
+917 0.00371503829956055 0.0 0.0 0.0 917
+918 0.00377702713012695 0.0 0.0 0.0 918
+919 0.00374889373779297 0.00999999999999979 0.00999999999999979 0.0 919
+920 0.00369787216186523 0.0 0.0 0.0 920
+921 0.00368094444274902 0.0 0.0 0.0 921
+922 0.00360298156738281 0.0 0.0 0.0 922
+923 0.00363612174987793 0.0 0.0 0.0 923
+924 0.00366091728210449 0.00999999999999979 0.00999999999999979 0.0 924
+925 0.00364089012145996 0.0 0.0 0.0 925
+926 0.0036780834197998 0.0 0.0 0.0 926
+927 0.00362300872802734 0.00999999999999979 0.00999999999999979 0.0 927
+928 0.00365400314331055 0.0 0.0 0.0 928
+929 0.00363397598266602 0.0 0.0 0.0 929
+930 0.00364303588867188 0.0100000000000016 0.0100000000000016 0.0 930
+931 0.00363302230834961 0.0 0.0 0.0 931
+932 0.0036160945892334 0.00999999999999979 0.00999999999999979 0.0 932
+933 0.00370216369628906 0.0 0.0 0.0 933
+934 0.00365400314331055 0.0 0.0 0.0 934
+935 0.00365090370178223 0.00999999999999979 0.00999999999999979 0.0 935
+936 0.00369095802307129 0.0 0.0 0.0 936
+937 0.00361013412475586 0.0 0.0 0.0 937
+938 0.00361990928649902 0.00999999999999979 0.00999999999999979 0.0 938
+939 0.0036778450012207 0.0 0.0 0.0 939
+940 0.00370097160339355 0.00999999999999979 0.00999999999999979 0.0 940
+941 0.0296061038970947 0.0199999999999996 0.0199999999999996 0.0 941
+942 0.00377488136291504 0.00999999999999979 0.00999999999999979 0.0 942
+943 0.00529098510742188 0.0 0.0 0.0 943
+944 0.0046539306640625 0.0100000000000016 0.0100000000000016 0.0 944
+945 0.00372815132141113 0.0 0.0 0.0 945
+946 0.00383687019348145 0.00999999999999979 0.00999999999999979 0.0 946
+947 0.00372600555419922 0.0 0.0 0.0 947
+948 0.00372004508972168 0.0 0.0 0.0 948
+949 0.00370407104492188 0.00999999999999979 0.00999999999999979 0.0 949
+950 0.00370383262634277 0.0 0.0 0.0 950
+951 0.0037238597869873 0.00999999999999979 0.00999999999999979 0.0 951
+952 0.00373983383178711 0.00999999999999979 0.0 0.01 952
+953 0.00368404388427734 0.0 0.0 0.0 953
+954 0.00569581985473633 0.00999999999999979 0.00999999999999979 0.0 954
+955 0.00375699996948242 0.0 0.0 0.0 955
+956 0.00373697280883789 0.0 0.0 0.0 956
+957 0.00367903709411621 0.00999999999999979 0.00999999999999979 0.0 957
+958 0.00369405746459961 0.0 0.0 0.0 958
+959 0.00399684906005859 0.00999999999999979 0.00999999999999979 0.0 959
+960 0.00383996963500977 0.0 0.0 0.0 960
+961 0.00363612174987793 0.0 0.0 0.0 961
+962 0.00361013412475586 0.00999999999999979 0.00999999999999979 0.0 962
+963 0.00373411178588867 0.0 0.0 0.0 963
+964 0.00365495681762695 0.0 0.0 0.0 964
+965 0.0036311149597168 0.00999999999999979 0.00999999999999979 0.0 965
+966 0.00362300872802734 0.0 0.0 0.0 966
+967 0.00367403030395508 0.0100000000000016 0.0100000000000016 0.0 967
+968 0.00365304946899414 0.0 0.0 0.0 968
+969 0.00368213653564453 0.0 0.0 0.0 969
+970 0.0036468505859375 0.00999999999999979 0.00999999999999979 0.0 970
+971 0.00365900993347168 0.0 0.0 0.0 971
+972 0.00365519523620605 0.0 0.0 0.0 972
+973 0.00365710258483887 0.00999999999999979 0.00999999999999979 0.0 973
+974 0.00362801551818848 0.0 0.0 0.0 974
+975 0.00365090370178223 0.0 0.0 0.0 975
+976 0.00363993644714355 0.0 0.0 0.0 976
+977 0.00367403030395508 0.0 0.0 0.0 977
+978 0.0291531085968018 0.0299999999999994 0.0299999999999994 0.0 978
+979 0.00371599197387695 0.00999999999999979 0.00999999999999979 0.0 979
+980 0.00370097160339355 0.0 0.0 0.0 980
+981 0.00372910499572754 0.0 0.0 0.0 981
+982 0.00373220443725586 0.0100000000000016 0.0100000000000016 0.0 982
+983 0.00378298759460449 0.0 0.0 0.0 983
+984 0.00374412536621094 0.0 0.0 0.0 984
+985 0.00372099876403809 0.00999999999999979 0.00999999999999979 0.0 985
+986 0.00369501113891602 0.0 0.0 0.0 986
+987 0.0042259693145752 0.00999999999999979 0.00999999999999979 0.0 987
+988 0.00376200675964355 0.0 0.0 0.0 988
+989 0.00373697280883789 0.0 0.0 0.0 989
+990 0.00372409820556641 0.00999999999999979 0.00999999999999979 0.0 990
+991 0.00370192527770996 0.0 0.0 0.0 991
+992 0.00368189811706543 0.0 0.0 0.0 992
+993 0.00370502471923828 0.00999999999999979 0.00999999999999979 0.0 993
+994 0.00371217727661133 0.0 0.0 0.0 994
+995 0.0036919116973877 0.00999999999999979 0.00999999999999979 0.0 995
+996 0.00366711616516113 0.0 0.0 0.0 996
+997 0.00371313095092773 0.0 0.0 0.0 997
+998 0.00365209579467773 0.00999999999999979 0.00999999999999979 0.0 998
+999 0.00362896919250488 0.0 0.0 0.0 999
+1000 0.00367307662963867 0.0 0.0 0.0 1000
diff --git a/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log
new file mode 100644
index 000000000..d8a6aa314
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log
@@ -0,0 +1,82 @@
+========================== 2009-04-01T16:46:41 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'ParserBenchmarkYAML' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+ParserBenchmarkYAML#parser:
+ real total user system
+sum 4.506546021 4.490000000 4.480000000 0.010000000
+min 0.003598928 0.000000000 0.000000000 0.000000000
+std- 0.000288588 -0.001817113 -0.001826296 -0.000306228
+mean 0.004506546 0.004490000 0.004480000 0.000010000
+std+ 0.008724504 0.010797113 0.010786296 0.000326228
+max 0.042540073 0.040000000 0.040000000 0.010000000
+std 0.004217958 0.006307113 0.006306296 0.000316228
+std% 93.596247306 140.470232048 140.765535944 3162.277660168
+harm 0.003882332 nan nan nan
+geo 0.004019118 0.000000000 0.000000000 0.000000000
+q1 0.003660917 0.000000000 0.000000000 0.000000000
+med 0.003705978 0.000000000 0.000000000 0.000000000
+q3 0.003748715 0.010000000 0.010000000 0.000000000
+ 1000 221.89943 0.004506546
+ calls calls/sec secs/call
+
+ 0.04059 -|
+ 0.03670 -|
+ 0.03280 -|
+ 0.02891 -|*
+ 0.02502 -|
+ 0.02112 -|
+ 0.01723 -|
+ 0.01333 -|
+ 0.00944 -|
+ 0.00555 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00371, iqr=0.00009, factor=3.00):
+high=56 very_high=119
+
+Ljung-Box statistics: q=433.20488 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+ParserBenchmarkYAML#parser:
+ real total user system
+sum 4.454077959 4.430000000 4.420000000 0.010000000
+min 0.003582954 0.000000000 0.000000000 0.000000000
+std- 0.000263948 -0.001903657 -0.001912749 -0.000306228
+mean 0.004454078 0.004430000 0.004420000 0.000010000
+std+ 0.008644208 0.010763657 0.010752749 0.000326228
+max 0.035927057 0.040000000 0.040000000 0.010000000
+std 0.004190130 0.006333657 0.006332749 0.000316228
+std% 94.074019869 142.971948832 143.274853190 3162.277660168
+harm 0.003836471 nan nan nan
+geo 0.003968258 0.000000000 0.000000000 0.000000000
+q1 0.003650367 0.000000000 0.000000000 0.000000000
+med 0.003690004 0.000000000 0.000000000 0.000000000
+q3 0.003731966 0.010000000 0.010000000 0.000000000
+ 1000 224.51336 0.004454078
+ calls calls/sec secs/call
+
+ 0.03431 -|
+ 0.03108 -|*
+ 0.02784 -|*
+ 0.02461 -|
+ 0.02137 -|
+ 0.01814 -|
+ 0.01490 -|
+ 0.01167 -|
+ 0.00843 -|
+ 0.00520 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00369, iqr=0.00008, factor=3.00):
+high=58 very_high=100
+
+Ljung-Box statistics: q=451.12745 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:46:54 CEST ===========================
+
+Writing measurement data file '/data/scm/json/benchmarks/data/ParserBenchmarkYAML#parser.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/ParserBenchmarkYAML#parser-autocorrelation.dat'.
diff --git a/vendor/gems/json-1.5.1/benchmarks/generator2_benchmark.rb b/vendor/gems/json-1.5.1/benchmarks/generator2_benchmark.rb
new file mode 100755
index 000000000..9885143ed
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/generator2_benchmark.rb
@@ -0,0 +1,222 @@
+#!/usr/bin/env ruby
+# CODING: UTF-8
+
+require 'rbconfig'
+RUBY_PATH=File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
+RAKE_PATH=File.join(Config::CONFIG['bindir'], 'rake')
+require 'bullshit'
+case ARGV.first
+when 'ext'
+ require 'json/ext'
+when 'pure'
+ require 'json/pure'
+when 'rails'
+ require 'active_support'
+when 'yajl'
+ require 'yajl'
+ require 'yajl/json_gem'
+ require 'stringio'
+end
+
+module JSON
+ def self.[](*) end
+end
+
+module Generator2BenchmarkCommon
+ include JSON
+
+ def setup
+ @big = eval File.read(File.join(File.dirname(__FILE__), 'ohai.ruby'))
+ end
+
+ def generic_reset_method
+ @result and @result.size >= 16 or raise @result.to_s
+ end
+end
+
+module JSONGeneratorCommon
+ include Generator2BenchmarkCommon
+
+ def benchmark_generator_fast
+ @result = JSON.fast_generate(@big)
+ end
+
+ alias reset_benchmark_generator_fast generic_reset_method
+
+ def benchmark_generator_safe
+ @result = JSON.generate(@big)
+ end
+
+ alias reset_benchmark_generator_safe generic_reset_method
+
+ def benchmark_generator_pretty
+ @result = JSON.pretty_generate(@big)
+ end
+
+ alias reset_benchmark_generator_pretty generic_reset_method
+
+ def benchmark_generator_ascii
+ @result = JSON.generate(@big, :ascii_only => true)
+ end
+
+ alias reset_benchmark_generator_ascii generic_reset_method
+end
+
+class Generator2BenchmarkExt < Bullshit::RepeatCase
+ include JSONGeneratorCommon
+
+ warmup yes
+ iterations 2000
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+end
+
+class Generator2BenchmarkPure < Bullshit::RepeatCase
+ include JSONGeneratorCommon
+
+ warmup yes
+ iterations 400
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+end
+
+class Generator2BenchmarkRails < Bullshit::RepeatCase
+ include Generator2BenchmarkCommon
+
+ warmup yes
+ iterations 400
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_generator
+ @result = ActiveSupport::JSON.encode @big
+ end
+
+ alias reset_benchmark_generator generic_reset_method
+end
+
+class Generator2BenchmarkYajl < Bullshit::RepeatCase
+ include Generator2BenchmarkCommon
+
+ warmup yes
+ iterations 2000
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_generator
+ output = StringIO.new
+ Yajl::Encoder.new.encode(@big, output)
+ @result = output.string
+ end
+
+ def benchmark_generator_gem_api
+ @result = @big.to_json
+ end
+
+ def reset_benchmark_generator
+ generic_reset_method
+ end
+end
+
+if $0 == __FILE__
+ Bullshit::Case.autorun false
+
+ case ARGV.first
+ when 'ext'
+ Generator2BenchmarkExt.run
+ when 'pure'
+ Generator2BenchmarkPure.run
+ when 'rails'
+ Generator2BenchmarkRails.run
+ when 'yajl'
+ Generator2BenchmarkYajl.run
+ else
+ system "#{RAKE_PATH} clean"
+ system "#{RUBY_PATH} #$0 rails"
+ system "#{RUBY_PATH} #$0 pure"
+ system "#{RAKE_PATH} compile_ext"
+ system "#{RUBY_PATH} #$0 ext"
+ system "#{RUBY_PATH} #$0 yajl"
+ Bullshit.compare do
+ output_filename File.join(File.dirname(__FILE__), 'data', 'Generator2BenchmarkComparison.log')
+
+ benchmark Generator2BenchmarkExt, :generator_fast, :load => yes
+ benchmark Generator2BenchmarkExt, :generator_safe, :load => yes
+ benchmark Generator2BenchmarkExt, :generator_pretty, :load => yes
+ benchmark Generator2BenchmarkExt, :generator_ascii, :load => yes
+ benchmark Generator2BenchmarkPure, :generator_fast, :load => yes
+ benchmark Generator2BenchmarkPure, :generator_safe, :load => yes
+ benchmark Generator2BenchmarkPure, :generator_pretty, :load => yes
+ benchmark Generator2BenchmarkPure, :generator_ascii, :load => yes
+ benchmark Generator2BenchmarkRails, :generator, :load => yes
+ benchmark Generator2BenchmarkYajl, :generator, :load => yes
+ benchmark Generator2BenchmarkYajl, :generator_gem_api, :load => yes
+ end
+ end
+end
+
diff --git a/vendor/gems/json-1.5.1/benchmarks/generator_benchmark.rb b/vendor/gems/json-1.5.1/benchmarks/generator_benchmark.rb
new file mode 100755
index 000000000..83fa5776c
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/generator_benchmark.rb
@@ -0,0 +1,224 @@
+#!/usr/bin/env ruby
+# CODING: UTF-8
+
+require 'rbconfig'
+RUBY_PATH=File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
+RAKE_PATH=File.join(Config::CONFIG['bindir'], 'rake')
+require 'bullshit'
+case ARGV.first
+when 'ext'
+ require 'json/ext'
+when 'pure'
+ require 'json/pure'
+when 'rails'
+ require 'active_support'
+when 'yajl'
+ require 'yajl'
+ require 'yajl/json_gem'
+ require 'stringio'
+end
+
+module JSON
+ def self.[](*) end
+end
+
+module GeneratorBenchmarkCommon
+ include JSON
+
+ def setup
+ a = [ nil, false, true, "fÖßÄr", [ "n€st€d", true ], { "fooß" => "bär", "quux" => true } ]
+ puts a.to_json if a.respond_to?(:to_json)
+ @big = a * 100
+ end
+
+ def generic_reset_method
+ @result and @result.size > 2 + 6 * @big.size or raise @result.to_s
+ end
+end
+
+module JSONGeneratorCommon
+ include GeneratorBenchmarkCommon
+
+ def benchmark_generator_fast
+ @result = JSON.fast_generate(@big)
+ end
+
+ alias reset_benchmark_generator_fast generic_reset_method
+
+ def benchmark_generator_safe
+ @result = JSON.generate(@big)
+ end
+
+ alias reset_benchmark_generator_safe generic_reset_method
+
+ def benchmark_generator_pretty
+ @result = JSON.pretty_generate(@big)
+ end
+
+ alias reset_benchmark_generator_pretty generic_reset_method
+
+ def benchmark_generator_ascii
+ @result = JSON.generate(@big, :ascii_only => true)
+ end
+
+ alias reset_benchmark_generator_ascii generic_reset_method
+end
+
+class GeneratorBenchmarkExt < Bullshit::RepeatCase
+ include JSONGeneratorCommon
+
+ warmup yes
+ iterations 2000
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+end
+
+class GeneratorBenchmarkPure < Bullshit::RepeatCase
+ include JSONGeneratorCommon
+
+ warmup yes
+ iterations 400
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+end
+
+class GeneratorBenchmarkRails < Bullshit::RepeatCase
+ include GeneratorBenchmarkCommon
+
+ warmup yes
+ iterations 400
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_generator
+ @result = ActiveSupport::JSON.encode @big
+ end
+
+ alias reset_benchmark_generator generic_reset_method
+end
+
+class GeneratorBenchmarkYajl < Bullshit::RepeatCase
+ include GeneratorBenchmarkCommon
+
+ warmup yes
+ iterations 2000
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_generator
+ output = StringIO.new
+ Yajl::Encoder.new.encode(@big, output)
+ @result = output.string
+ end
+
+ def benchmark_generator_gem_api
+ @result = @big.to_json
+ end
+
+ def reset_benchmark_generator
+ generic_reset_method
+ end
+end
+
+if $0 == __FILE__
+ Bullshit::Case.autorun false
+
+ case ARGV.first
+ when 'ext'
+ GeneratorBenchmarkExt.run
+ when 'pure'
+ GeneratorBenchmarkPure.run
+ when 'rails'
+ GeneratorBenchmarkRails.run
+ when 'yajl'
+ GeneratorBenchmarkYajl.run
+ else
+ system "#{RAKE_PATH} clean"
+ system "#{RUBY_PATH} #$0 rails"
+ system "#{RUBY_PATH} #$0 pure"
+ system "#{RAKE_PATH} compile_ext"
+ system "#{RUBY_PATH} #$0 ext"
+ system "#{RUBY_PATH} #$0 yajl"
+ Bullshit.compare do
+ output_filename File.join(File.dirname(__FILE__), 'data', 'GeneratorBenchmarkComparison.log')
+
+ benchmark GeneratorBenchmarkExt, :generator_fast, :load => yes
+ benchmark GeneratorBenchmarkExt, :generator_safe, :load => yes
+ benchmark GeneratorBenchmarkExt, :generator_pretty, :load => yes
+ benchmark GeneratorBenchmarkExt, :generator_ascii, :load => yes
+ benchmark GeneratorBenchmarkPure, :generator_fast, :load => yes
+ benchmark GeneratorBenchmarkPure, :generator_safe, :load => yes
+ benchmark GeneratorBenchmarkPure, :generator_pretty, :load => yes
+ benchmark GeneratorBenchmarkPure, :generator_ascii, :load => yes
+ benchmark GeneratorBenchmarkRails, :generator, :load => yes
+ benchmark GeneratorBenchmarkYajl, :generator, :load => yes
+ benchmark GeneratorBenchmarkYajl, :generator_gem_api, :load => yes
+ end
+ end
+end
+
diff --git a/vendor/gems/json-1.5.1/benchmarks/ohai.json b/vendor/gems/json-1.5.1/benchmarks/ohai.json
new file mode 100644
index 000000000..584bdbd08
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/ohai.json
@@ -0,0 +1,1216 @@
+{
+ "command": {
+ "ps": "ps -ef"
+ },
+ "kernel": {
+ "modules": {
+ "org.virtualbox.kext.VBoxDrv": {
+ "size": 118784,
+ "version": "2.2.0",
+ "index": "114",
+ "refcount": "3"
+ },
+ "com.cisco.nke.ipsec": {
+ "size": 454656,
+ "version": "2.0.1",
+ "index": "111",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleAPIC": {
+ "size": 12288,
+ "version": "1.4",
+ "index": "26",
+ "refcount": "0"
+ },
+ "com.apple.driver.AirPort.Atheros": {
+ "size": 593920,
+ "version": "318.8.3",
+ "index": "88",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleIntelCPUPowerManagement": {
+ "size": 102400,
+ "version": "59.0.1",
+ "index": "22",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOStorageFamily": {
+ "size": 98304,
+ "version": "1.5.5",
+ "index": "44",
+ "refcount": "9"
+ },
+ "com.apple.iokit.IOATAPIProtocolTransport": {
+ "size": 16384,
+ "version": "1.5.2",
+ "index": "52",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOPCIFamily": {
+ "size": 65536,
+ "version": "2.5",
+ "index": "17",
+ "refcount": "18"
+ },
+ "com.apple.driver.AppleHPET": {
+ "size": 12288,
+ "version": "1.3",
+ "index": "33",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleUSBHub": {
+ "size": 49152,
+ "version": "3.2.7",
+ "index": "47",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOFireWireFamily": {
+ "size": 258048,
+ "version": "3.4.6",
+ "index": "49",
+ "refcount": "2"
+ },
+ "com.apple.driver.AppleUSBComposite": {
+ "size": 16384,
+ "version": "3.2.0",
+ "index": "60",
+ "refcount": "1"
+ },
+ "com.apple.driver.AppleIntelPIIXATA": {
+ "size": 36864,
+ "version": "2.0.0",
+ "index": "41",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleSmartBatteryManager": {
+ "size": 28672,
+ "version": "158.6.0",
+ "index": "32",
+ "refcount": "0"
+ },
+ "com.apple.filesystems.udf": {
+ "size": 233472,
+ "version": "2.0.2",
+ "index": "119",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOSMBusFamily": {
+ "size": 12288,
+ "version": "1.1",
+ "index": "27",
+ "refcount": "2"
+ },
+ "com.apple.iokit.IOACPIFamily": {
+ "size": 16384,
+ "version": "1.2.0",
+ "index": "18",
+ "refcount": "10"
+ },
+ "foo.tap": {
+ "size": 24576,
+ "version": "1.0",
+ "index": "113",
+ "refcount": "0"
+ },
+ "com.vmware.kext.vmx86": {
+ "size": 864256,
+ "version": "2.0.4",
+ "index": "104",
+ "refcount": "0"
+ },
+ "com.apple.iokit.CHUDUtils": {
+ "size": 28672,
+ "version": "200",
+ "index": "98",
+ "refcount": "0"
+ },
+ "org.virtualbox.kext.VBoxNetAdp": {
+ "size": 8192,
+ "version": "2.2.0",
+ "index": "117",
+ "refcount": "0"
+ },
+ "com.apple.filesystems.autofs": {
+ "size": 45056,
+ "version": "2.0.1",
+ "index": "109",
+ "refcount": "0"
+ },
+ "com.vmware.kext.vmnet": {
+ "size": 36864,
+ "version": "2.0.4",
+ "index": "108",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleACPIButtons": {
+ "size": 16384,
+ "version": "1.2.4",
+ "index": "30",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleFWOHCI": {
+ "size": 139264,
+ "version": "3.7.2",
+ "index": "50",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOSCSIArchitectureModelFamily": {
+ "size": 102400,
+ "version": "2.0.5",
+ "index": "51",
+ "refcount": "4"
+ },
+ "com.apple.iokit.IOSCSIBlockCommandsDevice": {
+ "size": 90112,
+ "version": "2.0.5",
+ "index": "57",
+ "refcount": "1"
+ },
+ "com.apple.driver.AppleACPIPCI": {
+ "size": 12288,
+ "version": "1.2.4",
+ "index": "31",
+ "refcount": "0"
+ },
+ "com.apple.security.seatbelt": {
+ "size": 98304,
+ "version": "107.10",
+ "index": "25",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleUpstreamUserClient": {
+ "size": 16384,
+ "version": "2.7.2",
+ "index": "100",
+ "refcount": "0"
+ },
+ "com.apple.kext.OSvKernDSPLib": {
+ "size": 12288,
+ "version": "1.1",
+ "index": "79",
+ "refcount": "1"
+ },
+ "com.apple.iokit.IOBDStorageFamily": {
+ "size": 20480,
+ "version": "1.5",
+ "index": "58",
+ "refcount": "1"
+ },
+ "com.apple.iokit.IOGraphicsFamily": {
+ "size": 118784,
+ "version": "1.7.1",
+ "index": "70",
+ "refcount": "5"
+ },
+ "com.apple.iokit.IONetworkingFamily": {
+ "size": 90112,
+ "version": "1.6.1",
+ "index": "82",
+ "refcount": "4"
+ },
+ "com.apple.iokit.IOATAFamily": {
+ "size": 53248,
+ "version": "2.0.0",
+ "index": "40",
+ "refcount": "2"
+ },
+ "com.apple.iokit.IOUSBHIDDriver": {
+ "size": 20480,
+ "version": "3.2.2",
+ "index": "63",
+ "refcount": "2"
+ },
+ "org.virtualbox.kext.VBoxUSB": {
+ "size": 28672,
+ "version": "2.2.0",
+ "index": "115",
+ "refcount": "0"
+ },
+ "com.vmware.kext.vmioplug": {
+ "size": 24576,
+ "version": "2.0.4",
+ "index": "107",
+ "refcount": "0"
+ },
+ "com.apple.security.TMSafetyNet": {
+ "size": 12288,
+ "version": "3",
+ "index": "23",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IONDRVSupport": {
+ "size": 57344,
+ "version": "1.7.1",
+ "index": "71",
+ "refcount": "3"
+ },
+ "com.apple.BootCache": {
+ "size": 20480,
+ "version": "30.3",
+ "index": "20",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOUSBUserClient": {
+ "size": 8192,
+ "version": "3.2.4",
+ "index": "46",
+ "refcount": "1"
+ },
+ "com.apple.iokit.IOSCSIMultimediaCommandsDevice": {
+ "size": 90112,
+ "version": "2.0.5",
+ "index": "59",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleIRController": {
+ "size": 20480,
+ "version": "110",
+ "index": "78",
+ "refcount": "0"
+ },
+ "com.apple.driver.AudioIPCDriver": {
+ "size": 16384,
+ "version": "1.0.5",
+ "index": "81",
+ "refcount": "0"
+ },
+ "org.virtualbox.kext.VBoxNetFlt": {
+ "size": 16384,
+ "version": "2.2.0",
+ "index": "116",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleLPC": {
+ "size": 12288,
+ "version": "1.2.11",
+ "index": "73",
+ "refcount": "0"
+ },
+ "com.apple.iokit.CHUDKernLib": {
+ "size": 20480,
+ "version": "196",
+ "index": "93",
+ "refcount": "2"
+ },
+ "com.apple.iokit.CHUDProf": {
+ "size": 49152,
+ "version": "207",
+ "index": "97",
+ "refcount": "0"
+ },
+ "com.apple.NVDAResman": {
+ "size": 2478080,
+ "version": "5.3.6",
+ "index": "90",
+ "refcount": "2"
+ },
+ "com.apple.driver.AppleACPIEC": {
+ "size": 20480,
+ "version": "1.2.4",
+ "index": "28",
+ "refcount": "0"
+ },
+ "foo.tun": {
+ "size": 24576,
+ "version": "1.0",
+ "index": "118",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOSerialFamily": {
+ "size": 36864,
+ "version": "9.3",
+ "index": "102",
+ "refcount": "1"
+ },
+ "com.apple.GeForce": {
+ "size": 622592,
+ "version": "5.3.6",
+ "index": "96",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOCDStorageFamily": {
+ "size": 32768,
+ "version": "1.5",
+ "index": "55",
+ "refcount": "3"
+ },
+ "com.apple.driver.AppleUSBEHCI": {
+ "size": 73728,
+ "version": "3.2.5",
+ "index": "39",
+ "refcount": "0"
+ },
+ "com.apple.nvidia.nv50hal": {
+ "size": 2445312,
+ "version": "5.3.6",
+ "index": "91",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleSMBIOS": {
+ "size": 16384,
+ "version": "1.1.1",
+ "index": "29",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleBacklight": {
+ "size": 16384,
+ "version": "1.4.4",
+ "index": "72",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleACPIPlatform": {
+ "size": 253952,
+ "version": "1.2.4",
+ "index": "19",
+ "refcount": "3"
+ },
+ "com.apple.iokit.SCSITaskUserClient": {
+ "size": 24576,
+ "version": "2.0.5",
+ "index": "54",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOHIDFamily": {
+ "size": 233472,
+ "version": "1.5.3",
+ "index": "21",
+ "refcount": "7"
+ },
+ "com.apple.driver.DiskImages": {
+ "size": 65536,
+ "version": "195.2.2",
+ "index": "101",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IODVDStorageFamily": {
+ "size": 24576,
+ "version": "1.5",
+ "index": "56",
+ "refcount": "2"
+ },
+ "com.apple.driver.XsanFilter": {
+ "size": 20480,
+ "version": "2.7.91",
+ "index": "53",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleEFIRuntime": {
+ "size": 12288,
+ "version": "1.2.0",
+ "index": "35",
+ "refcount": "1"
+ },
+ "com.apple.driver.AppleRTC": {
+ "size": 20480,
+ "version": "1.2.3",
+ "index": "34",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOFireWireIP": {
+ "size": 36864,
+ "version": "1.7.6",
+ "index": "83",
+ "refcount": "0"
+ },
+ "com.vmware.kext.vmci": {
+ "size": 45056,
+ "version": "2.0.4",
+ "index": "106",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IO80211Family": {
+ "size": 126976,
+ "version": "215.1",
+ "index": "87",
+ "refcount": "1"
+ },
+ "com.apple.nke.applicationfirewall": {
+ "size": 32768,
+ "version": "1.0.77",
+ "index": "24",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOAHCIBlockStorage": {
+ "size": 69632,
+ "version": "1.2.0",
+ "index": "48",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleUSBUHCI": {
+ "size": 57344,
+ "version": "3.2.5",
+ "index": "38",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOAHCIFamily": {
+ "size": 24576,
+ "version": "1.5.0",
+ "index": "42",
+ "refcount": "2"
+ },
+ "com.apple.driver.AppleAHCIPort": {
+ "size": 53248,
+ "version": "1.5.2",
+ "index": "43",
+ "refcount": "0"
+ },
+ "com.apple.driver.AppleEFINVRAM": {
+ "size": 24576,
+ "version": "1.2.0",
+ "index": "36",
+ "refcount": "0"
+ },
+ "com.apple.iokit.IOUSBFamily": {
+ "size": 167936,
+ "version": "3.2.7",
+ "index": "37",
+ "refcount": "13"
+ },
+ "com.apple.driver.AppleUSBMergeNub": {
+ "size": 12288,
+ "version": "3.2.4",
+ "index": "61",
+ "refcount": "0"
+ }
+ },
+ "machine": "i386",
+ "name": "Darwin",
+ "os": "Darwin",
+ "version": "Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1\/RELEASE_I386",
+ "release": "9.6.0"
+ },
+ "platform_version": "10.5.6",
+ "platform": "mac_os_x",
+ "ipaddress": "192.168.88.1",
+ "keys": {
+ "ssh": {
+ "host_dsa_public": "private",
+ "host_rsa_public": "private"
+ }
+ },
+ "network": {
+ "settings": {
+ "net.inet6.ip6.forwarding": "0",
+ "net.inet.ip.dummynet.debug": "0",
+ "net.inet.ip.rtexpire": "10",
+ "net.inet6.ipsec6.esp_trans_deflev": "1",
+ "net.inet.tcp.tcbhashsize": "4096",
+ "net.key.esp_auth": "0",
+ "net.inet6.ip6.hlim": "64",
+ "net.inet.ip.fw.dyn_fin_lifetime": "1",
+ "net.inet.ip.fw.dyn_udp_lifetime": "10",
+ "net.inet.icmp.bmcastecho": "1",
+ "net.athforceBias": "2 2",
+ "net.athbgscan": "1 1",
+ "net.inet.tcp.reass.maxsegments": "2048",
+ "net.inet6.ip6.auto_flowlabel": "1",
+ "net.inet6.ip6.rtmaxcache": "128",
+ "net.inet.tcp.sendspace": "131072",
+ "net.inet.tcp.keepinit": "75000",
+ "net.inet.ip.dummynet.max_chain_len": "16",
+ "net.inet.tcp.rfc1644": "0",
+ "net.inet.ip.fw.curr_dyn_buckets": "256",
+ "net.inet.ip.dummynet.ready_heap": "0",
+ "net.inet.ip.portrange.first": "49152",
+ "net.inet.tcp.background_io_trigger": "5",
+ "net.link.ether.inet.host_down_time": "20",
+ "net.inet6.ipsec6.def_policy": "1",
+ "net.inet6.ipsec6.ecn": "0",
+ "net.inet.ip.fastforwarding": "0",
+ "net.athaddbaignore": "0 0",
+ "net.inet6.ip6.v6only": "0",
+ "net.inet.tcp.sack": "1",
+ "net.inet6.ip6.rtexpire": "3600",
+ "net.link.ether.inet.proxyall": "0",
+ "net.inet6.ip6.keepfaith": "0",
+ "net.key.spi_trycnt": "1000",
+ "net.link.ether.inet.prune_intvl": "300",
+ "net.inet.tcp.ecn_initiate_out": "0",
+ "net.inet.ip.fw.dyn_rst_lifetime": "1",
+ "net.local.stream.sendspace": "8192",
+ "net.inet.tcp.socket_unlocked_on_output": "1",
+ "net.inet.ip.fw.verbose_limit": "0",
+ "net.local.dgram.recvspace": "4096",
+ "net.inet.ipsec.debug": "0",
+ "net.link.ether.inet.log_arp_warnings": "0",
+ "net.inet.tcp.ecn_negotiate_in": "0",
+ "net.inet.tcp.rfc3465": "1",
+ "net.inet.tcp.icmp_may_rst": "1",
+ "net.link.ether.inet.sendllconflict": "0",
+ "net.inet.ipsec.ah_offsetmask": "0",
+ "net.key.blockacq_count": "10",
+ "net.inet.tcp.delayed_ack": "3",
+ "net.inet.ip.fw.verbose": "2",
+ "net.inet.ip.fw.dyn_count": "0",
+ "net.inet.tcp.slowlink_wsize": "8192",
+ "net.inet6.ip6.fw.enable": "1",
+ "net.inet.ip.portrange.hilast": "65535",
+ "net.inet.icmp.maskrepl": "0",
+ "net.link.ether.inet.apple_hwcksum_rx": "1",
+ "net.inet.tcp.drop_synfin": "1",
+ "net.key.spi_maxval": "268435455",
+ "net.inet.ipsec.ecn": "0",
+ "net.inet.ip.fw.dyn_keepalive": "1",
+ "net.key.int_random": "60",
+ "net.key.debug": "0",
+ "net.inet.ip.dummynet.curr_time": "0",
+ "net.inet.udp.blackhole": "0",
+ "net.athaggrqmin": "1 1",
+ "net.athppmenable": "1 1",
+ "net.inet.ip.fw.dyn_syn_lifetime": "20",
+ "net.inet.tcp.keepidle": "7200000",
+ "net.inet6.ip6.tempvltime": "604800",
+ "net.inet.tcp.recvspace": "358400",
+ "net.inet.tcp.keepintvl": "75000",
+ "net.inet.udp.maxdgram": "9216",
+ "net.inet.ip.maxchainsent": "0",
+ "net.inet.ipsec.esp_net_deflev": "1",
+ "net.inet6.icmp6.nd6_useloopback": "1",
+ "net.inet.tcp.slowstart_flightsize": "1",
+ "net.inet.ip.fw.debug": "0",
+ "net.inet.ip.linklocal.in.allowbadttl": "1",
+ "net.key.spi_minval": "256",
+ "net.inet.ip.forwarding": "0",
+ "net.inet.tcp.v6mssdflt": "1024",
+ "net.key.larval_lifetime": "30",
+ "net.inet6.ip6.fw.verbose_limit": "0",
+ "net.inet.ip.dummynet.red_lookup_depth": "256",
+ "net.inet.tcp.pcbcount": "36",
+ "net.inet.ip.fw.dyn_ack_lifetime": "300",
+ "net.inet.ip.portrange.lowlast": "600",
+ "net.athCCAThreshold": "28 28",
+ "net.link.ether.inet.useloopback": "1",
+ "net.athqdepth": "0 0",
+ "net.inet.ip.ttl": "64",
+ "net.inet.ip.rtmaxcache": "128",
+ "net.inet.ipsec.bypass": "0",
+ "net.inet6.icmp6.nd6_debug": "0",
+ "net.inet.ip.use_route_genid": "1",
+ "net.inet6.icmp6.rediraccept": "1",
+ "net.inet.ip.fw.static_count": "1",
+ "net.inet6.ip6.fw.debug": "0",
+ "net.inet.udp.pcbcount": "104",
+ "net.inet.ipsec.esp_randpad": "-1",
+ "net.inet6.icmp6.nd6_maxnudhint": "0",
+ "net.inet.tcp.always_keepalive": "0",
+ "net.inet.udp.checksum": "1",
+ "net.link.ether.inet.keep_announcements": "1",
+ "net.athfixedDropThresh": "150 150",
+ "net.inet6.ip6.kame_version": "20010528\/apple-darwin",
+ "net.inet.ip.fw.dyn_max": "4096",
+ "net.inet.udp.log_in_vain": "0",
+ "net.inet6.icmp6.nd6_mmaxtries": "3",
+ "net.inet.ip.rtminexpire": "10",
+ "net.inet.ip.fw.dyn_buckets": "256",
+ "net.inet6.ip6.accept_rtadv": "0",
+ "net.inet6.ip6.rr_prune": "5",
+ "net.key.ah_keymin": "128",
+ "net.inet.ip.redirect": "1",
+ "net.inet.tcp.sack_globalmaxholes": "65536",
+ "net.inet.ip.keepfaith": "0",
+ "net.inet.ip.dummynet.expire": "1",
+ "net.inet.ip.gifttl": "30",
+ "net.inet.ip.portrange.last": "65535",
+ "net.inet.ipsec.ah_net_deflev": "1",
+ "net.inet6.icmp6.nd6_delay": "5",
+ "net.inet.tcp.packetchain": "50",
+ "net.inet6.ip6.hdrnestlimit": "50",
+ "net.inet.tcp.newreno": "0",
+ "net.inet6.ip6.dad_count": "1",
+ "net.inet6.ip6.auto_linklocal": "1",
+ "net.inet6.ip6.temppltime": "86400",
+ "net.inet.tcp.strict_rfc1948": "0",
+ "net.athdupie": "1 1",
+ "net.inet.ip.dummynet.red_max_pkt_size": "1500",
+ "net.inet.ip.maxfrags": "2048",
+ "net.inet.tcp.log_in_vain": "0",
+ "net.inet.tcp.rfc1323": "1",
+ "net.inet.ip.subnets_are_local": "0",
+ "net.inet.ip.dummynet.search_steps": "0",
+ "net.inet.icmp.icmplim": "250",
+ "net.link.ether.inet.apple_hwcksum_tx": "1",
+ "net.inet6.icmp6.redirtimeout": "600",
+ "net.inet.ipsec.ah_cleartos": "1",
+ "net.inet6.ip6.log_interval": "5",
+ "net.link.ether.inet.max_age": "1200",
+ "net.inet.ip.fw.enable": "1",
+ "net.inet6.ip6.redirect": "1",
+ "net.athaggrfmax": "28 28",
+ "net.inet.ip.maxfragsperpacket": "128",
+ "net.inet6.ip6.use_deprecated": "1",
+ "net.link.generic.system.dlil_input_sanity_check": "0",
+ "net.inet.tcp.sack_globalholes": "0",
+ "net.inet.tcp.reass.cursegments": "0",
+ "net.inet6.icmp6.nodeinfo": "3",
+ "net.local.inflight": "0",
+ "net.inet.ip.dummynet.hash_size": "64",
+ "net.inet.ip.dummynet.red_avg_pkt_size": "512",
+ "net.inet.ipsec.dfbit": "0",
+ "net.inet.tcp.reass.overflows": "0",
+ "net.inet.tcp.rexmt_thresh": "2",
+ "net.inet6.ip6.maxfrags": "8192",
+ "net.inet6.ip6.rtminexpire": "10",
+ "net.inet6.ipsec6.esp_net_deflev": "1",
+ "net.inet.tcp.blackhole": "0",
+ "net.key.esp_keymin": "256",
+ "net.inet.ip.check_interface": "0",
+ "net.inet.tcp.minmssoverload": "0",
+ "net.link.ether.inet.maxtries": "5",
+ "net.inet.tcp.do_tcpdrain": "0",
+ "net.inet.ipsec.esp_port": "4500",
+ "net.inet6.ipsec6.ah_net_deflev": "1",
+ "net.inet.ip.dummynet.extract_heap": "0",
+ "net.inet.tcp.path_mtu_discovery": "1",
+ "net.inet.ip.intr_queue_maxlen": "50",
+ "net.inet.ipsec.def_policy": "1",
+ "net.inet.ip.fw.autoinc_step": "100",
+ "net.inet.ip.accept_sourceroute": "0",
+ "net.inet.raw.maxdgram": "8192",
+ "net.inet.ip.maxfragpackets": "1024",
+ "net.inet.ip.fw.one_pass": "0",
+ "net.appletalk.routermix": "2000",
+ "net.inet.tcp.tcp_lq_overflow": "1",
+ "net.link.generic.system.ifcount": "9",
+ "net.link.ether.inet.send_conflicting_probes": "1",
+ "net.inet.tcp.background_io_enabled": "1",
+ "net.inet6.ipsec6.debug": "0",
+ "net.inet.tcp.win_scale_factor": "3",
+ "net.key.natt_keepalive_interval": "20",
+ "net.inet.tcp.msl": "15000",
+ "net.inet.ip.portrange.hifirst": "49152",
+ "net.inet.ipsec.ah_trans_deflev": "1",
+ "net.inet.tcp.rtt_min": "1",
+ "net.inet6.ip6.defmcasthlim": "1",
+ "net.inet6.icmp6.nd6_prune": "1",
+ "net.inet6.ip6.fw.verbose": "0",
+ "net.inet.ip.portrange.lowfirst": "1023",
+ "net.inet.tcp.maxseg_unacked": "8",
+ "net.local.dgram.maxdgram": "2048",
+ "net.key.blockacq_lifetime": "20",
+ "net.inet.tcp.sack_maxholes": "128",
+ "net.inet6.ip6.maxfragpackets": "1024",
+ "net.inet6.ip6.use_tempaddr": "0",
+ "net.athpowermode": "0 0",
+ "net.inet.udp.recvspace": "73728",
+ "net.inet.tcp.isn_reseed_interval": "0",
+ "net.inet.tcp.local_slowstart_flightsize": "8",
+ "net.inet.ip.dummynet.searches": "0",
+ "net.inet.ip.intr_queue_drops": "0",
+ "net.link.generic.system.multi_threaded_input": "1",
+ "net.inet.raw.recvspace": "8192",
+ "net.inet.ipsec.esp_trans_deflev": "1",
+ "net.key.prefered_oldsa": "0",
+ "net.local.stream.recvspace": "8192",
+ "net.inet.tcp.sockthreshold": "64",
+ "net.inet6.icmp6.nd6_umaxtries": "3",
+ "net.pstimeout": "20 20",
+ "net.inet.ip.sourceroute": "0",
+ "net.inet.ip.fw.dyn_short_lifetime": "5",
+ "net.inet.tcp.minmss": "216",
+ "net.inet6.ip6.gifhlim": "0",
+ "net.athvendorie": "1 1",
+ "net.inet.ip.check_route_selfref": "1",
+ "net.inet6.icmp6.errppslimit": "100",
+ "net.inet.tcp.mssdflt": "512",
+ "net.inet.icmp.log_redirect": "0",
+ "net.inet6.ipsec6.ah_trans_deflev": "1",
+ "net.inet6.ipsec6.esp_randpad": "-1",
+ "net.inet.icmp.drop_redirect": "0",
+ "net.inet.icmp.timestamp": "0",
+ "net.inet.ip.random_id": "1"
+ },
+ "interfaces": {
+ "vmnet1": {
+ "flags": [
+ "UP",
+ "BROADCAST",
+ "SMART",
+ "RUNNING",
+ "SIMPLEX",
+ "MULTICAST"
+ ],
+ "addresses": [
+ {
+ "broadcast": "192.168.88.255",
+ "netmask": "255.255.255.0",
+ "family": "inet",
+ "address": "192.168.88.1"
+ },
+ {
+ "family": "lladdr",
+ "address": "private"
+ }
+ ],
+ "number": "1",
+ "mtu": "1500",
+ "type": "vmnet",
+ "encapsulation": "Ethernet"
+ },
+ "stf0": {
+ "flags": [
+
+ ],
+ "number": "0",
+ "mtu": "1280",
+ "type": "stf",
+ "encapsulation": "6to4"
+ },
+ "vboxnet0": {
+ "flags": [
+ "BROADCAST",
+ "RUNNING",
+ "SIMPLEX",
+ "MULTICAST"
+ ],
+ "addresses": [
+ {
+ "family": "lladdr",
+ "address": "private"
+ }
+ ],
+ "number": "0",
+ "mtu": "1500",
+ "type": "vboxnet",
+ "encapsulation": "Ethernet"
+ },
+ "lo0": {
+ "flags": [
+ "UP",
+ "LOOPBACK",
+ "RUNNING",
+ "MULTICAST"
+ ],
+ "addresses": [
+ {
+ "scope": "Link",
+ "prefixlen": "64",
+ "family": "inet6",
+ "address": "fe80::1"
+ },
+ {
+ "netmask": "255.0.0.0",
+ "family": "inet",
+ "address": "127.0.0.1"
+ },
+ {
+ "scope": "Node",
+ "prefixlen": "128",
+ "family": "inet6",
+ "address": "::1"
+ },
+ {
+ "scope": "Node",
+ "prefixlen": "128",
+ "family": "inet6",
+ "address": "private"
+ }
+ ],
+ "number": "0",
+ "mtu": "16384",
+ "type": "lo",
+ "encapsulation": "Loopback"
+ },
+ "vboxn": {
+ "counters": {
+ "tx": {
+ "bytes": "0",
+ "packets": "0",
+ "collisions": "0",
+ "compressed": 0,
+ "carrier": 0,
+ "drop": 0,
+ "errors": "0",
+ "overrun": 0
+ },
+ "rx": {
+ "bytes": "0",
+ "packets": "0",
+ "compressed": 0,
+ "drop": 0,
+ "errors": "0",
+ "overrun": 0,
+ "frame": 0,
+ "multicast": 0
+ }
+ }
+ },
+ "gif0": {
+ "flags": [
+ "POINTOPOINT",
+ "MULTICAST"
+ ],
+ "number": "0",
+ "mtu": "1280",
+ "type": "gif",
+ "encapsulation": "IPIP"
+ },
+ "vmnet": {
+ "counters": {
+ "tx": {
+ "bytes": "0",
+ "packets": "0",
+ "collisions": "0",
+ "compressed": 0,
+ "carrier": 0,
+ "drop": 0,
+ "errors": "0",
+ "overrun": 0
+ },
+ "rx": {
+ "bytes": "0",
+ "packets": "0",
+ "compressed": 0,
+ "drop": 0,
+ "errors": "0",
+ "overrun": 0,
+ "frame": 0,
+ "multicast": 0
+ }
+ }
+ },
+ "vmnet8": {
+ "flags": [
+ "UP",
+ "BROADCAST",
+ "SMART",
+ "RUNNING",
+ "SIMPLEX",
+ "MULTICAST"
+ ],
+ "addresses": [
+ {
+ "broadcast": "192.168.237.255",
+ "netmask": "255.255.255.0",
+ "family": "inet",
+ "address": "192.168.237.1"
+ },
+ {
+ "family": "lladdr",
+ "address": "private"
+ }
+ ],
+ "number": "8",
+ "mtu": "1500",
+ "type": "vmnet",
+ "encapsulation": "Ethernet"
+ },
+ "en0": {
+ "status": "inactive",
+ "flags": [
+ "UP",
+ "BROADCAST",
+ "SMART",
+ "RUNNING",
+ "SIMPLEX",
+ "MULTICAST"
+ ],
+ "addresses": [
+ {
+ "family": "lladdr",
+ "address": "private"
+ }
+ ],
+ "number": "0",
+ "mtu": "1500",
+ "media": {
+ "supported": [
+ {
+ "autoselect": {
+ "options": [
+
+ ]
+ }
+ },
+ {
+ "10baseT\/UTP": {
+ "options": [
+ "half-duplex"
+ ]
+ }
+ },
+ {
+ "10baseT\/UTP": {
+ "options": [
+ "full-duplex"
+ ]
+ }
+ },
+ {
+ "10baseT\/UTP": {
+ "options": [
+ "full-duplex",
+ "hw-loopback"
+ ]
+ }
+ },
+ {
+ "10baseT\/UTP": {
+ "options": [
+ "full-duplex",
+ "flow-control"
+ ]
+ }
+ },
+ {
+ "100baseTX": {
+ "options": [
+ "half-duplex"
+ ]
+ }
+ },
+ {
+ "100baseTX": {
+ "options": [
+ "full-duplex"
+ ]
+ }
+ },
+ {
+ "100baseTX": {
+ "options": [
+ "full-duplex",
+ "hw-loopback"
+ ]
+ }
+ },
+ {
+ "100baseTX": {
+ "options": [
+ "full-duplex",
+ "flow-control"
+ ]
+ }
+ },
+ {
+ "1000baseT": {
+ "options": [
+ "full-duplex"
+ ]
+ }
+ },
+ {
+ "1000baseT": {
+ "options": [
+ "full-duplex",
+ "hw-loopback"
+ ]
+ }
+ },
+ {
+ "1000baseT": {
+ "options": [
+ "full-duplex",
+ "flow-control"
+ ]
+ }
+ },
+ {
+ "none": {
+ "options": [
+
+ ]
+ }
+ }
+ ],
+ "selected": [
+ {
+ "autoselect": {
+ "options": [
+
+ ]
+ }
+ }
+ ]
+ },
+ "type": "en",
+ "counters": {
+ "tx": {
+ "bytes": "342",
+ "packets": "0",
+ "collisions": "0",
+ "compressed": 0,
+ "carrier": 0,
+ "drop": 0,
+ "errors": "0",
+ "overrun": 0
+ },
+ "rx": {
+ "bytes": "0",
+ "packets": "0",
+ "compressed": 0,
+ "drop": 0,
+ "errors": "0",
+ "overrun": 0,
+ "frame": 0,
+ "multicast": 0
+ }
+ },
+ "encapsulation": "Ethernet"
+ },
+ "en1": {
+ "status": "active",
+ "flags": [
+ "UP",
+ "BROADCAST",
+ "SMART",
+ "RUNNING",
+ "SIMPLEX",
+ "MULTICAST"
+ ],
+ "addresses": [
+ {
+ "scope": "Link",
+ "prefixlen": "64",
+ "family": "inet6",
+ "address": "private"
+ },
+ {
+ "broadcast": "192.168.1.255",
+ "netmask": "255.255.255.0",
+ "family": "inet",
+ "address": "192.168.1.4"
+ },
+ {
+ "family": "lladdr",
+ "address": "private"
+ }
+ ],
+ "number": "1",
+ "mtu": "1500",
+ "media": {
+ "supported": [
+ {
+ "autoselect": {
+ "options": [
+
+ ]
+ }
+ }
+ ],
+ "selected": [
+ {
+ "autoselect": {
+ "options": [
+
+ ]
+ }
+ }
+ ]
+ },
+ "type": "en",
+ "counters": {
+ "tx": {
+ "bytes": "449206298",
+ "packets": "7041789",
+ "collisions": "0",
+ "compressed": 0,
+ "carrier": 0,
+ "drop": 0,
+ "errors": "95",
+ "overrun": 0
+ },
+ "rx": {
+ "bytes": "13673879120",
+ "packets": "19966002",
+ "compressed": 0,
+ "drop": 0,
+ "errors": "1655893",
+ "overrun": 0,
+ "frame": 0,
+ "multicast": 0
+ }
+ },
+ "arp": {
+ "192.168.1.7": "private"
+ },
+ "encapsulation": "Ethernet"
+ },
+ "fw0": {
+ "status": "inactive",
+ "flags": [
+ "UP",
+ "BROADCAST",
+ "SMART",
+ "RUNNING",
+ "SIMPLEX",
+ "MULTICAST"
+ ],
+ "addresses": [
+ {
+ "family": "lladdr",
+ "address": "private"
+ }
+ ],
+ "number": "0",
+ "mtu": "4078",
+ "media": {
+ "supported": [
+ {
+ "autoselect": {
+ "options": [
+ "full-duplex"
+ ]
+ }
+ }
+ ],
+ "selected": [
+ {
+ "autoselect": {
+ "options": [
+ "full-duplex"
+ ]
+ }
+ }
+ ]
+ },
+ "type": "fw",
+ "counters": {
+ "tx": {
+ "bytes": "346",
+ "packets": "0",
+ "collisions": "0",
+ "compressed": 0,
+ "carrier": 0,
+ "drop": 0,
+ "errors": "0",
+ "overrun": 0
+ },
+ "rx": {
+ "bytes": "0",
+ "packets": "0",
+ "compressed": 0,
+ "drop": 0,
+ "errors": "0",
+ "overrun": 0,
+ "frame": 0,
+ "multicast": 0
+ }
+ },
+ "encapsulation": "1394"
+ }
+ }
+ },
+ "fqdn": "local.local",
+ "ohai_time": 1240624355.08575,
+ "domain": "local",
+ "os": "darwin",
+ "platform_build": "9G55",
+ "os_version": "9.6.0",
+ "hostname": "local",
+ "macaddress": "private",
+ "languages": {
+ "ruby": {
+ "target_os": "darwin9.0",
+ "platform": "universal-darwin9.0",
+ "host_vendor": "apple",
+ "target_vendor": "apple",
+ "target_cpu": "i686",
+ "host_os": "darwin9.0",
+ "host_cpu": "i686",
+ "version": "1.8.6",
+ "host": "i686-apple-darwin9.0",
+ "target": "i686-apple-darwin9.0",
+ "release_date": "2008-03-03"
+ }
+ }
+}
diff --git a/vendor/gems/json-1.5.1/benchmarks/ohai.ruby b/vendor/gems/json-1.5.1/benchmarks/ohai.ruby
new file mode 100644
index 000000000..36b4297e6
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/ohai.ruby
@@ -0,0 +1 @@
+{"kernel"=>{"name"=>"Darwin", "machine"=>"i386", "modules"=>{"com.apple.driver.AppleAPIC"=>{"size"=>12288, "version"=>"1.4", "index"=>"26", "refcount"=>"0"}, "com.apple.driver.AirPort.Atheros"=>{"size"=>593920, "version"=>"318.8.3", "index"=>"88", "refcount"=>"0"}, "com.apple.driver.AppleIntelCPUPowerManagement"=>{"size"=>102400, "version"=>"59.0.1", "index"=>"22", "refcount"=>"0"}, "com.apple.iokit.IOStorageFamily"=>{"size"=>98304, "version"=>"1.5.5", "index"=>"44", "refcount"=>"9"}, "com.apple.iokit.IOATAPIProtocolTransport"=>{"size"=>16384, "version"=>"1.5.2", "index"=>"52", "refcount"=>"0"}, "com.apple.iokit.IOPCIFamily"=>{"size"=>65536, "version"=>"2.5", "index"=>"17", "refcount"=>"18"}, "org.virtualbox.kext.VBoxDrv"=>{"size"=>118784, "version"=>"2.2.0", "index"=>"114", "refcount"=>"3"}, "com.cisco.nke.ipsec"=>{"size"=>454656, "version"=>"2.0.1", "index"=>"111", "refcount"=>"0"}, "com.apple.driver.AppleHPET"=>{"size"=>12288, "version"=>"1.3", "index"=>"33", "refcount"=>"0"}, "com.apple.driver.AppleUSBHub"=>{"size"=>49152, "version"=>"3.2.7", "index"=>"47", "refcount"=>"0"}, "com.apple.iokit.IOFireWireFamily"=>{"size"=>258048, "version"=>"3.4.6", "index"=>"49", "refcount"=>"2"}, "com.apple.driver.AppleUSBComposite"=>{"size"=>16384, "version"=>"3.2.0", "index"=>"60", "refcount"=>"1"}, "com.apple.driver.AppleIntelPIIXATA"=>{"size"=>36864, "version"=>"2.0.0", "index"=>"41", "refcount"=>"0"}, "com.apple.driver.AppleSmartBatteryManager"=>{"size"=>28672, "version"=>"158.6.0", "index"=>"32", "refcount"=>"0"}, "com.apple.filesystems.udf"=>{"size"=>233472, "version"=>"2.0.2", "index"=>"119", "refcount"=>"0"}, "com.apple.iokit.IOSMBusFamily"=>{"size"=>12288, "version"=>"1.1", "index"=>"27", "refcount"=>"2"}, "com.apple.iokit.IOACPIFamily"=>{"size"=>16384, "version"=>"1.2.0", "index"=>"18", "refcount"=>"10"}, "foo.tap"=>{"size"=>24576, "version"=>"1.0", "index"=>"113", "refcount"=>"0"}, "com.vmware.kext.vmx86"=>{"size"=>864256, "version"=>"2.0.4", "index"=>"104", "refcount"=>"0"}, "com.apple.iokit.CHUDUtils"=>{"size"=>28672, "version"=>"200", "index"=>"98", "refcount"=>"0"}, "com.apple.driver.AppleACPIButtons"=>{"size"=>16384, "version"=>"1.2.4", "index"=>"30", "refcount"=>"0"}, "com.apple.driver.AppleFWOHCI"=>{"size"=>139264, "version"=>"3.7.2", "index"=>"50", "refcount"=>"0"}, "com.apple.iokit.IOSCSIArchitectureModelFamily"=>{"size"=>102400, "version"=>"2.0.5", "index"=>"51", "refcount"=>"4"}, "org.virtualbox.kext.VBoxNetAdp"=>{"size"=>8192, "version"=>"2.2.0", "index"=>"117", "refcount"=>"0"}, "com.apple.filesystems.autofs"=>{"size"=>45056, "version"=>"2.0.1", "index"=>"109", "refcount"=>"0"}, "com.vmware.kext.vmnet"=>{"size"=>36864, "version"=>"2.0.4", "index"=>"108", "refcount"=>"0"}, "com.apple.iokit.IOSCSIBlockCommandsDevice"=>{"size"=>90112, "version"=>"2.0.5", "index"=>"57", "refcount"=>"1"}, "com.apple.driver.AppleACPIPCI"=>{"size"=>12288, "version"=>"1.2.4", "index"=>"31", "refcount"=>"0"}, "com.apple.security.seatbelt"=>{"size"=>98304, "version"=>"107.10", "index"=>"25", "refcount"=>"0"}, "com.apple.driver.AppleUpstreamUserClient"=>{"size"=>16384, "version"=>"2.7.2", "index"=>"100", "refcount"=>"0"}, "com.apple.kext.OSvKernDSPLib"=>{"size"=>12288, "version"=>"1.1", "index"=>"79", "refcount"=>"1"}, "com.apple.iokit.IOBDStorageFamily"=>{"size"=>20480, "version"=>"1.5", "index"=>"58", "refcount"=>"1"}, "com.apple.iokit.IOGraphicsFamily"=>{"size"=>118784, "version"=>"1.7.1", "index"=>"70", "refcount"=>"5"}, "com.apple.iokit.IONetworkingFamily"=>{"size"=>90112, "version"=>"1.6.1", "index"=>"82", "refcount"=>"4"}, "com.apple.iokit.IOATAFamily"=>{"size"=>53248, "version"=>"2.0.0", "index"=>"40", "refcount"=>"2"}, "com.apple.iokit.IOUSBHIDDriver"=>{"size"=>20480, "version"=>"3.2.2", "index"=>"63", "refcount"=>"2"}, "org.virtualbox.kext.VBoxUSB"=>{"size"=>28672, "version"=>"2.2.0", "index"=>"115", "refcount"=>"0"}, "com.apple.security.TMSafetyNet"=>{"size"=>12288, "version"=>"3", "index"=>"23", "refcount"=>"0"}, "com.apple.iokit.IONDRVSupport"=>{"size"=>57344, "version"=>"1.7.1", "index"=>"71", "refcount"=>"3"}, "com.apple.BootCache"=>{"size"=>20480, "version"=>"30.3", "index"=>"20", "refcount"=>"0"}, "com.vmware.kext.vmioplug"=>{"size"=>24576, "version"=>"2.0.4", "index"=>"107", "refcount"=>"0"}, "com.apple.iokit.IOUSBUserClient"=>{"size"=>8192, "version"=>"3.2.4", "index"=>"46", "refcount"=>"1"}, "com.apple.iokit.IOSCSIMultimediaCommandsDevice"=>{"size"=>90112, "version"=>"2.0.5", "index"=>"59", "refcount"=>"0"}, "com.apple.driver.AppleIRController"=>{"size"=>20480, "version"=>"110", "index"=>"78", "refcount"=>"0"}, "com.apple.driver.AudioIPCDriver"=>{"size"=>16384, "version"=>"1.0.5", "index"=>"81", "refcount"=>"0"}, "com.apple.driver.AppleLPC"=>{"size"=>12288, "version"=>"1.2.11", "index"=>"73", "refcount"=>"0"}, "org.virtualbox.kext.VBoxNetFlt"=>{"size"=>16384, "version"=>"2.2.0", "index"=>"116", "refcount"=>"0"}, "com.apple.iokit.CHUDKernLib"=>{"size"=>20480, "version"=>"196", "index"=>"93", "refcount"=>"2"}, "com.apple.iokit.CHUDProf"=>{"size"=>49152, "version"=>"207", "index"=>"97", "refcount"=>"0"}, "com.apple.NVDAResman"=>{"size"=>2478080, "version"=>"5.3.6", "index"=>"90", "refcount"=>"2"}, "com.apple.driver.AppleACPIEC"=>{"size"=>20480, "version"=>"1.2.4", "index"=>"28", "refcount"=>"0"}, "foo.tun"=>{"size"=>24576, "version"=>"1.0", "index"=>"118", "refcount"=>"0"}, "com.apple.iokit.IOSerialFamily"=>{"size"=>36864, "version"=>"9.3", "index"=>"102", "refcount"=>"1"}, "com.apple.GeForce"=>{"size"=>622592, "version"=>"5.3.6", "index"=>"96", "refcount"=>"0"}, "com.apple.iokit.IOCDStorageFamily"=>{"size"=>32768, "version"=>"1.5", "index"=>"55", "refcount"=>"3"}, "com.apple.driver.AppleUSBEHCI"=>{"size"=>73728, "version"=>"3.2.5", "index"=>"39", "refcount"=>"0"}, "com.apple.nvidia.nv50hal"=>{"size"=>2445312, "version"=>"5.3.6", "index"=>"91", "refcount"=>"0"}, "com.apple.driver.AppleSMBIOS"=>{"size"=>16384, "version"=>"1.1.1", "index"=>"29", "refcount"=>"0"}, "com.apple.driver.AppleBacklight"=>{"size"=>16384, "version"=>"1.4.4", "index"=>"72", "refcount"=>"0"}, "com.apple.driver.AppleACPIPlatform"=>{"size"=>253952, "version"=>"1.2.4", "index"=>"19", "refcount"=>"3"}, "com.apple.iokit.SCSITaskUserClient"=>{"size"=>24576, "version"=>"2.0.5", "index"=>"54", "refcount"=>"0"}, "com.apple.iokit.IOHIDFamily"=>{"size"=>233472, "version"=>"1.5.3", "index"=>"21", "refcount"=>"7"}, "com.apple.driver.DiskImages"=>{"size"=>65536, "version"=>"195.2.2", "index"=>"101", "refcount"=>"0"}, "com.apple.iokit.IODVDStorageFamily"=>{"size"=>24576, "version"=>"1.5", "index"=>"56", "refcount"=>"2"}, "com.apple.iokit.IOFireWireIP"=>{"size"=>36864, "version"=>"1.7.6", "index"=>"83", "refcount"=>"0"}, "com.apple.driver.AppleRTC"=>{"size"=>20480, "version"=>"1.2.3", "index"=>"34", "refcount"=>"0"}, "com.apple.driver.XsanFilter"=>{"size"=>20480, "version"=>"2.7.91", "index"=>"53", "refcount"=>"0"}, "com.apple.driver.AppleEFIRuntime"=>{"size"=>12288, "version"=>"1.2.0", "index"=>"35", "refcount"=>"1"}, "com.apple.iokit.IOAHCIBlockStorage"=>{"size"=>69632, "version"=>"1.2.0", "index"=>"48", "refcount"=>"0"}, "com.apple.nke.applicationfirewall"=>{"size"=>32768, "version"=>"1.0.77", "index"=>"24", "refcount"=>"0"}, "com.apple.iokit.IO80211Family"=>{"size"=>126976, "version"=>"215.1", "index"=>"87", "refcount"=>"1"}, "com.vmware.kext.vmci"=>{"size"=>45056, "version"=>"2.0.4", "index"=>"106", "refcount"=>"0"}, "com.apple.iokit.IOAHCIFamily"=>{"size"=>24576, "version"=>"1.5.0", "index"=>"42", "refcount"=>"2"}, "com.apple.driver.AppleUSBUHCI"=>{"size"=>57344, "version"=>"3.2.5", "index"=>"38", "refcount"=>"0"}, "com.apple.driver.AppleUSBMergeNub"=>{"size"=>12288, "version"=>"3.2.4", "index"=>"61", "refcount"=>"0"}, "com.apple.iokit.IOUSBFamily"=>{"size"=>167936, "version"=>"3.2.7", "index"=>"37", "refcount"=>"13"}, "com.apple.driver.AppleEFINVRAM"=>{"size"=>24576, "version"=>"1.2.0", "index"=>"36", "refcount"=>"0"}, "com.apple.driver.AppleAHCIPort"=>{"size"=>53248, "version"=>"1.5.2", "index"=>"43", "refcount"=>"0"}}, "os"=>"Darwin", "version"=>"Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386", "release"=>"9.6.0"}, "command"=>{"ps"=>"ps -ef"}, "platform"=>"mac_os_x", "platform_version"=>"10.5.6", "keys"=>{"ssh"=>{"host_dsa_public"=>"private", "host_rsa_public"=>"private"}}, "ipaddress"=>"192.168.88.1", "fqdn"=>"local.local", "network"=>{"settings"=>{"net.inet6.ip6.forwarding"=>"0", "net.inet.ip.dummynet.debug"=>"0", "net.inet.ip.rtexpire"=>"10", "net.inet6.ipsec6.esp_trans_deflev"=>"1", "net.inet.tcp.tcbhashsize"=>"4096", "net.key.esp_auth"=>"0", "net.inet6.ip6.hlim"=>"64", "net.inet.ip.fw.dyn_fin_lifetime"=>"1", "net.inet.ip.fw.dyn_udp_lifetime"=>"10", "net.inet.icmp.bmcastecho"=>"1", "net.athbgscan"=>"1 1", "net.inet.tcp.reass.maxsegments"=>"2048", "net.athforceBias"=>"2 2", "net.inet6.ip6.auto_flowlabel"=>"1", "net.inet6.ip6.rtmaxcache"=>"128", "net.inet.tcp.sendspace"=>"131072", "net.inet.tcp.keepinit"=>"75000", "net.inet.ip.dummynet.max_chain_len"=>"16", "net.inet.tcp.rfc1644"=>"0", "net.inet.ip.fw.curr_dyn_buckets"=>"256", "net.inet.ip.dummynet.ready_heap"=>"0", "net.inet.ip.portrange.first"=>"49152", "net.inet.tcp.background_io_trigger"=>"5", "net.link.ether.inet.host_down_time"=>"20", "net.inet6.ipsec6.def_policy"=>"1", "net.inet6.ipsec6.ecn"=>"0", "net.inet.ip.fastforwarding"=>"0", "net.inet6.ip6.v6only"=>"0", "net.inet.tcp.sack"=>"1", "net.inet6.ip6.rtexpire"=>"3600", "net.link.ether.inet.proxyall"=>"0", "net.athaddbaignore"=>"0 0", "net.inet6.ip6.keepfaith"=>"0", "net.key.spi_trycnt"=>"1000", "net.link.ether.inet.prune_intvl"=>"300", "net.inet.tcp.ecn_initiate_out"=>"0", "net.inet.ip.fw.dyn_rst_lifetime"=>"1", "net.local.stream.sendspace"=>"8192", "net.inet.tcp.socket_unlocked_on_output"=>"1", "net.inet.ip.fw.verbose_limit"=>"0", "net.local.dgram.recvspace"=>"4096", "net.inet.ipsec.debug"=>"0", "net.link.ether.inet.log_arp_warnings"=>"0", "net.inet.tcp.ecn_negotiate_in"=>"0", "net.inet.tcp.rfc3465"=>"1", "net.inet.tcp.icmp_may_rst"=>"1", "net.link.ether.inet.sendllconflict"=>"0", "net.inet.ipsec.ah_offsetmask"=>"0", "net.key.blockacq_count"=>"10", "net.inet.tcp.delayed_ack"=>"3", "net.inet.ip.fw.verbose"=>"2", "net.inet.ip.fw.dyn_count"=>"0", "net.inet.tcp.slowlink_wsize"=>"8192", "net.inet6.ip6.fw.enable"=>"1", "net.inet.ip.portrange.hilast"=>"65535", "net.inet.icmp.maskrepl"=>"0", "net.link.ether.inet.apple_hwcksum_rx"=>"1", "net.inet.tcp.drop_synfin"=>"1", "net.key.spi_maxval"=>"268435455", "net.inet.ipsec.ecn"=>"0", "net.inet.ip.fw.dyn_keepalive"=>"1", "net.key.int_random"=>"60", "net.key.debug"=>"0", "net.inet.ip.dummynet.curr_time"=>"0", "net.inet.udp.blackhole"=>"0", "net.athaggrqmin"=>"1 1", "net.inet.ip.fw.dyn_syn_lifetime"=>"20", "net.inet.tcp.keepidle"=>"7200000", "net.inet6.ip6.tempvltime"=>"604800", "net.inet.tcp.recvspace"=>"358400", "net.inet.udp.maxdgram"=>"9216", "net.inet.tcp.keepintvl"=>"75000", "net.inet.ip.maxchainsent"=>"0", "net.athppmenable"=>"1 1", "net.inet.ipsec.esp_net_deflev"=>"1", "net.inet6.icmp6.nd6_useloopback"=>"1", "net.inet.tcp.slowstart_flightsize"=>"1", "net.inet.ip.fw.debug"=>"0", "net.inet.ip.linklocal.in.allowbadttl"=>"1", "net.key.spi_minval"=>"256", "net.inet.ip.forwarding"=>"0", "net.inet.tcp.v6mssdflt"=>"1024", "net.key.larval_lifetime"=>"30", "net.inet6.ip6.fw.verbose_limit"=>"0", "net.inet.ip.dummynet.red_lookup_depth"=>"256", "net.inet.tcp.pcbcount"=>"36", "net.inet.ip.fw.dyn_ack_lifetime"=>"300", "net.athCCAThreshold"=>"28 28", "net.inet.ip.portrange.lowlast"=>"600", "net.link.ether.inet.useloopback"=>"1", "net.athqdepth"=>"0 0", "net.inet.ip.ttl"=>"64", "net.inet.ip.rtmaxcache"=>"128", "net.inet.ipsec.bypass"=>"0", "net.inet6.icmp6.nd6_debug"=>"0", "net.inet.ip.use_route_genid"=>"1", "net.inet6.icmp6.rediraccept"=>"1", "net.inet.ip.fw.static_count"=>"1", "net.inet6.ip6.fw.debug"=>"0", "net.inet.udp.pcbcount"=>"104", "net.inet.ipsec.esp_randpad"=>"-1", "net.inet6.icmp6.nd6_maxnudhint"=>"0", "net.inet.tcp.always_keepalive"=>"0", "net.inet.udp.checksum"=>"1", "net.link.ether.inet.keep_announcements"=>"1", "net.athfixedDropThresh"=>"150 150", "net.inet6.ip6.kame_version"=>"20010528/apple-darwin", "net.inet.ip.fw.dyn_max"=>"4096", "net.inet.udp.log_in_vain"=>"0", "net.inet6.icmp6.nd6_mmaxtries"=>"3", "net.inet.ip.rtminexpire"=>"10", "net.inet.ip.fw.dyn_buckets"=>"256", "net.inet6.ip6.accept_rtadv"=>"0", "net.inet6.ip6.rr_prune"=>"5", "net.key.ah_keymin"=>"128", "net.inet.ip.redirect"=>"1", "net.inet.tcp.sack_globalmaxholes"=>"65536", "net.inet.ip.keepfaith"=>"0", "net.inet.ip.dummynet.expire"=>"1", "net.inet.ip.gifttl"=>"30", "net.inet.ip.portrange.last"=>"65535", "net.inet.ipsec.ah_net_deflev"=>"1", "net.inet6.icmp6.nd6_delay"=>"5", "net.inet.tcp.packetchain"=>"50", "net.inet6.ip6.hdrnestlimit"=>"50", "net.inet.tcp.newreno"=>"0", "net.inet6.ip6.dad_count"=>"1", "net.inet6.ip6.auto_linklocal"=>"1", "net.inet6.ip6.temppltime"=>"86400", "net.inet.tcp.strict_rfc1948"=>"0", "net.inet.ip.dummynet.red_max_pkt_size"=>"1500", "net.inet.ip.maxfrags"=>"2048", "net.inet.tcp.log_in_vain"=>"0", "net.athdupie"=>"1 1", "net.inet.tcp.rfc1323"=>"1", "net.inet.ip.subnets_are_local"=>"0", "net.inet.ip.dummynet.search_steps"=>"0", "net.inet.icmp.icmplim"=>"250", "net.link.ether.inet.apple_hwcksum_tx"=>"1", "net.inet6.icmp6.redirtimeout"=>"600", "net.inet.ipsec.ah_cleartos"=>"1", "net.inet6.ip6.log_interval"=>"5", "net.link.ether.inet.max_age"=>"1200", "net.inet.ip.fw.enable"=>"1", "net.inet6.ip6.redirect"=>"1", "net.athaggrfmax"=>"28 28", "net.inet.ip.maxfragsperpacket"=>"128", "net.inet6.ip6.use_deprecated"=>"1", "net.link.generic.system.dlil_input_sanity_check"=>"0", "net.inet.tcp.sack_globalholes"=>"0", "net.inet.tcp.reass.cursegments"=>"0", "net.inet6.icmp6.nodeinfo"=>"3", "net.local.inflight"=>"0", "net.inet.ip.dummynet.hash_size"=>"64", "net.inet.ip.dummynet.red_avg_pkt_size"=>"512", "net.inet.ipsec.dfbit"=>"0", "net.inet.tcp.reass.overflows"=>"0", "net.inet.tcp.rexmt_thresh"=>"2", "net.inet6.ip6.maxfrags"=>"8192", "net.inet6.ip6.rtminexpire"=>"10", "net.inet6.ipsec6.esp_net_deflev"=>"1", "net.inet.tcp.blackhole"=>"0", "net.key.esp_keymin"=>"256", "net.inet.ip.check_interface"=>"0", "net.inet.tcp.minmssoverload"=>"0", "net.link.ether.inet.maxtries"=>"5", "net.inet.tcp.do_tcpdrain"=>"0", "net.inet.ipsec.esp_port"=>"4500", "net.inet6.ipsec6.ah_net_deflev"=>"1", "net.inet.ip.dummynet.extract_heap"=>"0", "net.inet.tcp.path_mtu_discovery"=>"1", "net.inet.ip.intr_queue_maxlen"=>"50", "net.inet.ipsec.def_policy"=>"1", "net.inet.ip.fw.autoinc_step"=>"100", "net.inet.ip.accept_sourceroute"=>"0", "net.inet.raw.maxdgram"=>"8192", "net.inet.ip.maxfragpackets"=>"1024", "net.inet.ip.fw.one_pass"=>"0", "net.appletalk.routermix"=>"2000", "net.inet.tcp.tcp_lq_overflow"=>"1", "net.link.generic.system.ifcount"=>"9", "net.link.ether.inet.send_conflicting_probes"=>"1", "net.inet.tcp.background_io_enabled"=>"1", "net.inet6.ipsec6.debug"=>"0", "net.inet.tcp.win_scale_factor"=>"3", "net.key.natt_keepalive_interval"=>"20", "net.inet.tcp.msl"=>"15000", "net.inet.ip.portrange.hifirst"=>"49152", "net.inet.ipsec.ah_trans_deflev"=>"1", "net.inet.tcp.rtt_min"=>"1", "net.inet6.ip6.defmcasthlim"=>"1", "net.inet6.icmp6.nd6_prune"=>"1", "net.inet6.ip6.fw.verbose"=>"0", "net.inet.ip.portrange.lowfirst"=>"1023", "net.inet.tcp.maxseg_unacked"=>"8", "net.local.dgram.maxdgram"=>"2048", "net.key.blockacq_lifetime"=>"20", "net.inet.tcp.sack_maxholes"=>"128", "net.inet6.ip6.maxfragpackets"=>"1024", "net.inet6.ip6.use_tempaddr"=>"0", "net.athpowermode"=>"0 0", "net.inet.udp.recvspace"=>"73728", "net.inet.tcp.isn_reseed_interval"=>"0", "net.inet.tcp.local_slowstart_flightsize"=>"8", "net.inet.ip.dummynet.searches"=>"0", "net.inet.ip.intr_queue_drops"=>"0", "net.link.generic.system.multi_threaded_input"=>"1", "net.inet.raw.recvspace"=>"8192", "net.inet.ipsec.esp_trans_deflev"=>"1", "net.key.prefered_oldsa"=>"0", "net.local.stream.recvspace"=>"8192", "net.inet.tcp.sockthreshold"=>"64", "net.inet6.icmp6.nd6_umaxtries"=>"3", "net.pstimeout"=>"20 20", "net.inet.ip.sourceroute"=>"0", "net.inet.ip.fw.dyn_short_lifetime"=>"5", "net.inet.tcp.minmss"=>"216", "net.inet6.ip6.gifhlim"=>"0", "net.athvendorie"=>"1 1", "net.inet.ip.check_route_selfref"=>"1", "net.inet.icmp.log_redirect"=>"0", "net.inet6.icmp6.errppslimit"=>"100", "net.inet.tcp.mssdflt"=>"512", "net.inet.icmp.drop_redirect"=>"0", "net.inet6.ipsec6.esp_randpad"=>"-1", "net.inet6.ipsec6.ah_trans_deflev"=>"1", "net.inet.ip.random_id"=>"1", "net.inet.icmp.timestamp"=>"0"}, "interfaces"=>{"stf0"=>{"flags"=>[], "number"=>"0", "mtu"=>"1280", "type"=>"stf", "encapsulation"=>"6to4"}, "vmnet1"=>{"flags"=>["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "number"=>"1", "addresses"=>[{"broadcast"=>"192.168.88.255", "netmask"=>"255.255.255.0", "family"=>"inet", "address"=>"192.168.88.1"}, {"family"=>"lladdr", "address"=>"private"}], "mtu"=>"1500", "type"=>"vmnet", "encapsulation"=>"Ethernet"}, "vboxnet0"=>{"flags"=>["BROADCAST", "RUNNING", "SIMPLEX", "MULTICAST"], "number"=>"0", "addresses"=>[{"family"=>"lladdr", "address"=>"private"}], "mtu"=>"1500", "type"=>"vboxnet", "encapsulation"=>"Ethernet"}, "lo0"=>{"flags"=>["UP", "LOOPBACK", "RUNNING", "MULTICAST"], "number"=>"0", "addresses"=>[{"scope"=>"Link", "prefixlen"=>"64", "family"=>"inet6", "address"=>"fe80::1"}, {"netmask"=>"255.0.0.0", "family"=>"inet", "address"=>"127.0.0.1"}, {"scope"=>"Node", "prefixlen"=>"128", "family"=>"inet6", "address"=>"::1"}, {"scope"=>"Node", "prefixlen"=>"128", "family"=>"inet6", "address"=>"private"}], "mtu"=>"16384", "type"=>"lo", "encapsulation"=>"Loopback"}, "vboxn"=>{"counters"=>{"tx"=>{"packets"=>"0", "bytes"=>"0", "compressed"=>0, "collisions"=>"0", "carrier"=>0, "errors"=>"0", "drop"=>0, "overrun"=>0}, "rx"=>{"packets"=>"0", "bytes"=>"0", "compressed"=>0, "errors"=>"0", "drop"=>0, "overrun"=>0, "multicast"=>0, "frame"=>0}}}, "gif0"=>{"flags"=>["POINTOPOINT", "MULTICAST"], "number"=>"0", "mtu"=>"1280", "type"=>"gif", "encapsulation"=>"IPIP"}, "vmnet"=>{"counters"=>{"tx"=>{"packets"=>"0", "bytes"=>"0", "compressed"=>0, "collisions"=>"0", "carrier"=>0, "errors"=>"0", "drop"=>0, "overrun"=>0}, "rx"=>{"packets"=>"0", "bytes"=>"0", "compressed"=>0, "errors"=>"0", "drop"=>0, "overrun"=>0, "multicast"=>0, "frame"=>0}}}, "en0"=>{"flags"=>["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "status"=>"inactive", "number"=>"0", "addresses"=>[{"family"=>"lladdr", "address"=>"private"}], "mtu"=>"1500", "type"=>"en", "media"=>{"supported"=>[{"autoselect"=>{"options"=>[]}}, {"10baseT/UTP"=>{"options"=>["half-duplex"]}}, {"10baseT/UTP"=>{"options"=>["full-duplex"]}}, {"10baseT/UTP"=>{"options"=>["full-duplex", "hw-loopback"]}}, {"10baseT/UTP"=>{"options"=>["full-duplex", "flow-control"]}}, {"100baseTX"=>{"options"=>["half-duplex"]}}, {"100baseTX"=>{"options"=>["full-duplex"]}}, {"100baseTX"=>{"options"=>["full-duplex", "hw-loopback"]}}, {"100baseTX"=>{"options"=>["full-duplex", "flow-control"]}}, {"1000baseT"=>{"options"=>["full-duplex"]}}, {"1000baseT"=>{"options"=>["full-duplex", "hw-loopback"]}}, {"1000baseT"=>{"options"=>["full-duplex", "flow-control"]}}, {"none"=>{"options"=>[]}}], "selected"=>[{"autoselect"=>{"options"=>[]}}]}, "counters"=>{"tx"=>{"packets"=>"0", "bytes"=>"342", "compressed"=>0, "collisions"=>"0", "carrier"=>0, "errors"=>"0", "drop"=>0, "overrun"=>0}, "rx"=>{"packets"=>"0", "bytes"=>"0", "compressed"=>0, "errors"=>"0", "drop"=>0, "overrun"=>0, "multicast"=>0, "frame"=>0}}, "encapsulation"=>"Ethernet"}, "vmnet8"=>{"flags"=>["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "number"=>"8", "addresses"=>[{"broadcast"=>"192.168.237.255", "netmask"=>"255.255.255.0", "family"=>"inet", "address"=>"192.168.237.1"}, {"family"=>"lladdr", "address"=>"private"}], "mtu"=>"1500", "type"=>"vmnet", "encapsulation"=>"Ethernet"}, "en1"=>{"flags"=>["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "status"=>"active", "number"=>"1", "addresses"=>[{"scope"=>"Link", "prefixlen"=>"64", "family"=>"inet6", "address"=>"private"}, {"broadcast"=>"192.168.1.255", "netmask"=>"255.255.255.0", "family"=>"inet", "address"=>"192.168.1.4"}, {"family"=>"lladdr", "address"=>"private"}], "mtu"=>"1500", "type"=>"en", "media"=>{"supported"=>[{"autoselect"=>{"options"=>[]}}], "selected"=>[{"autoselect"=>{"options"=>[]}}]}, "counters"=>{"tx"=>{"packets"=>"7041789", "bytes"=>"449206298", "compressed"=>0, "collisions"=>"0", "carrier"=>0, "errors"=>"95", "drop"=>0, "overrun"=>0}, "rx"=>{"packets"=>"19966002", "bytes"=>"13673879120", "compressed"=>0, "errors"=>"1655893", "drop"=>0, "overrun"=>0, "multicast"=>0, "frame"=>0}}, "encapsulation"=>"Ethernet", "arp"=>{"192.168.1.7"=>"private"}}, "fw0"=>{"flags"=>["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "status"=>"inactive", "number"=>"0", "addresses"=>[{"family"=>"lladdr", "address"=>"private"}], "mtu"=>"4078", "type"=>"fw", "media"=>{"supported"=>[{"autoselect"=>{"options"=>["full-duplex"]}}], "selected"=>[{"autoselect"=>{"options"=>["full-duplex"]}}]}, "counters"=>{"tx"=>{"packets"=>"0", "bytes"=>"346", "compressed"=>0, "collisions"=>"0", "carrier"=>0, "errors"=>"0", "drop"=>0, "overrun"=>0}, "rx"=>{"packets"=>"0", "bytes"=>"0", "compressed"=>0, "errors"=>"0", "drop"=>0, "overrun"=>0, "multicast"=>0, "frame"=>0}}, "encapsulation"=>"1394"}}}, "os"=>"darwin", "domain"=>"local", "ohai_time"=>1240624355.08575, "platform_build"=>"9G55", "os_version"=>"9.6.0", "hostname"=>"local", "languages"=>{"ruby"=>{"target_os"=>"darwin9.0", "platform"=>"universal-darwin9.0", "host_vendor"=>"apple", "target_cpu"=>"i686", "target_vendor"=>"apple", "host_os"=>"darwin9.0", "version"=>"1.8.6", "host_cpu"=>"i686", "host"=>"i686-apple-darwin9.0", "release_date"=>"2008-03-03", "target"=>"i686-apple-darwin9.0"}}, "macaddress"=>"private"}
diff --git a/vendor/gems/json-1.5.1/benchmarks/parser2_benchmark.rb b/vendor/gems/json-1.5.1/benchmarks/parser2_benchmark.rb
new file mode 100755
index 000000000..95a510de6
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/parser2_benchmark.rb
@@ -0,0 +1,251 @@
+#!/usr/bin/env ruby
+# CODING: UTF-8
+
+require 'rbconfig'
+RUBY_PATH=File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
+RAKE_PATH=File.join(Config::CONFIG['bindir'], 'rake')
+require 'bullshit'
+case ARGV.first
+when 'ext'
+ require 'json/ext'
+when 'pure'
+ require 'json/pure'
+when 'yaml'
+ require 'yaml'
+ require 'json/pure'
+when 'rails'
+ require 'active_support'
+ require 'json/pure'
+when 'yajl'
+ require 'yajl'
+ require 'json/pure'
+else
+ require 'json/pure'
+end
+
+module Parser2BenchmarkCommon
+ include JSON
+
+ def setup
+ @big = @json = File.read(File.join(File.dirname(__FILE__), 'ohai.json'))
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+class Parser2BenchmarkExt < Bullshit::RepeatCase
+ include Parser2BenchmarkCommon
+
+ warmup yes
+ iterations 2000
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_parser
+ @result = JSON.parse(@json)
+ end
+
+ alias reset_parser generic_reset_method
+
+ def benchmark_parser_symbolic
+ @result = JSON.parse(@json, :symbolize_names => true)
+ end
+
+ alias reset_parser_symbolc generic_reset_method
+end
+
+class Parser2BenchmarkPure < Bullshit::RepeatCase
+ include Parser2BenchmarkCommon
+
+ warmup yes
+ iterations 400
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_parser
+ @result = JSON.parse(@json)
+ end
+
+ alias reset_parser generic_reset_method
+
+ def benchmark_parser_symbolic
+ @result = JSON.parse(@json, :symbolize_names => true)
+ end
+
+ alias reset_parser_symbolc generic_reset_method
+end
+
+class Parser2BenchmarkYAML < Bullshit::RepeatCase
+ warmup yes
+ iterations 400
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def setup
+ @big = @json = File.read(File.join(File.dirname(__FILE__), 'ohai.json'))
+ end
+
+ def benchmark_parser
+ @result = YAML.load(@json)
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+class Parser2BenchmarkRails < Bullshit::RepeatCase
+ warmup yes
+ iterations 400
+
+ truncate_data do
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def setup
+ a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
+ @big = a * 100
+ @json = JSON.generate(@big)
+ end
+
+ def benchmark_parser
+ @result = ActiveSupport::JSON.decode(@json)
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+class Parser2BenchmarkYajl < Bullshit::RepeatCase
+ warmup yes
+ iterations 2000
+
+ truncate_data do
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def setup
+ @big = @json = File.read(File.join(File.dirname(__FILE__), 'ohai.json'))
+ end
+
+ def benchmark_parser
+ @result = Yajl::Parser.new.parse(@json)
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+if $0 == __FILE__
+ Bullshit::Case.autorun false
+
+ case ARGV.first
+ when 'ext'
+ Parser2BenchmarkExt.run
+ when 'pure'
+ Parser2BenchmarkPure.run
+ when 'yaml'
+ Parser2BenchmarkYAML.run
+ when 'rails'
+ Parser2BenchmarkRails.run
+ when 'yajl'
+ Parser2BenchmarkYajl.run
+ else
+ system "#{RAKE_PATH} clean"
+ system "#{RUBY_PATH} #$0 yaml"
+ system "#{RUBY_PATH} #$0 rails"
+ system "#{RUBY_PATH} #$0 pure"
+ system "#{RAKE_PATH} compile_ext"
+ system "#{RUBY_PATH} #$0 ext"
+ system "#{RUBY_PATH} #$0 yajl"
+ Bullshit.compare do
+ output_filename File.join(File.dirname(__FILE__), 'data', 'Parser2BenchmarkComparison.log')
+
+ benchmark Parser2BenchmarkExt, :parser, :load => yes
+ benchmark Parser2BenchmarkExt, :parser_symbolic, :load => yes
+ benchmark Parser2BenchmarkPure, :parser, :load => yes
+ benchmark Parser2BenchmarkPure, :parser_symbolic, :load => yes
+ benchmark Parser2BenchmarkYAML, :parser, :load => yes
+ benchmark Parser2BenchmarkRails, :parser, :load => yes
+ benchmark Parser2BenchmarkYajl, :parser, :load => yes
+ end
+ end
+end
diff --git a/vendor/gems/json-1.5.1/benchmarks/parser_benchmark.rb b/vendor/gems/json-1.5.1/benchmarks/parser_benchmark.rb
new file mode 100755
index 000000000..9ce7e257d
--- /dev/null
+++ b/vendor/gems/json-1.5.1/benchmarks/parser_benchmark.rb
@@ -0,0 +1,259 @@
+#!/usr/bin/env ruby
+# CODING: UTF-8
+
+require 'rbconfig'
+RUBY_PATH=File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
+RAKE_PATH=File.join(Config::CONFIG['bindir'], 'rake')
+require 'bullshit'
+case ARGV.first
+when 'ext'
+ require 'json/ext'
+when 'pure'
+ require 'json/pure'
+when 'yaml'
+ require 'yaml'
+ require 'json/pure'
+when 'rails'
+ require 'active_support'
+ require 'json/pure'
+when 'yajl'
+ require 'yajl'
+ require 'json/pure'
+else
+ require 'json/pure'
+end
+
+module ParserBenchmarkCommon
+ include JSON
+
+ def setup
+ a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
+ @big = a * 100
+ @json = JSON.generate(@big)
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+class ParserBenchmarkExt < Bullshit::RepeatCase
+ include ParserBenchmarkCommon
+
+ warmup yes
+ iterations 2000
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_parser
+ @result = JSON.parse(@json)
+ end
+
+ alias reset_parser generic_reset_method
+
+ def benchmark_parser_symbolic
+ @result = JSON.parse(@json, :symbolize_names => true)
+ end
+
+ alias reset_parser_symbolc generic_reset_method
+end
+
+class ParserBenchmarkPure < Bullshit::RepeatCase
+ include ParserBenchmarkCommon
+
+ warmup yes
+ iterations 400
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_parser
+ @result = JSON.parse(@json)
+ end
+
+ alias reset_parser generic_reset_method
+
+ def benchmark_parser_symbolic
+ @result = JSON.parse(@json, :symbolize_names => true)
+ end
+
+ alias reset_parser_symbolc generic_reset_method
+end
+
+class ParserBenchmarkYAML < Bullshit::RepeatCase
+ warmup yes
+ iterations 400
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def setup
+ a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
+ @big = a * 100
+ @json = JSON.pretty_generate(@big)
+ end
+
+ def benchmark_parser
+ @result = YAML.load(@json)
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+class ParserBenchmarkRails < Bullshit::RepeatCase
+ warmup yes
+ iterations 400
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def setup
+ a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
+ @big = a * 100
+ @json = JSON.generate(@big)
+ end
+
+ def benchmark_parser
+ @result = ActiveSupport::JSON.decode(@json)
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+class ParserBenchmarkYajl < Bullshit::RepeatCase
+ warmup yes
+ iterations 2000
+
+ truncate_data do
+ enabled false
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def setup
+ a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
+ @big = a * 100
+ @json = JSON.generate(@big)
+ end
+
+ def benchmark_parser
+ @result = Yajl::Parser.new.parse(@json)
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+if $0 == __FILE__
+ Bullshit::Case.autorun false
+
+ case ARGV.first
+ when 'ext'
+ ParserBenchmarkExt.run
+ when 'pure'
+ ParserBenchmarkPure.run
+ when 'yaml'
+ ParserBenchmarkYAML.run
+ when 'rails'
+ ParserBenchmarkRails.run
+ when 'yajl'
+ ParserBenchmarkYajl.run
+ else
+ system "#{RAKE_PATH} clean"
+ system "#{RUBY_PATH} #$0 yaml"
+ system "#{RUBY_PATH} #$0 rails"
+ system "#{RUBY_PATH} #$0 pure"
+ system "#{RAKE_PATH} compile_ext"
+ system "#{RUBY_PATH} #$0 ext"
+ system "#{RUBY_PATH} #$0 yajl"
+ Bullshit.compare do
+ output_filename File.join(File.dirname(__FILE__), 'data', 'ParserBenchmarkComparison.log')
+
+ benchmark ParserBenchmarkExt, :parser, :load => yes
+ benchmark ParserBenchmarkExt, :parser_symbolic, :load => yes
+ benchmark ParserBenchmarkPure, :parser, :load => yes
+ benchmark ParserBenchmarkPure, :parser_symbolic, :load => yes
+ benchmark ParserBenchmarkYAML, :parser, :load => yes
+ benchmark ParserBenchmarkRails, :parser, :load => yes
+ benchmark ParserBenchmarkYajl, :parser, :load => yes
+ end
+ end
+end
diff --git a/vendor/gems/json-1.5.1/bin/edit_json.rb b/vendor/gems/json-1.5.1/bin/edit_json.rb
new file mode 100755
index 000000000..04a8189d2
--- /dev/null
+++ b/vendor/gems/json-1.5.1/bin/edit_json.rb
@@ -0,0 +1,9 @@
+#!/usr/bin/env ruby
+require 'json/editor'
+
+filename, encoding = ARGV
+JSON::Editor.start(encoding) do |window|
+ if filename
+ window.file_open(filename)
+ end
+end
diff --git a/vendor/gems/json-1.5.1/bin/prettify_json.rb b/vendor/gems/json-1.5.1/bin/prettify_json.rb
new file mode 100755
index 000000000..5e1f8062d
--- /dev/null
+++ b/vendor/gems/json-1.5.1/bin/prettify_json.rb
@@ -0,0 +1,75 @@
+#!/usr/bin/env ruby
+
+require 'json'
+require 'fileutils'
+include FileUtils
+
+# Parses the argument array _args_, according to the pattern _s_, to
+# retrieve the single character command line options from it. If _s_ is
+# 'xy:' an option '-x' without an option argument is searched, and an
+# option '-y foo' with an option argument ('foo').
+#
+# An option hash is returned with all found options set to true or the
+# found option argument.
+def go(s, args = ARGV)
+ b, v = s.scan(/(.)(:?)/).inject([{},{}]) { |t,(o,a)|
+ t[a.empty? ? 0 : 1][o] = a.empty? ? false : nil
+ t
+ }
+ while a = args.shift
+ a !~ /\A-(.+)/ and args.unshift a and break
+ p = $1
+ until p == ''
+ o = p.slice!(0, 1)
+ if v.key?(o)
+ v[o] = if p == '' then args.shift or break 1 else p end
+ break
+ elsif b.key?(o)
+ b[o] = true
+ else
+ args.unshift a
+ break 1
+ end
+ end and break
+ end
+ b.merge(v)
+end
+
+opts = go 'slhi:', args = ARGV.dup
+if opts['h'] || opts['l'] && opts['s']
+ puts <<EOT
+Usage: #{File.basename($0)} [OPTION] [FILE]
+
+If FILE is skipped, this scripts waits for input from STDIN. Otherwise
+FILE is opened, read, and used as input for the prettifier.
+
+OPTION can be
+ -s to output the shortest possible JSON (precludes -l)
+ -l to output a longer, better formatted JSON (precludes -s)
+ -i EXT prettifies FILE in place, saving a backup to FILE.EXT
+ -h this help
+EOT
+ exit 0
+end
+
+filename = nil
+json = JSON[
+ if args.empty?
+ STDIN.read
+ else
+ File.read filename = args.first
+ end
+]
+
+output = if opts['s']
+ JSON.fast_generate json
+else # default is -l
+ JSON.pretty_generate json
+end
+
+if opts['i'] && filename
+ cp filename, "#{filename}.#{opts['i']}"
+ File.open(filename, 'w') { |f| f.puts output }
+else
+ puts output
+end
diff --git a/vendor/gems/json-1.5.1/data/example.json b/vendor/gems/json-1.5.1/data/example.json
new file mode 100644
index 000000000..88b4e8265
--- /dev/null
+++ b/vendor/gems/json-1.5.1/data/example.json
@@ -0,0 +1 @@
+{"a":2,"b":3.141,"TIME":"2007-03-14T11:52:40","c":"c","d":[1,"b",3.14],"COUNT":666,"e":{"foo":"bar"},"foo":"B\u00e4r","g":"\u677e\u672c\u884c\u5f18","h":1000.0,"bar":"\u00a9 \u2260 \u20ac!","i":0.001,"j":"\ud840\udc01"}
diff --git a/vendor/gems/json-1.5.1/data/index.html b/vendor/gems/json-1.5.1/data/index.html
new file mode 100644
index 000000000..abe6fdbfa
--- /dev/null
+++ b/vendor/gems/json-1.5.1/data/index.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>Javascript Example</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <script src="prototype.js" type="text/javascript"></script>
+ </head>
+
+ <body>
+ <h1>Fetching object from server</h1>
+ <div id="list">
+ Wait...<br/>
+ <noscript><p>Switch on Javascript!</p></noscript>
+ </div>
+ <script type="text/javascript">
+ <!--
+ function pollJSON() {
+ new Ajax.Request('/json',
+ {
+ method: 'get',
+ onSuccess: function(transport) {
+ var response = transport.responseText || "no response text";
+ response = eval("(" + response + ")");
+ var text = "";
+ for (var k in response) {
+ text = text + "<b>" + k + "</b>: " + response[k] + "<br/>"
+ }
+ $("list").update(text);
+ },
+ onFailure: function() { alert('Something went wrong...') }
+ });
+ }
+ new PeriodicalExecuter(pollJSON, 1);
+ -->
+ </script>
+ </body>
+</html>
diff --git a/vendor/gems/json-1.5.1/data/prototype.js b/vendor/gems/json-1.5.1/data/prototype.js
new file mode 100644
index 000000000..5c7346294
--- /dev/null
+++ b/vendor/gems/json-1.5.1/data/prototype.js
@@ -0,0 +1,4184 @@
+/* Prototype JavaScript framework, version 1.6.0
+ * (c) 2005-2007 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.6.0',
+
+ Browser: {
+ IE: !!(window.attachEvent && !window.opera),
+ Opera: !!window.opera,
+ WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
+ MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+ },
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+ ElementExtensions: !!window.HTMLElement,
+ SpecificElementExtensions:
+ document.createElement('div').__proto__ &&
+ document.createElement('div').__proto__ !==
+ document.createElement('form').__proto__
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+ K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+if (Prototype.Browser.WebKit)
+ Prototype.BrowserFeatures.XPath = false;
+
+/* Based on Alex Arnell's inheritance implementation. */
+var Class = {
+ create: function() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ var subclass = function() { };
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0; i < properties.length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+
+ return klass;
+ }
+};
+
+Class.Methods = {
+ addMethods: function(source) {
+ var ancestor = this.superclass && this.superclass.prototype;
+ var properties = Object.keys(source);
+
+ if (!Object.keys({ toString: true }).length)
+ properties.push("toString", "valueOf");
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames().first() == "$super") {
+ var method = value, value = Object.extend((function(m) {
+ return function() { return ancestor[m].apply(this, arguments) };
+ })(property).wrap(method), {
+ valueOf: function() { return method },
+ toString: function() { return method.toString() }
+ });
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+};
+
+var Abstract = { };
+
+Object.extend = function(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+};
+
+Object.extend(Object, {
+ inspect: function(object) {
+ try {
+ if (object === undefined) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : object.toString();
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ },
+
+ toJSON: function(object) {
+ var type = typeof object;
+ switch (type) {
+ case 'undefined':
+ case 'function':
+ case 'unknown': return;
+ case 'boolean': return object.toString();
+ }
+
+ if (object === null) return 'null';
+ if (object.toJSON) return object.toJSON();
+ if (Object.isElement(object)) return;
+
+ var results = [];
+ for (var property in object) {
+ var value = Object.toJSON(object[property]);
+ if (value !== undefined)
+ results.push(property.toJSON() + ': ' + value);
+ }
+
+ return '{' + results.join(', ') + '}';
+ },
+
+ toQueryString: function(object) {
+ return $H(object).toQueryString();
+ },
+
+ toHTML: function(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ },
+
+ keys: function(object) {
+ var keys = [];
+ for (var property in object)
+ keys.push(property);
+ return keys;
+ },
+
+ values: function(object) {
+ var values = [];
+ for (var property in object)
+ values.push(object[property]);
+ return values;
+ },
+
+ clone: function(object) {
+ return Object.extend({ }, object);
+ },
+
+ isElement: function(object) {
+ return object && object.nodeType == 1;
+ },
+
+ isArray: function(object) {
+ return object && object.constructor === Array;
+ },
+
+ isHash: function(object) {
+ return object instanceof Hash;
+ },
+
+ isFunction: function(object) {
+ return typeof object == "function";
+ },
+
+ isString: function(object) {
+ return typeof object == "string";
+ },
+
+ isNumber: function(object) {
+ return typeof object == "number";
+ },
+
+ isUndefined: function(object) {
+ return typeof object == "undefined";
+ }
+});
+
+Object.extend(Function.prototype, {
+ argumentNames: function() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
+ return names.length == 1 && !names[0] ? [] : names;
+ },
+
+ bind: function() {
+ if (arguments.length < 2 && arguments[0] === undefined) return this;
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function() {
+ return __method.apply(object, args.concat($A(arguments)));
+ }
+ },
+
+ bindAsEventListener: function() {
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function(event) {
+ return __method.apply(object, [event || window.event].concat(args));
+ }
+ },
+
+ curry: function() {
+ if (!arguments.length) return this;
+ var __method = this, args = $A(arguments);
+ return function() {
+ return __method.apply(this, args.concat($A(arguments)));
+ }
+ },
+
+ delay: function() {
+ var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ },
+
+ wrap: function(wrapper) {
+ var __method = this;
+ return function() {
+ return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+ }
+ },
+
+ methodize: function() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ return __method.apply(null, [this].concat($A(arguments)));
+ };
+ }
+});
+
+Function.prototype.defer = Function.prototype.delay.curry(0.01);
+
+Date.prototype.toJSON = function() {
+ return '"' + this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ } finally {
+ this.currentlyExecuting = false;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, {
+ gsub: function(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = arguments.callee.prepareReplacement(replacement);
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ },
+
+ sub: function(pattern, replacement, count) {
+ replacement = this.gsub.prepareReplacement(replacement);
+ count = count === undefined ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ },
+
+ scan: function(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ },
+
+ truncate: function(length, truncation) {
+ length = length || 30;
+ truncation = truncation === undefined ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ },
+
+ strip: function() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ },
+
+ stripTags: function() {
+ return this.replace(/<\/?[^>]+>/gi, '');
+ },
+
+ stripScripts: function() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ },
+
+ extractScripts: function() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ },
+
+ evalScripts: function() {
+ return this.extractScripts().map(function(script) { return eval(script) });
+ },
+
+ escapeHTML: function() {
+ var self = arguments.callee;
+ self.text.data = this;
+ return self.div.innerHTML;
+ },
+
+ unescapeHTML: function() {
+ var div = new Element('div');
+ div.innerHTML = this.stripTags();
+ return div.childNodes[0] ? (div.childNodes.length > 1 ?
+ $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
+ div.childNodes[0].nodeValue) : '';
+ },
+
+ toQueryParams: function(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift());
+ var value = pair.length > 1 ? pair.join('=') : pair[0];
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ },
+
+ toArray: function() {
+ return this.split('');
+ },
+
+ succ: function() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ },
+
+ times: function(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ },
+
+ camelize: function() {
+ var parts = this.split('-'), len = parts.length;
+ if (len == 1) return parts[0];
+
+ var camelized = this.charAt(0) == '-'
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+ : parts[0];
+
+ for (var i = 1; i < len; i++)
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+ return camelized;
+ },
+
+ capitalize: function() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ },
+
+ underscore: function() {
+ return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
+ },
+
+ dasherize: function() {
+ return this.gsub(/_/,'-');
+ },
+
+ inspect: function(useDoubleQuotes) {
+ var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
+ var character = String.specialChar[match[0]];
+ return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ },
+
+ toJSON: function() {
+ return this.inspect(true);
+ },
+
+ unfilterJSON: function(filter) {
+ return this.sub(filter || Prototype.JSONFilter, '#{1}');
+ },
+
+ isJSON: function() {
+ var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+ return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+ },
+
+ evalJSON: function(sanitize) {
+ var json = this.unfilterJSON();
+ try {
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ } catch (e) { }
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+ },
+
+ include: function(pattern) {
+ return this.indexOf(pattern) > -1;
+ },
+
+ startsWith: function(pattern) {
+ return this.indexOf(pattern) === 0;
+ },
+
+ endsWith: function(pattern) {
+ var d = this.length - pattern.length;
+ return d >= 0 && this.lastIndexOf(pattern) === d;
+ },
+
+ empty: function() {
+ return this == '';
+ },
+
+ blank: function() {
+ return /^\s*$/.test(this);
+ },
+
+ interpolate: function(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
+ }
+});
+
+if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
+ escapeHTML: function() {
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ },
+ unescapeHTML: function() {
+ return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
+ }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+};
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+Object.extend(String.prototype.escapeHTML, {
+ div: document.createElement('div'),
+ text: document.createTextNode('')
+});
+
+with (String.prototype.escapeHTML) div.appendChild(text);
+
+var Template = Class.create({
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ if (Object.isFunction(object.toTemplateReplacements))
+ object = object.toTemplateReplacements();
+
+ return this.template.gsub(this.pattern, function(match) {
+ if (object == null) return '';
+
+ var before = match[1] || '';
+ if (before == '\\') return match[2];
+
+ var ctx = object, expr = match[3];
+ var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr);
+ if (match == null) return before;
+
+ while (match != null) {
+ var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+ ctx = ctx[comp];
+ if (null == ctx || '' == match[3]) break;
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+ match = pattern.exec(expr);
+ }
+
+ return before + String.interpret(ctx);
+ }.bind(this));
+ }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = {
+ each: function(iterator, context) {
+ var index = 0;
+ iterator = iterator.bind(context);
+ try {
+ this._each(function(value) {
+ iterator(value, index++);
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ },
+
+ eachSlice: function(number, iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var index = -number, slices = [], array = this.toArray();
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.collect(iterator, context);
+ },
+
+ all: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!iterator(value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ },
+
+ any: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!iterator(value, index))
+ throw $break;
+ });
+ return result;
+ },
+
+ collect: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator(value, index));
+ });
+ return results;
+ },
+
+ detect: function(iterator, context) {
+ iterator = iterator.bind(context);
+ var result;
+ this.each(function(value, index) {
+ if (iterator(value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ },
+
+ findAll: function(iterator, context) {
+ iterator = iterator.bind(context);
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ grep: function(filter, iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var results = [];
+
+ if (Object.isString(filter))
+ filter = new RegExp(filter);
+
+ this.each(function(value, index) {
+ if (filter.match(value))
+ results.push(iterator(value, index));
+ });
+ return results;
+ },
+
+ include: function(object) {
+ if (Object.isFunction(this.indexOf))
+ if (this.indexOf(object) != -1) return true;
+
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ },
+
+ inGroupsOf: function(number, fillWith) {
+ fillWith = fillWith === undefined ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ },
+
+ inject: function(memo, iterator, context) {
+ iterator = iterator.bind(context);
+ this.each(function(value, index) {
+ memo = iterator(memo, value, index);
+ });
+ return memo;
+ },
+
+ invoke: function(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ },
+
+ max: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator(value, index);
+ if (result == undefined || value >= result)
+ result = value;
+ });
+ return result;
+ },
+
+ min: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator(value, index);
+ if (result == undefined || value < result)
+ result = value;
+ });
+ return result;
+ },
+
+ partition: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ (iterator(value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ },
+
+ pluck: function(property) {
+ var results = [];
+ this.each(function(value) {
+ results.push(value[property]);
+ });
+ return results;
+ },
+
+ reject: function(iterator, context) {
+ iterator = iterator.bind(context);
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ sortBy: function(iterator, context) {
+ iterator = iterator.bind(context);
+ return this.map(function(value, index) {
+ return {value: value, criteria: iterator(value, index)};
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ },
+
+ toArray: function() {
+ return this.map();
+ },
+
+ zip: function() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (Object.isFunction(args.last()))
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ },
+
+ size: function() {
+ return this.toArray().length;
+ },
+
+ inspect: function() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+};
+
+Object.extend(Enumerable, {
+ map: Enumerable.collect,
+ find: Enumerable.detect,
+ select: Enumerable.findAll,
+ filter: Enumerable.findAll,
+ member: Enumerable.include,
+ entries: Enumerable.toArray,
+ every: Enumerable.all,
+ some: Enumerable.any
+});
+function $A(iterable) {
+ if (!iterable) return [];
+ if (iterable.toArray) return iterable.toArray();
+ var length = iterable.length, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+}
+
+if (Prototype.Browser.WebKit) {
+ function $A(iterable) {
+ if (!iterable) return [];
+ if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
+ iterable.toArray) return iterable.toArray();
+ var length = iterable.length, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+ }
+}
+
+Array.from = $A;
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+ _each: function(iterator) {
+ for (var i = 0, length = this.length; i < length; i++)
+ iterator(this[i]);
+ },
+
+ clear: function() {
+ this.length = 0;
+ return this;
+ },
+
+ first: function() {
+ return this[0];
+ },
+
+ last: function() {
+ return this[this.length - 1];
+ },
+
+ compact: function() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ },
+
+ flatten: function() {
+ return this.inject([], function(array, value) {
+ return array.concat(Object.isArray(value) ?
+ value.flatten() : [value]);
+ });
+ },
+
+ without: function() {
+ var values = $A(arguments);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ },
+
+ reverse: function(inline) {
+ return (inline !== false ? this : this.toArray())._reverse();
+ },
+
+ reduce: function() {
+ return this.length > 1 ? this : this[0];
+ },
+
+ uniq: function(sorted) {
+ return this.inject([], function(array, value, index) {
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+ array.push(value);
+ return array;
+ });
+ },
+
+ intersect: function(array) {
+ return this.uniq().findAll(function(item) {
+ return array.detect(function(value) { return item === value });
+ });
+ },
+
+ clone: function() {
+ return [].concat(this);
+ },
+
+ size: function() {
+ return this.length;
+ },
+
+ inspect: function() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ },
+
+ toJSON: function() {
+ var results = [];
+ this.each(function(object) {
+ var value = Object.toJSON(object);
+ if (value !== undefined) results.push(value);
+ });
+ return '[' + results.join(', ') + ']';
+ }
+});
+
+// use native browser JS 1.6 implementation if available
+if (Object.isFunction(Array.prototype.forEach))
+ Array.prototype._each = Array.prototype.forEach;
+
+if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+};
+
+if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+};
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+if (Prototype.Browser.Opera){
+ Array.prototype.concat = function() {
+ var array = [];
+ for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ if (Object.isArray(arguments[i])) {
+ for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
+ array.push(arguments[i][j]);
+ } else {
+ array.push(arguments[i]);
+ }
+ }
+ return array;
+ };
+}
+Object.extend(Number.prototype, {
+ toColorPart: function() {
+ return this.toPaddedString(2, 16);
+ },
+
+ succ: function() {
+ return this + 1;
+ },
+
+ times: function(iterator) {
+ $R(0, this, true).each(iterator);
+ return this;
+ },
+
+ toPaddedString: function(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ },
+
+ toJSON: function() {
+ return isFinite(this) ? this.toString() : 'null';
+ }
+});
+
+$w('abs round ceil floor').each(function(method){
+ Number.prototype[method] = Math[method].methodize();
+});
+function $H(object) {
+ return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+ if (function() {
+ var i = 0, Test = function(value) { this.key = value };
+ Test.prototype.key = 'foo';
+ for (var property in new Test('bar')) i++;
+ return i > 1;
+ }()) {
+ function each(iterator) {
+ var cache = [];
+ for (var key in this._object) {
+ var value = this._object[key];
+ if (cache.include(key)) continue;
+ cache.push(key);
+ var pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+ } else {
+ function each(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+ }
+
+ function toQueryPair(key, value) {
+ if (Object.isUndefined(value)) return key;
+ return key + '=' + encodeURIComponent(String.interpret(value));
+ }
+
+ return {
+ initialize: function(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ },
+
+ _each: each,
+
+ set: function(key, value) {
+ return this._object[key] = value;
+ },
+
+ get: function(key) {
+ return this._object[key];
+ },
+
+ unset: function(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ },
+
+ toObject: function() {
+ return Object.clone(this._object);
+ },
+
+ keys: function() {
+ return this.pluck('key');
+ },
+
+ values: function() {
+ return this.pluck('value');
+ },
+
+ index: function(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ },
+
+ merge: function(object) {
+ return this.clone().update(object);
+ },
+
+ update: function(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ },
+
+ toQueryString: function() {
+ return this.map(function(pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
+
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values))
+ return values.map(toQueryPair.curry(key)).join('&');
+ }
+ return toQueryPair(key, values);
+ }).join('&');
+ },
+
+ inspect: function() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ },
+
+ toJSON: function() {
+ return Object.toJSON(this.toObject());
+ },
+
+ clone: function() {
+ return new Hash(this);
+ }
+ }
+})());
+
+Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
+Hash.from = $H;
+var ObjectRange = Class.create(Enumerable, {
+ initialize: function(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ },
+
+ _each: function(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ },
+
+ include: function(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+});
+
+var $R = function(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+};
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest()},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+};
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (Object.isFunction(responder[callback])) {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) { }
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() { Ajax.activeRequestCount++ },
+ onComplete: function() { Ajax.activeRequestCount-- }
+});
+
+Ajax.Base = Class.create({
+ initialize: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: '',
+ evalJSON: true,
+ evalJS: true
+ };
+ Object.extend(this.options, options || { });
+
+ this.options.method = this.options.method.toLowerCase();
+ if (Object.isString(this.options.parameters))
+ this.options.parameters = this.options.parameters.toQueryParams();
+ }
+});
+
+Ajax.Request = Class.create(Ajax.Base, {
+ _complete: false,
+
+ initialize: function($super, url, options) {
+ $super(options);
+ this.transport = Ajax.getTransport();
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = Object.clone(this.options.parameters);
+
+ if (!['get', 'post'].include(this.method)) {
+ // simulate other verbs over post
+ params['_method'] = this.method;
+ this.method = 'post';
+ }
+
+ this.parameters = params;
+
+ if (params = Object.toQueryString(params)) {
+ // when GET, append parameters to URL
+ if (this.method == 'get')
+ this.url += (this.url.include('?') ? '&' : '?') + params;
+ else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ params += '&_=';
+ }
+
+ try {
+ var response = new Ajax.Response(this);
+ if (this.options.onCreate) this.options.onCreate(response);
+ Ajax.Responders.dispatch('onCreate', this, response);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+ this.transport.send(this.body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ // user-defined headers
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (Object.isFunction(extras.push))
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ var status = this.getStatus();
+ return !status || (status >= 200 && status < 300);
+ },
+
+ getStatus: function() {
+ try {
+ return this.transport.status || 0;
+ } catch (e) { return 0 }
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + response.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ var contentType = response.getHeader('Content-type');
+ if (this.options.evalJS == 'force'
+ || (this.options.evalJS && contentType
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ // avoid memory leak in MSIE: clean up
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name);
+ } catch (e) { return null }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval((this.transport.responseText || '').unfilterJSON());
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Response = Class.create({
+ initialize: function(request){
+ this.request = request;
+ var transport = this.transport = request.transport,
+ readyState = this.readyState = transport.readyState;
+
+ if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+ this.status = this.getStatus();
+ this.statusText = this.getStatusText();
+ this.responseText = String.interpret(transport.responseText);
+ this.headerJSON = this._getHeaderJSON();
+ }
+
+ if(readyState == 4) {
+ var xml = transport.responseXML;
+ this.responseXML = xml === undefined ? null : xml;
+ this.responseJSON = this._getResponseJSON();
+ }
+ },
+
+ status: 0,
+ statusText: '',
+
+ getStatus: Ajax.Request.prototype.getStatus,
+
+ getStatusText: function() {
+ try {
+ return this.transport.statusText || '';
+ } catch (e) { return '' }
+ },
+
+ getHeader: Ajax.Request.prototype.getHeader,
+
+ getAllHeaders: function() {
+ try {
+ return this.getAllResponseHeaders();
+ } catch (e) { return null }
+ },
+
+ getResponseHeader: function(name) {
+ return this.transport.getResponseHeader(name);
+ },
+
+ getAllResponseHeaders: function() {
+ return this.transport.getAllResponseHeaders();
+ },
+
+ _getHeaderJSON: function() {
+ var json = this.getHeader('X-JSON');
+ if (!json) return null;
+ json = decodeURIComponent(escape(json));
+ try {
+ return json.evalJSON(this.request.options.sanitizeJSON);
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ },
+
+ _getResponseJSON: function() {
+ var options = this.request.options;
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
+ !(this.getHeader('Content-type') || '').include('application/json')))
+ return null;
+ try {
+ return this.transport.responseText.evalJSON(options.sanitizeJSON);
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+ initialize: function($super, container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ };
+
+ options = options || { };
+ var onComplete = options.onComplete;
+ options.onComplete = (function(response, param) {
+ this.updateContent(response.responseText);
+ if (Object.isFunction(onComplete)) onComplete(response, param);
+ }).bind(this);
+
+ $super(url, options);
+ },
+
+ updateContent: function(responseText) {
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
+ options = this.options;
+
+ if (!options.evalScripts) responseText = responseText.stripScripts();
+
+ if (receiver = $(receiver)) {
+ if (options.insertion) {
+ if (Object.isString(options.insertion)) {
+ var insertion = { }; insertion[options.insertion] = responseText;
+ receiver.insert(insertion);
+ }
+ else options.insertion(receiver, responseText);
+ }
+ else receiver.update(responseText);
+ }
+
+ if (this.success()) {
+ if (this.onComplete) this.onComplete.bind(this).defer();
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+ initialize: function($super, container, url, options) {
+ $super(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = { };
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(response) {
+ if (this.options.decay) {
+ this.decay = (response.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = response.responseText;
+ }
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+function $(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push($(arguments[i]));
+ return elements;
+ }
+ if (Object.isString(element))
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, $(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(Element.extend(query.snapshotItem(i)));
+ return results;
+ };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+ // DOM level 2 ECMAScript Language Binding
+ Object.extend(Node, {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ });
+}
+
+(function() {
+ var element = this.Element;
+ this.Element = function(tagName, attributes) {
+ attributes = attributes || { };
+ tagName = tagName.toLowerCase();
+ var cache = Element.cache;
+ if (Prototype.Browser.IE && attributes.name) {
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
+ delete attributes.name;
+ return Element.writeAttribute(document.createElement(tagName), attributes);
+ }
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+ return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+ };
+ Object.extend(this.Element, element || { });
+}).call(window);
+
+Element.cache = { };
+
+Element.Methods = {
+ visible: function(element) {
+ return $(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = $(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+ hide: function(element) {
+ $(element).style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ $(element).style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = $(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+ content = Object.toHTML(content);
+ element.innerHTML = content.stripScripts();
+ content.evalScripts.bind(content).defer();
+ return element;
+ },
+
+ replace: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ else if (!Object.isElement(content)) {
+ content = Object.toHTML(content);
+ var range = element.ownerDocument.createRange();
+ range.selectNode(element);
+ content.evalScripts.bind(content).defer();
+ content = range.createContextualFragment(content.stripScripts());
+ }
+ element.parentNode.replaceChild(content, element);
+ return element;
+ },
+
+ insert: function(element, insertions) {
+ element = $(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = {bottom:insertions};
+
+ var content, t, range;
+
+ for (position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ t = Element._insertionTranslations[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ t.insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+
+ range = element.ownerDocument.createRange();
+ t.initializeRange(element, range);
+ t.insert(element, range.createContextualFragment(content.stripScripts()));
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ },
+
+ wrap: function(element, wrapper, attributes) {
+ element = $(element);
+ if (Object.isElement(wrapper))
+ $(wrapper).writeAttribute(attributes || { });
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+ else wrapper = new Element('div', wrapper);
+ if (element.parentNode)
+ element.parentNode.replaceChild(wrapper, element);
+ wrapper.appendChild(element);
+ return wrapper;
+ },
+
+ inspect: function(element) {
+ element = $(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(), attribute = pair.last();
+ var value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property) {
+ element = $(element);
+ var elements = [];
+ while (element = element[property])
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return $(element).recursivelyCollect('parentNode');
+ },
+
+ descendants: function(element) {
+ return $A($(element).getElementsByTagName('*')).each(Element.extend);
+ },
+
+ firstDescendant: function(element) {
+ element = $(element).firstChild;
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ return $(element);
+ },
+
+ immediateDescendants: function(element) {
+ if (!(element = $(element).firstChild)) return [];
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ if (element) return [element].concat($(element).nextSiblings());
+ return [];
+ },
+
+ previousSiblings: function(element) {
+ return $(element).recursivelyCollect('previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return $(element).recursivelyCollect('nextSibling');
+ },
+
+ siblings: function(element) {
+ element = $(element);
+ return element.previousSiblings().reverse().concat(element.nextSiblings());
+ },
+
+ match: function(element, selector) {
+ if (Object.isString(selector))
+ selector = new Selector(selector);
+ return selector.match($(element));
+ },
+
+ up: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(element.parentNode);
+ var ancestors = element.ancestors();
+ return expression ? Selector.findElement(ancestors, expression, index) :
+ ancestors[index || 0];
+ },
+
+ down: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ var descendants = element.descendants();
+ return expression ? Selector.findElement(descendants, expression, index) :
+ descendants[index || 0];
+ },
+
+ previous: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
+ var previousSiblings = element.previousSiblings();
+ return expression ? Selector.findElement(previousSiblings, expression, index) :
+ previousSiblings[index || 0];
+ },
+
+ next: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
+ var nextSiblings = element.nextSiblings();
+ return expression ? Selector.findElement(nextSiblings, expression, index) :
+ nextSiblings[index || 0];
+ },
+
+ select: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element, args);
+ },
+
+ adjacent: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element.parentNode, args).without(element);
+ },
+
+ identify: function(element) {
+ element = $(element);
+ var id = element.readAttribute('id'), self = arguments.callee;
+ if (id) return id;
+ do { id = 'anonymous_element_' + self.counter++ } while ($(id));
+ element.writeAttribute('id', id);
+ return id;
+ },
+
+ readAttribute: function(element, name) {
+ element = $(element);
+ if (Prototype.Browser.IE) {
+ var t = Element._attributeTranslations.read;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ if (name.include(':')) {
+ return (!element.attributes || !element.attributes[name]) ? null :
+ element.attributes[name].value;
+ }
+ }
+ return element.getAttribute(name);
+ },
+
+ writeAttribute: function(element, name, value) {
+ element = $(element);
+ var attributes = { }, t = Element._attributeTranslations.write;
+
+ if (typeof name == 'object') attributes = name;
+ else attributes[name] = value === undefined ? true : value;
+
+ for (var attr in attributes) {
+ var name = t.names[attr] || attr, value = attributes[attr];
+ if (t.values[attr]) name = t.values[attr](element, value);
+ if (value === false || value === null)
+ element.removeAttribute(name);
+ else if (value === true)
+ element.setAttribute(name, name);
+ else element.setAttribute(name, value);
+ }
+ return element;
+ },
+
+ getHeight: function(element) {
+ return $(element).getDimensions().height;
+ },
+
+ getWidth: function(element) {
+ return $(element).getDimensions().width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ var elementClassName = element.className;
+ return (elementClassName.length > 0 && (elementClassName == className ||
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ if (!element.hasClassName(className))
+ element.className += (element.className ? ' ' : '') + className;
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ element.className = element.className.replace(
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ return element[element.hasClassName(className) ?
+ 'removeClassName' : 'addClassName'](className);
+ },
+
+ // removes whitespace-only text node children
+ cleanWhitespace: function(element) {
+ element = $(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return $(element).innerHTML.blank();
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = $(element), ancestor = $(ancestor);
+
+ if (element.compareDocumentPosition)
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+ if (element.sourceIndex && !Prototype.Browser.Opera) {
+ var e = element.sourceIndex, a = ancestor.sourceIndex,
+ nextAncestor = ancestor.nextSibling;
+ if (!nextAncestor) {
+ do { ancestor = ancestor.parentNode; }
+ while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
+ }
+ if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex);
+ }
+
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = $(element);
+ var pos = element.cumulativeOffset();
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = $(element);
+ style = style == 'float' ? 'cssFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value) {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ }
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+ return value == 'auto' ? null : value;
+ },
+
+ getOpacity: function(element) {
+ return $(element).getStyle('opacity');
+ },
+
+ setStyle: function(element, styles) {
+ element = $(element);
+ var elementStyle = element.style, match;
+ if (Object.isString(styles)) {
+ element.style.cssText += ';' + styles;
+ return styles.include('opacity') ?
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+ }
+ for (var property in styles)
+ if (property == 'opacity') element.setOpacity(styles[property]);
+ else
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
+ (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
+ property] = styles[property];
+
+ return element;
+ },
+
+ setOpacity: function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+ return element;
+ },
+
+ getDimensions: function(element) {
+ element = $(element);
+ var display = $(element).getStyle('display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ // All *Width and *Height properties give 0 on elements with display none,
+ // so enable the element temporarily
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.clientWidth;
+ var originalHeight = element.clientHeight;
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+ },
+
+ makePositioned: function(element) {
+ element = $(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ // Opera returns the offset relative to the positioning context, when an
+ // element is position relative but top and left have not been defined
+ if (window.opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = $(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = $(element);
+ if (element._overflow) return element;
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+ if (element._overflow !== 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = $(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if (element.tagName == 'BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p == 'relative' || p == 'absolute') break;
+ }
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ absolutize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'absolute') return;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ var offsets = element.positionedOffset();
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ return element;
+ },
+
+ relativize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'relative') return;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ return element;
+ },
+
+ cumulativeScrollOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ getOffsetParent: function(element) {
+ if (element.offsetParent) return $(element.offsetParent);
+ if (element == document.body) return $(element);
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return $(element);
+
+ return $(document.body);
+ },
+
+ viewportOffset: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ // Safari fix
+ if (element.offsetParent == document.body &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ clonePosition: function(element, source) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || { });
+
+ // find page position of source
+ source = $(source);
+ var p = source.viewportOffset();
+
+ // find coordinate system to use
+ element = $(element);
+ var delta = [0, 0];
+ var parent = null;
+ // delta [0,0] will do fine with position: fixed elements,
+ // position:absolute needs offsetParent deltas
+ if (Element.getStyle(element, 'position') == 'absolute') {
+ parent = element.getOffsetParent();
+ delta = parent.viewportOffset();
+ }
+
+ // correct by body offsets (fixes Safari)
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ // set position
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+ return element;
+ }
+};
+
+Element.Methods.identify.counter = 1;
+
+Object.extend(Element.Methods, {
+ getElementsBySelector: Element.Methods.select,
+ childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+ write: {
+ names: {
+ className: 'class',
+ htmlFor: 'for'
+ },
+ values: { }
+ }
+};
+
+
+if (!document.createRange || Prototype.Browser.Opera) {
+ Element.Methods.insert = function(element, insertions) {
+ element = $(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = { bottom: insertions };
+
+ var t = Element._insertionTranslations, content, position, pos, tagName;
+
+ for (position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ pos = t[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ pos.insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+ tagName = ((position == 'before' || position == 'after')
+ ? element.parentNode : element).tagName.toUpperCase();
+
+ if (t.tags[tagName]) {
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ if (position == 'top' || position == 'after') fragments.reverse();
+ fragments.each(pos.insert.curry(element));
+ }
+ else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ };
+}
+
+if (Prototype.Browser.Opera) {
+ Element.Methods._getStyle = Element.Methods.getStyle;
+ Element.Methods.getStyle = function(element, style) {
+ switch(style) {
+ case 'left':
+ case 'top':
+ case 'right':
+ case 'bottom':
+ if (Element._getStyle(element, 'position') == 'static') return null;
+ default: return Element._getStyle(element, style);
+ }
+ };
+ Element.Methods._readAttribute = Element.Methods.readAttribute;
+ Element.Methods.readAttribute = function(element, attribute) {
+ if (attribute == 'title') return element.title;
+ return Element._readAttribute(element, attribute);
+ };
+}
+
+else if (Prototype.Browser.IE) {
+ $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
+ Element.Methods[method] = Element.Methods[method].wrap(
+ function(proceed, element) {
+ element = $(element);
+ var position = element.getStyle('position');
+ if (position != 'static') return proceed(element);
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+ });
+
+ Element.Methods.getStyle = function(element, style) {
+ element = $(element);
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value && element.currentStyle) value = element.currentStyle[style];
+
+ if (style == 'opacity') {
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if (value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+
+ if (value == 'auto') {
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+ return element['offset' + style.capitalize()] + 'px';
+ return null;
+ }
+ return value;
+ };
+
+ Element.Methods.setOpacity = function(element, value) {
+ function stripAlpha(filter){
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
+ }
+ element = $(element);
+ var currentStyle = element.currentStyle;
+ if ((currentStyle && !currentStyle.hasLayout) ||
+ (!currentStyle && element.style.zoom == 'normal'))
+ element.style.zoom = 1;
+
+ var filter = element.getStyle('filter'), style = element.style;
+ if (value == 1 || value === '') {
+ (filter = stripAlpha(filter)) ?
+ style.filter = filter : style.removeAttribute('filter');
+ return element;
+ } else if (value < 0.00001) value = 0;
+ style.filter = stripAlpha(filter) +
+ 'alpha(opacity=' + (value * 100) + ')';
+ return element;
+ };
+
+ Element._attributeTranslations = {
+ read: {
+ names: {
+ 'class': 'className',
+ 'for': 'htmlFor'
+ },
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: function(element, attribute) {
+ var attribute = element.getAttribute(attribute);
+ return attribute ? attribute.toString().slice(23, -2) : null;
+ },
+ _flag: function(element, attribute) {
+ return $(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
+ }
+ }
+ };
+
+ Element._attributeTranslations.write = {
+ names: Object.clone(Element._attributeTranslations.read.names),
+ values: {
+ checked: function(element, value) {
+ element.checked = !!value;
+ },
+
+ style: function(element, value) {
+ element.style.cssText = value ? value : '';
+ }
+ }
+ };
+
+ Element._attributeTranslations.has = {};
+
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+ 'encType maxLength readOnly longDesc').each(function(attr) {
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+ });
+
+ (function(v) {
+ Object.extend(v, {
+ href: v._getAttr,
+ src: v._getAttr,
+ type: v._getAttr,
+ action: v._getAttrNode,
+ disabled: v._flag,
+ checked: v._flag,
+ readonly: v._flag,
+ multiple: v._flag,
+ onload: v._getEv,
+ onunload: v._getEv,
+ onclick: v._getEv,
+ ondblclick: v._getEv,
+ onmousedown: v._getEv,
+ onmouseup: v._getEv,
+ onmouseover: v._getEv,
+ onmousemove: v._getEv,
+ onmouseout: v._getEv,
+ onfocus: v._getEv,
+ onblur: v._getEv,
+ onkeypress: v._getEv,
+ onkeydown: v._getEv,
+ onkeyup: v._getEv,
+ onsubmit: v._getEv,
+ onreset: v._getEv,
+ onselect: v._getEv,
+ onchange: v._getEv
+ });
+ })(Element._attributeTranslations.read.values);
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1) ? 0.999999 :
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
+ return element;
+ };
+}
+
+else if (Prototype.Browser.WebKit) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+
+ if (value == 1)
+ if(element.tagName == 'IMG' && element.width) {
+ element.width++; element.width--;
+ } else try {
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch (e) { }
+
+ return element;
+ };
+
+ // Safari returns margins on body which is incorrect if the child is absolutely
+ // positioned. For performance reasons, redefine Position.cumulativeOffset for
+ // KHTML/WebKit only.
+ Element.Methods.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return Element._returnOffset(valueL, valueT);
+ };
+}
+
+if (Prototype.Browser.IE || Prototype.Browser.Opera) {
+ // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
+ Element.Methods.update = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+
+ content = Object.toHTML(content);
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName in Element._insertionTranslations.tags) {
+ $A(element.childNodes).each(function(node) { element.removeChild(node) });
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) { element.appendChild(node) });
+ }
+ else element.innerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+if (document.createElement('div').outerHTML) {
+ Element.Methods.replace = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ element.parentNode.replaceChild(content, element);
+ return element;
+ }
+
+ content = Object.toHTML(content);
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+ if (Element._insertionTranslations.tags[tagName]) {
+ var nextSibling = element.next();
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ parent.removeChild(element);
+ if (nextSibling)
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+ else
+ fragments.each(function(node) { parent.appendChild(node) });
+ }
+ else element.outerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+Element._returnOffset = function(l, t) {
+ var result = [l, t];
+ result.left = l;
+ result.top = t;
+ return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+ var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+ div.innerHTML = t[0] + html + t[1];
+ t[2].times(function() { div = div.firstChild });
+ return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+ before: {
+ adjacency: 'beforeBegin',
+ insert: function(element, node) {
+ element.parentNode.insertBefore(node, element);
+ },
+ initializeRange: function(element, range) {
+ range.setStartBefore(element);
+ }
+ },
+ top: {
+ adjacency: 'afterBegin',
+ insert: function(element, node) {
+ element.insertBefore(node, element.firstChild);
+ },
+ initializeRange: function(element, range) {
+ range.selectNodeContents(element);
+ range.collapse(true);
+ }
+ },
+ bottom: {
+ adjacency: 'beforeEnd',
+ insert: function(element, node) {
+ element.appendChild(node);
+ }
+ },
+ after: {
+ adjacency: 'afterEnd',
+ insert: function(element, node) {
+ element.parentNode.insertBefore(node, element.nextSibling);
+ },
+ initializeRange: function(element, range) {
+ range.setStartAfter(element);
+ }
+ },
+ tags: {
+ TABLE: ['<table>', '</table>', 1],
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+ SELECT: ['<select>', '</select>', 1]
+ }
+};
+
+(function() {
+ this.bottom.initializeRange = this.top.initializeRange;
+ Object.extend(this.tags, {
+ THEAD: this.tags.TBODY,
+ TFOOT: this.tags.TBODY,
+ TH: this.tags.TD
+ });
+}).call(Element._insertionTranslations);
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
+ var node = $(element).getAttributeNode(attribute);
+ return node && node.specified;
+ }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+if (!Prototype.BrowserFeatures.ElementExtensions &&
+ document.createElement('div').__proto__) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = document.createElement('div').__proto__;
+ Prototype.BrowserFeatures.ElementExtensions = true;
+}
+
+Element.extend = (function() {
+ if (Prototype.BrowserFeatures.SpecificElementExtensions)
+ return Prototype.K;
+
+ var Methods = { }, ByTag = Element.Methods.ByTag;
+
+ var extend = Object.extend(function(element) {
+ if (!element || element._extendedByPrototype ||
+ element.nodeType != 1 || element == window) return element;
+
+ var methods = Object.clone(Methods),
+ tagName = element.tagName, property, value;
+
+ // extend methods for specific tags
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+ for (property in methods) {
+ value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+
+ element._extendedByPrototype = Prototype.emptyFunction;
+ return element;
+
+ }, {
+ refresh: function() {
+ // extend methods for all tags (Safari doesn't need this)
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
+ Object.extend(Methods, Element.Methods);
+ Object.extend(Methods, Element.Methods.Simulated);
+ }
+ }
+ });
+
+ extend.refresh();
+ return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+ if (element.hasAttribute) return element.hasAttribute(attribute);
+ return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+ if (!methods) {
+ Object.extend(Form, Form.Methods);
+ Object.extend(Form.Element, Form.Element.Methods);
+ Object.extend(Element.Methods.ByTag, {
+ "FORM": Object.clone(Form.Methods),
+ "INPUT": Object.clone(Form.Element.Methods),
+ "SELECT": Object.clone(Form.Element.Methods),
+ "TEXTAREA": Object.clone(Form.Element.Methods)
+ });
+ }
+
+ if (arguments.length == 2) {
+ var tagName = methods;
+ methods = arguments[1];
+ }
+
+ if (!tagName) Object.extend(Element.Methods, methods || { });
+ else {
+ if (Object.isArray(tagName)) tagName.each(extend);
+ else extend(tagName);
+ }
+
+ function extend(tagName) {
+ tagName = tagName.toUpperCase();
+ if (!Element.Methods.ByTag[tagName])
+ Element.Methods.ByTag[tagName] = { };
+ Object.extend(Element.Methods.ByTag[tagName], methods);
+ }
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!Object.isFunction(value)) continue;
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = value.methodize();
+ }
+ }
+
+ function findDOMClass(tagName) {
+ var klass;
+ var trans = {
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+ "FrameSet", "IFRAME": "IFrame"
+ };
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName.capitalize() + 'Element';
+ if (window[klass]) return window[klass];
+
+ window[klass] = { };
+ window[klass].prototype = document.createElement(tagName).__proto__;
+ return window[klass];
+ }
+
+ if (F.ElementExtensions) {
+ copy(Element.Methods, HTMLElement.prototype);
+ copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+ }
+
+ if (F.SpecificElementExtensions) {
+ for (var tag in Element.Methods.ByTag) {
+ var klass = findDOMClass(tag);
+ if (Object.isUndefined(klass)) continue;
+ copy(T[tag], klass.prototype);
+ }
+ }
+
+ Object.extend(Element, Element.Methods);
+ delete Element.ByTag;
+
+ if (Element.extend.refresh) Element.extend.refresh();
+ Element.cache = { };
+};
+
+document.viewport = {
+ getDimensions: function() {
+ var dimensions = { };
+ $w('width height').each(function(d) {
+ var D = d.capitalize();
+ dimensions[d] = self['inner' + D] ||
+ (document.documentElement['client' + D] || document.body['client' + D]);
+ });
+ return dimensions;
+ },
+
+ getWidth: function() {
+ return this.getDimensions().width;
+ },
+
+ getHeight: function() {
+ return this.getDimensions().height;
+ },
+
+ getScrollOffsets: function() {
+ return Element._returnOffset(
+ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ }
+};
+/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license. Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+ initialize: function(expression) {
+ this.expression = expression.strip();
+ this.compileMatcher();
+ },
+
+ compileMatcher: function() {
+ // Selectors with namespaced attributes can't use the XPath version
+ if (Prototype.BrowserFeatures.XPath && !(/(\[[\w-]*?:|:checked)/).test(this.expression))
+ return this.compileXPathMatcher();
+
+ var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+ c = Selector.criteria, le, p, m;
+
+ if (Selector._cache[e]) {
+ this.matcher = Selector._cache[e];
+ return;
+ }
+
+ this.matcher = ["this.matcher = function(root) {",
+ "var r = root, h = Selector.handlers, c = false, n;"];
+
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+ new Template(c[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.matcher.push("return h.unique(n);\n}");
+ eval(this.matcher.join('\n'));
+ Selector._cache[this.expression] = this.matcher;
+ },
+
+ compileXPathMatcher: function() {
+ var e = this.expression, ps = Selector.patterns,
+ x = Selector.xpath, le, m;
+
+ if (Selector._cache[e]) {
+ this.xpath = Selector._cache[e]; return;
+ }
+
+ this.matcher = ['.//*'];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ if (m = e.match(ps[i])) {
+ this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+ new Template(x[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.xpath = this.matcher.join('');
+ Selector._cache[this.expression] = this.xpath;
+ },
+
+ findElements: function(root) {
+ root = root || document;
+ if (this.xpath) return document._getElementsByXPath(this.xpath, root);
+ return this.matcher(root);
+ },
+
+ match: function(element) {
+ this.tokens = [];
+
+ var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+ var le, p, m;
+
+ while (e && le !== e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ // use the Selector.assertions methods unless the selector
+ // is too complex.
+ if (as[i]) {
+ this.tokens.push([i, Object.clone(m)]);
+ e = e.replace(m[0], '');
+ } else {
+ // reluctantly do a document-wide search
+ // and look for a match in the array
+ return this.findElements(document).include(element);
+ }
+ }
+ }
+ }
+
+ var match = true, name, matches;
+ for (var i = 0, token; token = this.tokens[i]; i++) {
+ name = token[0], matches = token[1];
+ if (!Selector.assertions[name](element, matches)) {
+ match = false; break;
+ }
+ }
+
+ return match;
+ },
+
+ toString: function() {
+ return this.expression;
+ },
+
+ inspect: function() {
+ return "#<Selector:" + this.expression.inspect() + ">";
+ }
+});
+
+Object.extend(Selector, {
+ _cache: { },
+
+ xpath: {
+ descendant: "//*",
+ child: "/*",
+ adjacent: "/following-sibling::*[1]",
+ laterSibling: '/following-sibling::*',
+ tagName: function(m) {
+ if (m[1] == '*') return '';
+ return "[local-name()='" + m[1].toLowerCase() +
+ "' or local-name()='" + m[1].toUpperCase() + "']";
+ },
+ className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+ id: "[@id='#{1}']",
+ attrPresence: "[@#{1}]",
+ attr: function(m) {
+ m[3] = m[5] || m[6];
+ return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+ },
+ pseudo: function(m) {
+ var h = Selector.xpath.pseudos[m[1]];
+ if (!h) return '';
+ if (Object.isFunction(h)) return h(m);
+ return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+ },
+ operators: {
+ '=': "[@#{1}='#{3}']",
+ '!=': "[@#{1}!='#{3}']",
+ '^=': "[starts-with(@#{1}, '#{3}')]",
+ '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+ '*=': "[contains(@#{1}, '#{3}')]",
+ '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+ '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+ },
+ pseudos: {
+ 'first-child': '[not(preceding-sibling::*)]',
+ 'last-child': '[not(following-sibling::*)]',
+ 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
+ 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
+ 'checked': "[@checked]",
+ 'disabled': "[@disabled]",
+ 'enabled': "[not(@disabled)]",
+ 'not': function(m) {
+ var e = m[6], p = Selector.patterns,
+ x = Selector.xpath, le, m, v;
+
+ var exclusion = [];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in p) {
+ if (m = e.match(p[i])) {
+ v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+ exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+ return "[not(" + exclusion.join(" and ") + ")]";
+ },
+ 'nth-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+ },
+ 'nth-last-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+ },
+ 'nth-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("position() ", m);
+ },
+ 'nth-last-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+ },
+ 'first-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+ },
+ 'last-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+ },
+ 'only-of-type': function(m) {
+ var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+ },
+ nth: function(fragment, m) {
+ var mm, formula = m[6], predicate;
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ if (mm = formula.match(/^(\d+)$/)) // digit only
+ return '[' + fragment + "= " + mm[1] + ']';
+ if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (mm[1] == "-") mm[1] = -1;
+ var a = mm[1] ? Number(mm[1]) : 1;
+ var b = mm[2] ? Number(mm[2]) : 0;
+ predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+ "((#{fragment} - #{b}) div #{a} >= 0)]";
+ return new Template(predicate).evaluate({
+ fragment: fragment, a: a, b: b });
+ }
+ }
+ }
+ },
+
+ criteria: {
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
+ attr: function(m) {
+ m[3] = (m[5] || m[6]);
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
+ },
+ pseudo: function(m) {
+ if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+ return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+ },
+ descendant: 'c = "descendant";',
+ child: 'c = "child";',
+ adjacent: 'c = "adjacent";',
+ laterSibling: 'c = "laterSibling";'
+ },
+
+ patterns: {
+ // combinators must be listed first
+ // (and descendant needs to be last combinator)
+ laterSibling: /^\s*~\s*/,
+ child: /^\s*>\s*/,
+ adjacent: /^\s*\+\s*/,
+ descendant: /^\s/,
+
+ // selectors follow
+ tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
+ id: /^#([\w\-\*]+)(\b|$)/,
+ className: /^\.([\w\-\*]+)(\b|$)/,
+ pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/,
+ attrPresence: /^\[([\w]+)\]/,
+ attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
+ },
+
+ // for Selector.match and Element#match
+ assertions: {
+ tagName: function(element, matches) {
+ return matches[1].toUpperCase() == element.tagName.toUpperCase();
+ },
+
+ className: function(element, matches) {
+ return Element.hasClassName(element, matches[1]);
+ },
+
+ id: function(element, matches) {
+ return element.id === matches[1];
+ },
+
+ attrPresence: function(element, matches) {
+ return Element.hasAttribute(element, matches[1]);
+ },
+
+ attr: function(element, matches) {
+ var nodeValue = Element.readAttribute(element, matches[1]);
+ return Selector.operators[matches[2]](nodeValue, matches[3]);
+ }
+ },
+
+ handlers: {
+ // UTILITY FUNCTIONS
+ // joins two collections
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ a.push(node);
+ return a;
+ },
+
+ // marks an array of nodes for counting
+ mark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._counted = true;
+ return nodes;
+ },
+
+ unmark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._counted = undefined;
+ return nodes;
+ },
+
+ // mark each child node with its position (for nth calls)
+ // "ofType" flag indicates whether we're indexing for nth-of-type
+ // rather than nth-child
+ index: function(parentNode, reverse, ofType) {
+ parentNode._counted = true;
+ if (reverse) {
+ for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+ var node = nodes[i];
+ if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
+ }
+ } else {
+ for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+ if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
+ }
+ },
+
+ // filters out duplicates and extends all nodes
+ unique: function(nodes) {
+ if (nodes.length == 0) return nodes;
+ var results = [], n;
+ for (var i = 0, l = nodes.length; i < l; i++)
+ if (!(n = nodes[i])._counted) {
+ n._counted = true;
+ results.push(Element.extend(n));
+ }
+ return Selector.handlers.unmark(results);
+ },
+
+ // COMBINATOR FUNCTIONS
+ descendant: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName('*'));
+ return results;
+ },
+
+ child: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
+ if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+ }
+ return results;
+ },
+
+ adjacent: function(nodes) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ var next = this.nextElementSibling(node);
+ if (next) results.push(next);
+ }
+ return results;
+ },
+
+ laterSibling: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, Element.nextSiblings(node));
+ return results;
+ },
+
+ nextElementSibling: function(node) {
+ while (node = node.nextSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ previousElementSibling: function(node) {
+ while (node = node.previousSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ // TOKEN FUNCTIONS
+ tagName: function(nodes, root, tagName, combinator) {
+ tagName = tagName.toUpperCase();
+ var results = [], h = Selector.handlers;
+ if (nodes) {
+ if (combinator) {
+ // fastlane for ordinary descendant combinators
+ if (combinator == "descendant") {
+ for (var i = 0, node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName(tagName));
+ return results;
+ } else nodes = this[combinator](nodes);
+ if (tagName == "*") return nodes;
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName.toUpperCase() == tagName) results.push(node);
+ return results;
+ } else return root.getElementsByTagName(tagName);
+ },
+
+ id: function(nodes, root, id, combinator) {
+ var targetNode = $(id), h = Selector.handlers;
+ if (!targetNode) return [];
+ if (!nodes && root == document) return [targetNode];
+ if (nodes) {
+ if (combinator) {
+ if (combinator == 'child') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (targetNode.parentNode == node) return [targetNode];
+ } else if (combinator == 'descendant') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.descendantOf(targetNode, node)) return [targetNode];
+ } else if (combinator == 'adjacent') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Selector.handlers.previousElementSibling(targetNode) == node)
+ return [targetNode];
+ } else nodes = h[combinator](nodes);
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node == targetNode) return [targetNode];
+ return [];
+ }
+ return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+ },
+
+ className: function(nodes, root, className, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ return Selector.handlers.byClassName(nodes, root, className);
+ },
+
+ byClassName: function(nodes, root, className) {
+ if (!nodes) nodes = Selector.handlers.descendant([root]);
+ var needle = ' ' + className + ' ';
+ for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+ nodeClassName = node.className;
+ if (nodeClassName.length == 0) continue;
+ if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+ results.push(node);
+ }
+ return results;
+ },
+
+ attrPresence: function(nodes, root, attr) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ var results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.hasAttribute(node, attr)) results.push(node);
+ return results;
+ },
+
+ attr: function(nodes, root, attr, value, operator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ var handler = Selector.operators[operator], results = [];
+ for (var i = 0, node; node = nodes[i]; i++) {
+ var nodeValue = Element.readAttribute(node, attr);
+ if (nodeValue === null) continue;
+ if (handler(nodeValue, value)) results.push(node);
+ }
+ return results;
+ },
+
+ pseudo: function(nodes, name, value, root, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ return Selector.pseudos[name](nodes, value, root);
+ }
+ },
+
+ pseudos: {
+ 'first-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.previousElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'last-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.nextElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'only-child': function(nodes, value, root) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+ results.push(node);
+ return results;
+ },
+ 'nth-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root);
+ },
+ 'nth-last-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true);
+ },
+ 'nth-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, false, true);
+ },
+ 'nth-last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true, true);
+ },
+ 'first-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, false, true);
+ },
+ 'last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, true, true);
+ },
+ 'only-of-type': function(nodes, formula, root) {
+ var p = Selector.pseudos;
+ return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+ },
+
+ // handles the an+b logic
+ getIndices: function(a, b, total) {
+ if (a == 0) return b > 0 ? [b] : [];
+ return $R(1, total).inject([], function(memo, i) {
+ if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+ return memo;
+ });
+ },
+
+ // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
+ nth: function(nodes, formula, root, reverse, ofType) {
+ if (nodes.length == 0) return [];
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ var h = Selector.handlers, results = [], indexed = [], m;
+ h.mark(nodes);
+ for (var i = 0, node; node = nodes[i]; i++) {
+ if (!node.parentNode._counted) {
+ h.index(node.parentNode, reverse, ofType);
+ indexed.push(node.parentNode);
+ }
+ }
+ if (formula.match(/^\d+$/)) { // just a number
+ formula = Number(formula);
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.nodeIndex == formula) results.push(node);
+ } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (m[1] == "-") m[1] = -1;
+ var a = m[1] ? Number(m[1]) : 1;
+ var b = m[2] ? Number(m[2]) : 0;
+ var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+ for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+ for (var j = 0; j < l; j++)
+ if (node.nodeIndex == indices[j]) results.push(node);
+ }
+ }
+ h.unmark(nodes);
+ h.unmark(indexed);
+ return results;
+ },
+
+ 'empty': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ // IE treats comments as element nodes
+ if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
+ results.push(node);
+ }
+ return results;
+ },
+
+ 'not': function(nodes, selector, root) {
+ var h = Selector.handlers, selectorType, m;
+ var exclusions = new Selector(selector).findElements(root);
+ h.mark(exclusions);
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node._counted) results.push(node);
+ h.unmark(exclusions);
+ return results;
+ },
+
+ 'enabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node.disabled) results.push(node);
+ return results;
+ },
+
+ 'disabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.disabled) results.push(node);
+ return results;
+ },
+
+ 'checked': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.checked) results.push(node);
+ return results;
+ }
+ },
+
+ operators: {
+ '=': function(nv, v) { return nv == v; },
+ '!=': function(nv, v) { return nv != v; },
+ '^=': function(nv, v) { return nv.startsWith(v); },
+ '$=': function(nv, v) { return nv.endsWith(v); },
+ '*=': function(nv, v) { return nv.include(v); },
+ '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+ '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
+ },
+
+ matchElements: function(elements, expression) {
+ var matches = new Selector(expression).findElements(), h = Selector.handlers;
+ h.mark(matches);
+ for (var i = 0, results = [], element; element = elements[i]; i++)
+ if (element._counted) results.push(element);
+ h.unmark(matches);
+ return results;
+ },
+
+ findElement: function(elements, expression, index) {
+ if (Object.isNumber(expression)) {
+ index = expression; expression = false;
+ }
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ var exprs = expressions.join(','), expressions = [];
+ exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+ expressions.push(m[1].strip());
+ });
+ var results = [], h = Selector.handlers;
+ for (var i = 0, l = expressions.length, selector; i < l; i++) {
+ selector = new Selector(expressions[i].strip());
+ h.concat(results, selector.findElements(element));
+ }
+ return (l > 1) ? h.unique(results) : results;
+ }
+});
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+ reset: function(form) {
+ $(form).reset();
+ return form;
+ },
+
+ serializeElements: function(elements, options) {
+ if (typeof options != 'object') options = { hash: !!options };
+ else if (options.hash === undefined) options.hash = true;
+ var key, value, submitted = false, submit = options.submit;
+
+ var data = elements.inject({ }, function(result, element) {
+ if (!element.disabled && element.name) {
+ key = element.name; value = $(element).getValue();
+ if (value != null && (element.type != 'submit' || (!submitted &&
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
+ if (key in result) {
+ // a key is already present; construct an array of values
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return options.hash ? data : Object.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, options) {
+ return Form.serializeElements(Form.getElements(form), options);
+ },
+
+ getElements: function(form) {
+ return $A($(form).getElementsByTagName('*')).inject([],
+ function(elements, child) {
+ if (Form.Element.Serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ }
+ );
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('disable');
+ return form;
+ },
+
+ enable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('enable');
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ var elements = $(form).getElements().findAll(function(element) {
+ return 'hidden' != element.type && !element.disabled;
+ });
+ var firstByIndex = elements.findAll(function(element) {
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+ }).sortBy(function(element) { return element.tabIndex }).first();
+
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
+ return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = $(form);
+ form.findFirstElement().activate();
+ return form;
+ },
+
+ request: function(form, options) {
+ form = $(form), options = Object.clone(options || { });
+
+ var params = options.parameters, action = form.readAttribute('action') || '';
+ if (action.blank()) action = window.location.href;
+ options.parameters = form.serialize(true);
+
+ if (params) {
+ if (Object.isString(params)) params = params.toQueryParams();
+ Object.extend(options.parameters, params);
+ }
+
+ if (form.hasAttribute('method') && !options.method)
+ options.method = form.method;
+
+ return new Ajax.Request(action, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+ focus: function(element) {
+ $(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ $(element).select();
+ return element;
+ }
+};
+
+Form.Element.Methods = {
+ serialize: function(element) {
+ element = $(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = { };
+ pair[element.name] = value;
+ return Object.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ setValue: function(element, value) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ Form.Element.Serializers[method](element, value);
+ return element;
+ },
+
+ clear: function(element) {
+ $(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return $(element).value != '';
+ },
+
+ activate: function(element) {
+ element = $(element);
+ try {
+ element.focus();
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
+ !['button', 'reset', 'submit'].include(element.type)))
+ element.select();
+ } catch (e) { }
+ return element;
+ },
+
+ disable: function(element) {
+ element = $(element);
+ element.blur();
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = $(element);
+ element.disabled = false;
+ return element;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element, value) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element, value);
+ default:
+ return Form.Element.Serializers.textarea(element, value);
+ }
+ },
+
+ inputSelector: function(element, value) {
+ if (value === undefined) return element.checked ? element.value : null;
+ else element.checked = !!value;
+ },
+
+ textarea: function(element, value) {
+ if (value === undefined) return element.value;
+ else element.value = value;
+ },
+
+ select: function(element, index) {
+ if (index === undefined)
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ else {
+ var opt, value, single = !Object.isArray(index);
+ for (var i = 0, length = element.length; i < length; i++) {
+ opt = element.options[i];
+ value = this.optionValue(opt);
+ if (single) {
+ if (value == index) {
+ opt.selected = true;
+ return;
+ }
+ }
+ else opt.selected = index.include(value);
+ }
+ }
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ // extend element because hasAttribute may not be native
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+ initialize: function($super, element, frequency, callback) {
+ $super(callback, frequency);
+ this.element = $(element);
+ this.lastValue = this.getValue();
+ },
+
+ execute: function() {
+ var value = this.getValue();
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
+ this.lastValue != value : String(this.lastValue) != String(value)) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback, this);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+if (!window.Event) var Event = { };
+
+Object.extend(Event, {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: { },
+
+ relatedTarget: function(event) {
+ var element;
+ switch(event.type) {
+ case 'mouseover': element = event.fromElement; break;
+ case 'mouseout': element = event.toElement; break;
+ default: return null;
+ }
+ return Element.extend(element);
+ }
+});
+
+Event.Methods = (function() {
+ var isButton;
+
+ if (Prototype.Browser.IE) {
+ var buttonMap = { 0: 1, 1: 4, 2: 2 };
+ isButton = function(event, code) {
+ return event.button == buttonMap[code];
+ };
+
+ } else if (Prototype.Browser.WebKit) {
+ isButton = function(event, code) {
+ switch (code) {
+ case 0: return event.which == 1 && !event.metaKey;
+ case 1: return event.which == 1 && event.metaKey;
+ default: return false;
+ }
+ };
+
+ } else {
+ isButton = function(event, code) {
+ return event.which ? (event.which === code + 1) : (event.button === code);
+ };
+ }
+
+ return {
+ isLeftClick: function(event) { return isButton(event, 0) },
+ isMiddleClick: function(event) { return isButton(event, 1) },
+ isRightClick: function(event) { return isButton(event, 2) },
+
+ element: function(event) {
+ var node = Event.extend(event).target;
+ return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
+ },
+
+ findElement: function(event, expression) {
+ var element = Event.element(event);
+ return element.match(expression) ? element : element.up(expression);
+ },
+
+ pointer: function(event) {
+ return {
+ x: event.pageX || (event.clientX +
+ (document.documentElement.scrollLeft || document.body.scrollLeft)),
+ y: event.pageY || (event.clientY +
+ (document.documentElement.scrollTop || document.body.scrollTop))
+ };
+ },
+
+ pointerX: function(event) { return Event.pointer(event).x },
+ pointerY: function(event) { return Event.pointer(event).y },
+
+ stop: function(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+ event.stopped = true;
+ }
+ };
+})();
+
+Event.extend = (function() {
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+ m[name] = Event.Methods[name].methodize();
+ return m;
+ });
+
+ if (Prototype.Browser.IE) {
+ Object.extend(methods, {
+ stopPropagation: function() { this.cancelBubble = true },
+ preventDefault: function() { this.returnValue = false },
+ inspect: function() { return "[object Event]" }
+ });
+
+ return function(event) {
+ if (!event) return false;
+ if (event._extendedByPrototype) return event;
+
+ event._extendedByPrototype = Prototype.emptyFunction;
+ var pointer = Event.pointer(event);
+ Object.extend(event, {
+ target: event.srcElement,
+ relatedTarget: Event.relatedTarget(event),
+ pageX: pointer.x,
+ pageY: pointer.y
+ });
+ return Object.extend(event, methods);
+ };
+
+ } else {
+ Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
+ Object.extend(Event.prototype, methods);
+ return Prototype.K;
+ }
+})();
+
+Object.extend(Event, (function() {
+ var cache = Event.cache;
+
+ function getEventID(element) {
+ if (element._eventID) return element._eventID;
+ arguments.callee.id = arguments.callee.id || 1;
+ return element._eventID = ++arguments.callee.id;
+ }
+
+ function getDOMEventName(eventName) {
+ if (eventName && eventName.include(':')) return "dataavailable";
+ return eventName;
+ }
+
+ function getCacheForID(id) {
+ return cache[id] = cache[id] || { };
+ }
+
+ function getWrappersForEventName(id, eventName) {
+ var c = getCacheForID(id);
+ return c[eventName] = c[eventName] || [];
+ }
+
+ function createWrapper(element, eventName, handler) {
+ var id = getEventID(element);
+ var c = getWrappersForEventName(id, eventName);
+ if (c.pluck("handler").include(handler)) return false;
+
+ var wrapper = function(event) {
+ if (!Event || !Event.extend ||
+ (event.eventName && event.eventName != eventName))
+ return false;
+
+ Event.extend(event);
+ handler.call(element, event)
+ };
+
+ wrapper.handler = handler;
+ c.push(wrapper);
+ return wrapper;
+ }
+
+ function findWrapper(id, eventName, handler) {
+ var c = getWrappersForEventName(id, eventName);
+ return c.find(function(wrapper) { return wrapper.handler == handler });
+ }
+
+ function destroyWrapper(id, eventName, handler) {
+ var c = getCacheForID(id);
+ if (!c[eventName]) return false;
+ c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+ }
+
+ function destroyCache() {
+ for (var id in cache)
+ for (var eventName in cache[id])
+ cache[id][eventName] = null;
+ }
+
+ if (window.attachEvent) {
+ window.attachEvent("onunload", destroyCache);
+ }
+
+ return {
+ observe: function(element, eventName, handler) {
+ element = $(element);
+ var name = getDOMEventName(eventName);
+
+ var wrapper = createWrapper(element, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.addEventListener) {
+ element.addEventListener(name, wrapper, false);
+ } else {
+ element.attachEvent("on" + name, wrapper);
+ }
+
+ return element;
+ },
+
+ stopObserving: function(element, eventName, handler) {
+ element = $(element);
+ var id = getEventID(element), name = getDOMEventName(eventName);
+
+ if (!handler && eventName) {
+ getWrappersForEventName(id, eventName).each(function(wrapper) {
+ element.stopObserving(eventName, wrapper.handler);
+ });
+ return element;
+
+ } else if (!eventName) {
+ Object.keys(getCacheForID(id)).each(function(eventName) {
+ element.stopObserving(eventName);
+ });
+ return element;
+ }
+
+ var wrapper = findWrapper(id, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.removeEventListener) {
+ element.removeEventListener(name, wrapper, false);
+ } else {
+ element.detachEvent("on" + name, wrapper);
+ }
+
+ destroyWrapper(id, eventName, handler);
+
+ return element;
+ },
+
+ fire: function(element, eventName, memo) {
+ element = $(element);
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ if (document.createEvent) {
+ var event = document.createEvent("HTMLEvents");
+ event.initEvent("dataavailable", true, true);
+ } else {
+ var event = document.createEventObject();
+ event.eventType = "ondataavailable";
+ }
+
+ event.eventName = eventName;
+ event.memo = memo || { };
+
+ if (document.createEvent) {
+ element.dispatchEvent(event);
+ } else {
+ element.fireEvent(event.eventType, event);
+ }
+
+ return event;
+ }
+ };
+})());
+
+Object.extend(Event, Event.Methods);
+
+Element.addMethods({
+ fire: Event.fire,
+ observe: Event.observe,
+ stopObserving: Event.stopObserving
+});
+
+Object.extend(document, {
+ fire: Element.Methods.fire.methodize(),
+ observe: Element.Methods.observe.methodize(),
+ stopObserving: Element.Methods.stopObserving.methodize()
+});
+
+(function() {
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+ Matthias Miller, Dean Edwards and John Resig. */
+
+ var timer, fired = false;
+
+ function fireContentLoadedEvent() {
+ if (fired) return;
+ if (timer) window.clearInterval(timer);
+ document.fire("dom:loaded");
+ fired = true;
+ }
+
+ if (document.addEventListener) {
+ if (Prototype.Browser.WebKit) {
+ timer = window.setInterval(function() {
+ if (/loaded|complete/.test(document.readyState))
+ fireContentLoadedEvent();
+ }, 0);
+
+ Event.observe(window, "load", fireContentLoadedEvent);
+
+ } else {
+ document.addEventListener("DOMContentLoaded",
+ fireContentLoadedEvent, false);
+ }
+
+ } else {
+ document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
+ $("__onDOMContentLoaded").onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ this.onreadystatechange = null;
+ fireContentLoadedEvent();
+ }
+ };
+ }
+})();
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+ Before: function(element, content) {
+ return Element.insert(element, {before:content});
+ },
+
+ Top: function(element, content) {
+ return Element.insert(element, {top:content});
+ },
+
+ Bottom: function(element, content) {
+ return Element.insert(element, {bottom:content});
+ },
+
+ After: function(element, content) {
+ return Element.insert(element, {after:content});
+ }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+// This should be moved to script.aculo.us; notice the deprecated methods
+// further below, that map to the newer Element methods.
+var Position = {
+ // set to true if needed, warning: firefox performance problems
+ // NOT neeeded for page scrolling, only if draggable contained in
+ // scrollable elements
+ includeScrollOffsets: false,
+
+ // must be called before calling withinIncludingScrolloffset, every time the
+ // page is scrolled
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ // caches x/y coordinate pair to use with overlap
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = Element.cumulativeScrollOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ // within must be called directly before
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+ // Deprecation layer -- use newer Element methods now (1.5.2).
+
+ cumulativeOffset: Element.Methods.cumulativeOffset,
+
+ positionedOffset: Element.Methods.positionedOffset,
+
+ absolutize: function(element) {
+ Position.prepare();
+ return Element.absolutize(element);
+ },
+
+ relativize: function(element) {
+ Position.prepare();
+ return Element.relativize(element);
+ },
+
+ realOffset: Element.Methods.cumulativeScrollOffset,
+
+ offsetParent: Element.Methods.getOffsetParent,
+
+ page: Element.Methods.viewportOffset,
+
+ clone: function(source, target, options) {
+ options = options || { };
+ return Element.clonePosition(target, source, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+ function iter(name) {
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+ }
+
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+ function(element, className) {
+ className = className.toString().strip();
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+ } : function(element, className) {
+ className = className.toString().strip();
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+ if (!classNames && !className) return elements;
+
+ var nodes = $(element).getElementsByTagName('*');
+ className = ' ' + className + ' ';
+
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+ (classNames && classNames.all(function(name) {
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
+ }))))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ };
+
+ return function(className, parentElement) {
+ return $(parentElement || document.body).getElementsByClassName(className);
+ };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = $(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+Element.addMethods(); \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/ext/json/ext/generator/extconf.rb b/vendor/gems/json-1.5.1/ext/json/ext/generator/extconf.rb
new file mode 100644
index 000000000..149f22c13
--- /dev/null
+++ b/vendor/gems/json-1.5.1/ext/json/ext/generator/extconf.rb
@@ -0,0 +1,20 @@
+require 'mkmf'
+require 'rbconfig'
+
+unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
+ $CFLAGS << ' -O3'
+end
+if CONFIG['CC'] =~ /gcc/
+ $CFLAGS << ' -Wall'
+ #unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
+ # $CFLAGS << ' -O0 -ggdb'
+ #end
+end
+
+if RUBY_VERSION < "1.9"
+ have_header("re.h")
+else
+ have_header("ruby/re.h")
+ have_header("ruby/encoding.h")
+end
+create_makefile 'json/ext/generator'
diff --git a/vendor/gems/json-1.5.1/ext/json/ext/generator/generator.c b/vendor/gems/json-1.5.1/ext/json/ext/generator/generator.c
new file mode 100644
index 000000000..65058820c
--- /dev/null
+++ b/vendor/gems/json-1.5.1/ext/json/ext/generator/generator.c
@@ -0,0 +1,1417 @@
+#include "generator.h"
+
+#ifdef HAVE_RUBY_ENCODING_H
+static VALUE CEncoding_UTF_8;
+static ID i_encoding, i_encode;
+#endif
+
+static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject,
+ mHash, mArray, mFixnum, mBignum, mFloat, mString, mString_Extend,
+ mTrueClass, mFalseClass, mNilClass, eGeneratorError,
+ eNestingError, CRegexp_MULTILINE, CJSON_SAFE_STATE_PROTOTYPE,
+ i_SAFE_STATE_PROTOTYPE;
+
+static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before,
+ i_object_nl, i_array_nl, i_max_nesting, i_allow_nan, i_ascii_only,
+ i_pack, i_unpack, i_create_id, i_extend, i_key_p, i_aref, i_send,
+ i_respond_to_p, i_match, i_keys, i_depth, i_dup;
+
+/*
+ * Copyright 2001-2004 Unicode, Inc.
+ *
+ * Disclaimer
+ *
+ * This source code is provided as is by Unicode, Inc. No claims are
+ * made as to fitness for any particular purpose. No warranties of any
+ * kind are expressed or implied. The recipient agrees to determine
+ * applicability of information provided. If this file has been
+ * purchased on magnetic or optical media from Unicode, Inc., the
+ * sole remedy for any claim will be exchange of defective media
+ * within 90 days of receipt.
+ *
+ * Limitations on Rights to Redistribute This Code
+ *
+ * Unicode, Inc. hereby grants the right to freely use the information
+ * supplied in this file in the creation of products supporting the
+ * Unicode Standard, and to make copies of this file in any form
+ * for internal or external distribution as long as this notice
+ * remains attached.
+ */
+
+/*
+ * Index into the table below with the first byte of a UTF-8 sequence to
+ * get the number of trailing bytes that are supposed to follow it.
+ * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
+ * left as-is for anyone who may want to do such conversion, which was
+ * allowed in earlier algorithms.
+ */
+static const char trailingBytesForUTF8[256] = {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
+};
+
+/*
+ * Magic values subtracted from a buffer value during UTF8 conversion.
+ * This table contains as many values as there might be trailing bytes
+ * in a UTF-8 sequence.
+ */
+static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
+ 0x03C82080UL, 0xFA082080UL, 0x82082080UL };
+
+/*
+ * Utility routine to tell whether a sequence of bytes is legal UTF-8.
+ * This must be called with the length pre-determined by the first byte.
+ * If not calling this from ConvertUTF8to*, then the length can be set by:
+ * length = trailingBytesForUTF8[*source]+1;
+ * and the sequence is illegal right away if there aren't that many bytes
+ * available.
+ * If presented with a length > 4, this returns 0. The Unicode
+ * definition of UTF-8 goes up to 4-byte sequences.
+ */
+static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length)
+{
+ UTF8 a;
+ const UTF8 *srcptr = source+length;
+ switch (length) {
+ default: return 0;
+ /* Everything else falls through when "1"... */
+ case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0;
+ case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0;
+ case 2: if ((a = (*--srcptr)) > 0xBF) return 0;
+
+ switch (*source) {
+ /* no fall-through in this inner switch */
+ case 0xE0: if (a < 0xA0) return 0; break;
+ case 0xED: if (a > 0x9F) return 0; break;
+ case 0xF0: if (a < 0x90) return 0; break;
+ case 0xF4: if (a > 0x8F) return 0; break;
+ default: if (a < 0x80) return 0;
+ }
+
+ case 1: if (*source >= 0x80 && *source < 0xC2) return 0;
+ }
+ if (*source > 0xF4) return 0;
+ return 1;
+}
+
+/* Escapes the UTF16 character and stores the result in the buffer buf. */
+static void unicode_escape(char *buf, UTF16 character)
+{
+ const char *digits = "0123456789abcdef";
+
+ buf[2] = digits[character >> 12];
+ buf[3] = digits[(character >> 8) & 0xf];
+ buf[4] = digits[(character >> 4) & 0xf];
+ buf[5] = digits[character & 0xf];
+}
+
+/* Escapes the UTF16 character and stores the result in the buffer buf, then
+ * the buffer buf іs appended to the FBuffer buffer. */
+static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16
+ character)
+{
+ unicode_escape(buf, character);
+ fbuffer_append(buffer, buf, 6);
+}
+
+/* Converts string to a JSON string in FBuffer buffer, where all but the ASCII
+ * and control characters are JSON escaped. */
+static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string)
+{
+ const UTF8 *source = (UTF8 *) RSTRING_PTR(string);
+ const UTF8 *sourceEnd = source + RSTRING_LEN(string);
+ char buf[6] = { '\\', 'u' };
+
+ while (source < sourceEnd) {
+ UTF32 ch = 0;
+ unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
+ if (source + extraBytesToRead >= sourceEnd) {
+ rb_raise(rb_path2class("JSON::GeneratorError"),
+ "partial character in source, but hit end");
+ }
+ if (!isLegalUTF8(source, extraBytesToRead+1)) {
+ rb_raise(rb_path2class("JSON::GeneratorError"),
+ "source sequence is illegal/malformed utf-8");
+ }
+ /*
+ * The cases all fall through. See "Note A" below.
+ */
+ switch (extraBytesToRead) {
+ case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
+ case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
+ case 3: ch += *source++; ch <<= 6;
+ case 2: ch += *source++; ch <<= 6;
+ case 1: ch += *source++; ch <<= 6;
+ case 0: ch += *source++;
+ }
+ ch -= offsetsFromUTF8[extraBytesToRead];
+
+ if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */
+ /* UTF-16 surrogate values are illegal in UTF-32 */
+ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
+#if UNI_STRICT_CONVERSION
+ source -= (extraBytesToRead+1); /* return to the illegal value itself */
+ rb_raise(rb_path2class("JSON::GeneratorError"),
+ "source sequence is illegal/malformed utf-8");
+#else
+ unicode_escape_to_buffer(buffer, buf, UNI_REPLACEMENT_CHAR);
+#endif
+ } else {
+ /* normal case */
+ if (ch >= 0x20 && ch <= 0x7f) {
+ switch (ch) {
+ case '\\':
+ fbuffer_append(buffer, "\\\\", 2);
+ break;
+ case '"':
+ fbuffer_append(buffer, "\\\"", 2);
+ break;
+ default:
+ fbuffer_append_char(buffer, (char)ch);
+ break;
+ }
+ } else {
+ switch (ch) {
+ case '\n':
+ fbuffer_append(buffer, "\\n", 2);
+ break;
+ case '\r':
+ fbuffer_append(buffer, "\\r", 2);
+ break;
+ case '\t':
+ fbuffer_append(buffer, "\\t", 2);
+ break;
+ case '\f':
+ fbuffer_append(buffer, "\\f", 2);
+ break;
+ case '\b':
+ fbuffer_append(buffer, "\\b", 2);
+ break;
+ default:
+ unicode_escape_to_buffer(buffer, buf, (UTF16) ch);
+ break;
+ }
+ }
+ }
+ } else if (ch > UNI_MAX_UTF16) {
+#if UNI_STRICT_CONVERSION
+ source -= (extraBytesToRead+1); /* return to the start */
+ rb_raise(rb_path2class("JSON::GeneratorError"),
+ "source sequence is illegal/malformed utf8");
+#else
+ unicode_escape_to_buffer(buffer, buf, UNI_REPLACEMENT_CHAR);
+#endif
+ } else {
+ /* target is a character in range 0xFFFF - 0x10FFFF. */
+ ch -= halfBase;
+ unicode_escape_to_buffer(buffer, buf, (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START));
+ unicode_escape_to_buffer(buffer, buf, (UTF16)((ch & halfMask) + UNI_SUR_LOW_START));
+ }
+ }
+}
+
+/* Converts string to a JSON string in FBuffer buffer, where only the
+ * characters required by the JSON standard are JSON escaped. The remaining
+ * characters (should be UTF8) are just passed through and appended to the
+ * result. */
+static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string)
+{
+ const char *ptr = RSTRING_PTR(string), *p;
+ unsigned long len = RSTRING_LEN(string), start = 0, end = 0;
+ const char *escape = NULL;
+ int escape_len;
+ unsigned char c;
+ char buf[6] = { '\\', 'u' };
+
+ for (start = 0, end = 0; end < len;) {
+ p = ptr + end;
+ c = (unsigned char) *p;
+ if (c < 0x20) {
+ switch (c) {
+ case '\n':
+ escape = "\\n";
+ escape_len = 2;
+ break;
+ case '\r':
+ escape = "\\r";
+ escape_len = 2;
+ break;
+ case '\t':
+ escape = "\\t";
+ escape_len = 2;
+ break;
+ case '\f':
+ escape = "\\f";
+ escape_len = 2;
+ break;
+ case '\b':
+ escape = "\\b";
+ escape_len = 2;
+ break;
+ default:
+ unicode_escape(buf, (UTF16) *p);
+ escape = buf;
+ escape_len = 6;
+ break;
+ }
+ } else {
+ switch (c) {
+ case '\\':
+ escape = "\\\\";
+ escape_len = 2;
+ break;
+ case '"':
+ escape = "\\\"";
+ escape_len = 2;
+ break;
+ default:
+ end++;
+ continue;
+ break;
+ }
+ }
+ fbuffer_append(buffer, ptr + start, end - start);
+ fbuffer_append(buffer, escape, escape_len);
+ start = ++end;
+ escape = NULL;
+ }
+ fbuffer_append(buffer, ptr + start, end - start);
+}
+
+static char *fstrndup(const char *ptr, unsigned long len) {
+ char *result;
+ if (len <= 0) return NULL;
+ result = ALLOC_N(char, len);
+ memccpy(result, ptr, 0, len);
+ return result;
+}
+
+/* fbuffer implementation */
+
+static FBuffer *fbuffer_alloc()
+{
+ FBuffer *fb = ALLOC(FBuffer);
+ memset((void *) fb, 0, sizeof(FBuffer));
+ fb->initial_length = FBUFFER_INITIAL_LENGTH;
+ return fb;
+}
+
+static FBuffer *fbuffer_alloc_with_length(unsigned long initial_length)
+{
+ FBuffer *fb;
+ assert(initial_length > 0);
+ fb = ALLOC(FBuffer);
+ memset((void *) fb, 0, sizeof(FBuffer));
+ fb->initial_length = initial_length;
+ return fb;
+}
+
+static void fbuffer_free(FBuffer *fb)
+{
+ if (fb->ptr) ruby_xfree(fb->ptr);
+ ruby_xfree(fb);
+}
+
+static void fbuffer_free_only_buffer(FBuffer *fb)
+{
+ ruby_xfree(fb);
+}
+
+static void fbuffer_clear(FBuffer *fb)
+{
+ fb->len = 0;
+}
+
+static void fbuffer_inc_capa(FBuffer *fb, unsigned long requested)
+{
+ unsigned long required;
+
+ if (!fb->ptr) {
+ fb->ptr = ALLOC_N(char, fb->initial_length);
+ fb->capa = fb->initial_length;
+ }
+
+ for (required = fb->capa; requested > required - fb->len; required <<= 1);
+
+ if (required > fb->capa) {
+ REALLOC_N(fb->ptr, char, required);
+ fb->capa = required;
+ }
+}
+
+static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned long len)
+{
+ if (len > 0) {
+ fbuffer_inc_capa(fb, len);
+ MEMCPY(fb->ptr + fb->len, newstr, char, len);
+ fb->len += len;
+ }
+}
+
+static void fbuffer_append_char(FBuffer *fb, char newchr)
+{
+ fbuffer_inc_capa(fb, 1);
+ *(fb->ptr + fb->len) = newchr;
+ fb->len++;
+}
+
+static void freverse(char *start, char *end)
+{
+ char c;
+
+ while (end > start) {
+ c = *end, *end-- = *start, *start++ = c;
+ }
+}
+
+static long fltoa(long number, char *buf)
+{
+ static char digits[] = "0123456789";
+ long sign = number;
+ char* tmp = buf;
+
+ if (sign < 0) number = -number;
+ do *tmp++ = digits[number % 10]; while (number /= 10);
+ if (sign < 0) *tmp++ = '-';
+ freverse(buf, tmp - 1);
+ return tmp - buf;
+}
+
+static void fbuffer_append_long(FBuffer *fb, long number)
+{
+ char buf[20];
+ unsigned long len = fltoa(number, buf);
+ fbuffer_append(fb, buf, len);
+}
+
+static FBuffer *fbuffer_dup(FBuffer *fb)
+{
+ unsigned long len = fb->len;
+ FBuffer *result;
+
+ if (len > 0) {
+ result = fbuffer_alloc_with_length(len);
+ fbuffer_append(result, FBUFFER_PAIR(fb));
+ } else {
+ result = fbuffer_alloc();
+ }
+ return result;
+}
+
+/*
+ * Document-module: JSON::Ext::Generator
+ *
+ * This is the JSON generator implemented as a C extension. It can be
+ * configured to be used by setting
+ *
+ * JSON.generator = JSON::Ext::Generator
+ *
+ * with the method generator= in JSON.
+ *
+ */
+
+/*
+ * call-seq: to_json(state = nil)
+ *
+ * Returns a JSON string containing a JSON object, that is generated from
+ * this Hash instance.
+ * _state_ is a JSON::State object, that can also be used to configure the
+ * produced JSON string output further.
+ */
+static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self)
+{
+ GENERATE_JSON(object);
+}
+
+/*
+ * call-seq: to_json(state = nil)
+ *
+ * Returns a JSON string containing a JSON array, that is generated from
+ * this Array instance.
+ * _state_ is a JSON::State object, that can also be used to configure the
+ * produced JSON string output further.
+ */
+static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self) {
+ GENERATE_JSON(array);
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * Returns a JSON string representation for this Integer number.
+ */
+static VALUE mFixnum_to_json(int argc, VALUE *argv, VALUE self)
+{
+ GENERATE_JSON(fixnum);
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * Returns a JSON string representation for this Integer number.
+ */
+static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self)
+{
+ GENERATE_JSON(bignum);
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * Returns a JSON string representation for this Float number.
+ */
+static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self)
+{
+ GENERATE_JSON(float);
+}
+
+/*
+ * call-seq: String.included(modul)
+ *
+ * Extends _modul_ with the String::Extend module.
+ */
+static VALUE mString_included_s(VALUE self, VALUE modul) {
+ VALUE result = rb_funcall(modul, i_extend, 1, mString_Extend);
+ return result;
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * This string should be encoded with UTF-8 A call to this method
+ * returns a JSON string encoded with UTF16 big endian characters as
+ * \u????.
+ */
+static VALUE mString_to_json(int argc, VALUE *argv, VALUE self)
+{
+ GENERATE_JSON(string);
+}
+
+/*
+ * call-seq: to_json_raw_object()
+ *
+ * This method creates a raw object hash, that can be nested into
+ * other data structures and will be generated as a raw string. This
+ * method should be used, if you want to convert raw strings to JSON
+ * instead of UTF-8 strings, e. g. binary data.
+ */
+static VALUE mString_to_json_raw_object(VALUE self)
+{
+ VALUE ary;
+ VALUE result = rb_hash_new();
+ rb_hash_aset(result, rb_funcall(mJSON, i_create_id, 0), rb_class_name(rb_obj_class(self)));
+ ary = rb_funcall(self, i_unpack, 1, rb_str_new2("C*"));
+ rb_hash_aset(result, rb_str_new2("raw"), ary);
+ return result;
+}
+
+/*
+ * call-seq: to_json_raw(*args)
+ *
+ * This method creates a JSON text from the result of a call to
+ * to_json_raw_object of this String.
+ */
+static VALUE mString_to_json_raw(int argc, VALUE *argv, VALUE self)
+{
+ VALUE obj = mString_to_json_raw_object(self);
+ Check_Type(obj, T_HASH);
+ return mHash_to_json(argc, argv, obj);
+}
+
+/*
+ * call-seq: json_create(o)
+ *
+ * Raw Strings are JSON Objects (the raw bytes are stored in an array for the
+ * key "raw"). The Ruby String can be created by this module method.
+ */
+static VALUE mString_Extend_json_create(VALUE self, VALUE o)
+{
+ VALUE ary;
+ Check_Type(o, T_HASH);
+ ary = rb_hash_aref(o, rb_str_new2("raw"));
+ return rb_funcall(ary, i_pack, 1, rb_str_new2("C*"));
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * Returns a JSON string for true: 'true'.
+ */
+static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self)
+{
+ GENERATE_JSON(true);
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * Returns a JSON string for false: 'false'.
+ */
+static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self)
+{
+ GENERATE_JSON(false);
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ */
+static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self)
+{
+ GENERATE_JSON(null);
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * Converts this object to a string (calling #to_s), converts
+ * it to a JSON string, and returns the result. This is a fallback, if no
+ * special method #to_json was defined for some object.
+ */
+static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self)
+{
+ VALUE state;
+ VALUE string = rb_funcall(self, i_to_s, 0);
+ rb_scan_args(argc, argv, "01", &state);
+ Check_Type(string, T_STRING);
+ state = cState_from_state_s(cState, state);
+ return cState_partial_generate(state, string);
+}
+
+static void State_free(JSON_Generator_State *state)
+{
+ if (state->indent) ruby_xfree(state->indent);
+ if (state->space) ruby_xfree(state->space);
+ if (state->space_before) ruby_xfree(state->space_before);
+ if (state->object_nl) ruby_xfree(state->object_nl);
+ if (state->array_nl) ruby_xfree(state->array_nl);
+ if (state->array_delim) fbuffer_free(state->array_delim);
+ if (state->object_delim) fbuffer_free(state->object_delim);
+ if (state->object_delim2) fbuffer_free(state->object_delim2);
+ ruby_xfree(state);
+}
+
+static JSON_Generator_State *State_allocate()
+{
+ JSON_Generator_State *state = ALLOC(JSON_Generator_State);
+ MEMZERO(state, JSON_Generator_State, 1);
+ return state;
+}
+
+static VALUE cState_s_allocate(VALUE klass)
+{
+ JSON_Generator_State *state = State_allocate();
+ return Data_Wrap_Struct(klass, NULL, State_free, state);
+}
+
+/*
+ * call-seq: configure(opts)
+ *
+ * Configure this State instance with the Hash _opts_, and return
+ * itself.
+ */
+static VALUE cState_configure(VALUE self, VALUE opts)
+{
+ VALUE tmp;
+ GET_STATE(self);
+ tmp = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
+ if (NIL_P(tmp)) tmp = rb_convert_type(opts, T_HASH, "Hash", "to_h");
+ if (NIL_P(tmp)) {
+ rb_raise(rb_eArgError, "opts has to be hash like or convertable into a hash");
+ }
+ opts = tmp;
+ tmp = rb_hash_aref(opts, ID2SYM(i_indent));
+ if (RTEST(tmp)) {
+ unsigned long len;
+ Check_Type(tmp, T_STRING);
+ len = RSTRING_LEN(tmp);
+ state->indent = fstrndup(RSTRING_PTR(tmp), len);
+ state->indent_len = len;
+ }
+ tmp = rb_hash_aref(opts, ID2SYM(i_space));
+ if (RTEST(tmp)) {
+ unsigned long len;
+ Check_Type(tmp, T_STRING);
+ len = RSTRING_LEN(tmp);
+ state->space = fstrndup(RSTRING_PTR(tmp), len);
+ state->space_len = len;
+ }
+ tmp = rb_hash_aref(opts, ID2SYM(i_space_before));
+ if (RTEST(tmp)) {
+ unsigned long len;
+ Check_Type(tmp, T_STRING);
+ len = RSTRING_LEN(tmp);
+ state->space_before = fstrndup(RSTRING_PTR(tmp), len);
+ state->space_before_len = len;
+ }
+ tmp = rb_hash_aref(opts, ID2SYM(i_array_nl));
+ if (RTEST(tmp)) {
+ unsigned long len;
+ Check_Type(tmp, T_STRING);
+ len = RSTRING_LEN(tmp);
+ state->array_nl = fstrndup(RSTRING_PTR(tmp), len);
+ state->array_nl_len = len;
+ }
+ tmp = rb_hash_aref(opts, ID2SYM(i_object_nl));
+ if (RTEST(tmp)) {
+ unsigned long len;
+ Check_Type(tmp, T_STRING);
+ len = RSTRING_LEN(tmp);
+ state->object_nl = fstrndup(RSTRING_PTR(tmp), len);
+ state->object_nl_len = len;
+ }
+ tmp = ID2SYM(i_max_nesting);
+ state->max_nesting = 19;
+ if (option_given_p(opts, tmp)) {
+ VALUE max_nesting = rb_hash_aref(opts, tmp);
+ if (RTEST(max_nesting)) {
+ Check_Type(max_nesting, T_FIXNUM);
+ state->max_nesting = FIX2LONG(max_nesting);
+ } else {
+ state->max_nesting = 0;
+ }
+ }
+ tmp = ID2SYM(i_depth);
+ state->depth = 0;
+ if (option_given_p(opts, tmp)) {
+ VALUE depth = rb_hash_aref(opts, tmp);
+ if (RTEST(depth)) {
+ Check_Type(depth, T_FIXNUM);
+ state->depth = FIX2LONG(depth);
+ } else {
+ state->depth = 0;
+ }
+ }
+ tmp = rb_hash_aref(opts, ID2SYM(i_allow_nan));
+ state->allow_nan = RTEST(tmp);
+ tmp = rb_hash_aref(opts, ID2SYM(i_ascii_only));
+ state->ascii_only = RTEST(tmp);
+ return self;
+}
+
+/*
+ * call-seq: to_h
+ *
+ * Returns the configuration instance variables as a hash, that can be
+ * passed to the configure method.
+ */
+static VALUE cState_to_h(VALUE self)
+{
+ VALUE result = rb_hash_new();
+ GET_STATE(self);
+ rb_hash_aset(result, ID2SYM(i_indent), rb_str_new(state->indent, state->indent_len));
+ rb_hash_aset(result, ID2SYM(i_space), rb_str_new(state->space, state->space_len));
+ rb_hash_aset(result, ID2SYM(i_space_before), rb_str_new(state->space_before, state->space_before_len));
+ rb_hash_aset(result, ID2SYM(i_object_nl), rb_str_new(state->object_nl, state->object_nl_len));
+ rb_hash_aset(result, ID2SYM(i_array_nl), rb_str_new(state->array_nl, state->array_nl_len));
+ rb_hash_aset(result, ID2SYM(i_allow_nan), state->allow_nan ? Qtrue : Qfalse);
+ rb_hash_aset(result, ID2SYM(i_ascii_only), state->ascii_only ? Qtrue : Qfalse);
+ rb_hash_aset(result, ID2SYM(i_max_nesting), LONG2FIX(state->max_nesting));
+ rb_hash_aset(result, ID2SYM(i_depth), LONG2FIX(state->depth));
+ return result;
+}
+
+/*
+* call-seq: [](name)
+*
+* Return the value returned by method +name+.
+*/
+static VALUE cState_aref(VALUE self, VALUE name)
+{
+ GET_STATE(self);
+ if (RTEST(rb_funcall(self, i_respond_to_p, 1, name))) {
+ return rb_funcall(self, i_send, 1, name);
+ } else {
+ return Qnil;
+ }
+}
+
+static void generate_json_object(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
+{
+ char *object_nl = state->object_nl;
+ long object_nl_len = state->object_nl_len;
+ char *indent = state->indent;
+ long indent_len = state->indent_len;
+ long max_nesting = state->max_nesting;
+ char *delim = FBUFFER_PTR(state->object_delim);
+ long delim_len = FBUFFER_LEN(state->object_delim);
+ char *delim2 = FBUFFER_PTR(state->object_delim2);
+ long delim2_len = FBUFFER_LEN(state->object_delim2);
+ long depth = ++state->depth;
+ int i, j;
+ VALUE key, key_to_s, keys;
+ if (max_nesting != 0 && depth > max_nesting) {
+ fbuffer_free(buffer);
+ rb_raise(eNestingError, "nesting of %ld is too deep", --state->depth);
+ }
+ fbuffer_append_char(buffer, '{');
+ keys = rb_funcall(obj, i_keys, 0);
+ for(i = 0; i < RARRAY_LEN(keys); i++) {
+ if (i > 0) fbuffer_append(buffer, delim, delim_len);
+ if (object_nl) {
+ fbuffer_append(buffer, object_nl, object_nl_len);
+ }
+ if (indent) {
+ for (j = 0; j < depth; j++) {
+ fbuffer_append(buffer, indent, indent_len);
+ }
+ }
+ key = rb_ary_entry(keys, i);
+ key_to_s = rb_funcall(key, i_to_s, 0);
+ Check_Type(key_to_s, T_STRING);
+ generate_json(buffer, Vstate, state, key_to_s);
+ fbuffer_append(buffer, delim2, delim2_len);
+ generate_json(buffer, Vstate, state, rb_hash_aref(obj, key));
+ }
+ depth = --state->depth;
+ if (object_nl) {
+ fbuffer_append(buffer, object_nl, object_nl_len);
+ if (indent) {
+ for (j = 0; j < depth; j++) {
+ fbuffer_append(buffer, indent, indent_len);
+ }
+ }
+ }
+ fbuffer_append_char(buffer, '}');
+}
+
+static void generate_json_array(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
+{
+ char *array_nl = state->array_nl;
+ long array_nl_len = state->array_nl_len;
+ char *indent = state->indent;
+ long indent_len = state->indent_len;
+ long max_nesting = state->max_nesting;
+ char *delim = FBUFFER_PTR(state->array_delim);
+ long delim_len = FBUFFER_LEN(state->array_delim);
+ long depth = ++state->depth;
+ int i, j;
+ if (max_nesting != 0 && depth > max_nesting) {
+ fbuffer_free(buffer);
+ rb_raise(eNestingError, "nesting of %ld is too deep", --state->depth);
+ }
+ fbuffer_append_char(buffer, '[');
+ if (array_nl) fbuffer_append(buffer, array_nl, array_nl_len);
+ for(i = 0; i < RARRAY_LEN(obj); i++) {
+ if (i > 0) fbuffer_append(buffer, delim, delim_len);
+ if (indent) {
+ for (j = 0; j < depth; j++) {
+ fbuffer_append(buffer, indent, indent_len);
+ }
+ }
+ generate_json(buffer, Vstate, state, rb_ary_entry(obj, i));
+ }
+ state->depth = --depth;
+ if (array_nl) {
+ fbuffer_append(buffer, array_nl, array_nl_len);
+ if (indent) {
+ for (j = 0; j < depth; j++) {
+ fbuffer_append(buffer, indent, indent_len);
+ }
+ }
+ }
+ fbuffer_append_char(buffer, ']');
+}
+
+static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
+{
+ fbuffer_append_char(buffer, '"');
+#ifdef HAVE_RUBY_ENCODING_H
+ obj = rb_funcall(obj, i_encode, 1, CEncoding_UTF_8);
+#endif
+ if (state->ascii_only) {
+ convert_UTF8_to_JSON_ASCII(buffer, obj);
+ } else {
+ convert_UTF8_to_JSON(buffer, obj);
+ }
+ fbuffer_append_char(buffer, '"');
+}
+
+static void generate_json_null(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
+{
+ fbuffer_append(buffer, "null", 4);
+}
+
+static void generate_json_false(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
+{
+ fbuffer_append(buffer, "false", 5);
+}
+
+static void generate_json_true(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
+{
+ fbuffer_append(buffer, "true", 4);
+}
+
+static void generate_json_fixnum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
+{
+ fbuffer_append_long(buffer, FIX2LONG(obj));
+}
+
+static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
+{
+ VALUE tmp = rb_funcall(obj, i_to_s, 0);
+ fbuffer_append(buffer, RSTRING_PAIR(tmp));
+}
+
+static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
+{
+ double value = RFLOAT_VALUE(obj);
+ char allow_nan = state->allow_nan;
+ VALUE tmp = rb_funcall(obj, i_to_s, 0);
+ if (!allow_nan) {
+ if (isinf(value)) {
+ fbuffer_free(buffer);
+ rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp));
+ } else if (isnan(value)) {
+ fbuffer_free(buffer);
+ rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp));
+ }
+ }
+ fbuffer_append(buffer, RSTRING_PAIR(tmp));
+}
+
+static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
+{
+ VALUE tmp;
+ VALUE klass = CLASS_OF(obj);
+ if (klass == rb_cHash) {
+ generate_json_object(buffer, Vstate, state, obj);
+ } else if (klass == rb_cArray) {
+ generate_json_array(buffer, Vstate, state, obj);
+ } else if (klass == rb_cString) {
+ generate_json_string(buffer, Vstate, state, obj);
+ } else if (obj == Qnil) {
+ generate_json_null(buffer, Vstate, state, obj);
+ } else if (obj == Qfalse) {
+ generate_json_false(buffer, Vstate, state, obj);
+ } else if (obj == Qtrue) {
+ generate_json_true(buffer, Vstate, state, obj);
+ } else if (klass == rb_cFixnum) {
+ generate_json_fixnum(buffer, Vstate, state, obj);
+ } else if (klass == rb_cBignum) {
+ generate_json_bignum(buffer, Vstate, state, obj);
+ } else if (klass == rb_cFloat) {
+ generate_json_float(buffer, Vstate, state, obj);
+ } else if (rb_respond_to(obj, i_to_json)) {
+ tmp = rb_funcall(obj, i_to_json, 1, Vstate);
+ Check_Type(tmp, T_STRING);
+ fbuffer_append(buffer, RSTRING_PAIR(tmp));
+ } else {
+ tmp = rb_funcall(obj, i_to_s, 0);
+ Check_Type(tmp, T_STRING);
+ generate_json(buffer, Vstate, state, tmp);
+ }
+}
+
+static FBuffer *cState_prepare_buffer(VALUE self)
+{
+ FBuffer *buffer = fbuffer_alloc();
+ GET_STATE(self);
+
+ if (state->object_delim) {
+ fbuffer_clear(state->object_delim);
+ } else {
+ state->object_delim = fbuffer_alloc_with_length(16);
+ }
+ fbuffer_append_char(state->object_delim, ',');
+ if (state->object_delim2) {
+ fbuffer_clear(state->object_delim2);
+ } else {
+ state->object_delim2 = fbuffer_alloc_with_length(16);
+ }
+ fbuffer_append_char(state->object_delim2, ':');
+ if (state->space) fbuffer_append(state->object_delim2, state->space, state->space_len);
+
+ if (state->array_delim) {
+ fbuffer_clear(state->array_delim);
+ } else {
+ state->array_delim = fbuffer_alloc_with_length(16);
+ }
+ fbuffer_append_char(state->array_delim, ',');
+ if (state->array_nl) fbuffer_append(state->array_delim, state->array_nl, state->array_nl_len);
+ return buffer;
+}
+
+static VALUE fbuffer_to_s(FBuffer *fb)
+{
+ VALUE result = rb_str_new(FBUFFER_PAIR(fb));
+ fbuffer_free(fb);
+ FORCE_UTF8(result);
+ return result;
+}
+
+static VALUE cState_partial_generate(VALUE self, VALUE obj)
+{
+ FBuffer *buffer = cState_prepare_buffer(self);
+ GET_STATE(self);
+ generate_json(buffer, self, state, obj);
+ return fbuffer_to_s(buffer);
+}
+
+/*
+ * call-seq: generate(obj)
+ *
+ * Generates a valid JSON document from object +obj+ and returns the
+ * result. If no valid JSON document can be created this method raises a
+ * GeneratorError exception.
+ */
+static VALUE cState_generate(VALUE self, VALUE obj)
+{
+ VALUE result = cState_partial_generate(self, obj);
+ VALUE re, args[2];
+ args[0] = rb_str_new2("\\A\\s*(?:\\[.*\\]|\\{.*\\})\\s*\\Z");
+ args[1] = CRegexp_MULTILINE;
+ re = rb_class_new_instance(2, args, rb_cRegexp);
+ if (NIL_P(rb_funcall(re, i_match, 1, result))) {
+ rb_raise(eGeneratorError, "only generation of JSON objects or arrays allowed");
+ }
+ return result;
+}
+
+/*
+ * call-seq: new(opts = {})
+ *
+ * Instantiates a new State object, configured by _opts_.
+ *
+ * _opts_ can have the following keys:
+ *
+ * * *indent*: a string used to indent levels (default: ''),
+ * * *space*: a string that is put after, a : or , delimiter (default: ''),
+ * * *space_before*: a string that is put before a : pair delimiter (default: ''),
+ * * *object_nl*: a string that is put at the end of a JSON object (default: ''),
+ * * *array_nl*: a string that is put at the end of a JSON array (default: ''),
+ * * *allow_nan*: true if NaN, Infinity, and -Infinity should be
+ * generated, otherwise an exception is thrown, if these values are
+ * encountered. This options defaults to false.
+ */
+static VALUE cState_initialize(int argc, VALUE *argv, VALUE self)
+{
+ VALUE opts;
+ GET_STATE(self);
+ state->max_nesting = 19;
+ rb_scan_args(argc, argv, "01", &opts);
+ if (!NIL_P(opts)) cState_configure(self, opts);
+ return self;
+}
+
+/*
+ * call-seq: initialize_copy(orig)
+ *
+ * Initializes this object from orig if it to be duplicated/cloned and returns
+ * it.
+*/
+static VALUE cState_init_copy(VALUE obj, VALUE orig)
+{
+ JSON_Generator_State *objState, *origState;
+
+ Data_Get_Struct(obj, JSON_Generator_State, objState);
+ Data_Get_Struct(orig, JSON_Generator_State, origState);
+ if (!objState) rb_raise(rb_eArgError, "unallocated JSON::State");
+
+ MEMCPY(objState, origState, JSON_Generator_State, 1);
+ objState->indent = fstrndup(origState->indent, origState->indent_len);
+ objState->space = fstrndup(origState->space, origState->space_len);
+ objState->space_before = fstrndup(origState->space_before, origState->space_before_len);
+ objState->object_nl = fstrndup(origState->object_nl, origState->object_nl_len);
+ objState->array_nl = fstrndup(origState->array_nl, origState->array_nl_len);
+ if (origState->array_delim) objState->array_delim = fbuffer_dup(origState->array_delim);
+ if (origState->object_delim) objState->object_delim = fbuffer_dup(origState->object_delim);
+ if (origState->object_delim2) objState->object_delim2 = fbuffer_dup(origState->object_delim2);
+ return obj;
+}
+
+/*
+ * call-seq: from_state(opts)
+ *
+ * Creates a State object from _opts_, which ought to be Hash to create a
+ * new State instance configured by _opts_, something else to create an
+ * unconfigured instance. If _opts_ is a State object, it is just returned.
+ */
+static VALUE cState_from_state_s(VALUE self, VALUE opts)
+{
+ if (rb_obj_is_kind_of(opts, self)) {
+ return opts;
+ } else if (rb_obj_is_kind_of(opts, rb_cHash)) {
+ return rb_funcall(self, i_new, 1, opts);
+ } else {
+ if (NIL_P(CJSON_SAFE_STATE_PROTOTYPE)) {
+ CJSON_SAFE_STATE_PROTOTYPE = rb_const_get(mJSON, i_SAFE_STATE_PROTOTYPE);
+ }
+ return rb_funcall(CJSON_SAFE_STATE_PROTOTYPE, i_dup, 0);
+ }
+}
+
+/*
+ * call-seq: indent()
+ *
+ * This string is used to indent levels in the JSON text.
+ */
+static VALUE cState_indent(VALUE self)
+{
+ GET_STATE(self);
+ return state->indent ? rb_str_new2(state->indent) : rb_str_new2("");
+}
+
+/*
+ * call-seq: indent=(indent)
+ *
+ * This string is used to indent levels in the JSON text.
+ */
+static VALUE cState_indent_set(VALUE self, VALUE indent)
+{
+ unsigned long len;
+ GET_STATE(self);
+ Check_Type(indent, T_STRING);
+ len = RSTRING_LEN(indent);
+ if (len == 0) {
+ if (state->indent) {
+ ruby_xfree(state->indent);
+ state->indent = NULL;
+ state->indent_len = 0;
+ }
+ } else {
+ if (state->indent) ruby_xfree(state->indent);
+ state->indent = strdup(RSTRING_PTR(indent));
+ state->indent_len = len;
+ }
+ return Qnil;
+}
+
+/*
+ * call-seq: space()
+ *
+ * This string is used to insert a space between the tokens in a JSON
+ * string.
+ */
+static VALUE cState_space(VALUE self)
+{
+ GET_STATE(self);
+ return state->space ? rb_str_new2(state->space) : rb_str_new2("");
+}
+
+/*
+ * call-seq: space=(space)
+ *
+ * This string is used to insert a space between the tokens in a JSON
+ * string.
+ */
+static VALUE cState_space_set(VALUE self, VALUE space)
+{
+ unsigned long len;
+ GET_STATE(self);
+ Check_Type(space, T_STRING);
+ len = RSTRING_LEN(space);
+ if (len == 0) {
+ if (state->space) {
+ ruby_xfree(state->space);
+ state->space = NULL;
+ state->space_len = 0;
+ }
+ } else {
+ if (state->space) ruby_xfree(state->space);
+ state->space = strdup(RSTRING_PTR(space));
+ state->space_len = len;
+ }
+ return Qnil;
+}
+
+/*
+ * call-seq: space_before()
+ *
+ * This string is used to insert a space before the ':' in JSON objects.
+ */
+static VALUE cState_space_before(VALUE self)
+{
+ GET_STATE(self);
+ return state->space_before ? rb_str_new2(state->space_before) : rb_str_new2("");
+}
+
+/*
+ * call-seq: space_before=(space_before)
+ *
+ * This string is used to insert a space before the ':' in JSON objects.
+ */
+static VALUE cState_space_before_set(VALUE self, VALUE space_before)
+{
+ unsigned long len;
+ GET_STATE(self);
+ Check_Type(space_before, T_STRING);
+ len = RSTRING_LEN(space_before);
+ if (len == 0) {
+ if (state->space_before) {
+ ruby_xfree(state->space_before);
+ state->space_before = NULL;
+ state->space_before_len = 0;
+ }
+ } else {
+ if (state->space_before) ruby_xfree(state->space_before);
+ state->space_before = strdup(RSTRING_PTR(space_before));
+ state->space_before_len = len;
+ }
+ return Qnil;
+}
+
+/*
+ * call-seq: object_nl()
+ *
+ * This string is put at the end of a line that holds a JSON object (or
+ * Hash).
+ */
+static VALUE cState_object_nl(VALUE self)
+{
+ GET_STATE(self);
+ return state->object_nl ? rb_str_new2(state->object_nl) : rb_str_new2("");
+}
+
+/*
+ * call-seq: object_nl=(object_nl)
+ *
+ * This string is put at the end of a line that holds a JSON object (or
+ * Hash).
+ */
+static VALUE cState_object_nl_set(VALUE self, VALUE object_nl)
+{
+ unsigned long len;
+ GET_STATE(self);
+ Check_Type(object_nl, T_STRING);
+ len = RSTRING_LEN(object_nl);
+ if (len == 0) {
+ if (state->object_nl) {
+ ruby_xfree(state->object_nl);
+ state->object_nl = NULL;
+ }
+ } else {
+ if (state->object_nl) ruby_xfree(state->object_nl);
+ state->object_nl = strdup(RSTRING_PTR(object_nl));
+ state->object_nl_len = len;
+ }
+ return Qnil;
+}
+
+/*
+ * call-seq: array_nl()
+ *
+ * This string is put at the end of a line that holds a JSON array.
+ */
+static VALUE cState_array_nl(VALUE self)
+{
+ GET_STATE(self);
+ return state->array_nl ? rb_str_new2(state->array_nl) : rb_str_new2("");
+}
+
+/*
+ * call-seq: array_nl=(array_nl)
+ *
+ * This string is put at the end of a line that holds a JSON array.
+ */
+static VALUE cState_array_nl_set(VALUE self, VALUE array_nl)
+{
+ unsigned long len;
+ GET_STATE(self);
+ Check_Type(array_nl, T_STRING);
+ len = RSTRING_LEN(array_nl);
+ if (len == 0) {
+ if (state->array_nl) {
+ ruby_xfree(state->array_nl);
+ state->array_nl = NULL;
+ }
+ } else {
+ if (state->array_nl) ruby_xfree(state->array_nl);
+ state->array_nl = strdup(RSTRING_PTR(array_nl));
+ state->array_nl_len = len;
+ }
+ return Qnil;
+}
+
+
+/*
+* call-seq: check_circular?
+*
+* Returns true, if circular data structures should be checked,
+* otherwise returns false.
+*/
+static VALUE cState_check_circular_p(VALUE self)
+{
+ GET_STATE(self);
+ return state->max_nesting ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq: max_nesting
+ *
+ * This integer returns the maximum level of data structure nesting in
+ * the generated JSON, max_nesting = 0 if no maximum is checked.
+ */
+static VALUE cState_max_nesting(VALUE self)
+{
+ GET_STATE(self);
+ return LONG2FIX(state->max_nesting);
+}
+
+/*
+ * call-seq: max_nesting=(depth)
+ *
+ * This sets the maximum level of data structure nesting in the generated JSON
+ * to the integer depth, max_nesting = 0 if no maximum should be checked.
+ */
+static VALUE cState_max_nesting_set(VALUE self, VALUE depth)
+{
+ GET_STATE(self);
+ Check_Type(depth, T_FIXNUM);
+ return state->max_nesting = FIX2LONG(depth);
+}
+
+/*
+ * call-seq: allow_nan?
+ *
+ * Returns true, if NaN, Infinity, and -Infinity should be generated, otherwise
+ * returns false.
+ */
+static VALUE cState_allow_nan_p(VALUE self)
+{
+ GET_STATE(self);
+ return state->allow_nan ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq: ascii_only?
+ *
+ * Returns true, if NaN, Infinity, and -Infinity should be generated, otherwise
+ * returns false.
+ */
+static VALUE cState_ascii_only_p(VALUE self)
+{
+ GET_STATE(self);
+ return state->ascii_only ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq: depth
+ *
+ * This integer returns the current depth of data structure nesting.
+ */
+static VALUE cState_depth(VALUE self)
+{
+ GET_STATE(self);
+ return LONG2FIX(state->depth);
+}
+
+/*
+ * call-seq: depth=(depth)
+ *
+ * This sets the maximum level of data structure nesting in the generated JSON
+ * to the integer depth, max_nesting = 0 if no maximum should be checked.
+ */
+static VALUE cState_depth_set(VALUE self, VALUE depth)
+{
+ GET_STATE(self);
+ Check_Type(depth, T_FIXNUM);
+ return state->depth = FIX2LONG(depth);
+}
+
+/*
+ *
+ */
+void Init_generator()
+{
+ rb_require("json/common");
+
+ mJSON = rb_define_module("JSON");
+ mExt = rb_define_module_under(mJSON, "Ext");
+ mGenerator = rb_define_module_under(mExt, "Generator");
+
+ eGeneratorError = rb_path2class("JSON::GeneratorError");
+ eNestingError = rb_path2class("JSON::NestingError");
+
+ cState = rb_define_class_under(mGenerator, "State", rb_cObject);
+ rb_define_alloc_func(cState, cState_s_allocate);
+ rb_define_singleton_method(cState, "from_state", cState_from_state_s, 1);
+ rb_define_method(cState, "initialize", cState_initialize, -1);
+ rb_define_method(cState, "initialize_copy", cState_init_copy, 1);
+ rb_define_method(cState, "indent", cState_indent, 0);
+ rb_define_method(cState, "indent=", cState_indent_set, 1);
+ rb_define_method(cState, "space", cState_space, 0);
+ rb_define_method(cState, "space=", cState_space_set, 1);
+ rb_define_method(cState, "space_before", cState_space_before, 0);
+ rb_define_method(cState, "space_before=", cState_space_before_set, 1);
+ rb_define_method(cState, "object_nl", cState_object_nl, 0);
+ rb_define_method(cState, "object_nl=", cState_object_nl_set, 1);
+ rb_define_method(cState, "array_nl", cState_array_nl, 0);
+ rb_define_method(cState, "array_nl=", cState_array_nl_set, 1);
+ rb_define_method(cState, "max_nesting", cState_max_nesting, 0);
+ rb_define_method(cState, "max_nesting=", cState_max_nesting_set, 1);
+ rb_define_method(cState, "check_circular?", cState_check_circular_p, 0);
+ rb_define_method(cState, "allow_nan?", cState_allow_nan_p, 0);
+ rb_define_method(cState, "ascii_only?", cState_ascii_only_p, 0);
+ rb_define_method(cState, "depth", cState_depth, 0);
+ rb_define_method(cState, "depth=", cState_depth_set, 1);
+ rb_define_method(cState, "configure", cState_configure, 1);
+ rb_define_method(cState, "to_h", cState_to_h, 0);
+ rb_define_method(cState, "[]", cState_aref, 1);
+ rb_define_method(cState, "generate", cState_generate, 1);
+
+ mGeneratorMethods = rb_define_module_under(mGenerator, "GeneratorMethods");
+ mObject = rb_define_module_under(mGeneratorMethods, "Object");
+ rb_define_method(mObject, "to_json", mObject_to_json, -1);
+ mHash = rb_define_module_under(mGeneratorMethods, "Hash");
+ rb_define_method(mHash, "to_json", mHash_to_json, -1);
+ mArray = rb_define_module_under(mGeneratorMethods, "Array");
+ rb_define_method(mArray, "to_json", mArray_to_json, -1);
+ mFixnum = rb_define_module_under(mGeneratorMethods, "Fixnum");
+ rb_define_method(mFixnum, "to_json", mFixnum_to_json, -1);
+ mBignum = rb_define_module_under(mGeneratorMethods, "Bignum");
+ rb_define_method(mBignum, "to_json", mBignum_to_json, -1);
+ mFloat = rb_define_module_under(mGeneratorMethods, "Float");
+ rb_define_method(mFloat, "to_json", mFloat_to_json, -1);
+ mString = rb_define_module_under(mGeneratorMethods, "String");
+ rb_define_singleton_method(mString, "included", mString_included_s, 1);
+ rb_define_method(mString, "to_json", mString_to_json, -1);
+ rb_define_method(mString, "to_json_raw", mString_to_json_raw, -1);
+ rb_define_method(mString, "to_json_raw_object", mString_to_json_raw_object, 0);
+ mString_Extend = rb_define_module_under(mString, "Extend");
+ rb_define_method(mString_Extend, "json_create", mString_Extend_json_create, 1);
+ mTrueClass = rb_define_module_under(mGeneratorMethods, "TrueClass");
+ rb_define_method(mTrueClass, "to_json", mTrueClass_to_json, -1);
+ mFalseClass = rb_define_module_under(mGeneratorMethods, "FalseClass");
+ rb_define_method(mFalseClass, "to_json", mFalseClass_to_json, -1);
+ mNilClass = rb_define_module_under(mGeneratorMethods, "NilClass");
+ rb_define_method(mNilClass, "to_json", mNilClass_to_json, -1);
+
+ CRegexp_MULTILINE = rb_const_get(rb_cRegexp, rb_intern("MULTILINE"));
+ i_to_s = rb_intern("to_s");
+ i_to_json = rb_intern("to_json");
+ i_new = rb_intern("new");
+ i_indent = rb_intern("indent");
+ i_space = rb_intern("space");
+ i_space_before = rb_intern("space_before");
+ i_object_nl = rb_intern("object_nl");
+ i_array_nl = rb_intern("array_nl");
+ i_max_nesting = rb_intern("max_nesting");
+ i_allow_nan = rb_intern("allow_nan");
+ i_ascii_only = rb_intern("ascii_only");
+ i_depth = rb_intern("depth");
+ i_pack = rb_intern("pack");
+ i_unpack = rb_intern("unpack");
+ i_create_id = rb_intern("create_id");
+ i_extend = rb_intern("extend");
+ i_key_p = rb_intern("key?");
+ i_aref = rb_intern("[]");
+ i_send = rb_intern("__send__");
+ i_respond_to_p = rb_intern("respond_to?");
+ i_match = rb_intern("match");
+ i_keys = rb_intern("keys");
+ i_dup = rb_intern("dup");
+#ifdef HAVE_RUBY_ENCODING_H
+ CEncoding_UTF_8 = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-8"));
+ i_encoding = rb_intern("encoding");
+ i_encode = rb_intern("encode");
+#endif
+ i_SAFE_STATE_PROTOTYPE = rb_intern("SAFE_STATE_PROTOTYPE");
+ CJSON_SAFE_STATE_PROTOTYPE = Qnil;
+}
diff --git a/vendor/gems/json-1.5.1/ext/json/ext/generator/generator.h b/vendor/gems/json-1.5.1/ext/json/ext/generator/generator.h
new file mode 100644
index 000000000..e47f507b0
--- /dev/null
+++ b/vendor/gems/json-1.5.1/ext/json/ext/generator/generator.h
@@ -0,0 +1,197 @@
+#ifndef _GENERATOR_H_
+#define _GENERATOR_H_
+
+#include <string.h>
+#include <assert.h>
+#include <math.h>
+
+#include "ruby.h"
+
+#if HAVE_RUBY_RE_H
+#include "ruby/re.h"
+#endif
+
+#if HAVE_RE_H
+#include "re.h"
+#endif
+
+#ifdef HAVE_RUBY_ENCODING_H
+#include "ruby/encoding.h"
+#define FORCE_UTF8(obj) rb_enc_associate((obj), rb_utf8_encoding())
+#else
+#define FORCE_UTF8(obj)
+#endif
+
+#define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key))
+
+#ifndef RHASH_SIZE
+#define RHASH_SIZE(hsh) (RHASH(hsh)->tbl->num_entries)
+#endif
+
+#ifndef RFLOAT_VALUE
+#define RFLOAT_VALUE(val) (RFLOAT(val)->value)
+#endif
+
+#ifndef RARRAY_PTR
+#define RARRAY_PTR(ARRAY) RARRAY(ARRAY)->ptr
+#endif
+#ifndef RARRAY_LEN
+#define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len
+#endif
+#ifndef RSTRING_PTR
+#define RSTRING_PTR(string) RSTRING(string)->ptr
+#endif
+#ifndef RSTRING_LEN
+#define RSTRING_LEN(string) RSTRING(string)->len
+#endif
+
+#define RSTRING_PAIR(string) RSTRING_PTR(string), RSTRING_LEN(string)
+
+/* fbuffer implementation */
+
+typedef struct FBufferStruct {
+ unsigned long initial_length;
+ char *ptr;
+ unsigned long len;
+ unsigned long capa;
+} FBuffer;
+
+#define FBUFFER_INITIAL_LENGTH 4096
+
+#define FBUFFER_PTR(fb) (fb->ptr)
+#define FBUFFER_LEN(fb) (fb->len)
+#define FBUFFER_CAPA(fb) (fb->capa)
+#define FBUFFER_PAIR(fb) FBUFFER_PTR(fb), FBUFFER_LEN(fb)
+
+static char *fstrndup(const char *ptr, unsigned long len);
+static FBuffer *fbuffer_alloc();
+static FBuffer *fbuffer_alloc_with_length(unsigned long initial_length);
+static void fbuffer_free(FBuffer *fb);
+static void fbuffer_free_only_buffer(FBuffer *fb);
+static void fbuffer_clear(FBuffer *fb);
+static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned long len);
+static void fbuffer_append_long(FBuffer *fb, long number);
+static void fbuffer_append_char(FBuffer *fb, char newchr);
+static FBuffer *fbuffer_dup(FBuffer *fb);
+static VALUE fbuffer_to_s(FBuffer *fb);
+
+/* unicode defintions */
+
+#define UNI_STRICT_CONVERSION 1
+
+typedef unsigned long UTF32; /* at least 32 bits */
+typedef unsigned short UTF16; /* at least 16 bits */
+typedef unsigned char UTF8; /* typically 8 bits */
+
+#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
+#define UNI_MAX_BMP (UTF32)0x0000FFFF
+#define UNI_MAX_UTF16 (UTF32)0x0010FFFF
+#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
+#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
+
+#define UNI_SUR_HIGH_START (UTF32)0xD800
+#define UNI_SUR_HIGH_END (UTF32)0xDBFF
+#define UNI_SUR_LOW_START (UTF32)0xDC00
+#define UNI_SUR_LOW_END (UTF32)0xDFFF
+
+static const int halfShift = 10; /* used for shifting by 10 bits */
+
+static const UTF32 halfBase = 0x0010000UL;
+static const UTF32 halfMask = 0x3FFUL;
+
+static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length);
+static void unicode_escape(char *buf, UTF16 character);
+static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 character);
+static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string);
+static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string);
+
+/* ruby api and some helpers */
+
+typedef struct JSON_Generator_StateStruct {
+ char *indent;
+ long indent_len;
+ char *space;
+ long space_len;
+ char *space_before;
+ long space_before_len;
+ char *object_nl;
+ long object_nl_len;
+ char *array_nl;
+ long array_nl_len;
+ FBuffer *array_delim;
+ FBuffer *object_delim;
+ FBuffer *object_delim2;
+ long max_nesting;
+ char allow_nan;
+ char ascii_only;
+ long depth;
+} JSON_Generator_State;
+
+#define GET_STATE(self) \
+ JSON_Generator_State *state; \
+ Data_Get_Struct(self, JSON_Generator_State, state)
+
+#define GENERATE_JSON(type) \
+ FBuffer *buffer; \
+ VALUE Vstate; \
+ JSON_Generator_State *state; \
+ \
+ rb_scan_args(argc, argv, "01", &Vstate); \
+ Vstate = cState_from_state_s(cState, Vstate); \
+ Data_Get_Struct(Vstate, JSON_Generator_State, state); \
+ buffer = cState_prepare_buffer(Vstate); \
+ generate_json_##type(buffer, Vstate, state, self); \
+ return fbuffer_to_s(buffer)
+
+static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self);
+static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self);
+static VALUE mFixnum_to_json(int argc, VALUE *argv, VALUE self);
+static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self);
+static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self);
+static VALUE mString_included_s(VALUE self, VALUE modul);
+static VALUE mString_to_json(int argc, VALUE *argv, VALUE self);
+static VALUE mString_to_json_raw_object(VALUE self);
+static VALUE mString_to_json_raw(int argc, VALUE *argv, VALUE self);
+static VALUE mString_Extend_json_create(VALUE self, VALUE o);
+static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self);
+static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self);
+static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self);
+static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self);
+static void State_free(JSON_Generator_State *state);
+static JSON_Generator_State *State_allocate();
+static VALUE cState_s_allocate(VALUE klass);
+static VALUE cState_configure(VALUE self, VALUE opts);
+static VALUE cState_to_h(VALUE self);
+static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
+static void generate_json_object(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
+static void generate_json_array(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
+static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
+static void generate_json_null(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
+static void generate_json_false(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
+static void generate_json_true(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
+static void generate_json_fixnum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
+static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
+static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
+static VALUE cState_partial_generate(VALUE self, VALUE obj);
+static VALUE cState_generate(VALUE self, VALUE obj);
+static VALUE cState_initialize(int argc, VALUE *argv, VALUE self);
+static VALUE cState_from_state_s(VALUE self, VALUE opts);
+static VALUE cState_indent(VALUE self);
+static VALUE cState_indent_set(VALUE self, VALUE indent);
+static VALUE cState_space(VALUE self);
+static VALUE cState_space_set(VALUE self, VALUE space);
+static VALUE cState_space_before(VALUE self);
+static VALUE cState_space_before_set(VALUE self, VALUE space_before);
+static VALUE cState_object_nl(VALUE self);
+static VALUE cState_object_nl_set(VALUE self, VALUE object_nl);
+static VALUE cState_array_nl(VALUE self);
+static VALUE cState_array_nl_set(VALUE self, VALUE array_nl);
+static VALUE cState_max_nesting(VALUE self);
+static VALUE cState_max_nesting_set(VALUE self, VALUE depth);
+static VALUE cState_allow_nan_p(VALUE self);
+static VALUE cState_ascii_only_p(VALUE self);
+static VALUE cState_depth(VALUE self);
+static VALUE cState_depth_set(VALUE self, VALUE depth);
+static FBuffer *cState_prepare_buffer(VALUE self);
+
+#endif
diff --git a/vendor/gems/json-1.5.1/ext/json/ext/parser/extconf.rb b/vendor/gems/json-1.5.1/ext/json/ext/parser/extconf.rb
new file mode 100644
index 000000000..d2438cd64
--- /dev/null
+++ b/vendor/gems/json-1.5.1/ext/json/ext/parser/extconf.rb
@@ -0,0 +1,16 @@
+require 'mkmf'
+require 'rbconfig'
+
+unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
+ $CFLAGS << ' -O3'
+end
+if CONFIG['CC'] =~ /gcc/
+ $CFLAGS << ' -Wall'
+ #unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
+ # $CFLAGS << ' -O0 -ggdb'
+ #end
+end
+
+have_header("re.h")
+have_header("ruby/st.h")
+create_makefile 'json/ext/parser'
diff --git a/vendor/gems/json-1.5.1/ext/json/ext/parser/parser.c b/vendor/gems/json-1.5.1/ext/json/ext/parser/parser.c
new file mode 100644
index 000000000..c125f82ca
--- /dev/null
+++ b/vendor/gems/json-1.5.1/ext/json/ext/parser/parser.c
@@ -0,0 +1,1969 @@
+
+#line 1 "parser.rl"
+#include "parser.h"
+
+/* unicode */
+
+static const char digit_values[256] = {
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1,
+ -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1
+};
+
+static UTF32 unescape_unicode(const unsigned char *p)
+{
+ char b;
+ UTF32 result = 0;
+ b = digit_values[p[0]];
+ if (b < 0) return UNI_REPLACEMENT_CHAR;
+ result = (result << 4) | b;
+ b = digit_values[p[1]];
+ result = (result << 4) | b;
+ if (b < 0) return UNI_REPLACEMENT_CHAR;
+ b = digit_values[p[2]];
+ result = (result << 4) | b;
+ if (b < 0) return UNI_REPLACEMENT_CHAR;
+ b = digit_values[p[3]];
+ result = (result << 4) | b;
+ if (b < 0) return UNI_REPLACEMENT_CHAR;
+ return result;
+}
+
+static int convert_UTF32_to_UTF8(char *buf, UTF32 ch)
+{
+ int len = 1;
+ if (ch <= 0x7F) {
+ buf[0] = (char) ch;
+ } else if (ch <= 0x07FF) {
+ buf[0] = (char) ((ch >> 6) | 0xC0);
+ buf[1] = (char) ((ch & 0x3F) | 0x80);
+ len++;
+ } else if (ch <= 0xFFFF) {
+ buf[0] = (char) ((ch >> 12) | 0xE0);
+ buf[1] = (char) (((ch >> 6) & 0x3F) | 0x80);
+ buf[2] = (char) ((ch & 0x3F) | 0x80);
+ len += 2;
+ } else if (ch <= 0x1fffff) {
+ buf[0] =(char) ((ch >> 18) | 0xF0);
+ buf[1] =(char) (((ch >> 12) & 0x3F) | 0x80);
+ buf[2] =(char) (((ch >> 6) & 0x3F) | 0x80);
+ buf[3] =(char) ((ch & 0x3F) | 0x80);
+ len += 3;
+ } else {
+ buf[0] = '?';
+ }
+ return len;
+}
+
+#ifdef HAVE_RUBY_ENCODING_H
+static VALUE CEncoding_ASCII_8BIT, CEncoding_UTF_8, CEncoding_UTF_16BE,
+ CEncoding_UTF_16LE, CEncoding_UTF_32BE, CEncoding_UTF_32LE;
+static ID i_encoding, i_encode, i_encode_bang, i_force_encoding;
+#else
+static ID i_iconv;
+#endif
+
+static VALUE mJSON, mExt, cParser, eParserError, eNestingError;
+static VALUE CNaN, CInfinity, CMinusInfinity;
+
+static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
+ i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, i_object_class,
+ i_array_class, i_key_p, i_deep_const_get, i_match, i_match_string;
+
+
+#line 108 "parser.rl"
+
+
+
+#line 90 "parser.c"
+static const int JSON_object_start = 1;
+static const int JSON_object_first_final = 27;
+static const int JSON_object_error = 0;
+
+static const int JSON_object_en_main = 1;
+
+
+#line 144 "parser.rl"
+
+
+static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+ VALUE last_name = Qnil;
+ VALUE object_class = json->object_class;
+
+ if (json->max_nesting && json->current_nesting > json->max_nesting) {
+ rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
+ }
+
+ *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class);
+
+
+#line 114 "parser.c"
+ {
+ cs = JSON_object_start;
+ }
+
+#line 159 "parser.rl"
+
+#line 121 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ if ( (*p) == 123 )
+ goto st2;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ switch( (*p) ) {
+ case 13: goto st2;
+ case 32: goto st2;
+ case 34: goto tr2;
+ case 47: goto st23;
+ case 125: goto tr4;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st2;
+ goto st0;
+tr2:
+#line 127 "parser.rl"
+ {
+ char *np;
+ json->parsing_name = 1;
+ np = JSON_parse_string(json, p, pe, &last_name);
+ json->parsing_name = 0;
+ if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st3;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+#line 162 "parser.c"
+ switch( (*p) ) {
+ case 13: goto st3;
+ case 32: goto st3;
+ case 47: goto st4;
+ case 58: goto st8;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st3;
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ switch( (*p) ) {
+ case 42: goto st5;
+ case 47: goto st7;
+ }
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 42 )
+ goto st6;
+ goto st5;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ switch( (*p) ) {
+ case 42: goto st6;
+ case 47: goto st3;
+ }
+ goto st5;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) == 10 )
+ goto st3;
+ goto st7;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ switch( (*p) ) {
+ case 13: goto st8;
+ case 32: goto st8;
+ case 34: goto tr11;
+ case 45: goto tr11;
+ case 47: goto st19;
+ case 73: goto tr11;
+ case 78: goto tr11;
+ case 91: goto tr11;
+ case 102: goto tr11;
+ case 110: goto tr11;
+ case 116: goto tr11;
+ case 123: goto tr11;
+ }
+ if ( (*p) > 10 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr11;
+ } else if ( (*p) >= 9 )
+ goto st8;
+ goto st0;
+tr11:
+#line 116 "parser.rl"
+ {
+ VALUE v = Qnil;
+ char *np = JSON_parse_value(json, p, pe, &v);
+ if (np == NULL) {
+ p--; {p++; cs = 9; goto _out;}
+ } else {
+ rb_hash_aset(*result, last_name, v);
+ {p = (( np))-1;}
+ }
+ }
+ goto st9;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+#line 245 "parser.c"
+ switch( (*p) ) {
+ case 13: goto st9;
+ case 32: goto st9;
+ case 44: goto st10;
+ case 47: goto st15;
+ case 125: goto tr4;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st9;
+ goto st0;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ switch( (*p) ) {
+ case 13: goto st10;
+ case 32: goto st10;
+ case 34: goto tr2;
+ case 47: goto st11;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st10;
+ goto st0;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ switch( (*p) ) {
+ case 42: goto st12;
+ case 47: goto st14;
+ }
+ goto st0;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+ if ( (*p) == 42 )
+ goto st13;
+ goto st12;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ switch( (*p) ) {
+ case 42: goto st13;
+ case 47: goto st10;
+ }
+ goto st12;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+ if ( (*p) == 10 )
+ goto st10;
+ goto st14;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+ switch( (*p) ) {
+ case 42: goto st16;
+ case 47: goto st18;
+ }
+ goto st0;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ if ( (*p) == 42 )
+ goto st17;
+ goto st16;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+ switch( (*p) ) {
+ case 42: goto st17;
+ case 47: goto st9;
+ }
+ goto st16;
+st18:
+ if ( ++p == pe )
+ goto _test_eof18;
+case 18:
+ if ( (*p) == 10 )
+ goto st9;
+ goto st18;
+tr4:
+#line 135 "parser.rl"
+ { p--; {p++; cs = 27; goto _out;} }
+ goto st27;
+st27:
+ if ( ++p == pe )
+ goto _test_eof27;
+case 27:
+#line 341 "parser.c"
+ goto st0;
+st19:
+ if ( ++p == pe )
+ goto _test_eof19;
+case 19:
+ switch( (*p) ) {
+ case 42: goto st20;
+ case 47: goto st22;
+ }
+ goto st0;
+st20:
+ if ( ++p == pe )
+ goto _test_eof20;
+case 20:
+ if ( (*p) == 42 )
+ goto st21;
+ goto st20;
+st21:
+ if ( ++p == pe )
+ goto _test_eof21;
+case 21:
+ switch( (*p) ) {
+ case 42: goto st21;
+ case 47: goto st8;
+ }
+ goto st20;
+st22:
+ if ( ++p == pe )
+ goto _test_eof22;
+case 22:
+ if ( (*p) == 10 )
+ goto st8;
+ goto st22;
+st23:
+ if ( ++p == pe )
+ goto _test_eof23;
+case 23:
+ switch( (*p) ) {
+ case 42: goto st24;
+ case 47: goto st26;
+ }
+ goto st0;
+st24:
+ if ( ++p == pe )
+ goto _test_eof24;
+case 24:
+ if ( (*p) == 42 )
+ goto st25;
+ goto st24;
+st25:
+ if ( ++p == pe )
+ goto _test_eof25;
+case 25:
+ switch( (*p) ) {
+ case 42: goto st25;
+ case 47: goto st2;
+ }
+ goto st24;
+st26:
+ if ( ++p == pe )
+ goto _test_eof26;
+case 26:
+ if ( (*p) == 10 )
+ goto st2;
+ goto st26;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+ _test_eof18: cs = 18; goto _test_eof;
+ _test_eof27: cs = 27; goto _test_eof;
+ _test_eof19: cs = 19; goto _test_eof;
+ _test_eof20: cs = 20; goto _test_eof;
+ _test_eof21: cs = 21; goto _test_eof;
+ _test_eof22: cs = 22; goto _test_eof;
+ _test_eof23: cs = 23; goto _test_eof;
+ _test_eof24: cs = 24; goto _test_eof;
+ _test_eof25: cs = 25; goto _test_eof;
+ _test_eof26: cs = 26; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 160 "parser.rl"
+
+ if (cs >= JSON_object_first_final) {
+ if (json->create_additions) {
+ VALUE klassname = rb_hash_aref(*result, json->create_id);
+ if (!NIL_P(klassname)) {
+ VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname);
+ if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) {
+ *result = rb_funcall(klass, i_json_create, 1, *result);
+ }
+ }
+ }
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+#line 458 "parser.c"
+static const int JSON_value_start = 1;
+static const int JSON_value_first_final = 21;
+static const int JSON_value_error = 0;
+
+static const int JSON_value_en_main = 1;
+
+
+#line 258 "parser.rl"
+
+
+static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+
+#line 474 "parser.c"
+ {
+ cs = JSON_value_start;
+ }
+
+#line 265 "parser.rl"
+
+#line 481 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ switch( (*p) ) {
+ case 34: goto tr0;
+ case 45: goto tr2;
+ case 73: goto st2;
+ case 78: goto st9;
+ case 91: goto tr5;
+ case 102: goto st11;
+ case 110: goto st15;
+ case 116: goto st18;
+ case 123: goto tr9;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr2;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+tr0:
+#line 206 "parser.rl"
+ {
+ char *np = JSON_parse_string(json, p, pe, result);
+ if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st21;
+tr2:
+#line 211 "parser.rl"
+ {
+ char *np;
+ if(pe > p + 9 && !strncmp(MinusInfinity, p, 9)) {
+ if (json->allow_nan) {
+ *result = CMinusInfinity;
+ {p = (( p + 10))-1;}
+ p--; {p++; cs = 21; goto _out;}
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ }
+ }
+ np = JSON_parse_float(json, p, pe, result);
+ if (np != NULL) {p = (( np))-1;}
+ np = JSON_parse_integer(json, p, pe, result);
+ if (np != NULL) {p = (( np))-1;}
+ p--; {p++; cs = 21; goto _out;}
+ }
+ goto st21;
+tr5:
+#line 229 "parser.rl"
+ {
+ char *np;
+ json->current_nesting++;
+ np = JSON_parse_array(json, p, pe, result);
+ json->current_nesting--;
+ if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st21;
+tr9:
+#line 237 "parser.rl"
+ {
+ char *np;
+ json->current_nesting++;
+ np = JSON_parse_object(json, p, pe, result);
+ json->current_nesting--;
+ if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st21;
+tr16:
+#line 199 "parser.rl"
+ {
+ if (json->allow_nan) {
+ *result = CInfinity;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
+ }
+ }
+ goto st21;
+tr18:
+#line 192 "parser.rl"
+ {
+ if (json->allow_nan) {
+ *result = CNaN;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
+ }
+ }
+ goto st21;
+tr22:
+#line 186 "parser.rl"
+ {
+ *result = Qfalse;
+ }
+ goto st21;
+tr25:
+#line 183 "parser.rl"
+ {
+ *result = Qnil;
+ }
+ goto st21;
+tr28:
+#line 189 "parser.rl"
+ {
+ *result = Qtrue;
+ }
+ goto st21;
+st21:
+ if ( ++p == pe )
+ goto _test_eof21;
+case 21:
+#line 245 "parser.rl"
+ { p--; {p++; cs = 21; goto _out;} }
+#line 596 "parser.c"
+ goto st0;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ if ( (*p) == 110 )
+ goto st3;
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( (*p) == 102 )
+ goto st4;
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( (*p) == 105 )
+ goto st5;
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 110 )
+ goto st6;
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ if ( (*p) == 105 )
+ goto st7;
+ goto st0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) == 116 )
+ goto st8;
+ goto st0;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ if ( (*p) == 121 )
+ goto tr16;
+ goto st0;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ if ( (*p) == 97 )
+ goto st10;
+ goto st0;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ if ( (*p) == 78 )
+ goto tr18;
+ goto st0;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ if ( (*p) == 97 )
+ goto st12;
+ goto st0;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+ if ( (*p) == 108 )
+ goto st13;
+ goto st0;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ if ( (*p) == 115 )
+ goto st14;
+ goto st0;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+ if ( (*p) == 101 )
+ goto tr22;
+ goto st0;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+ if ( (*p) == 117 )
+ goto st16;
+ goto st0;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ if ( (*p) == 108 )
+ goto st17;
+ goto st0;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+ if ( (*p) == 108 )
+ goto tr25;
+ goto st0;
+st18:
+ if ( ++p == pe )
+ goto _test_eof18;
+case 18:
+ if ( (*p) == 114 )
+ goto st19;
+ goto st0;
+st19:
+ if ( ++p == pe )
+ goto _test_eof19;
+case 19:
+ if ( (*p) == 117 )
+ goto st20;
+ goto st0;
+st20:
+ if ( ++p == pe )
+ goto _test_eof20;
+case 20:
+ if ( (*p) == 101 )
+ goto tr28;
+ goto st0;
+ }
+ _test_eof21: cs = 21; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+ _test_eof18: cs = 18; goto _test_eof;
+ _test_eof19: cs = 19; goto _test_eof;
+ _test_eof20: cs = 20; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 266 "parser.rl"
+
+ if (cs >= JSON_value_first_final) {
+ return p;
+ } else {
+ return NULL;
+ }
+}
+
+
+#line 767 "parser.c"
+static const int JSON_integer_start = 1;
+static const int JSON_integer_first_final = 5;
+static const int JSON_integer_error = 0;
+
+static const int JSON_integer_en_main = 1;
+
+
+#line 282 "parser.rl"
+
+
+static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+
+#line 783 "parser.c"
+ {
+ cs = JSON_integer_start;
+ }
+
+#line 289 "parser.rl"
+ json->memo = p;
+
+#line 791 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ switch( (*p) ) {
+ case 45: goto st2;
+ case 48: goto st3;
+ }
+ if ( 49 <= (*p) && (*p) <= 57 )
+ goto st4;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ if ( (*p) == 48 )
+ goto st3;
+ if ( 49 <= (*p) && (*p) <= 57 )
+ goto st4;
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st0;
+ goto tr4;
+tr4:
+#line 279 "parser.rl"
+ { p--; {p++; cs = 5; goto _out;} }
+ goto st5;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+#line 832 "parser.c"
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st4;
+ goto tr4;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 291 "parser.rl"
+
+ if (cs >= JSON_integer_first_final) {
+ long len = p - json->memo;
+ *result = rb_Integer(rb_str_new(json->memo, len));
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+#line 863 "parser.c"
+static const int JSON_float_start = 1;
+static const int JSON_float_first_final = 10;
+static const int JSON_float_error = 0;
+
+static const int JSON_float_en_main = 1;
+
+
+#line 313 "parser.rl"
+
+
+static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+
+#line 879 "parser.c"
+ {
+ cs = JSON_float_start;
+ }
+
+#line 320 "parser.rl"
+ json->memo = p;
+
+#line 887 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ switch( (*p) ) {
+ case 45: goto st2;
+ case 48: goto st3;
+ }
+ if ( 49 <= (*p) && (*p) <= 57 )
+ goto st9;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ if ( (*p) == 48 )
+ goto st3;
+ if ( 49 <= (*p) && (*p) <= 57 )
+ goto st9;
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ switch( (*p) ) {
+ case 46: goto st4;
+ case 69: goto st6;
+ case 101: goto st6;
+ }
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st5;
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ switch( (*p) ) {
+ case 69: goto st6;
+ case 101: goto st6;
+ }
+ if ( (*p) > 46 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st5;
+ } else if ( (*p) >= 45 )
+ goto st0;
+ goto tr7;
+tr7:
+#line 307 "parser.rl"
+ { p--; {p++; cs = 10; goto _out;} }
+ goto st10;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+#line 952 "parser.c"
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ switch( (*p) ) {
+ case 43: goto st7;
+ case 45: goto st7;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st8;
+ goto st0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st8;
+ goto st0;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ switch( (*p) ) {
+ case 69: goto st0;
+ case 101: goto st0;
+ }
+ if ( (*p) > 46 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st8;
+ } else if ( (*p) >= 45 )
+ goto st0;
+ goto tr7;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ switch( (*p) ) {
+ case 46: goto st4;
+ case 69: goto st6;
+ case 101: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st9;
+ goto st0;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 322 "parser.rl"
+
+ if (cs >= JSON_float_first_final) {
+ long len = p - json->memo;
+ *result = rb_Float(rb_str_new(json->memo, len));
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+
+#line 1026 "parser.c"
+static const int JSON_array_start = 1;
+static const int JSON_array_first_final = 17;
+static const int JSON_array_error = 0;
+
+static const int JSON_array_en_main = 1;
+
+
+#line 358 "parser.rl"
+
+
+static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+ VALUE array_class = json->array_class;
+
+ if (json->max_nesting && json->current_nesting > json->max_nesting) {
+ rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
+ }
+ *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
+
+
+#line 1048 "parser.c"
+ {
+ cs = JSON_array_start;
+ }
+
+#line 371 "parser.rl"
+
+#line 1055 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ if ( (*p) == 91 )
+ goto st2;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ switch( (*p) ) {
+ case 13: goto st2;
+ case 32: goto st2;
+ case 34: goto tr2;
+ case 45: goto tr2;
+ case 47: goto st13;
+ case 73: goto tr2;
+ case 78: goto tr2;
+ case 91: goto tr2;
+ case 93: goto tr4;
+ case 102: goto tr2;
+ case 110: goto tr2;
+ case 116: goto tr2;
+ case 123: goto tr2;
+ }
+ if ( (*p) > 10 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr2;
+ } else if ( (*p) >= 9 )
+ goto st2;
+ goto st0;
+tr2:
+#line 339 "parser.rl"
+ {
+ VALUE v = Qnil;
+ char *np = JSON_parse_value(json, p, pe, &v);
+ if (np == NULL) {
+ p--; {p++; cs = 3; goto _out;}
+ } else {
+ rb_ary_push(*result, v);
+ {p = (( np))-1;}
+ }
+ }
+ goto st3;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+#line 1110 "parser.c"
+ switch( (*p) ) {
+ case 13: goto st3;
+ case 32: goto st3;
+ case 44: goto st4;
+ case 47: goto st9;
+ case 93: goto tr4;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st3;
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ switch( (*p) ) {
+ case 13: goto st4;
+ case 32: goto st4;
+ case 34: goto tr2;
+ case 45: goto tr2;
+ case 47: goto st5;
+ case 73: goto tr2;
+ case 78: goto tr2;
+ case 91: goto tr2;
+ case 102: goto tr2;
+ case 110: goto tr2;
+ case 116: goto tr2;
+ case 123: goto tr2;
+ }
+ if ( (*p) > 10 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr2;
+ } else if ( (*p) >= 9 )
+ goto st4;
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ switch( (*p) ) {
+ case 42: goto st6;
+ case 47: goto st8;
+ }
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ if ( (*p) == 42 )
+ goto st7;
+ goto st6;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ switch( (*p) ) {
+ case 42: goto st7;
+ case 47: goto st4;
+ }
+ goto st6;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ if ( (*p) == 10 )
+ goto st4;
+ goto st8;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ switch( (*p) ) {
+ case 42: goto st10;
+ case 47: goto st12;
+ }
+ goto st0;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ if ( (*p) == 42 )
+ goto st11;
+ goto st10;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ switch( (*p) ) {
+ case 42: goto st11;
+ case 47: goto st3;
+ }
+ goto st10;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+ if ( (*p) == 10 )
+ goto st3;
+ goto st12;
+tr4:
+#line 350 "parser.rl"
+ { p--; {p++; cs = 17; goto _out;} }
+ goto st17;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+#line 1217 "parser.c"
+ goto st0;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ switch( (*p) ) {
+ case 42: goto st14;
+ case 47: goto st16;
+ }
+ goto st0;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+ if ( (*p) == 42 )
+ goto st15;
+ goto st14;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+ switch( (*p) ) {
+ case 42: goto st15;
+ case 47: goto st2;
+ }
+ goto st14;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ if ( (*p) == 10 )
+ goto st2;
+ goto st16;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 372 "parser.rl"
+
+ if(cs >= JSON_array_first_final) {
+ return p + 1;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ return NULL;
+ }
+}
+
+static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
+{
+ char *p = string, *pe = string, *unescape;
+ int unescape_len;
+
+ while (pe < stringEnd) {
+ if (*pe == '\\') {
+ unescape = (char *) "?";
+ unescape_len = 1;
+ if (pe > p) rb_str_buf_cat(result, p, pe - p);
+ switch (*++pe) {
+ case 'n':
+ unescape = (char *) "\n";
+ break;
+ case 'r':
+ unescape = (char *) "\r";
+ break;
+ case 't':
+ unescape = (char *) "\t";
+ break;
+ case '"':
+ unescape = (char *) "\"";
+ break;
+ case '\\':
+ unescape = (char *) "\\";
+ break;
+ case 'b':
+ unescape = (char *) "\b";
+ break;
+ case 'f':
+ unescape = (char *) "\f";
+ break;
+ case 'u':
+ if (pe > stringEnd - 4) {
+ return Qnil;
+ } else {
+ char buf[4];
+ UTF32 ch = unescape_unicode((unsigned char *) ++pe);
+ pe += 3;
+ if (UNI_SUR_HIGH_START == (ch & 0xFC00)) {
+ pe++;
+ if (pe > stringEnd - 6) return Qnil;
+ if (pe[0] == '\\' && pe[1] == 'u') {
+ UTF32 sur = unescape_unicode((unsigned char *) pe + 2);
+ ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16)
+ | (sur & 0x3FF));
+ pe += 5;
+ } else {
+ unescape = (char *) "?";
+ break;
+ }
+ }
+ unescape_len = convert_UTF32_to_UTF8(buf, ch);
+ unescape = buf;
+ }
+ break;
+ default:
+ p = pe;
+ continue;
+ }
+ rb_str_buf_cat(result, unescape, unescape_len);
+ p = ++pe;
+ } else {
+ pe++;
+ }
+ }
+ rb_str_buf_cat(result, p, pe - p);
+ return result;
+}
+
+
+#line 1354 "parser.c"
+static const int JSON_string_start = 1;
+static const int JSON_string_first_final = 8;
+static const int JSON_string_error = 0;
+
+static const int JSON_string_en_main = 1;
+
+
+#line 471 "parser.rl"
+
+
+static int
+match_i(VALUE regexp, VALUE klass, VALUE memo)
+{
+ if (regexp == Qundef) return ST_STOP;
+ if (RTEST(rb_funcall(klass, i_json_creatable_p, 0)) &&
+ RTEST(rb_funcall(regexp, i_match, 1, rb_ary_entry(memo, 0)))) {
+ rb_ary_push(memo, klass);
+ return ST_STOP;
+ }
+ return ST_CONTINUE;
+}
+
+static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+ VALUE match_string;
+
+ *result = rb_str_buf_new(0);
+
+#line 1384 "parser.c"
+ {
+ cs = JSON_string_start;
+ }
+
+#line 492 "parser.rl"
+ json->memo = p;
+
+#line 1392 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ if ( (*p) == 34 )
+ goto st2;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ switch( (*p) ) {
+ case 34: goto tr2;
+ case 92: goto st3;
+ }
+ if ( 0 <= (*p) && (*p) <= 31 )
+ goto st0;
+ goto st2;
+tr2:
+#line 457 "parser.rl"
+ {
+ *result = json_string_unescape(*result, json->memo + 1, p);
+ if (NIL_P(*result)) {
+ p--;
+ {p++; cs = 8; goto _out;}
+ } else {
+ FORCE_UTF8(*result);
+ {p = (( p + 1))-1;}
+ }
+ }
+#line 468 "parser.rl"
+ { p--; {p++; cs = 8; goto _out;} }
+ goto st8;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+#line 1435 "parser.c"
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( (*p) == 117 )
+ goto st4;
+ if ( 0 <= (*p) && (*p) <= 31 )
+ goto st0;
+ goto st2;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st5;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st5;
+ } else
+ goto st5;
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st6;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st6;
+ } else
+ goto st6;
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st7;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st7;
+ } else
+ goto st7;
+ goto st0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st2;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st2;
+ } else
+ goto st2;
+ goto st0;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 494 "parser.rl"
+
+ if (json->create_additions && RTEST(match_string = json->match_string)) {
+ VALUE klass;
+ VALUE memo = rb_ary_new2(2);
+ rb_ary_push(memo, *result);
+ rb_hash_foreach(match_string, match_i, memo);
+ klass = rb_ary_entry(memo, 1);
+ if (RTEST(klass)) {
+ *result = rb_funcall(klass, i_json_create, 1, *result);
+ }
+ }
+
+ if (json->symbolize_names && json->parsing_name) {
+ *result = rb_str_intern(*result);
+ }
+ if (cs >= JSON_string_first_final) {
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+
+#line 1536 "parser.c"
+static const int JSON_start = 1;
+static const int JSON_first_final = 10;
+static const int JSON_error = 0;
+
+static const int JSON_en_main = 1;
+
+
+#line 542 "parser.rl"
+
+
+/*
+ * Document-class: JSON::Ext::Parser
+ *
+ * This is the JSON parser implemented as a C extension. It can be configured
+ * to be used by setting
+ *
+ * JSON.parser = JSON::Ext::Parser
+ *
+ * with the method parser= in JSON.
+ *
+ */
+
+static VALUE convert_encoding(VALUE source)
+{
+ char *ptr = RSTRING_PTR(source);
+ long len = RSTRING_LEN(source);
+ if (len < 2) {
+ rb_raise(eParserError, "A JSON text must at least contain two octets!");
+ }
+#ifdef HAVE_RUBY_ENCODING_H
+ {
+ VALUE encoding = rb_funcall(source, i_encoding, 0);
+ if (encoding == CEncoding_ASCII_8BIT) {
+ if (len >= 4 && ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
+ source = rb_str_dup(source);
+ rb_funcall(source, i_force_encoding, 1, CEncoding_UTF_32BE);
+ source = rb_funcall(source, i_encode_bang, 1, CEncoding_UTF_8);
+ } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
+ source = rb_str_dup(source);
+ rb_funcall(source, i_force_encoding, 1, CEncoding_UTF_16BE);
+ source = rb_funcall(source, i_encode_bang, 1, CEncoding_UTF_8);
+ } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
+ source = rb_str_dup(source);
+ rb_funcall(source, i_force_encoding, 1, CEncoding_UTF_32LE);
+ source = rb_funcall(source, i_encode_bang, 1, CEncoding_UTF_8);
+ } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
+ source = rb_str_dup(source);
+ rb_funcall(source, i_force_encoding, 1, CEncoding_UTF_16LE);
+ source = rb_funcall(source, i_encode_bang, 1, CEncoding_UTF_8);
+ } else {
+ FORCE_UTF8(source);
+ }
+ } else {
+ source = rb_funcall(source, i_encode, 1, CEncoding_UTF_8);
+ }
+ }
+#else
+ if (len >= 4 && ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
+ source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-32be"), source);
+ } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
+ source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-16be"), source);
+ } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
+ source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-32le"), source);
+ } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
+ source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-16le"), source);
+ }
+#endif
+ return source;
+}
+
+/*
+ * call-seq: new(source, opts => {})
+ *
+ * Creates a new JSON::Ext::Parser instance for the string _source_.
+ *
+ * Creates a new JSON::Ext::Parser instance for the string _source_.
+ *
+ * It will be configured by the _opts_ hash. _opts_ can have the following
+ * keys:
+ *
+ * _opts_ can have the following keys:
+ * * *max_nesting*: The maximum depth of nesting allowed in the parsed data
+ * structures. Disable depth checking with :max_nesting => false|nil|0, it
+ * defaults to 19.
+ * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
+ * defiance of RFC 4627 to be parsed by the Parser. This option defaults to
+ * false.
+ * * *symbolize_names*: If set to true, returns symbols for the names
+ * (keys) in a JSON object. Otherwise strings are returned, which is also
+ * the default.
+ * * *create_additions*: If set to false, the Parser doesn't create
+ * additions even if a matchin class and create_id was found. This option
+ * defaults to true.
+ * * *object_class*: Defaults to Hash
+ * * *array_class*: Defaults to Array
+ */
+static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
+{
+ char *ptr;
+ long len;
+ VALUE source, opts;
+ GET_PARSER;
+ rb_scan_args(argc, argv, "11", &source, &opts);
+ source = convert_encoding(StringValue(source));
+ ptr = RSTRING_PTR(source);
+ len = RSTRING_LEN(source);
+ if (!NIL_P(opts)) {
+ opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
+ if (NIL_P(opts)) {
+ rb_raise(rb_eArgError, "opts needs to be like a hash");
+ } else {
+ VALUE tmp = ID2SYM(i_max_nesting);
+ if (option_given_p(opts, tmp)) {
+ VALUE max_nesting = rb_hash_aref(opts, tmp);
+ if (RTEST(max_nesting)) {
+ Check_Type(max_nesting, T_FIXNUM);
+ json->max_nesting = FIX2INT(max_nesting);
+ } else {
+ json->max_nesting = 0;
+ }
+ } else {
+ json->max_nesting = 19;
+ }
+ tmp = ID2SYM(i_allow_nan);
+ if (option_given_p(opts, tmp)) {
+ json->allow_nan = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0;
+ } else {
+ json->allow_nan = 0;
+ }
+ tmp = ID2SYM(i_symbolize_names);
+ if (option_given_p(opts, tmp)) {
+ json->symbolize_names = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0;
+ } else {
+ json->symbolize_names = 0;
+ }
+ tmp = ID2SYM(i_create_additions);
+ if (option_given_p(opts, tmp)) {
+ json->create_additions = RTEST(rb_hash_aref(opts, tmp));
+ } else {
+ json->create_additions = 1;
+ }
+ tmp = ID2SYM(i_create_id);
+ if (option_given_p(opts, tmp)) {
+ json->create_id = rb_hash_aref(opts, tmp);
+ } else {
+ json->create_id = rb_funcall(mJSON, i_create_id, 0);
+ }
+ tmp = ID2SYM(i_object_class);
+ if (option_given_p(opts, tmp)) {
+ json->object_class = rb_hash_aref(opts, tmp);
+ } else {
+ json->object_class = Qnil;
+ }
+ tmp = ID2SYM(i_array_class);
+ if (option_given_p(opts, tmp)) {
+ json->array_class = rb_hash_aref(opts, tmp);
+ } else {
+ json->array_class = Qnil;
+ }
+ tmp = ID2SYM(i_match_string);
+ if (option_given_p(opts, tmp)) {
+ VALUE match_string = rb_hash_aref(opts, tmp);
+ json->match_string = RTEST(match_string) ? match_string : Qnil;
+ } else {
+ json->match_string = Qnil;
+ }
+ }
+ } else {
+ json->max_nesting = 19;
+ json->allow_nan = 0;
+ json->create_additions = 1;
+ json->create_id = rb_funcall(mJSON, i_create_id, 0);
+ json->object_class = Qnil;
+ json->array_class = Qnil;
+ }
+ json->current_nesting = 0;
+ json->len = len;
+ json->source = ptr;
+ json->Vsource = source;
+ return self;
+}
+
+/*
+ * call-seq: parse()
+ *
+ * Parses the current JSON text _source_ and returns the complete data
+ * structure as a result.
+ */
+static VALUE cParser_parse(VALUE self)
+{
+ char *p, *pe;
+ int cs = EVIL;
+ VALUE result = Qnil;
+ GET_PARSER;
+
+
+#line 1733 "parser.c"
+ {
+ cs = JSON_start;
+ }
+
+#line 730 "parser.rl"
+ p = json->source;
+ pe = p + json->len;
+
+#line 1742 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+ switch( (*p) ) {
+ case 13: goto st1;
+ case 32: goto st1;
+ case 47: goto st2;
+ case 91: goto tr3;
+ case 123: goto tr4;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st1;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ switch( (*p) ) {
+ case 42: goto st3;
+ case 47: goto st5;
+ }
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( (*p) == 42 )
+ goto st4;
+ goto st3;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ switch( (*p) ) {
+ case 42: goto st4;
+ case 47: goto st1;
+ }
+ goto st3;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 10 )
+ goto st1;
+ goto st5;
+tr3:
+#line 531 "parser.rl"
+ {
+ char *np;
+ json->current_nesting = 1;
+ np = JSON_parse_array(json, p, pe, &result);
+ if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st10;
+tr4:
+#line 524 "parser.rl"
+ {
+ char *np;
+ json->current_nesting = 1;
+ np = JSON_parse_object(json, p, pe, &result);
+ if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st10;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+#line 1819 "parser.c"
+ switch( (*p) ) {
+ case 13: goto st10;
+ case 32: goto st10;
+ case 47: goto st6;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st10;
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ switch( (*p) ) {
+ case 42: goto st7;
+ case 47: goto st9;
+ }
+ goto st0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) == 42 )
+ goto st8;
+ goto st7;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ switch( (*p) ) {
+ case 42: goto st8;
+ case 47: goto st10;
+ }
+ goto st7;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ if ( (*p) == 10 )
+ goto st10;
+ goto st9;
+ }
+ _test_eof1: cs = 1; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 733 "parser.rl"
+
+ if (cs >= JSON_first_final && p == pe) {
+ return result;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ return Qnil;
+ }
+}
+
+static JSON_Parser *JSON_allocate()
+{
+ JSON_Parser *json = ALLOC(JSON_Parser);
+ MEMZERO(json, JSON_Parser, 1);
+ return json;
+}
+
+static void JSON_mark(JSON_Parser *json)
+{
+ rb_gc_mark_maybe(json->Vsource);
+ rb_gc_mark_maybe(json->create_id);
+ rb_gc_mark_maybe(json->object_class);
+ rb_gc_mark_maybe(json->array_class);
+ rb_gc_mark_maybe(json->match_string);
+}
+
+static void JSON_free(JSON_Parser *json)
+{
+ ruby_xfree(json);
+}
+
+static VALUE cJSON_parser_s_allocate(VALUE klass)
+{
+ JSON_Parser *json = JSON_allocate();
+ return Data_Wrap_Struct(klass, JSON_mark, JSON_free, json);
+}
+
+/*
+ * call-seq: source()
+ *
+ * Returns a copy of the current _source_ string, that was used to construct
+ * this Parser.
+ */
+static VALUE cParser_source(VALUE self)
+{
+ GET_PARSER;
+ return rb_str_dup(json->Vsource);
+}
+
+void Init_parser()
+{
+ rb_require("json/common");
+ mJSON = rb_define_module("JSON");
+ mExt = rb_define_module_under(mJSON, "Ext");
+ cParser = rb_define_class_under(mExt, "Parser", rb_cObject);
+ eParserError = rb_path2class("JSON::ParserError");
+ eNestingError = rb_path2class("JSON::NestingError");
+ rb_define_alloc_func(cParser, cJSON_parser_s_allocate);
+ rb_define_method(cParser, "initialize", cParser_initialize, -1);
+ rb_define_method(cParser, "parse", cParser_parse, 0);
+ rb_define_method(cParser, "source", cParser_source, 0);
+
+ CNaN = rb_const_get(mJSON, rb_intern("NaN"));
+ CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
+ CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity"));
+
+ i_json_creatable_p = rb_intern("json_creatable?");
+ i_json_create = rb_intern("json_create");
+ i_create_id = rb_intern("create_id");
+ i_create_additions = rb_intern("create_additions");
+ i_chr = rb_intern("chr");
+ i_max_nesting = rb_intern("max_nesting");
+ i_allow_nan = rb_intern("allow_nan");
+ i_symbolize_names = rb_intern("symbolize_names");
+ i_object_class = rb_intern("object_class");
+ i_array_class = rb_intern("array_class");
+ i_match = rb_intern("match");
+ i_match_string = rb_intern("match_string");
+ i_key_p = rb_intern("key?");
+ i_deep_const_get = rb_intern("deep_const_get");
+#ifdef HAVE_RUBY_ENCODING_H
+ CEncoding_UTF_8 = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-8"));
+ CEncoding_UTF_16BE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-16be"));
+ CEncoding_UTF_16LE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-16le"));
+ CEncoding_UTF_32BE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-32be"));
+ CEncoding_UTF_32LE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-32le"));
+ CEncoding_ASCII_8BIT = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("ascii-8bit"));
+ i_encoding = rb_intern("encoding");
+ i_encode = rb_intern("encode");
+ i_encode_bang = rb_intern("encode!");
+ i_force_encoding = rb_intern("force_encoding");
+#else
+ i_iconv = rb_intern("iconv");
+#endif
+}
diff --git a/vendor/gems/json-1.5.1/ext/json/ext/parser/parser.h b/vendor/gems/json-1.5.1/ext/json/ext/parser/parser.h
new file mode 100644
index 000000000..ed48035de
--- /dev/null
+++ b/vendor/gems/json-1.5.1/ext/json/ext/parser/parser.h
@@ -0,0 +1,78 @@
+#ifndef _PARSER_H_
+#define _PARSER_H_
+
+#include "ruby.h"
+
+#if HAVE_RE_H
+#include "re.h"
+#endif
+
+#ifdef HAVE_RUBY_ENCODING_H
+#include "ruby/encoding.h"
+#define FORCE_UTF8(obj) rb_enc_associate((obj), rb_utf8_encoding())
+#else
+#define FORCE_UTF8(obj)
+#endif
+#ifdef HAVE_RUBY_ST_H
+#include "ruby/st.h"
+#else
+#include "st.h"
+#endif
+
+#define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key))
+
+/* unicode */
+
+typedef unsigned long UTF32; /* at least 32 bits */
+typedef unsigned short UTF16; /* at least 16 bits */
+typedef unsigned char UTF8; /* typically 8 bits */
+
+#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
+#define UNI_SUR_HIGH_START (UTF32)0xD800
+#define UNI_SUR_HIGH_END (UTF32)0xDBFF
+#define UNI_SUR_LOW_START (UTF32)0xDC00
+#define UNI_SUR_LOW_END (UTF32)0xDFFF
+
+typedef struct JSON_ParserStruct {
+ VALUE Vsource;
+ char *source;
+ long len;
+ char *memo;
+ VALUE create_id;
+ int max_nesting;
+ int current_nesting;
+ int allow_nan;
+ int parsing_name;
+ int symbolize_names;
+ VALUE object_class;
+ VALUE array_class;
+ int create_additions;
+ VALUE match_string;
+} JSON_Parser;
+
+#define GET_PARSER \
+ JSON_Parser *json; \
+ Data_Get_Struct(self, JSON_Parser, json)
+
+#define MinusInfinity "-Infinity"
+#define EVIL 0x666
+
+static UTF32 unescape_unicode(const unsigned char *p);
+static int convert_UTF32_to_UTF8(char *buf, UTF32 ch);
+static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd);
+static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static VALUE convert_encoding(VALUE source);
+static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self);
+static VALUE cParser_parse(VALUE self);
+static JSON_Parser *JSON_allocate();
+static void JSON_mark(JSON_Parser *json);
+static void JSON_free(JSON_Parser *json);
+static VALUE cJSON_parser_s_allocate(VALUE klass);
+static VALUE cParser_source(VALUE self);
+
+#endif
diff --git a/vendor/gems/json-1.5.1/ext/json/ext/parser/parser.rl b/vendor/gems/json-1.5.1/ext/json/ext/parser/parser.rl
new file mode 100644
index 000000000..586269877
--- /dev/null
+++ b/vendor/gems/json-1.5.1/ext/json/ext/parser/parser.rl
@@ -0,0 +1,826 @@
+#include "parser.h"
+
+/* unicode */
+
+static const char digit_values[256] = {
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1,
+ -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1
+};
+
+static UTF32 unescape_unicode(const unsigned char *p)
+{
+ char b;
+ UTF32 result = 0;
+ b = digit_values[p[0]];
+ if (b < 0) return UNI_REPLACEMENT_CHAR;
+ result = (result << 4) | b;
+ b = digit_values[p[1]];
+ result = (result << 4) | b;
+ if (b < 0) return UNI_REPLACEMENT_CHAR;
+ b = digit_values[p[2]];
+ result = (result << 4) | b;
+ if (b < 0) return UNI_REPLACEMENT_CHAR;
+ b = digit_values[p[3]];
+ result = (result << 4) | b;
+ if (b < 0) return UNI_REPLACEMENT_CHAR;
+ return result;
+}
+
+static int convert_UTF32_to_UTF8(char *buf, UTF32 ch)
+{
+ int len = 1;
+ if (ch <= 0x7F) {
+ buf[0] = (char) ch;
+ } else if (ch <= 0x07FF) {
+ buf[0] = (char) ((ch >> 6) | 0xC0);
+ buf[1] = (char) ((ch & 0x3F) | 0x80);
+ len++;
+ } else if (ch <= 0xFFFF) {
+ buf[0] = (char) ((ch >> 12) | 0xE0);
+ buf[1] = (char) (((ch >> 6) & 0x3F) | 0x80);
+ buf[2] = (char) ((ch & 0x3F) | 0x80);
+ len += 2;
+ } else if (ch <= 0x1fffff) {
+ buf[0] =(char) ((ch >> 18) | 0xF0);
+ buf[1] =(char) (((ch >> 12) & 0x3F) | 0x80);
+ buf[2] =(char) (((ch >> 6) & 0x3F) | 0x80);
+ buf[3] =(char) ((ch & 0x3F) | 0x80);
+ len += 3;
+ } else {
+ buf[0] = '?';
+ }
+ return len;
+}
+
+#ifdef HAVE_RUBY_ENCODING_H
+static VALUE CEncoding_ASCII_8BIT, CEncoding_UTF_8, CEncoding_UTF_16BE,
+ CEncoding_UTF_16LE, CEncoding_UTF_32BE, CEncoding_UTF_32LE;
+static ID i_encoding, i_encode, i_encode_bang, i_force_encoding;
+#else
+static ID i_iconv;
+#endif
+
+static VALUE mJSON, mExt, cParser, eParserError, eNestingError;
+static VALUE CNaN, CInfinity, CMinusInfinity;
+
+static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
+ i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, i_object_class,
+ i_array_class, i_key_p, i_deep_const_get, i_match, i_match_string;
+
+%%{
+ machine JSON_common;
+
+ cr = '\n';
+ cr_neg = [^\n];
+ ws = [ \t\r\n];
+ c_comment = '/*' ( any* - (any* '*/' any* ) ) '*/';
+ cpp_comment = '//' cr_neg* cr;
+ comment = c_comment | cpp_comment;
+ ignore = ws | comment;
+ name_separator = ':';
+ value_separator = ',';
+ Vnull = 'null';
+ Vfalse = 'false';
+ Vtrue = 'true';
+ VNaN = 'NaN';
+ VInfinity = 'Infinity';
+ VMinusInfinity = '-Infinity';
+ begin_value = [nft"\-[{NI] | digit;
+ begin_object = '{';
+ end_object = '}';
+ begin_array = '[';
+ end_array = ']';
+ begin_string = '"';
+ begin_name = begin_string;
+ begin_number = digit | '-';
+}%%
+
+%%{
+ machine JSON_object;
+ include JSON_common;
+
+ write data;
+
+ action parse_value {
+ VALUE v = Qnil;
+ char *np = JSON_parse_value(json, fpc, pe, &v);
+ if (np == NULL) {
+ fhold; fbreak;
+ } else {
+ rb_hash_aset(*result, last_name, v);
+ fexec np;
+ }
+ }
+
+ action parse_name {
+ char *np;
+ json->parsing_name = 1;
+ np = JSON_parse_string(json, fpc, pe, &last_name);
+ json->parsing_name = 0;
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ action exit { fhold; fbreak; }
+
+ a_pair = ignore* begin_name >parse_name
+ ignore* name_separator ignore*
+ begin_value >parse_value;
+
+ main := begin_object
+ (a_pair (ignore* value_separator a_pair)*)?
+ ignore* end_object @exit;
+}%%
+
+static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+ VALUE last_name = Qnil;
+ VALUE object_class = json->object_class;
+
+ if (json->max_nesting && json->current_nesting > json->max_nesting) {
+ rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
+ }
+
+ *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class);
+
+ %% write init;
+ %% write exec;
+
+ if (cs >= JSON_object_first_final) {
+ if (json->create_additions) {
+ VALUE klassname = rb_hash_aref(*result, json->create_id);
+ if (!NIL_P(klassname)) {
+ VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname);
+ if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) {
+ *result = rb_funcall(klass, i_json_create, 1, *result);
+ }
+ }
+ }
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+%%{
+ machine JSON_value;
+ include JSON_common;
+
+ write data;
+
+ action parse_null {
+ *result = Qnil;
+ }
+ action parse_false {
+ *result = Qfalse;
+ }
+ action parse_true {
+ *result = Qtrue;
+ }
+ action parse_nan {
+ if (json->allow_nan) {
+ *result = CNaN;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
+ }
+ }
+ action parse_infinity {
+ if (json->allow_nan) {
+ *result = CInfinity;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
+ }
+ }
+ action parse_string {
+ char *np = JSON_parse_string(json, fpc, pe, result);
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ action parse_number {
+ char *np;
+ if(pe > fpc + 9 && !strncmp(MinusInfinity, fpc, 9)) {
+ if (json->allow_nan) {
+ *result = CMinusInfinity;
+ fexec p + 10;
+ fhold; fbreak;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ }
+ }
+ np = JSON_parse_float(json, fpc, pe, result);
+ if (np != NULL) fexec np;
+ np = JSON_parse_integer(json, fpc, pe, result);
+ if (np != NULL) fexec np;
+ fhold; fbreak;
+ }
+
+ action parse_array {
+ char *np;
+ json->current_nesting++;
+ np = JSON_parse_array(json, fpc, pe, result);
+ json->current_nesting--;
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ action parse_object {
+ char *np;
+ json->current_nesting++;
+ np = JSON_parse_object(json, fpc, pe, result);
+ json->current_nesting--;
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ action exit { fhold; fbreak; }
+
+main := (
+ Vnull @parse_null |
+ Vfalse @parse_false |
+ Vtrue @parse_true |
+ VNaN @parse_nan |
+ VInfinity @parse_infinity |
+ begin_number >parse_number |
+ begin_string >parse_string |
+ begin_array >parse_array |
+ begin_object >parse_object
+ ) %*exit;
+}%%
+
+static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+ %% write init;
+ %% write exec;
+
+ if (cs >= JSON_value_first_final) {
+ return p;
+ } else {
+ return NULL;
+ }
+}
+
+%%{
+ machine JSON_integer;
+
+ write data;
+
+ action exit { fhold; fbreak; }
+
+ main := '-'? ('0' | [1-9][0-9]*) (^[0-9] @exit);
+}%%
+
+static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+ %% write init;
+ json->memo = p;
+ %% write exec;
+
+ if (cs >= JSON_integer_first_final) {
+ long len = p - json->memo;
+ *result = rb_Integer(rb_str_new(json->memo, len));
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+%%{
+ machine JSON_float;
+ include JSON_common;
+
+ write data;
+
+ action exit { fhold; fbreak; }
+
+ main := '-'? (
+ (('0' | [1-9][0-9]*) '.' [0-9]+ ([Ee] [+\-]?[0-9]+)?)
+ | (('0' | [1-9][0-9]*) ([Ee] [+\-]?[0-9]+))
+ ) (^[0-9Ee.\-] @exit );
+}%%
+
+static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+ %% write init;
+ json->memo = p;
+ %% write exec;
+
+ if (cs >= JSON_float_first_final) {
+ long len = p - json->memo;
+ *result = rb_Float(rb_str_new(json->memo, len));
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+%%{
+ machine JSON_array;
+ include JSON_common;
+
+ write data;
+
+ action parse_value {
+ VALUE v = Qnil;
+ char *np = JSON_parse_value(json, fpc, pe, &v);
+ if (np == NULL) {
+ fhold; fbreak;
+ } else {
+ rb_ary_push(*result, v);
+ fexec np;
+ }
+ }
+
+ action exit { fhold; fbreak; }
+
+ next_element = value_separator ignore* begin_value >parse_value;
+
+ main := begin_array ignore*
+ ((begin_value >parse_value ignore*)
+ (ignore* next_element ignore*)*)?
+ end_array @exit;
+}%%
+
+static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+ VALUE array_class = json->array_class;
+
+ if (json->max_nesting && json->current_nesting > json->max_nesting) {
+ rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
+ }
+ *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
+
+ %% write init;
+ %% write exec;
+
+ if(cs >= JSON_array_first_final) {
+ return p + 1;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ return NULL;
+ }
+}
+
+static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
+{
+ char *p = string, *pe = string, *unescape;
+ int unescape_len;
+
+ while (pe < stringEnd) {
+ if (*pe == '\\') {
+ unescape = (char *) "?";
+ unescape_len = 1;
+ if (pe > p) rb_str_buf_cat(result, p, pe - p);
+ switch (*++pe) {
+ case 'n':
+ unescape = (char *) "\n";
+ break;
+ case 'r':
+ unescape = (char *) "\r";
+ break;
+ case 't':
+ unescape = (char *) "\t";
+ break;
+ case '"':
+ unescape = (char *) "\"";
+ break;
+ case '\\':
+ unescape = (char *) "\\";
+ break;
+ case 'b':
+ unescape = (char *) "\b";
+ break;
+ case 'f':
+ unescape = (char *) "\f";
+ break;
+ case 'u':
+ if (pe > stringEnd - 4) {
+ return Qnil;
+ } else {
+ char buf[4];
+ UTF32 ch = unescape_unicode((unsigned char *) ++pe);
+ pe += 3;
+ if (UNI_SUR_HIGH_START == (ch & 0xFC00)) {
+ pe++;
+ if (pe > stringEnd - 6) return Qnil;
+ if (pe[0] == '\\' && pe[1] == 'u') {
+ UTF32 sur = unescape_unicode((unsigned char *) pe + 2);
+ ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16)
+ | (sur & 0x3FF));
+ pe += 5;
+ } else {
+ unescape = (char *) "?";
+ break;
+ }
+ }
+ unescape_len = convert_UTF32_to_UTF8(buf, ch);
+ unescape = buf;
+ }
+ break;
+ default:
+ p = pe;
+ continue;
+ }
+ rb_str_buf_cat(result, unescape, unescape_len);
+ p = ++pe;
+ } else {
+ pe++;
+ }
+ }
+ rb_str_buf_cat(result, p, pe - p);
+ return result;
+}
+
+%%{
+ machine JSON_string;
+ include JSON_common;
+
+ write data;
+
+ action parse_string {
+ *result = json_string_unescape(*result, json->memo + 1, p);
+ if (NIL_P(*result)) {
+ fhold;
+ fbreak;
+ } else {
+ FORCE_UTF8(*result);
+ fexec p + 1;
+ }
+ }
+
+ action exit { fhold; fbreak; }
+
+ main := '"' ((^(["\\] | 0..0x1f) | '\\'["\\/bfnrt] | '\\u'[0-9a-fA-F]{4} | '\\'^(["\\/bfnrtu]|0..0x1f))* %parse_string) '"' @exit;
+}%%
+
+static int
+match_i(VALUE regexp, VALUE klass, VALUE memo)
+{
+ if (regexp == Qundef) return ST_STOP;
+ if (RTEST(rb_funcall(klass, i_json_creatable_p, 0)) &&
+ RTEST(rb_funcall(regexp, i_match, 1, rb_ary_entry(memo, 0)))) {
+ rb_ary_push(memo, klass);
+ return ST_STOP;
+ }
+ return ST_CONTINUE;
+}
+
+static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+ VALUE match_string;
+
+ *result = rb_str_buf_new(0);
+ %% write init;
+ json->memo = p;
+ %% write exec;
+
+ if (json->create_additions && RTEST(match_string = json->match_string)) {
+ VALUE klass;
+ VALUE memo = rb_ary_new2(2);
+ rb_ary_push(memo, *result);
+ rb_hash_foreach(match_string, match_i, memo);
+ klass = rb_ary_entry(memo, 1);
+ if (RTEST(klass)) {
+ *result = rb_funcall(klass, i_json_create, 1, *result);
+ }
+ }
+
+ if (json->symbolize_names && json->parsing_name) {
+ *result = rb_str_intern(*result);
+ }
+ if (cs >= JSON_string_first_final) {
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+%%{
+ machine JSON;
+
+ write data;
+
+ include JSON_common;
+
+ action parse_object {
+ char *np;
+ json->current_nesting = 1;
+ np = JSON_parse_object(json, fpc, pe, &result);
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ action parse_array {
+ char *np;
+ json->current_nesting = 1;
+ np = JSON_parse_array(json, fpc, pe, &result);
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ main := ignore* (
+ begin_object >parse_object |
+ begin_array >parse_array
+ ) ignore*;
+}%%
+
+/*
+ * Document-class: JSON::Ext::Parser
+ *
+ * This is the JSON parser implemented as a C extension. It can be configured
+ * to be used by setting
+ *
+ * JSON.parser = JSON::Ext::Parser
+ *
+ * with the method parser= in JSON.
+ *
+ */
+
+static VALUE convert_encoding(VALUE source)
+{
+ char *ptr = RSTRING_PTR(source);
+ long len = RSTRING_LEN(source);
+ if (len < 2) {
+ rb_raise(eParserError, "A JSON text must at least contain two octets!");
+ }
+#ifdef HAVE_RUBY_ENCODING_H
+ {
+ VALUE encoding = rb_funcall(source, i_encoding, 0);
+ if (encoding == CEncoding_ASCII_8BIT) {
+ if (len >= 4 && ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
+ source = rb_str_dup(source);
+ rb_funcall(source, i_force_encoding, 1, CEncoding_UTF_32BE);
+ source = rb_funcall(source, i_encode_bang, 1, CEncoding_UTF_8);
+ } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
+ source = rb_str_dup(source);
+ rb_funcall(source, i_force_encoding, 1, CEncoding_UTF_16BE);
+ source = rb_funcall(source, i_encode_bang, 1, CEncoding_UTF_8);
+ } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
+ source = rb_str_dup(source);
+ rb_funcall(source, i_force_encoding, 1, CEncoding_UTF_32LE);
+ source = rb_funcall(source, i_encode_bang, 1, CEncoding_UTF_8);
+ } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
+ source = rb_str_dup(source);
+ rb_funcall(source, i_force_encoding, 1, CEncoding_UTF_16LE);
+ source = rb_funcall(source, i_encode_bang, 1, CEncoding_UTF_8);
+ } else {
+ FORCE_UTF8(source);
+ }
+ } else {
+ source = rb_funcall(source, i_encode, 1, CEncoding_UTF_8);
+ }
+ }
+#else
+ if (len >= 4 && ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
+ source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-32be"), source);
+ } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
+ source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-16be"), source);
+ } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
+ source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-32le"), source);
+ } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
+ source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-16le"), source);
+ }
+#endif
+ return source;
+}
+
+/*
+ * call-seq: new(source, opts => {})
+ *
+ * Creates a new JSON::Ext::Parser instance for the string _source_.
+ *
+ * Creates a new JSON::Ext::Parser instance for the string _source_.
+ *
+ * It will be configured by the _opts_ hash. _opts_ can have the following
+ * keys:
+ *
+ * _opts_ can have the following keys:
+ * * *max_nesting*: The maximum depth of nesting allowed in the parsed data
+ * structures. Disable depth checking with :max_nesting => false|nil|0, it
+ * defaults to 19.
+ * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
+ * defiance of RFC 4627 to be parsed by the Parser. This option defaults to
+ * false.
+ * * *symbolize_names*: If set to true, returns symbols for the names
+ * (keys) in a JSON object. Otherwise strings are returned, which is also
+ * the default.
+ * * *create_additions*: If set to false, the Parser doesn't create
+ * additions even if a matchin class and create_id was found. This option
+ * defaults to true.
+ * * *object_class*: Defaults to Hash
+ * * *array_class*: Defaults to Array
+ */
+static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
+{
+ char *ptr;
+ long len;
+ VALUE source, opts;
+ GET_PARSER;
+ rb_scan_args(argc, argv, "11", &source, &opts);
+ source = convert_encoding(StringValue(source));
+ ptr = RSTRING_PTR(source);
+ len = RSTRING_LEN(source);
+ if (!NIL_P(opts)) {
+ opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
+ if (NIL_P(opts)) {
+ rb_raise(rb_eArgError, "opts needs to be like a hash");
+ } else {
+ VALUE tmp = ID2SYM(i_max_nesting);
+ if (option_given_p(opts, tmp)) {
+ VALUE max_nesting = rb_hash_aref(opts, tmp);
+ if (RTEST(max_nesting)) {
+ Check_Type(max_nesting, T_FIXNUM);
+ json->max_nesting = FIX2INT(max_nesting);
+ } else {
+ json->max_nesting = 0;
+ }
+ } else {
+ json->max_nesting = 19;
+ }
+ tmp = ID2SYM(i_allow_nan);
+ if (option_given_p(opts, tmp)) {
+ json->allow_nan = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0;
+ } else {
+ json->allow_nan = 0;
+ }
+ tmp = ID2SYM(i_symbolize_names);
+ if (option_given_p(opts, tmp)) {
+ json->symbolize_names = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0;
+ } else {
+ json->symbolize_names = 0;
+ }
+ tmp = ID2SYM(i_create_additions);
+ if (option_given_p(opts, tmp)) {
+ json->create_additions = RTEST(rb_hash_aref(opts, tmp));
+ } else {
+ json->create_additions = 1;
+ }
+ tmp = ID2SYM(i_create_id);
+ if (option_given_p(opts, tmp)) {
+ json->create_id = rb_hash_aref(opts, tmp);
+ } else {
+ json->create_id = rb_funcall(mJSON, i_create_id, 0);
+ }
+ tmp = ID2SYM(i_object_class);
+ if (option_given_p(opts, tmp)) {
+ json->object_class = rb_hash_aref(opts, tmp);
+ } else {
+ json->object_class = Qnil;
+ }
+ tmp = ID2SYM(i_array_class);
+ if (option_given_p(opts, tmp)) {
+ json->array_class = rb_hash_aref(opts, tmp);
+ } else {
+ json->array_class = Qnil;
+ }
+ tmp = ID2SYM(i_match_string);
+ if (option_given_p(opts, tmp)) {
+ VALUE match_string = rb_hash_aref(opts, tmp);
+ json->match_string = RTEST(match_string) ? match_string : Qnil;
+ } else {
+ json->match_string = Qnil;
+ }
+ }
+ } else {
+ json->max_nesting = 19;
+ json->allow_nan = 0;
+ json->create_additions = 1;
+ json->create_id = rb_funcall(mJSON, i_create_id, 0);
+ json->object_class = Qnil;
+ json->array_class = Qnil;
+ }
+ json->current_nesting = 0;
+ json->len = len;
+ json->source = ptr;
+ json->Vsource = source;
+ return self;
+}
+
+/*
+ * call-seq: parse()
+ *
+ * Parses the current JSON text _source_ and returns the complete data
+ * structure as a result.
+ */
+static VALUE cParser_parse(VALUE self)
+{
+ char *p, *pe;
+ int cs = EVIL;
+ VALUE result = Qnil;
+ GET_PARSER;
+
+ %% write init;
+ p = json->source;
+ pe = p + json->len;
+ %% write exec;
+
+ if (cs >= JSON_first_final && p == pe) {
+ return result;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ return Qnil;
+ }
+}
+
+static JSON_Parser *JSON_allocate()
+{
+ JSON_Parser *json = ALLOC(JSON_Parser);
+ MEMZERO(json, JSON_Parser, 1);
+ return json;
+}
+
+static void JSON_mark(JSON_Parser *json)
+{
+ rb_gc_mark_maybe(json->Vsource);
+ rb_gc_mark_maybe(json->create_id);
+ rb_gc_mark_maybe(json->object_class);
+ rb_gc_mark_maybe(json->array_class);
+ rb_gc_mark_maybe(json->match_string);
+}
+
+static void JSON_free(JSON_Parser *json)
+{
+ ruby_xfree(json);
+}
+
+static VALUE cJSON_parser_s_allocate(VALUE klass)
+{
+ JSON_Parser *json = JSON_allocate();
+ return Data_Wrap_Struct(klass, JSON_mark, JSON_free, json);
+}
+
+/*
+ * call-seq: source()
+ *
+ * Returns a copy of the current _source_ string, that was used to construct
+ * this Parser.
+ */
+static VALUE cParser_source(VALUE self)
+{
+ GET_PARSER;
+ return rb_str_dup(json->Vsource);
+}
+
+void Init_parser()
+{
+ rb_require("json/common");
+ mJSON = rb_define_module("JSON");
+ mExt = rb_define_module_under(mJSON, "Ext");
+ cParser = rb_define_class_under(mExt, "Parser", rb_cObject);
+ eParserError = rb_path2class("JSON::ParserError");
+ eNestingError = rb_path2class("JSON::NestingError");
+ rb_define_alloc_func(cParser, cJSON_parser_s_allocate);
+ rb_define_method(cParser, "initialize", cParser_initialize, -1);
+ rb_define_method(cParser, "parse", cParser_parse, 0);
+ rb_define_method(cParser, "source", cParser_source, 0);
+
+ CNaN = rb_const_get(mJSON, rb_intern("NaN"));
+ CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
+ CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity"));
+
+ i_json_creatable_p = rb_intern("json_creatable?");
+ i_json_create = rb_intern("json_create");
+ i_create_id = rb_intern("create_id");
+ i_create_additions = rb_intern("create_additions");
+ i_chr = rb_intern("chr");
+ i_max_nesting = rb_intern("max_nesting");
+ i_allow_nan = rb_intern("allow_nan");
+ i_symbolize_names = rb_intern("symbolize_names");
+ i_object_class = rb_intern("object_class");
+ i_array_class = rb_intern("array_class");
+ i_match = rb_intern("match");
+ i_match_string = rb_intern("match_string");
+ i_key_p = rb_intern("key?");
+ i_deep_const_get = rb_intern("deep_const_get");
+#ifdef HAVE_RUBY_ENCODING_H
+ CEncoding_UTF_8 = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-8"));
+ CEncoding_UTF_16BE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-16be"));
+ CEncoding_UTF_16LE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-16le"));
+ CEncoding_UTF_32BE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-32be"));
+ CEncoding_UTF_32LE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-32le"));
+ CEncoding_ASCII_8BIT = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("ascii-8bit"));
+ i_encoding = rb_intern("encoding");
+ i_encode = rb_intern("encode");
+ i_encode_bang = rb_intern("encode!");
+ i_force_encoding = rb_intern("force_encoding");
+#else
+ i_iconv = rb_intern("iconv");
+#endif
+}
diff --git a/vendor/gems/json-1.5.1/install.rb b/vendor/gems/json-1.5.1/install.rb
new file mode 100755
index 000000000..adf77a0d0
--- /dev/null
+++ b/vendor/gems/json-1.5.1/install.rb
@@ -0,0 +1,26 @@
+#!/usr/bin/env ruby
+
+require 'rbconfig'
+require 'fileutils'
+include FileUtils::Verbose
+
+include Config
+
+bindir = CONFIG["bindir"]
+cd 'bin' do
+ filename = 'edit_json.rb'
+ #install(filename, bindir)
+end
+sitelibdir = CONFIG["sitelibdir"]
+cd 'lib' do
+ install('json.rb', sitelibdir)
+ mkdir_p File.join(sitelibdir, 'json')
+ for file in Dir['json/**/*.{rb,xpm}']
+ d = File.join(sitelibdir, file)
+ mkdir_p File.dirname(d)
+ install(file, d)
+ end
+ install(File.join('json', 'editor.rb'), File.join(sitelibdir,'json'))
+ install(File.join('json', 'json.xpm'), File.join(sitelibdir,'json'))
+end
+warn " *** Installed PURE ruby library."
diff --git a/vendor/gems/json-1.5.1/java/lib/bytelist-1.0.6.jar b/vendor/gems/json-1.5.1/java/lib/bytelist-1.0.6.jar
new file mode 100644
index 000000000..7918e7ccb
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/lib/bytelist-1.0.6.jar
Binary files differ
diff --git a/vendor/gems/json-1.5.1/java/lib/jcodings.jar b/vendor/gems/json-1.5.1/java/lib/jcodings.jar
new file mode 100644
index 000000000..e33fc99c0
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/lib/jcodings.jar
Binary files differ
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/ByteListTranscoder.java b/vendor/gems/json-1.5.1/java/src/json/ext/ByteListTranscoder.java
new file mode 100644
index 000000000..ed9e54b71
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/ByteListTranscoder.java
@@ -0,0 +1,167 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import org.jruby.exceptions.RaiseException;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.util.ByteList;
+
+/**
+ * A class specialized in transcoding a certain String format into another,
+ * using UTF-8 ByteLists as both input and output.
+ */
+abstract class ByteListTranscoder {
+ protected final ThreadContext context;
+
+ protected ByteList src;
+ protected int srcEnd;
+ /** Position where the last read character started */
+ protected int charStart;
+ /** Position of the next character to read */
+ protected int pos;
+
+ private ByteList out;
+ /**
+ * When a character that can be copied straight into the output is found,
+ * its index is stored on this variable, and copying is delayed until
+ * the sequence of characters that can be copied ends.
+ *
+ * <p>The variable stores -1 when not in a plain sequence.
+ */
+ private int quoteStart = -1;
+
+ protected ByteListTranscoder(ThreadContext context) {
+ this.context = context;
+ }
+
+ protected void init(ByteList src, ByteList out) {
+ this.init(src, 0, src.length(), out);
+ }
+
+ protected void init(ByteList src, int start, int end, ByteList out) {
+ this.src = src;
+ this.pos = start;
+ this.charStart = start;
+ this.srcEnd = end;
+ this.out = out;
+ }
+
+ /**
+ * Returns whether there are any characters left to be read.
+ */
+ protected boolean hasNext() {
+ return pos < srcEnd;
+ }
+
+ /**
+ * Returns the next character in the buffer.
+ */
+ private char next() {
+ return src.charAt(pos++);
+ }
+
+ /**
+ * Reads an UTF-8 character from the input and returns its code point,
+ * while advancing the input position.
+ *
+ * <p>Raises an {@link #invalidUtf8()} exception if an invalid byte
+ * is found.
+ */
+ protected int readUtf8Char() {
+ charStart = pos;
+ char head = next();
+ if (head <= 0x7f) { // 0b0xxxxxxx (ASCII)
+ return head;
+ }
+ if (head <= 0xbf) { // 0b10xxxxxx
+ throw invalidUtf8(); // tail byte with no head
+ }
+ if (head <= 0xdf) { // 0b110xxxxx
+ ensureMin(1);
+ int cp = ((head & 0x1f) << 6)
+ | nextPart();
+ if (cp < 0x0080) throw invalidUtf8();
+ return cp;
+ }
+ if (head <= 0xef) { // 0b1110xxxx
+ ensureMin(2);
+ int cp = ((head & 0x0f) << 12)
+ | (nextPart() << 6)
+ | nextPart();
+ if (cp < 0x0800) throw invalidUtf8();
+ return cp;
+ }
+ if (head <= 0xf7) { // 0b11110xxx
+ ensureMin(3);
+ int cp = ((head & 0x07) << 18)
+ | (nextPart() << 12)
+ | (nextPart() << 6)
+ | nextPart();
+ if (!Character.isValidCodePoint(cp)) throw invalidUtf8();
+ return cp;
+ }
+ // 0b11111xxx?
+ throw invalidUtf8();
+ }
+
+ /**
+ * Throws a GeneratorError if the input list doesn't have at least this
+ * many bytes left.
+ */
+ protected void ensureMin(int n) {
+ if (pos + n > srcEnd) throw incompleteUtf8();
+ }
+
+ /**
+ * Reads the next byte of a multi-byte UTF-8 character and returns its
+ * contents (lower 6 bits).
+ *
+ * <p>Throws a GeneratorError if the byte is not a valid tail.
+ */
+ private int nextPart() {
+ char c = next();
+ // tail bytes must be 0b10xxxxxx
+ if ((c & 0xc0) != 0x80) throw invalidUtf8();
+ return c & 0x3f;
+ }
+
+
+ protected void quoteStart() {
+ if (quoteStart == -1) quoteStart = charStart;
+ }
+
+ /**
+ * When in a sequence of characters that can be copied directly,
+ * interrupts the sequence and copies it to the output buffer.
+ *
+ * @param endPos The offset until which the direct character quoting should
+ * occur. You may pass {@link #pos} to quote until the most
+ * recently read character, or {@link #charStart} to quote
+ * until the character before it.
+ */
+ protected void quoteStop(int endPos) {
+ if (quoteStart != -1) {
+ out.append(src, quoteStart, endPos - quoteStart);
+ quoteStart = -1;
+ }
+ }
+
+ protected void append(int b) {
+ out.append(b);
+ }
+
+ protected void append(byte[] origin, int start, int length) {
+ out.append(origin, start, length);
+ }
+
+
+ protected abstract RaiseException invalidUtf8();
+
+ protected RaiseException incompleteUtf8() {
+ return invalidUtf8();
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/Generator.java b/vendor/gems/json-1.5.1/java/src/json/ext/Generator.java
new file mode 100644
index 000000000..230d68f68
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/Generator.java
@@ -0,0 +1,441 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import org.jruby.Ruby;
+import org.jruby.RubyArray;
+import org.jruby.RubyBignum;
+import org.jruby.RubyBoolean;
+import org.jruby.RubyClass;
+import org.jruby.RubyFixnum;
+import org.jruby.RubyFloat;
+import org.jruby.RubyHash;
+import org.jruby.RubyNumeric;
+import org.jruby.RubyString;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.util.ByteList;
+
+public final class Generator {
+ private Generator() {
+ throw new RuntimeException();
+ }
+
+ /**
+ * Encodes the given object as a JSON string, using the given handler.
+ */
+ static <T extends IRubyObject> RubyString
+ generateJson(ThreadContext context, T object,
+ Handler<? super T> handler, IRubyObject[] args) {
+ Session session = new Session(context, args.length > 0 ? args[0]
+ : null);
+ return session.infect(handler.generateNew(session, object));
+ }
+
+ /**
+ * Encodes the given object as a JSON string, detecting the appropriate handler
+ * for the given object.
+ */
+ static <T extends IRubyObject> RubyString
+ generateJson(ThreadContext context, T object, IRubyObject[] args) {
+ Handler<? super T> handler = getHandlerFor(context.getRuntime(), object);
+ return generateJson(context, object, handler, args);
+ }
+
+ /**
+ * Encodes the given object as a JSON string, using the appropriate
+ * handler if one is found or calling #to_json if not.
+ */
+ public static <T extends IRubyObject> RubyString
+ generateJson(ThreadContext context, T object,
+ GeneratorState config) {
+ Session session = new Session(context, config);
+ Handler<? super T> handler = getHandlerFor(context.getRuntime(), object);
+ return handler.generateNew(session, object);
+ }
+
+ /**
+ * Returns the best serialization handler for the given object.
+ */
+ // Java's generics can't handle this satisfactorily, so I'll just leave
+ // the best I could get and ignore the warnings
+ @SuppressWarnings("unchecked")
+ private static <T extends IRubyObject>
+ Handler<? super T> getHandlerFor(Ruby runtime, T object) {
+ RubyClass metaClass = object.getMetaClass();
+ if (metaClass == runtime.getString()) return (Handler)STRING_HANDLER;
+ if (metaClass == runtime.getFixnum()) return (Handler)FIXNUM_HANDLER;
+ if (metaClass == runtime.getHash()) return (Handler)HASH_HANDLER;
+ if (metaClass == runtime.getArray()) return (Handler)ARRAY_HANDLER;
+ if (object.isNil()) return (Handler)NIL_HANDLER;
+ if (object == runtime.getTrue()) return (Handler)TRUE_HANDLER;
+ if (object == runtime.getFalse()) return (Handler)FALSE_HANDLER;
+ if (metaClass == runtime.getFloat()) return (Handler)FLOAT_HANDLER;
+ if (metaClass == runtime.getBignum()) return (Handler)BIGNUM_HANDLER;
+ return GENERIC_HANDLER;
+ }
+
+
+ /* Generator context */
+
+ /**
+ * A class that concentrates all the information that is shared by
+ * generators working on a single session.
+ *
+ * <p>A session is defined as the process of serializing a single root
+ * object; any handler directly called by container handlers (arrays and
+ * hashes/objects) shares this object with its caller.
+ *
+ * <p>Note that anything called indirectly (via {@link GENERIC_HANDLER})
+ * won't be part of the session.
+ */
+ static class Session {
+ private final ThreadContext context;
+ private GeneratorState state;
+ private IRubyObject possibleState;
+ private RuntimeInfo info;
+ private StringEncoder stringEncoder;
+
+ private boolean tainted = false;
+ private boolean untrusted = false;
+
+ Session(ThreadContext context, GeneratorState state) {
+ this.context = context;
+ this.state = state;
+ }
+
+ Session(ThreadContext context, IRubyObject possibleState) {
+ this.context = context;
+ this.possibleState = possibleState == null || possibleState.isNil()
+ ? null : possibleState;
+ }
+
+ public ThreadContext getContext() {
+ return context;
+ }
+
+ public Ruby getRuntime() {
+ return context.getRuntime();
+ }
+
+ public GeneratorState getState() {
+ if (state == null) {
+ state = GeneratorState.fromState(context, getInfo(), possibleState);
+ }
+ return state;
+ }
+
+ public RuntimeInfo getInfo() {
+ if (info == null) info = RuntimeInfo.forRuntime(getRuntime());
+ return info;
+ }
+
+ public StringEncoder getStringEncoder() {
+ if (stringEncoder == null) {
+ stringEncoder = new StringEncoder(context, getState().asciiOnly());
+ }
+ return stringEncoder;
+ }
+
+ public void infectBy(IRubyObject object) {
+ if (object.isTaint()) tainted = true;
+ if (object.isUntrusted()) untrusted = true;
+ }
+
+ public <T extends IRubyObject> T infect(T object) {
+ if (tainted) object.setTaint(true);
+ if (untrusted) object.setUntrusted(true);
+ return object;
+ }
+ }
+
+
+ /* Handler base classes */
+
+ private static abstract class Handler<T extends IRubyObject> {
+ /**
+ * Returns an estimative of how much space the serialization of the
+ * given object will take. Used for allocating enough buffer space
+ * before invoking other methods.
+ */
+ int guessSize(Session session, T object) {
+ return 4;
+ }
+
+ RubyString generateNew(Session session, T object) {
+ ByteList buffer = new ByteList(guessSize(session, object));
+ generate(session, object, buffer);
+ return RubyString.newString(session.getRuntime(), buffer);
+ }
+
+ abstract void generate(Session session, T object, ByteList buffer);
+ }
+
+ /**
+ * A handler that returns a fixed keyword regardless of the passed object.
+ */
+ private static class KeywordHandler<T extends IRubyObject>
+ extends Handler<T> {
+ private final ByteList keyword;
+
+ private KeywordHandler(String keyword) {
+ this.keyword = new ByteList(ByteList.plain(keyword), false);
+ }
+
+ @Override
+ int guessSize(Session session, T object) {
+ return keyword.length();
+ }
+
+ @Override
+ RubyString generateNew(Session session, T object) {
+ return RubyString.newStringShared(session.getRuntime(), keyword);
+ }
+
+ @Override
+ void generate(Session session, T object, ByteList buffer) {
+ buffer.append(keyword);
+ }
+ }
+
+
+ /* Handlers */
+
+ static final Handler<RubyBignum> BIGNUM_HANDLER =
+ new Handler<RubyBignum>() {
+ @Override
+ void generate(Session session, RubyBignum object, ByteList buffer) {
+ // JRUBY-4751: RubyBignum.to_s() returns generic object
+ // representation (fixed in 1.5, but we maintain backwards
+ // compatibility; call to_s(IRubyObject[]) then
+ buffer.append(((RubyString)object.to_s(IRubyObject.NULL_ARRAY)).getByteList());
+ }
+ };
+
+ static final Handler<RubyFixnum> FIXNUM_HANDLER =
+ new Handler<RubyFixnum>() {
+ @Override
+ void generate(Session session, RubyFixnum object, ByteList buffer) {
+ buffer.append(object.to_s().getByteList());
+ }
+ };
+
+ static final Handler<RubyFloat> FLOAT_HANDLER =
+ new Handler<RubyFloat>() {
+ @Override
+ void generate(Session session, RubyFloat object, ByteList buffer) {
+ double value = RubyFloat.num2dbl(object);
+
+ if (Double.isInfinite(value) || Double.isNaN(value)) {
+ if (!session.getState().allowNaN()) {
+ throw Utils.newException(session.getContext(),
+ Utils.M_GENERATOR_ERROR,
+ object + " not allowed in JSON");
+ }
+ }
+ buffer.append(((RubyString)object.to_s()).getByteList());
+ }
+ };
+
+ static final Handler<RubyArray> ARRAY_HANDLER =
+ new Handler<RubyArray>() {
+ @Override
+ int guessSize(Session session, RubyArray object) {
+ GeneratorState state = session.getState();
+ int depth = state.getDepth();
+ int perItem =
+ 4 // prealloc
+ + (depth + 1) * state.getIndent().length() // indent
+ + 1 + state.getArrayNl().length(); // ',' arrayNl
+ return 2 + object.size() * perItem;
+ }
+
+ @Override
+ void generate(Session session, RubyArray object, ByteList buffer) {
+ ThreadContext context = session.getContext();
+ Ruby runtime = context.getRuntime();
+ GeneratorState state = session.getState();
+ int depth = state.increaseDepth();
+
+ ByteList indentUnit = state.getIndent();
+ byte[] shift = Utils.repeat(indentUnit, depth);
+
+ ByteList arrayNl = state.getArrayNl();
+ byte[] delim = new byte[1 + arrayNl.length()];
+ delim[0] = ',';
+ System.arraycopy(arrayNl.unsafeBytes(), arrayNl.begin(), delim, 1,
+ arrayNl.length());
+
+ session.infectBy(object);
+
+ buffer.append((byte)'[');
+ buffer.append(arrayNl);
+ boolean firstItem = true;
+ for (int i = 0, t = object.getLength(); i < t; i++) {
+ IRubyObject element = object.eltInternal(i);
+ session.infectBy(element);
+ if (firstItem) {
+ firstItem = false;
+ } else {
+ buffer.append(delim);
+ }
+ buffer.append(shift);
+ Handler<IRubyObject> handler = getHandlerFor(runtime, element);
+ handler.generate(session, element, buffer);
+ }
+
+ state.decreaseDepth();
+ if (arrayNl.length() != 0) {
+ buffer.append(arrayNl);
+ buffer.append(shift, 0, state.getDepth() * indentUnit.length());
+ }
+
+ buffer.append((byte)']');
+ }
+ };
+
+ static final Handler<RubyHash> HASH_HANDLER =
+ new Handler<RubyHash>() {
+ @Override
+ int guessSize(Session session, RubyHash object) {
+ GeneratorState state = session.getState();
+ int perItem =
+ 12 // key, colon, comma
+ + (state.getDepth() + 1) * state.getIndent().length()
+ + state.getSpaceBefore().length()
+ + state.getSpace().length();
+ return 2 + object.size() * perItem;
+ }
+
+ @Override
+ void generate(final Session session, RubyHash object,
+ final ByteList buffer) {
+ ThreadContext context = session.getContext();
+ final Ruby runtime = context.getRuntime();
+ final GeneratorState state = session.getState();
+ final int depth = state.increaseDepth();
+
+ final ByteList objectNl = state.getObjectNl();
+ final byte[] indent = Utils.repeat(state.getIndent(), depth);
+ final ByteList spaceBefore = state.getSpaceBefore();
+ final ByteList space = state.getSpace();
+
+ buffer.append((byte)'{');
+ buffer.append(objectNl);
+ object.visitAll(new RubyHash.Visitor() {
+ private boolean firstPair = true;
+
+ @Override
+ public void visit(IRubyObject key, IRubyObject value) {
+ if (firstPair) {
+ firstPair = false;
+ } else {
+ buffer.append((byte)',');
+ buffer.append(objectNl);
+ }
+ if (objectNl.length() != 0) buffer.append(indent);
+
+ STRING_HANDLER.generate(session, key.asString(), buffer);
+ session.infectBy(key);
+
+ buffer.append(spaceBefore);
+ buffer.append((byte)':');
+ buffer.append(space);
+
+ Handler<IRubyObject> valueHandler = getHandlerFor(runtime, value);
+ valueHandler.generate(session, value, buffer);
+ session.infectBy(value);
+ }
+ });
+ state.decreaseDepth();
+ if (objectNl.length() != 0) {
+ buffer.append(objectNl);
+ if (indent.length != 0) {
+ for (int i = 0; i < state.getDepth(); i++) {
+ buffer.append(indent);
+ }
+ }
+ }
+ buffer.append((byte)'}');
+ }
+ };
+
+ static final Handler<RubyString> STRING_HANDLER =
+ new Handler<RubyString>() {
+ @Override
+ int guessSize(Session session, RubyString object) {
+ // for most applications, most strings will be just a set of
+ // printable ASCII characters without any escaping, so let's
+ // just allocate enough space for that + the quotes
+ return 2 + object.getByteList().length();
+ }
+
+ @Override
+ void generate(Session session, RubyString object, ByteList buffer) {
+ RuntimeInfo info = session.getInfo();
+ RubyString src;
+
+ if (info.encodingsSupported() &&
+ object.encoding(session.getContext()) != info.utf8) {
+ src = (RubyString)object.encode(session.getContext(),
+ info.utf8);
+ } else {
+ src = object;
+ }
+
+ session.getStringEncoder().encode(src.getByteList(), buffer);
+ }
+ };
+
+ static final Handler<RubyBoolean> TRUE_HANDLER =
+ new KeywordHandler<RubyBoolean>("true");
+ static final Handler<RubyBoolean> FALSE_HANDLER =
+ new KeywordHandler<RubyBoolean>("false");
+ static final Handler<IRubyObject> NIL_HANDLER =
+ new KeywordHandler<IRubyObject>("null");
+
+ /**
+ * The default handler (<code>Object#to_json</code>): coerces the object
+ * to string using <code>#to_s</code>, and serializes that string.
+ */
+ static final Handler<IRubyObject> OBJECT_HANDLER =
+ new Handler<IRubyObject>() {
+ @Override
+ RubyString generateNew(Session session, IRubyObject object) {
+ RubyString str = object.asString();
+ return STRING_HANDLER.generateNew(session, str);
+ }
+
+ @Override
+ void generate(Session session, IRubyObject object, ByteList buffer) {
+ RubyString str = object.asString();
+ STRING_HANDLER.generate(session, str, buffer);
+ }
+ };
+
+ /**
+ * A handler that simply calls <code>#to_json(state)</code> on the
+ * given object.
+ */
+ static final Handler<IRubyObject> GENERIC_HANDLER =
+ new Handler<IRubyObject>() {
+ @Override
+ RubyString generateNew(Session session, IRubyObject object) {
+ IRubyObject result =
+ object.callMethod(session.getContext(), "to_json",
+ new IRubyObject[] {session.getState()});
+ if (result instanceof RubyString) return (RubyString)result;
+ throw session.getRuntime().newTypeError("to_json must return a String");
+ }
+
+ @Override
+ void generate(Session session, IRubyObject object, ByteList buffer) {
+ RubyString result = generateNew(session, object);
+ buffer.append(result.getByteList());
+ }
+ };
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/GeneratorMethods.java b/vendor/gems/json-1.5.1/java/src/json/ext/GeneratorMethods.java
new file mode 100644
index 000000000..28a612d50
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/GeneratorMethods.java
@@ -0,0 +1,231 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import org.jruby.Ruby;
+import org.jruby.RubyArray;
+import org.jruby.RubyBoolean;
+import org.jruby.RubyFixnum;
+import org.jruby.RubyFloat;
+import org.jruby.RubyHash;
+import org.jruby.RubyInteger;
+import org.jruby.RubyModule;
+import org.jruby.RubyNumeric;
+import org.jruby.RubyString;
+import org.jruby.anno.JRubyMethod;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.util.ByteList;
+
+/**
+ * A class that populates the
+ * <code>Json::Ext::Generator::GeneratorMethods</code> module.
+ *
+ * @author mernen
+ */
+class GeneratorMethods {
+ /**
+ * Populates the given module with all modules and their methods
+ * @param info
+ * @param generatorMethodsModule The module to populate
+ * (normally <code>JSON::Generator::GeneratorMethods</code>)
+ */
+ static void populate(RuntimeInfo info, RubyModule module) {
+ defineMethods(module, "Array", RbArray.class);
+ defineMethods(module, "FalseClass", RbFalse.class);
+ defineMethods(module, "Float", RbFloat.class);
+ defineMethods(module, "Hash", RbHash.class);
+ defineMethods(module, "Integer", RbInteger.class);
+ defineMethods(module, "NilClass", RbNil.class);
+ defineMethods(module, "Object", RbObject.class);
+ defineMethods(module, "String", RbString.class);
+ defineMethods(module, "TrueClass", RbTrue.class);
+
+ info.stringExtendModule = module.defineModuleUnder("String")
+ .defineModuleUnder("Extend");
+ info.stringExtendModule.defineAnnotatedMethods(StringExtend.class);
+ }
+
+ /**
+ * Convenience method for defining methods on a submodule.
+ * @param parentModule
+ * @param submoduleName
+ * @param klass
+ */
+ private static void defineMethods(RubyModule parentModule,
+ String submoduleName, Class klass) {
+ RubyModule submodule = parentModule.defineModuleUnder(submoduleName);
+ submodule.defineAnnotatedMethods(klass);
+ }
+
+
+ public static class RbHash {
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json(ThreadContext context,
+ IRubyObject vSelf, IRubyObject[] args) {
+ return Generator.generateJson(context, (RubyHash)vSelf,
+ Generator.HASH_HANDLER, args);
+ }
+ }
+
+ public static class RbArray {
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json(ThreadContext context,
+ IRubyObject vSelf, IRubyObject[] args) {
+ return Generator.generateJson(context, (RubyArray)vSelf,
+ Generator.ARRAY_HANDLER, args);
+ }
+ }
+
+ public static class RbInteger {
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json(ThreadContext context,
+ IRubyObject vSelf, IRubyObject[] args) {
+ return Generator.generateJson(context, vSelf, args);
+ }
+ }
+
+ public static class RbFloat {
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json(ThreadContext context,
+ IRubyObject vSelf, IRubyObject[] args) {
+ return Generator.generateJson(context, (RubyFloat)vSelf,
+ Generator.FLOAT_HANDLER, args);
+ }
+ }
+
+ public static class RbString {
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json(ThreadContext context,
+ IRubyObject vSelf, IRubyObject[] args) {
+ return Generator.generateJson(context, (RubyString)vSelf,
+ Generator.STRING_HANDLER, args);
+ }
+
+ /**
+ * <code>{@link RubyString String}#to_json_raw(*)</code>
+ *
+ * <p>This method creates a JSON text from the result of a call to
+ * {@link #to_json_raw_object} of this String.
+ */
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json_raw(ThreadContext context,
+ IRubyObject vSelf, IRubyObject[] args) {
+ RubyHash obj = toJsonRawObject(context, Utils.ensureString(vSelf));
+ return Generator.generateJson(context, obj,
+ Generator.HASH_HANDLER, args);
+ }
+
+ /**
+ * <code>{@link RubyString String}#to_json_raw_object(*)</code>
+ *
+ * <p>This method creates a raw object Hash, that can be nested into
+ * other data structures and will be unparsed as a raw string. This
+ * method should be used if you want to convert raw strings to JSON
+ * instead of UTF-8 strings, e.g. binary data.
+ */
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json_raw_object(ThreadContext context,
+ IRubyObject vSelf, IRubyObject[] args) {
+ return toJsonRawObject(context, Utils.ensureString(vSelf));
+ }
+
+ private static RubyHash toJsonRawObject(ThreadContext context,
+ RubyString self) {
+ Ruby runtime = context.getRuntime();
+ RubyHash result = RubyHash.newHash(runtime);
+
+ IRubyObject createId = RuntimeInfo.forRuntime(runtime)
+ .jsonModule.callMethod(context, "create_id");
+ result.op_aset(context, createId, self.getMetaClass().to_s());
+
+ ByteList bl = self.getByteList();
+ byte[] uBytes = bl.unsafeBytes();
+ RubyArray array = runtime.newArray(bl.length());
+ for (int i = bl.begin(), t = bl.begin() + bl.length(); i < t; i++) {
+ array.store(i, runtime.newFixnum(uBytes[i] & 0xff));
+ }
+
+ result.op_aset(context, runtime.newString("raw"), array);
+ return result;
+ }
+
+ @JRubyMethod(required=1, module=true)
+ public static IRubyObject included(ThreadContext context,
+ IRubyObject vSelf, IRubyObject module) {
+ RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime());
+ return module.callMethod(context, "extend", info.stringExtendModule);
+ }
+ }
+
+ public static class StringExtend {
+ /**
+ * <code>{@link RubyString String}#json_create(o)</code>
+ *
+ * <p>Raw Strings are JSON Objects (the raw bytes are stored in an
+ * array for the key "raw"). The Ruby String can be created by this
+ * module method.
+ */
+ @JRubyMethod(required=1)
+ public static IRubyObject json_create(ThreadContext context,
+ IRubyObject vSelf, IRubyObject vHash) {
+ Ruby runtime = context.getRuntime();
+ RubyHash o = vHash.convertToHash();
+ IRubyObject rawData = o.fastARef(runtime.newString("raw"));
+ if (rawData == null) {
+ throw runtime.newArgumentError("\"raw\" value not defined "
+ + "for encoded String");
+ }
+ RubyArray ary = Utils.ensureArray(rawData);
+ byte[] bytes = new byte[ary.getLength()];
+ for (int i = 0, t = ary.getLength(); i < t; i++) {
+ IRubyObject element = ary.eltInternal(i);
+ if (element instanceof RubyFixnum) {
+ bytes[i] = (byte)RubyNumeric.fix2long(element);
+ } else {
+ throw runtime.newTypeError(element, runtime.getFixnum());
+ }
+ }
+ return runtime.newString(new ByteList(bytes, false));
+ }
+ }
+
+ public static class RbTrue {
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json(ThreadContext context,
+ IRubyObject vSelf, IRubyObject[] args) {
+ return Generator.generateJson(context, (RubyBoolean)vSelf,
+ Generator.TRUE_HANDLER, args);
+ }
+ }
+
+ public static class RbFalse {
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json(ThreadContext context,
+ IRubyObject vSelf, IRubyObject[] args) {
+ return Generator.generateJson(context, (RubyBoolean)vSelf,
+ Generator.FALSE_HANDLER, args);
+ }
+ }
+
+ public static class RbNil {
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json(ThreadContext context,
+ IRubyObject vSelf, IRubyObject[] args) {
+ return Generator.generateJson(context, vSelf,
+ Generator.NIL_HANDLER, args);
+ }
+ }
+
+ public static class RbObject {
+ @JRubyMethod(rest=true)
+ public static IRubyObject to_json(ThreadContext context,
+ IRubyObject self, IRubyObject[] args) {
+ return RbString.to_json(context, self.asString(), args);
+ }
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/GeneratorService.java b/vendor/gems/json-1.5.1/java/src/json/ext/GeneratorService.java
new file mode 100644
index 000000000..b8deb2283
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/GeneratorService.java
@@ -0,0 +1,42 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import java.io.IOException;
+
+import org.jruby.Ruby;
+import org.jruby.RubyClass;
+import org.jruby.RubyModule;
+import org.jruby.runtime.load.BasicLibraryService;
+
+/**
+ * The service invoked by JRuby's {@link org.jruby.runtime.load.LoadService LoadService}.
+ * Defines the <code>JSON::Ext::Generator</code> module.
+ * @author mernen
+ */
+public class GeneratorService implements BasicLibraryService {
+ public boolean basicLoad(Ruby runtime) throws IOException {
+ runtime.getLoadService().require("json/common");
+ RuntimeInfo info = RuntimeInfo.initRuntime(runtime);
+
+ info.jsonModule = runtime.defineModule("JSON");
+ RubyModule jsonExtModule = info.jsonModule.defineModuleUnder("Ext");
+ RubyModule generatorModule = jsonExtModule.defineModuleUnder("Generator");
+
+ RubyClass stateClass =
+ generatorModule.defineClassUnder("State", runtime.getObject(),
+ GeneratorState.ALLOCATOR);
+ stateClass.defineAnnotatedMethods(GeneratorState.class);
+ info.generatorStateClass = stateClass;
+
+ RubyModule generatorMethods =
+ generatorModule.defineModuleUnder("GeneratorMethods");
+ GeneratorMethods.populate(info, generatorMethods);
+
+ return true;
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/GeneratorState.java b/vendor/gems/json-1.5.1/java/src/json/ext/GeneratorState.java
new file mode 100644
index 000000000..dc990008f
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/GeneratorState.java
@@ -0,0 +1,473 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import org.jruby.Ruby;
+import org.jruby.RubyBoolean;
+import org.jruby.RubyClass;
+import org.jruby.RubyHash;
+import org.jruby.RubyInteger;
+import org.jruby.RubyNumeric;
+import org.jruby.RubyObject;
+import org.jruby.RubyString;
+import org.jruby.anno.JRubyMethod;
+import org.jruby.runtime.Block;
+import org.jruby.runtime.ObjectAllocator;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.Visibility;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.util.ByteList;
+
+/**
+ * The <code>JSON::Ext::Generator::State</code> class.
+ *
+ * <p>This class is used to create State instances, that are use to hold data
+ * while generating a JSON text from a a Ruby data structure.
+ *
+ * @author mernen
+ */
+public class GeneratorState extends RubyObject {
+ /**
+ * The indenting unit string. Will be repeated several times for larger
+ * indenting levels.
+ */
+ private ByteList indent = ByteList.EMPTY_BYTELIST;
+ /**
+ * The spacing to be added after a semicolon on a JSON object.
+ * @see #spaceBefore
+ */
+ private ByteList space = ByteList.EMPTY_BYTELIST;
+ /**
+ * The spacing to be added before a semicolon on a JSON object.
+ * @see #space
+ */
+ private ByteList spaceBefore = ByteList.EMPTY_BYTELIST;
+ /**
+ * Any suffix to be added after the comma for each element on a JSON object.
+ * It is assumed to be a newline, if set.
+ */
+ private ByteList objectNl = ByteList.EMPTY_BYTELIST;
+ /**
+ * Any suffix to be added after the comma for each element on a JSON Array.
+ * It is assumed to be a newline, if set.
+ */
+ private ByteList arrayNl = ByteList.EMPTY_BYTELIST;
+
+ /**
+ * The maximum level of nesting of structures allowed.
+ * <code>0</code> means disabled.
+ */
+ private int maxNesting = DEFAULT_MAX_NESTING;
+ static final int DEFAULT_MAX_NESTING = 19;
+ /**
+ * Whether special float values (<code>NaN</code>, <code>Infinity</code>,
+ * <code>-Infinity</code>) are accepted.
+ * If set to <code>false</code>, an exception will be thrown upon
+ * encountering one.
+ */
+ private boolean allowNaN = DEFAULT_ALLOW_NAN;
+ static final boolean DEFAULT_ALLOW_NAN = false;
+ /**
+ * XXX
+ */
+ private boolean asciiOnly = DEFAULT_ASCII_ONLY;
+ static final boolean DEFAULT_ASCII_ONLY = false;
+
+ /**
+ * The current depth (inside a #to_json call)
+ */
+ private int depth = 0;
+
+ static final ObjectAllocator ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new GeneratorState(runtime, klazz);
+ }
+ };
+
+ public GeneratorState(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ }
+
+ /**
+ * <code>State.from_state(opts)</code>
+ *
+ * <p>Creates a State object from <code>opts</code>, which ought to be
+ * {@link RubyHash Hash} to create a new <code>State</code> instance
+ * configured by <codes>opts</code>, something else to create an
+ * unconfigured instance. If <code>opts</code> is a <code>State</code>
+ * object, it is just returned.
+ * @param clazzParam The receiver of the method call
+ * ({@link RubyClass} <code>State</code>)
+ * @param opts The object to use as a base for the new <code>State</code>
+ * @param block The block passed to the method
+ * @return A <code>GeneratorState</code> as determined above
+ */
+ @JRubyMethod(meta=true)
+ public static IRubyObject from_state(ThreadContext context,
+ IRubyObject klass, IRubyObject opts) {
+ return fromState(context, opts);
+ }
+
+ static GeneratorState fromState(ThreadContext context, IRubyObject opts) {
+ return fromState(context, RuntimeInfo.forRuntime(context.getRuntime()), opts);
+ }
+
+ static GeneratorState fromState(ThreadContext context, RuntimeInfo info,
+ IRubyObject opts) {
+ RubyClass klass = info.generatorStateClass;
+ if (opts != null) {
+ // if the given parameter is a Generator::State, return itself
+ if (klass.isInstance(opts)) return (GeneratorState)opts;
+
+ // if the given parameter is a Hash, pass it to the instantiator
+ if (context.getRuntime().getHash().isInstance(opts)) {
+ return (GeneratorState)klass.newInstance(context,
+ new IRubyObject[] {opts}, Block.NULL_BLOCK);
+ }
+ }
+
+ // for other values, return the safe prototype
+ return (GeneratorState)info.getSafeStatePrototype(context).dup();
+ }
+
+ /**
+ * <code>State#initialize(opts = {})</code>
+ *
+ * Instantiates a new <code>State</code> object, configured by <code>opts</code>.
+ *
+ * <code>opts</code> can have the following keys:
+ *
+ * <dl>
+ * <dt><code>:indent</code>
+ * <dd>a {@link RubyString String} used to indent levels (default: <code>""</code>)
+ * <dt><code>:space</code>
+ * <dd>a String that is put after a <code>':'</code> or <code>','</code>
+ * delimiter (default: <code>""</code>)
+ * <dt><code>:space_before</code>
+ * <dd>a String that is put before a <code>":"</code> pair delimiter
+ * (default: <code>""</code>)
+ * <dt><code>:object_nl</code>
+ * <dd>a String that is put at the end of a JSON object (default: <code>""</code>)
+ * <dt><code>:array_nl</code>
+ * <dd>a String that is put at the end of a JSON array (default: <code>""</code>)
+ * <dt><code>:allow_nan</code>
+ * <dd><code>true</code> if <code>NaN</code>, <code>Infinity</code>, and
+ * <code>-Infinity</code> should be generated, otherwise an exception is
+ * thrown if these values are encountered.
+ * This options defaults to <code>false</code>.
+ */
+ @JRubyMethod(optional=1, visibility=Visibility.PRIVATE)
+ public IRubyObject initialize(ThreadContext context, IRubyObject[] args) {
+ configure(context, args.length > 0 ? args[0] : null);
+ return this;
+ }
+
+ @JRubyMethod
+ public IRubyObject initialize_copy(ThreadContext context, IRubyObject vOrig) {
+ Ruby runtime = context.getRuntime();
+ if (!(vOrig instanceof GeneratorState)) {
+ throw runtime.newTypeError(vOrig, getType());
+ }
+ GeneratorState orig = (GeneratorState)vOrig;
+ this.indent = orig.indent;
+ this.space = orig.space;
+ this.spaceBefore = orig.spaceBefore;
+ this.objectNl = orig.objectNl;
+ this.arrayNl = orig.arrayNl;
+ this.maxNesting = orig.maxNesting;
+ this.allowNaN = orig.allowNaN;
+ this.asciiOnly = orig.asciiOnly;
+ this.depth = orig.depth;
+ return this;
+ }
+
+ /**
+ * XXX
+ */
+ @JRubyMethod
+ public IRubyObject generate(ThreadContext context, IRubyObject obj) {
+ RubyString result = Generator.generateJson(context, obj, this);
+ if (!objectOrArrayLiteral(result)) {
+ throw Utils.newException(context, Utils.M_GENERATOR_ERROR,
+ "only generation of JSON objects or arrays allowed");
+ }
+ return result;
+ }
+
+ /**
+ * Ensures the given string is in the form "[...]" or "{...}", being
+ * possibly surrounded by white space.
+ * The string's encoding must be ASCII-compatible.
+ * @param value
+ * @return
+ */
+ private static boolean objectOrArrayLiteral(RubyString value) {
+ ByteList bl = value.getByteList();
+ int len = bl.length();
+
+ for (int pos = 0; pos < len - 1; pos++) {
+ int b = bl.get(pos);
+ if (Character.isWhitespace(b)) continue;
+
+ // match the opening brace
+ switch (b) {
+ case '[':
+ return matchClosingBrace(bl, pos, len, ']');
+ case '{':
+ return matchClosingBrace(bl, pos, len, '}');
+ default:
+ return false;
+ }
+ }
+ return false;
+ }
+
+ private static boolean matchClosingBrace(ByteList bl, int pos, int len,
+ int brace) {
+ for (int endPos = len - 1; endPos > pos; endPos--) {
+ int b = bl.get(endPos);
+ if (Character.isWhitespace(b)) continue;
+ return b == brace;
+ }
+ return false;
+ }
+
+ @JRubyMethod(name="[]", required=1)
+ public IRubyObject op_aref(ThreadContext context, IRubyObject vName) {
+ String name = vName.asJavaString();
+ if (getMetaClass().isMethodBound(name, true)) {
+ return send(context, vName, Block.NULL_BLOCK);
+ }
+ return context.getRuntime().getNil();
+ }
+
+ public ByteList getIndent() {
+ return indent;
+ }
+
+ @JRubyMethod(name="indent")
+ public RubyString indent_get(ThreadContext context) {
+ return context.getRuntime().newString(indent);
+ }
+
+ @JRubyMethod(name="indent=")
+ public IRubyObject indent_set(ThreadContext context, IRubyObject indent) {
+ this.indent = prepareByteList(context, indent);
+ return indent;
+ }
+
+ public ByteList getSpace() {
+ return space;
+ }
+
+ @JRubyMethod(name="space")
+ public RubyString space_get(ThreadContext context) {
+ return context.getRuntime().newString(space);
+ }
+
+ @JRubyMethod(name="space=")
+ public IRubyObject space_set(ThreadContext context, IRubyObject space) {
+ this.space = prepareByteList(context, space);
+ return space;
+ }
+
+ public ByteList getSpaceBefore() {
+ return spaceBefore;
+ }
+
+ @JRubyMethod(name="space_before")
+ public RubyString space_before_get(ThreadContext context) {
+ return context.getRuntime().newString(spaceBefore);
+ }
+
+ @JRubyMethod(name="space_before=")
+ public IRubyObject space_before_set(ThreadContext context,
+ IRubyObject spaceBefore) {
+ this.spaceBefore = prepareByteList(context, spaceBefore);
+ return spaceBefore;
+ }
+
+ public ByteList getObjectNl() {
+ return objectNl;
+ }
+
+ @JRubyMethod(name="object_nl")
+ public RubyString object_nl_get(ThreadContext context) {
+ return context.getRuntime().newString(objectNl);
+ }
+
+ @JRubyMethod(name="object_nl=")
+ public IRubyObject object_nl_set(ThreadContext context,
+ IRubyObject objectNl) {
+ this.objectNl = prepareByteList(context, objectNl);
+ return objectNl;
+ }
+
+ public ByteList getArrayNl() {
+ return arrayNl;
+ }
+
+ @JRubyMethod(name="array_nl")
+ public RubyString array_nl_get(ThreadContext context) {
+ return context.getRuntime().newString(arrayNl);
+ }
+
+ @JRubyMethod(name="array_nl=")
+ public IRubyObject array_nl_set(ThreadContext context,
+ IRubyObject arrayNl) {
+ this.arrayNl = prepareByteList(context, arrayNl);
+ return arrayNl;
+ }
+
+ @JRubyMethod(name="check_circular?")
+ public RubyBoolean check_circular_p(ThreadContext context) {
+ return context.getRuntime().newBoolean(maxNesting != 0);
+ }
+
+ /**
+ * Returns the maximum level of nesting configured for this state.
+ */
+ public int getMaxNesting() {
+ return maxNesting;
+ }
+
+ @JRubyMethod(name="max_nesting")
+ public RubyInteger max_nesting_get(ThreadContext context) {
+ return context.getRuntime().newFixnum(maxNesting);
+ }
+
+ @JRubyMethod(name="max_nesting=")
+ public IRubyObject max_nesting_set(IRubyObject max_nesting) {
+ maxNesting = RubyNumeric.fix2int(max_nesting);
+ return max_nesting;
+ }
+
+ public boolean allowNaN() {
+ return allowNaN;
+ }
+
+ @JRubyMethod(name="allow_nan?")
+ public RubyBoolean allow_nan_p(ThreadContext context) {
+ return context.getRuntime().newBoolean(allowNaN);
+ }
+
+ public boolean asciiOnly() {
+ return asciiOnly;
+ }
+
+ @JRubyMethod(name="ascii_only?")
+ public RubyBoolean ascii_only_p(ThreadContext context) {
+ return context.getRuntime().newBoolean(asciiOnly);
+ }
+
+ public int getDepth() {
+ return depth;
+ }
+
+ @JRubyMethod(name="depth")
+ public RubyInteger depth_get(ThreadContext context) {
+ return context.getRuntime().newFixnum(depth);
+ }
+
+ @JRubyMethod(name="depth=")
+ public IRubyObject depth_set(IRubyObject vDepth) {
+ depth = RubyNumeric.fix2int(vDepth);
+ return vDepth;
+ }
+
+ private ByteList prepareByteList(ThreadContext context, IRubyObject value) {
+ RubyString str = value.convertToString();
+ RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime());
+ if (info.encodingsSupported() && str.encoding(context) != info.utf8) {
+ str = (RubyString)str.encode(context, info.utf8);
+ }
+ return str.getByteList().dup();
+ }
+
+ /**
+ * <code>State#configure(opts)</code>
+ *
+ * <p>Configures this State instance with the {@link RubyHash Hash}
+ * <code>opts</code>, and returns itself.
+ * @param vOpts The options hash
+ * @return The receiver
+ */
+ @JRubyMethod
+ public IRubyObject configure(ThreadContext context, IRubyObject vOpts) {
+ OptionsReader opts = new OptionsReader(context, vOpts);
+
+ ByteList indent = opts.getString("indent");
+ if (indent != null) this.indent = indent;
+
+ ByteList space = opts.getString("space");
+ if (space != null) this.space = space;
+
+ ByteList spaceBefore = opts.getString("space_before");
+ if (spaceBefore != null) this.spaceBefore = spaceBefore;
+
+ ByteList arrayNl = opts.getString("array_nl");
+ if (arrayNl != null) this.arrayNl = arrayNl;
+
+ ByteList objectNl = opts.getString("object_nl");
+ if (objectNl != null) this.objectNl = objectNl;
+
+ maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
+ allowNaN = opts.getBool("allow_nan", DEFAULT_ALLOW_NAN);
+ asciiOnly = opts.getBool("ascii_only", DEFAULT_ASCII_ONLY);
+
+ depth = opts.getInt("depth", 0);
+
+ return this;
+ }
+
+ /**
+ * <code>State#to_h()</code>
+ *
+ * <p>Returns the configuration instance variables as a hash, that can be
+ * passed to the configure method.
+ * @return
+ */
+ @JRubyMethod
+ public RubyHash to_h(ThreadContext context) {
+ Ruby runtime = context.getRuntime();
+ RubyHash result = RubyHash.newHash(runtime);
+
+ result.op_aset(context, runtime.newSymbol("indent"), indent_get(context));
+ result.op_aset(context, runtime.newSymbol("space"), space_get(context));
+ result.op_aset(context, runtime.newSymbol("space_before"), space_before_get(context));
+ result.op_aset(context, runtime.newSymbol("object_nl"), object_nl_get(context));
+ result.op_aset(context, runtime.newSymbol("array_nl"), array_nl_get(context));
+ result.op_aset(context, runtime.newSymbol("allow_nan"), allow_nan_p(context));
+ result.op_aset(context, runtime.newSymbol("ascii_only"), ascii_only_p(context));
+ result.op_aset(context, runtime.newSymbol("max_nesting"), max_nesting_get(context));
+ result.op_aset(context, runtime.newSymbol("depth"), depth_get(context));
+ return result;
+ }
+
+ public int increaseDepth() {
+ depth++;
+ checkMaxNesting();
+ return depth;
+ }
+
+ public int decreaseDepth() {
+ return --depth;
+ }
+
+ /**
+ * Checks if the current depth is allowed as per this state's options.
+ * @param context
+ * @param depth The corrent depth
+ */
+ private void checkMaxNesting() {
+ if (maxNesting != 0 && depth > maxNesting) {
+ depth--;
+ throw Utils.newException(getRuntime().getCurrentContext(),
+ Utils.M_NESTING_ERROR, "nesting of " + depth + " is too deep");
+ }
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/OptionsReader.java b/vendor/gems/json-1.5.1/java/src/json/ext/OptionsReader.java
new file mode 100644
index 000000000..018ace4cd
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/OptionsReader.java
@@ -0,0 +1,119 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import org.jruby.Ruby;
+import org.jruby.RubyClass;
+import org.jruby.RubyHash;
+import org.jruby.RubyNumeric;
+import org.jruby.RubyString;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.util.ByteList;
+
+final class OptionsReader {
+ private final ThreadContext context;
+ private final Ruby runtime;
+ private final RubyHash opts;
+ private RuntimeInfo info;
+
+ OptionsReader(ThreadContext context, IRubyObject vOpts) {
+ this.context = context;
+ this.runtime = context.getRuntime();
+
+ if (vOpts == null || vOpts.isNil()) {
+ opts = null;
+ } else if (vOpts.respondsTo("to_hash")) {
+ opts = vOpts.convertToHash();
+ } else {
+ opts = vOpts.callMethod(context, "to_h").convertToHash();
+ }
+ }
+
+ private RuntimeInfo getRuntimeInfo() {
+ if (info != null) return info;
+ info = RuntimeInfo.forRuntime(runtime);
+ return info;
+ }
+
+ /**
+ * Efficiently looks up items with a {@link RubySymbol Symbol} key
+ * @param key The Symbol name to look up for
+ * @return The item in the {@link RubyHash Hash}, or <code>null</code>
+ * if not found
+ */
+ IRubyObject get(String key) {
+ return opts == null ? null : opts.fastARef(runtime.newSymbol(key));
+ }
+
+ boolean getBool(String key, boolean defaultValue) {
+ IRubyObject value = get(key);
+ return value == null ? defaultValue : value.isTrue();
+ }
+
+ int getInt(String key, int defaultValue) {
+ IRubyObject value = get(key);
+ if (value == null) return defaultValue;
+ if (!value.isTrue()) return 0;
+ return RubyNumeric.fix2int(value);
+ }
+
+ /**
+ * Reads the setting from the options hash. If no entry is set for this
+ * key or if it evaluates to <code>false</code>, returns null; attempts to
+ * coerce the value to {@link RubyString String} otherwise.
+ * @param key The Symbol name to look up for
+ * @return <code>null</code> if the key is not in the Hash or if
+ * its value evaluates to <code>false</code>
+ * @throws RaiseException <code>TypeError</code> if the value does not
+ * evaluate to <code>false</code> and can't be
+ * converted to string
+ */
+ ByteList getString(String key) {
+ RubyString str = getString(key, null);
+ return str == null ? null : str.getByteList().dup();
+ }
+
+ RubyString getString(String key, RubyString defaultValue) {
+ IRubyObject value = get(key);
+ if (value == null || !value.isTrue()) return defaultValue;
+
+ RubyString str = value.convertToString();
+ RuntimeInfo info = getRuntimeInfo();
+ if (info.encodingsSupported() && str.encoding(context) != info.utf8) {
+ str = (RubyString)str.encode(context, info.utf8);
+ }
+ return str;
+ }
+
+ /**
+ * Reads the setting from the options hash. If it is <code>nil</code> or
+ * undefined, returns the default value given.
+ * If not, ensures it is a RubyClass instance and shares the same
+ * allocator as the default value (i.e. for the basic types which have
+ * their specific allocators, this ensures the passed value is
+ * a subclass of them).
+ */
+ RubyClass getClass(String key, RubyClass defaultValue) {
+ IRubyObject value = get(key);
+
+ if (value == null || value.isNil()) return defaultValue;
+
+ if (value instanceof RubyClass &&
+ ((RubyClass)value).getAllocator() == defaultValue.getAllocator()) {
+ return (RubyClass)value;
+ }
+ throw runtime.newTypeError(key + " option must be a subclass of "
+ + defaultValue);
+ }
+
+ public RubyHash getHash(String key) {
+ IRubyObject value = get(key);
+ if (value == null || value.isNil()) return new RubyHash(runtime);
+ return (RubyHash) value;
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/Parser.java b/vendor/gems/json-1.5.1/java/src/json/ext/Parser.java
new file mode 100644
index 000000000..c92600e9e
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/Parser.java
@@ -0,0 +1,2295 @@
+
+// line 1 "Parser.rl"
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import org.jruby.Ruby;
+import org.jruby.RubyArray;
+import org.jruby.RubyClass;
+import org.jruby.RubyEncoding;
+import org.jruby.RubyFloat;
+import org.jruby.RubyHash;
+import org.jruby.RubyInteger;
+import org.jruby.RubyModule;
+import org.jruby.RubyNumeric;
+import org.jruby.RubyObject;
+import org.jruby.RubyString;
+import org.jruby.anno.JRubyMethod;
+import org.jruby.exceptions.JumpException;
+import org.jruby.exceptions.RaiseException;
+import org.jruby.runtime.Block;
+import org.jruby.runtime.ObjectAllocator;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.Visibility;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.util.ByteList;
+
+/**
+ * The <code>JSON::Ext::Parser</code> class.
+ *
+ * <p>This is the JSON parser implemented as a Java class. To use it as the
+ * standard parser, set
+ * <pre>JSON.parser = JSON::Ext::Parser</pre>
+ * This is performed for you when you <code>include "json/ext"</code>.
+ *
+ * <p>This class does not perform the actual parsing, just acts as an interface
+ * to Ruby code. When the {@link #parse()} method is invoked, a
+ * Parser.ParserSession object is instantiated, which handles the process.
+ *
+ * @author mernen
+ */
+public class Parser extends RubyObject {
+ private final RuntimeInfo info;
+ private RubyString vSource;
+ private RubyString createId;
+ private boolean createAdditions;
+ private int maxNesting;
+ private boolean allowNaN;
+ private boolean symbolizeNames;
+ private RubyClass objectClass;
+ private RubyClass arrayClass;
+ private RubyHash match_string;
+
+ private static final int DEFAULT_MAX_NESTING = 19;
+
+ private static final String JSON_MINUS_INFINITY = "-Infinity";
+ // constant names in the JSON module containing those values
+ private static final String CONST_NAN = "NaN";
+ private static final String CONST_INFINITY = "Infinity";
+ private static final String CONST_MINUS_INFINITY = "MinusInfinity";
+
+ static final ObjectAllocator ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new Parser(runtime, klazz);
+ }
+ };
+
+ /**
+ * Multiple-value return for internal parser methods.
+ *
+ * <p>All the <code>parse<var>Stuff</var></code> methods return instances of
+ * <code>ParserResult</code> when successful, or <code>null</code> when
+ * there's a problem with the input data.
+ */
+ static final class ParserResult {
+ /**
+ * The result of the successful parsing. Should never be
+ * <code>null</code>.
+ */
+ final IRubyObject result;
+ /**
+ * The point where the parser returned.
+ */
+ final int p;
+
+ ParserResult(IRubyObject result, int p) {
+ this.result = result;
+ this.p = p;
+ }
+ }
+
+ public Parser(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ info = RuntimeInfo.forRuntime(runtime);
+ }
+
+ /**
+ * <code>Parser.new(source, opts = {})</code>
+ *
+ * <p>Creates a new <code>JSON::Ext::Parser</code> instance for the string
+ * <code>source</code>.
+ * It will be configured by the <code>opts</code> Hash.
+ * <code>opts</code> can have the following keys:
+ *
+ * <dl>
+ * <dt><code>:max_nesting</code>
+ * <dd>The maximum depth of nesting allowed in the parsed data
+ * structures. Disable depth checking with <code>:max_nesting => false|nil|0</code>,
+ * it defaults to 19.
+ *
+ * <dt><code>:allow_nan</code>
+ * <dd>If set to <code>true</code>, allow <code>NaN</code>,
+ * <code>Infinity</code> and <code>-Infinity</code> in defiance of RFC 4627
+ * to be parsed by the Parser. This option defaults to <code>false</code>.
+ *
+ * <dt><code>:symbolize_names</code>
+ * <dd>If set to <code>true</code>, returns symbols for the names (keys) in
+ * a JSON object. Otherwise strings are returned, which is also the default.
+ *
+ * <dt><code>:create_additions</code>
+ * <dd>If set to <code>false</code>, the Parser doesn't create additions
+ * even if a matchin class and <code>create_id</code> was found. This option
+ * defaults to <code>true</code>.
+ *
+ * <dt><code>:object_class</code>
+ * <dd>Defaults to Hash.
+ *
+ * <dt><code>:array_class</code>
+ * <dd>Defaults to Array.
+ * </dl>
+ */
+ @JRubyMethod(name = "new", required = 1, optional = 1, meta = true)
+ public static IRubyObject newInstance(IRubyObject clazz, IRubyObject[] args, Block block) {
+ Parser parser = (Parser)((RubyClass)clazz).allocate();
+
+ parser.callInit(args, block);
+
+ return parser;
+ }
+
+ @JRubyMethod(required = 1, optional = 1, visibility = Visibility.PRIVATE)
+ public IRubyObject initialize(ThreadContext context, IRubyObject[] args) {
+ Ruby runtime = context.getRuntime();
+ RubyString source = convertEncoding(context, args[0].convertToString());
+
+ OptionsReader opts = new OptionsReader(context, args.length > 1 ? args[1] : null);
+ this.maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
+ this.allowNaN = opts.getBool("allow_nan", false);
+ this.symbolizeNames = opts.getBool("symbolize_names", false);
+ this.createId = opts.getString("create_id", getCreateId(context));
+ this.createAdditions = opts.getBool("create_additions", true);
+ this.objectClass = opts.getClass("object_class", runtime.getHash());
+ this.arrayClass = opts.getClass("array_class", runtime.getArray());
+ this.match_string = opts.getHash("match_string");
+
+ this.vSource = source;
+ return this;
+ }
+
+ /**
+ * Checks the given string's encoding. If a non-UTF-8 encoding is detected,
+ * a converted copy is returned.
+ * Returns the source string if no conversion is needed.
+ */
+ private RubyString convertEncoding(ThreadContext context, RubyString source) {
+ ByteList bl = source.getByteList();
+ int len = bl.length();
+ if (len < 2) {
+ throw Utils.newException(context, Utils.M_PARSER_ERROR,
+ "A JSON text must at least contain two octets!");
+ }
+
+ if (info.encodingsSupported()) {
+ RubyEncoding encoding = (RubyEncoding)source.encoding(context);
+ if (encoding != info.ascii8bit) {
+ return (RubyString)source.encode(context, info.utf8);
+ }
+
+ String sniffedEncoding = sniffByteList(bl);
+ if (sniffedEncoding == null) return source; // assume UTF-8
+ return reinterpretEncoding(context, source, sniffedEncoding);
+ }
+
+ String sniffedEncoding = sniffByteList(bl);
+ if (sniffedEncoding == null) return source; // assume UTF-8
+ Ruby runtime = context.getRuntime();
+ return (RubyString)info.jsonModule.
+ callMethod(context, "iconv",
+ new IRubyObject[] {
+ runtime.newString("utf-8"),
+ runtime.newString(sniffedEncoding),
+ source});
+ }
+
+ /**
+ * Checks the first four bytes of the given ByteList to infer its encoding,
+ * using the principle demonstrated on section 3 of RFC 4627 (JSON).
+ */
+ private static String sniffByteList(ByteList bl) {
+ if (bl.length() < 4) return null;
+ if (bl.get(0) == 0 && bl.get(2) == 0) {
+ return bl.get(1) == 0 ? "utf-32be" : "utf-16be";
+ }
+ if (bl.get(1) == 0 && bl.get(3) == 0) {
+ return bl.get(2) == 0 ? "utf-32le" : "utf-16le";
+ }
+ return null;
+ }
+
+ /**
+ * Assumes the given (binary) RubyString to be in the given encoding, then
+ * converts it to UTF-8.
+ */
+ private RubyString reinterpretEncoding(ThreadContext context,
+ RubyString str, String sniffedEncoding) {
+ RubyEncoding actualEncoding = info.getEncoding(context, sniffedEncoding);
+ RubyEncoding targetEncoding = info.utf8;
+ RubyString dup = (RubyString)str.dup();
+ dup.force_encoding(context, actualEncoding);
+ return (RubyString)dup.encode_bang(context, targetEncoding);
+ }
+
+ /**
+ * <code>Parser#parse()</code>
+ *
+ * <p>Parses the current JSON text <code>source</code> and returns the
+ * complete data structure as a result.
+ */
+ @JRubyMethod
+ public IRubyObject parse(ThreadContext context) {
+ return new ParserSession(this, context).parse();
+ }
+
+ /**
+ * <code>Parser#source()</code>
+ *
+ * <p>Returns a copy of the current <code>source</code> string, that was
+ * used to construct this Parser.
+ */
+ @JRubyMethod(name = "source")
+ public IRubyObject source_get() {
+ return vSource.dup();
+ }
+
+ /**
+ * Queries <code>JSON.create_id</code>. Returns <code>null</code> if it is
+ * set to <code>nil</code> or <code>false</code>, and a String if not.
+ */
+ private RubyString getCreateId(ThreadContext context) {
+ IRubyObject v = info.jsonModule.callMethod(context, "create_id");
+ return v.isTrue() ? v.convertToString() : null;
+ }
+
+ /**
+ * A string parsing session.
+ *
+ * <p>Once a ParserSession is instantiated, the source string should not
+ * change until the parsing is complete. The ParserSession object assumes
+ * the source {@link RubyString} is still associated to its original
+ * {@link ByteList}, which in turn must still be bound to the same
+ * <code>byte[]</code> value (and on the same offset).
+ */
+ // Ragel uses lots of fall-through
+ @SuppressWarnings("fallthrough")
+ private static class ParserSession {
+ private final Parser parser;
+ private final ThreadContext context;
+ private final ByteList byteList;
+ private final byte[] data;
+ private final StringDecoder decoder;
+ private int currentNesting = 0;
+
+ // initialization value for all state variables.
+ // no idea about the origins of this value, ask Flori ;)
+ private static final int EVIL = 0x666;
+
+ private ParserSession(Parser parser, ThreadContext context) {
+ this.parser = parser;
+ this.context = context;
+ this.byteList = parser.vSource.getByteList();
+ this.data = byteList.unsafeBytes();
+ this.decoder = new StringDecoder(context);
+ }
+
+ private RaiseException unexpectedToken(int absStart, int absEnd) {
+ RubyString msg = getRuntime().newString("unexpected token at '")
+ .cat(data, absStart, absEnd - absStart)
+ .cat((byte)'\'');
+ return newException(Utils.M_PARSER_ERROR, msg);
+ }
+
+ private Ruby getRuntime() {
+ return context.getRuntime();
+ }
+
+
+// line 324 "Parser.rl"
+
+
+
+// line 306 "Parser.java"
+private static byte[] init__JSON_value_actions_0()
+{
+ return new byte [] {
+ 0, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1,
+ 5, 1, 6, 1, 7, 1, 8, 1, 9
+ };
+}
+
+private static final byte _JSON_value_actions[] = init__JSON_value_actions_0();
+
+
+private static byte[] init__JSON_value_key_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
+ };
+}
+
+private static final byte _JSON_value_key_offsets[] = init__JSON_value_key_offsets_0();
+
+
+private static char[] init__JSON_value_trans_keys_0()
+{
+ return new char [] {
+ 34, 45, 73, 78, 91, 102, 110, 116, 123, 48, 57, 110,
+ 102, 105, 110, 105, 116, 121, 97, 78, 97, 108, 115, 101,
+ 117, 108, 108, 114, 117, 101, 0
+ };
+}
+
+private static final char _JSON_value_trans_keys[] = init__JSON_value_trans_keys_0();
+
+
+private static byte[] init__JSON_value_single_lengths_0()
+{
+ return new byte [] {
+ 0, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0
+ };
+}
+
+private static final byte _JSON_value_single_lengths[] = init__JSON_value_single_lengths_0();
+
+
+private static byte[] init__JSON_value_range_lengths_0()
+{
+ return new byte [] {
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ };
+}
+
+private static final byte _JSON_value_range_lengths[] = init__JSON_value_range_lengths_0();
+
+
+private static byte[] init__JSON_value_index_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29,
+ 31, 33, 35, 37, 39, 41, 43, 45, 47, 49
+ };
+}
+
+private static final byte _JSON_value_index_offsets[] = init__JSON_value_index_offsets_0();
+
+
+private static byte[] init__JSON_value_trans_targs_0()
+{
+ return new byte [] {
+ 21, 21, 2, 9, 21, 11, 15, 18, 21, 21, 0, 3,
+ 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 21,
+ 0, 10, 0, 21, 0, 12, 0, 13, 0, 14, 0, 21,
+ 0, 16, 0, 17, 0, 21, 0, 19, 0, 20, 0, 21,
+ 0, 0, 0
+ };
+}
+
+private static final byte _JSON_value_trans_targs[] = init__JSON_value_trans_targs_0();
+
+
+private static byte[] init__JSON_value_trans_actions_0()
+{
+ return new byte [] {
+ 13, 11, 0, 0, 15, 0, 0, 0, 17, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 5,
+ 0, 0, 0
+ };
+}
+
+private static final byte _JSON_value_trans_actions[] = init__JSON_value_trans_actions_0();
+
+
+private static byte[] init__JSON_value_from_state_actions_0()
+{
+ return new byte [] {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 19
+ };
+}
+
+private static final byte _JSON_value_from_state_actions[] = init__JSON_value_from_state_actions_0();
+
+
+static final int JSON_value_start = 1;
+static final int JSON_value_first_final = 21;
+static final int JSON_value_error = 0;
+
+static final int JSON_value_en_main = 1;
+
+
+// line 430 "Parser.rl"
+
+
+ ParserResult parseValue(int p, int pe) {
+ int cs = EVIL;
+ IRubyObject result = null;
+
+
+// line 428 "Parser.java"
+ {
+ cs = JSON_value_start;
+ }
+
+// line 437 "Parser.rl"
+
+// line 435 "Parser.java"
+ {
+ int _klen;
+ int _trans = 0;
+ int _acts;
+ int _nacts;
+ int _keys;
+ int _goto_targ = 0;
+
+ _goto: while (true) {
+ switch ( _goto_targ ) {
+ case 0:
+ if ( p == pe ) {
+ _goto_targ = 4;
+ continue _goto;
+ }
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+case 1:
+ _acts = _JSON_value_from_state_actions[cs];
+ _nacts = (int) _JSON_value_actions[_acts++];
+ while ( _nacts-- > 0 ) {
+ switch ( _JSON_value_actions[_acts++] ) {
+ case 9:
+// line 415 "Parser.rl"
+ {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ }
+ break;
+// line 467 "Parser.java"
+ }
+ }
+
+ _match: do {
+ _keys = _JSON_value_key_offsets[cs];
+ _trans = _JSON_value_index_offsets[cs];
+ _klen = _JSON_value_single_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + _klen - 1;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + ((_upper-_lower) >> 1);
+ if ( data[p] < _JSON_value_trans_keys[_mid] )
+ _upper = _mid - 1;
+ else if ( data[p] > _JSON_value_trans_keys[_mid] )
+ _lower = _mid + 1;
+ else {
+ _trans += (_mid - _keys);
+ break _match;
+ }
+ }
+ _keys += _klen;
+ _trans += _klen;
+ }
+
+ _klen = _JSON_value_range_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + (_klen<<1) - 2;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
+ if ( data[p] < _JSON_value_trans_keys[_mid] )
+ _upper = _mid - 2;
+ else if ( data[p] > _JSON_value_trans_keys[_mid+1] )
+ _lower = _mid + 2;
+ else {
+ _trans += ((_mid - _keys)>>1);
+ break _match;
+ }
+ }
+ _trans += _klen;
+ }
+ } while (false);
+
+ cs = _JSON_value_trans_targs[_trans];
+
+ if ( _JSON_value_trans_actions[_trans] != 0 ) {
+ _acts = _JSON_value_trans_actions[_trans];
+ _nacts = (int) _JSON_value_actions[_acts++];
+ while ( _nacts-- > 0 )
+ {
+ switch ( _JSON_value_actions[_acts++] )
+ {
+ case 0:
+// line 332 "Parser.rl"
+ {
+ result = getRuntime().getNil();
+ }
+ break;
+ case 1:
+// line 335 "Parser.rl"
+ {
+ result = getRuntime().getFalse();
+ }
+ break;
+ case 2:
+// line 338 "Parser.rl"
+ {
+ result = getRuntime().getTrue();
+ }
+ break;
+ case 3:
+// line 341 "Parser.rl"
+ {
+ if (parser.allowNaN) {
+ result = getConstant(CONST_NAN);
+ } else {
+ throw unexpectedToken(p - 2, pe);
+ }
+ }
+ break;
+ case 4:
+// line 348 "Parser.rl"
+ {
+ if (parser.allowNaN) {
+ result = getConstant(CONST_INFINITY);
+ } else {
+ throw unexpectedToken(p - 7, pe);
+ }
+ }
+ break;
+ case 5:
+// line 355 "Parser.rl"
+ {
+ if (pe > p + 9 &&
+ absSubSequence(p, p + 9).toString().equals(JSON_MINUS_INFINITY)) {
+
+ if (parser.allowNaN) {
+ result = getConstant(CONST_MINUS_INFINITY);
+ {p = (( p + 10))-1;}
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ } else {
+ throw unexpectedToken(p, pe);
+ }
+ }
+ ParserResult res = parseFloat(p, pe);
+ if (res != null) {
+ result = res.result;
+ {p = (( res.p))-1;}
+ }
+ res = parseInteger(p, pe);
+ if (res != null) {
+ result = res.result;
+ {p = (( res.p))-1;}
+ }
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ }
+ break;
+ case 6:
+// line 381 "Parser.rl"
+ {
+ ParserResult res = parseString(p, pe);
+ if (res == null) {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ } else {
+ result = res.result;
+ {p = (( res.p))-1;}
+ }
+ }
+ break;
+ case 7:
+// line 391 "Parser.rl"
+ {
+ currentNesting++;
+ ParserResult res = parseArray(p, pe);
+ currentNesting--;
+ if (res == null) {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ } else {
+ result = res.result;
+ {p = (( res.p))-1;}
+ }
+ }
+ break;
+ case 8:
+// line 403 "Parser.rl"
+ {
+ currentNesting++;
+ ParserResult res = parseObject(p, pe);
+ currentNesting--;
+ if (res == null) {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ } else {
+ result = res.result;
+ {p = (( res.p))-1;}
+ }
+ }
+ break;
+// line 639 "Parser.java"
+ }
+ }
+ }
+
+case 2:
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+ if ( ++p != pe ) {
+ _goto_targ = 1;
+ continue _goto;
+ }
+case 4:
+case 5:
+ }
+ break; }
+ }
+
+// line 438 "Parser.rl"
+
+ if (cs >= JSON_value_first_final && result != null) {
+ return new ParserResult(result, p);
+ } else {
+ return null;
+ }
+ }
+
+
+// line 669 "Parser.java"
+private static byte[] init__JSON_integer_actions_0()
+{
+ return new byte [] {
+ 0, 1, 0
+ };
+}
+
+private static final byte _JSON_integer_actions[] = init__JSON_integer_actions_0();
+
+
+private static byte[] init__JSON_integer_key_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 4, 7, 9, 11
+ };
+}
+
+private static final byte _JSON_integer_key_offsets[] = init__JSON_integer_key_offsets_0();
+
+
+private static char[] init__JSON_integer_trans_keys_0()
+{
+ return new char [] {
+ 45, 48, 49, 57, 48, 49, 57, 48, 57, 48, 57, 0
+ };
+}
+
+private static final char _JSON_integer_trans_keys[] = init__JSON_integer_trans_keys_0();
+
+
+private static byte[] init__JSON_integer_single_lengths_0()
+{
+ return new byte [] {
+ 0, 2, 1, 0, 0, 0
+ };
+}
+
+private static final byte _JSON_integer_single_lengths[] = init__JSON_integer_single_lengths_0();
+
+
+private static byte[] init__JSON_integer_range_lengths_0()
+{
+ return new byte [] {
+ 0, 1, 1, 1, 1, 0
+ };
+}
+
+private static final byte _JSON_integer_range_lengths[] = init__JSON_integer_range_lengths_0();
+
+
+private static byte[] init__JSON_integer_index_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 4, 7, 9, 11
+ };
+}
+
+private static final byte _JSON_integer_index_offsets[] = init__JSON_integer_index_offsets_0();
+
+
+private static byte[] init__JSON_integer_indicies_0()
+{
+ return new byte [] {
+ 0, 2, 3, 1, 2, 3, 1, 1, 4, 3, 4, 1,
+ 0
+ };
+}
+
+private static final byte _JSON_integer_indicies[] = init__JSON_integer_indicies_0();
+
+
+private static byte[] init__JSON_integer_trans_targs_0()
+{
+ return new byte [] {
+ 2, 0, 3, 4, 5
+ };
+}
+
+private static final byte _JSON_integer_trans_targs[] = init__JSON_integer_trans_targs_0();
+
+
+private static byte[] init__JSON_integer_trans_actions_0()
+{
+ return new byte [] {
+ 0, 0, 0, 0, 1
+ };
+}
+
+private static final byte _JSON_integer_trans_actions[] = init__JSON_integer_trans_actions_0();
+
+
+static final int JSON_integer_start = 1;
+static final int JSON_integer_first_final = 5;
+static final int JSON_integer_error = 0;
+
+static final int JSON_integer_en_main = 1;
+
+
+// line 457 "Parser.rl"
+
+
+ ParserResult parseInteger(int p, int pe) {
+ int cs = EVIL;
+
+
+// line 775 "Parser.java"
+ {
+ cs = JSON_integer_start;
+ }
+
+// line 463 "Parser.rl"
+ int memo = p;
+
+// line 783 "Parser.java"
+ {
+ int _klen;
+ int _trans = 0;
+ int _acts;
+ int _nacts;
+ int _keys;
+ int _goto_targ = 0;
+
+ _goto: while (true) {
+ switch ( _goto_targ ) {
+ case 0:
+ if ( p == pe ) {
+ _goto_targ = 4;
+ continue _goto;
+ }
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+case 1:
+ _match: do {
+ _keys = _JSON_integer_key_offsets[cs];
+ _trans = _JSON_integer_index_offsets[cs];
+ _klen = _JSON_integer_single_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + _klen - 1;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + ((_upper-_lower) >> 1);
+ if ( data[p] < _JSON_integer_trans_keys[_mid] )
+ _upper = _mid - 1;
+ else if ( data[p] > _JSON_integer_trans_keys[_mid] )
+ _lower = _mid + 1;
+ else {
+ _trans += (_mid - _keys);
+ break _match;
+ }
+ }
+ _keys += _klen;
+ _trans += _klen;
+ }
+
+ _klen = _JSON_integer_range_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + (_klen<<1) - 2;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
+ if ( data[p] < _JSON_integer_trans_keys[_mid] )
+ _upper = _mid - 2;
+ else if ( data[p] > _JSON_integer_trans_keys[_mid+1] )
+ _lower = _mid + 2;
+ else {
+ _trans += ((_mid - _keys)>>1);
+ break _match;
+ }
+ }
+ _trans += _klen;
+ }
+ } while (false);
+
+ _trans = _JSON_integer_indicies[_trans];
+ cs = _JSON_integer_trans_targs[_trans];
+
+ if ( _JSON_integer_trans_actions[_trans] != 0 ) {
+ _acts = _JSON_integer_trans_actions[_trans];
+ _nacts = (int) _JSON_integer_actions[_acts++];
+ while ( _nacts-- > 0 )
+ {
+ switch ( _JSON_integer_actions[_acts++] )
+ {
+ case 0:
+// line 451 "Parser.rl"
+ {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ }
+ break;
+// line 870 "Parser.java"
+ }
+ }
+ }
+
+case 2:
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+ if ( ++p != pe ) {
+ _goto_targ = 1;
+ continue _goto;
+ }
+case 4:
+case 5:
+ }
+ break; }
+ }
+
+// line 465 "Parser.rl"
+
+ if (cs < JSON_integer_first_final) {
+ return null;
+ }
+
+ ByteList num = absSubSequence(memo, p);
+ // note: this is actually a shared string, but since it is temporary and
+ // read-only, it doesn't really matter
+ RubyString expr = RubyString.newStringLight(getRuntime(), num);
+ RubyInteger number = RubyNumeric.str2inum(getRuntime(), expr, 10, true);
+ return new ParserResult(number, p + 1);
+ }
+
+
+// line 905 "Parser.java"
+private static byte[] init__JSON_float_actions_0()
+{
+ return new byte [] {
+ 0, 1, 0
+ };
+}
+
+private static final byte _JSON_float_actions[] = init__JSON_float_actions_0();
+
+
+private static byte[] init__JSON_float_key_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 4, 7, 10, 12, 18, 22, 24, 30, 35
+ };
+}
+
+private static final byte _JSON_float_key_offsets[] = init__JSON_float_key_offsets_0();
+
+
+private static char[] init__JSON_float_trans_keys_0()
+{
+ return new char [] {
+ 45, 48, 49, 57, 48, 49, 57, 46, 69, 101, 48, 57,
+ 69, 101, 45, 46, 48, 57, 43, 45, 48, 57, 48, 57,
+ 69, 101, 45, 46, 48, 57, 46, 69, 101, 48, 57, 0
+ };
+}
+
+private static final char _JSON_float_trans_keys[] = init__JSON_float_trans_keys_0();
+
+
+private static byte[] init__JSON_float_single_lengths_0()
+{
+ return new byte [] {
+ 0, 2, 1, 3, 0, 2, 2, 0, 2, 3, 0
+ };
+}
+
+private static final byte _JSON_float_single_lengths[] = init__JSON_float_single_lengths_0();
+
+
+private static byte[] init__JSON_float_range_lengths_0()
+{
+ return new byte [] {
+ 0, 1, 1, 0, 1, 2, 1, 1, 2, 1, 0
+ };
+}
+
+private static final byte _JSON_float_range_lengths[] = init__JSON_float_range_lengths_0();
+
+
+private static byte[] init__JSON_float_index_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 4, 7, 11, 13, 18, 22, 24, 29, 34
+ };
+}
+
+private static final byte _JSON_float_index_offsets[] = init__JSON_float_index_offsets_0();
+
+
+private static byte[] init__JSON_float_indicies_0()
+{
+ return new byte [] {
+ 0, 2, 3, 1, 2, 3, 1, 4, 5, 5, 1, 6,
+ 1, 5, 5, 1, 6, 7, 8, 8, 9, 1, 9, 1,
+ 1, 1, 1, 9, 7, 4, 5, 5, 3, 1, 1, 0
+ };
+}
+
+private static final byte _JSON_float_indicies[] = init__JSON_float_indicies_0();
+
+
+private static byte[] init__JSON_float_trans_targs_0()
+{
+ return new byte [] {
+ 2, 0, 3, 9, 4, 6, 5, 10, 7, 8
+ };
+}
+
+private static final byte _JSON_float_trans_targs[] = init__JSON_float_trans_targs_0();
+
+
+private static byte[] init__JSON_float_trans_actions_0()
+{
+ return new byte [] {
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0
+ };
+}
+
+private static final byte _JSON_float_trans_actions[] = init__JSON_float_trans_actions_0();
+
+
+static final int JSON_float_start = 1;
+static final int JSON_float_first_final = 10;
+static final int JSON_float_error = 0;
+
+static final int JSON_float_en_main = 1;
+
+
+// line 493 "Parser.rl"
+
+
+ ParserResult parseFloat(int p, int pe) {
+ int cs = EVIL;
+
+
+// line 1014 "Parser.java"
+ {
+ cs = JSON_float_start;
+ }
+
+// line 499 "Parser.rl"
+ int memo = p;
+
+// line 1022 "Parser.java"
+ {
+ int _klen;
+ int _trans = 0;
+ int _acts;
+ int _nacts;
+ int _keys;
+ int _goto_targ = 0;
+
+ _goto: while (true) {
+ switch ( _goto_targ ) {
+ case 0:
+ if ( p == pe ) {
+ _goto_targ = 4;
+ continue _goto;
+ }
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+case 1:
+ _match: do {
+ _keys = _JSON_float_key_offsets[cs];
+ _trans = _JSON_float_index_offsets[cs];
+ _klen = _JSON_float_single_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + _klen - 1;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + ((_upper-_lower) >> 1);
+ if ( data[p] < _JSON_float_trans_keys[_mid] )
+ _upper = _mid - 1;
+ else if ( data[p] > _JSON_float_trans_keys[_mid] )
+ _lower = _mid + 1;
+ else {
+ _trans += (_mid - _keys);
+ break _match;
+ }
+ }
+ _keys += _klen;
+ _trans += _klen;
+ }
+
+ _klen = _JSON_float_range_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + (_klen<<1) - 2;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
+ if ( data[p] < _JSON_float_trans_keys[_mid] )
+ _upper = _mid - 2;
+ else if ( data[p] > _JSON_float_trans_keys[_mid+1] )
+ _lower = _mid + 2;
+ else {
+ _trans += ((_mid - _keys)>>1);
+ break _match;
+ }
+ }
+ _trans += _klen;
+ }
+ } while (false);
+
+ _trans = _JSON_float_indicies[_trans];
+ cs = _JSON_float_trans_targs[_trans];
+
+ if ( _JSON_float_trans_actions[_trans] != 0 ) {
+ _acts = _JSON_float_trans_actions[_trans];
+ _nacts = (int) _JSON_float_actions[_acts++];
+ while ( _nacts-- > 0 )
+ {
+ switch ( _JSON_float_actions[_acts++] )
+ {
+ case 0:
+// line 484 "Parser.rl"
+ {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ }
+ break;
+// line 1109 "Parser.java"
+ }
+ }
+ }
+
+case 2:
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+ if ( ++p != pe ) {
+ _goto_targ = 1;
+ continue _goto;
+ }
+case 4:
+case 5:
+ }
+ break; }
+ }
+
+// line 501 "Parser.rl"
+
+ if (cs < JSON_float_first_final) {
+ return null;
+ }
+
+ ByteList num = absSubSequence(memo, p);
+ // note: this is actually a shared string, but since it is temporary and
+ // read-only, it doesn't really matter
+ RubyString expr = RubyString.newStringLight(getRuntime(), num);
+ RubyFloat number = RubyNumeric.str2fnum(getRuntime(), expr, true);
+ return new ParserResult(number, p + 1);
+ }
+
+
+// line 1144 "Parser.java"
+private static byte[] init__JSON_string_actions_0()
+{
+ return new byte [] {
+ 0, 2, 0, 1
+ };
+}
+
+private static final byte _JSON_string_actions[] = init__JSON_string_actions_0();
+
+
+private static byte[] init__JSON_string_key_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 1, 5, 8, 14, 20, 26, 32
+ };
+}
+
+private static final byte _JSON_string_key_offsets[] = init__JSON_string_key_offsets_0();
+
+
+private static char[] init__JSON_string_trans_keys_0()
+{
+ return new char [] {
+ 34, 34, 92, 0, 31, 117, 0, 31, 48, 57, 65, 70,
+ 97, 102, 48, 57, 65, 70, 97, 102, 48, 57, 65, 70,
+ 97, 102, 48, 57, 65, 70, 97, 102, 0
+ };
+}
+
+private static final char _JSON_string_trans_keys[] = init__JSON_string_trans_keys_0();
+
+
+private static byte[] init__JSON_string_single_lengths_0()
+{
+ return new byte [] {
+ 0, 1, 2, 1, 0, 0, 0, 0, 0
+ };
+}
+
+private static final byte _JSON_string_single_lengths[] = init__JSON_string_single_lengths_0();
+
+
+private static byte[] init__JSON_string_range_lengths_0()
+{
+ return new byte [] {
+ 0, 0, 1, 1, 3, 3, 3, 3, 0
+ };
+}
+
+private static final byte _JSON_string_range_lengths[] = init__JSON_string_range_lengths_0();
+
+
+private static byte[] init__JSON_string_index_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 2, 6, 9, 13, 17, 21, 25
+ };
+}
+
+private static final byte _JSON_string_index_offsets[] = init__JSON_string_index_offsets_0();
+
+
+private static byte[] init__JSON_string_indicies_0()
+{
+ return new byte [] {
+ 0, 1, 2, 3, 1, 0, 4, 1, 0, 5, 5, 5,
+ 1, 6, 6, 6, 1, 7, 7, 7, 1, 0, 0, 0,
+ 1, 1, 0
+ };
+}
+
+private static final byte _JSON_string_indicies[] = init__JSON_string_indicies_0();
+
+
+private static byte[] init__JSON_string_trans_targs_0()
+{
+ return new byte [] {
+ 2, 0, 8, 3, 4, 5, 6, 7
+ };
+}
+
+private static final byte _JSON_string_trans_targs[] = init__JSON_string_trans_targs_0();
+
+
+private static byte[] init__JSON_string_trans_actions_0()
+{
+ return new byte [] {
+ 0, 0, 1, 0, 0, 0, 0, 0
+ };
+}
+
+private static final byte _JSON_string_trans_actions[] = init__JSON_string_trans_actions_0();
+
+
+static final int JSON_string_start = 1;
+static final int JSON_string_first_final = 8;
+static final int JSON_string_error = 0;
+
+static final int JSON_string_en_main = 1;
+
+
+// line 545 "Parser.rl"
+
+
+ ParserResult parseString(int p, int pe) {
+ int cs = EVIL;
+ IRubyObject result = null;
+
+
+// line 1254 "Parser.java"
+ {
+ cs = JSON_string_start;
+ }
+
+// line 552 "Parser.rl"
+ int memo = p;
+
+// line 1262 "Parser.java"
+ {
+ int _klen;
+ int _trans = 0;
+ int _acts;
+ int _nacts;
+ int _keys;
+ int _goto_targ = 0;
+
+ _goto: while (true) {
+ switch ( _goto_targ ) {
+ case 0:
+ if ( p == pe ) {
+ _goto_targ = 4;
+ continue _goto;
+ }
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+case 1:
+ _match: do {
+ _keys = _JSON_string_key_offsets[cs];
+ _trans = _JSON_string_index_offsets[cs];
+ _klen = _JSON_string_single_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + _klen - 1;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + ((_upper-_lower) >> 1);
+ if ( data[p] < _JSON_string_trans_keys[_mid] )
+ _upper = _mid - 1;
+ else if ( data[p] > _JSON_string_trans_keys[_mid] )
+ _lower = _mid + 1;
+ else {
+ _trans += (_mid - _keys);
+ break _match;
+ }
+ }
+ _keys += _klen;
+ _trans += _klen;
+ }
+
+ _klen = _JSON_string_range_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + (_klen<<1) - 2;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
+ if ( data[p] < _JSON_string_trans_keys[_mid] )
+ _upper = _mid - 2;
+ else if ( data[p] > _JSON_string_trans_keys[_mid+1] )
+ _lower = _mid + 2;
+ else {
+ _trans += ((_mid - _keys)>>1);
+ break _match;
+ }
+ }
+ _trans += _klen;
+ }
+ } while (false);
+
+ _trans = _JSON_string_indicies[_trans];
+ cs = _JSON_string_trans_targs[_trans];
+
+ if ( _JSON_string_trans_actions[_trans] != 0 ) {
+ _acts = _JSON_string_trans_actions[_trans];
+ _nacts = (int) _JSON_string_actions[_acts++];
+ while ( _nacts-- > 0 )
+ {
+ switch ( _JSON_string_actions[_acts++] )
+ {
+ case 0:
+// line 520 "Parser.rl"
+ {
+ int offset = byteList.begin();
+ ByteList decoded = decoder.decode(byteList, memo + 1 - offset,
+ p - offset);
+ result = getRuntime().newString(decoded);
+ if (result == null) {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ } else {
+ {p = (( p + 1))-1;}
+ }
+ }
+ break;
+ case 1:
+// line 533 "Parser.rl"
+ {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ }
+ break;
+// line 1364 "Parser.java"
+ }
+ }
+ }
+
+case 2:
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+ if ( ++p != pe ) {
+ _goto_targ = 1;
+ continue _goto;
+ }
+case 4:
+case 5:
+ }
+ break; }
+ }
+
+// line 554 "Parser.rl"
+
+ if (parser.createAdditions) {
+ RubyHash match_string = parser.match_string;
+ if (match_string != null) {
+ final IRubyObject[] memoArray = { result, null };
+ try {
+ match_string.visitAll(new RubyHash.Visitor() {
+ @Override
+ public void visit(IRubyObject pattern, IRubyObject klass) {
+ if (pattern.callMethod(context, "===", memoArray[0]).isTrue()) {
+ memoArray[1] = klass;
+ throw JumpException.SPECIAL_JUMP;
+ }
+ }
+ });
+ } catch (JumpException e) { }
+ if (memoArray[1] != null) {
+ RubyClass klass = (RubyClass) memoArray[1];
+ if (klass.respondsTo("json_creatable?") &&
+ klass.callMethod(context, "json_creatable?").isTrue()) {
+ result = klass.callMethod(context, "json_create", result);
+ }
+ }
+ }
+ }
+
+ if (cs >= JSON_string_first_final && result != null) {
+ return new ParserResult(result, p + 1);
+ } else {
+ return null;
+ }
+ }
+
+
+// line 1419 "Parser.java"
+private static byte[] init__JSON_array_actions_0()
+{
+ return new byte [] {
+ 0, 1, 0, 1, 1
+ };
+}
+
+private static final byte _JSON_array_actions[] = init__JSON_array_actions_0();
+
+
+private static byte[] init__JSON_array_key_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 1, 18, 25, 41, 43, 44, 46, 47, 49, 50,
+ 52, 53, 55, 56, 58, 59
+ };
+}
+
+private static final byte _JSON_array_key_offsets[] = init__JSON_array_key_offsets_0();
+
+
+private static char[] init__JSON_array_trans_keys_0()
+{
+ return new char [] {
+ 91, 13, 32, 34, 45, 47, 73, 78, 91, 93, 102, 110,
+ 116, 123, 9, 10, 48, 57, 13, 32, 44, 47, 93, 9,
+ 10, 13, 32, 34, 45, 47, 73, 78, 91, 102, 110, 116,
+ 123, 9, 10, 48, 57, 42, 47, 42, 42, 47, 10, 42,
+ 47, 42, 42, 47, 10, 42, 47, 42, 42, 47, 10, 0
+ };
+}
+
+private static final char _JSON_array_trans_keys[] = init__JSON_array_trans_keys_0();
+
+
+private static byte[] init__JSON_array_single_lengths_0()
+{
+ return new byte [] {
+ 0, 1, 13, 5, 12, 2, 1, 2, 1, 2, 1, 2,
+ 1, 2, 1, 2, 1, 0
+ };
+}
+
+private static final byte _JSON_array_single_lengths[] = init__JSON_array_single_lengths_0();
+
+
+private static byte[] init__JSON_array_range_lengths_0()
+{
+ return new byte [] {
+ 0, 0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0
+ };
+}
+
+private static final byte _JSON_array_range_lengths[] = init__JSON_array_range_lengths_0();
+
+
+private static byte[] init__JSON_array_index_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 2, 18, 25, 40, 43, 45, 48, 50, 53, 55,
+ 58, 60, 63, 65, 68, 70
+ };
+}
+
+private static final byte _JSON_array_index_offsets[] = init__JSON_array_index_offsets_0();
+
+
+private static byte[] init__JSON_array_indicies_0()
+{
+ return new byte [] {
+ 0, 1, 0, 0, 2, 2, 3, 2, 2, 2, 4, 2,
+ 2, 2, 2, 0, 2, 1, 5, 5, 6, 7, 4, 5,
+ 1, 6, 6, 2, 2, 8, 2, 2, 2, 2, 2, 2,
+ 2, 6, 2, 1, 9, 10, 1, 11, 9, 11, 6, 9,
+ 6, 10, 12, 13, 1, 14, 12, 14, 5, 12, 5, 13,
+ 15, 16, 1, 17, 15, 17, 0, 15, 0, 16, 1, 0
+ };
+}
+
+private static final byte _JSON_array_indicies[] = init__JSON_array_indicies_0();
+
+
+private static byte[] init__JSON_array_trans_targs_0()
+{
+ return new byte [] {
+ 2, 0, 3, 13, 17, 3, 4, 9, 5, 6, 8, 7,
+ 10, 12, 11, 14, 16, 15
+ };
+}
+
+private static final byte _JSON_array_trans_targs[] = init__JSON_array_trans_targs_0();
+
+
+private static byte[] init__JSON_array_trans_actions_0()
+{
+ return new byte [] {
+ 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0
+ };
+}
+
+private static final byte _JSON_array_trans_actions[] = init__JSON_array_trans_actions_0();
+
+
+static final int JSON_array_start = 1;
+static final int JSON_array_first_final = 17;
+static final int JSON_array_error = 0;
+
+static final int JSON_array_en_main = 1;
+
+
+// line 620 "Parser.rl"
+
+
+ ParserResult parseArray(int p, int pe) {
+ int cs = EVIL;
+
+ if (parser.maxNesting > 0 && currentNesting > parser.maxNesting) {
+ throw newException(Utils.M_NESTING_ERROR,
+ "nesting of " + currentNesting + " is too deep");
+ }
+
+ // this is guaranteed to be a RubyArray due to the earlier
+ // allocator test at OptionsReader#getClass
+ RubyArray result =
+ (RubyArray)parser.arrayClass.newInstance(context,
+ IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
+
+
+// line 1550 "Parser.java"
+ {
+ cs = JSON_array_start;
+ }
+
+// line 637 "Parser.rl"
+
+// line 1557 "Parser.java"
+ {
+ int _klen;
+ int _trans = 0;
+ int _acts;
+ int _nacts;
+ int _keys;
+ int _goto_targ = 0;
+
+ _goto: while (true) {
+ switch ( _goto_targ ) {
+ case 0:
+ if ( p == pe ) {
+ _goto_targ = 4;
+ continue _goto;
+ }
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+case 1:
+ _match: do {
+ _keys = _JSON_array_key_offsets[cs];
+ _trans = _JSON_array_index_offsets[cs];
+ _klen = _JSON_array_single_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + _klen - 1;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + ((_upper-_lower) >> 1);
+ if ( data[p] < _JSON_array_trans_keys[_mid] )
+ _upper = _mid - 1;
+ else if ( data[p] > _JSON_array_trans_keys[_mid] )
+ _lower = _mid + 1;
+ else {
+ _trans += (_mid - _keys);
+ break _match;
+ }
+ }
+ _keys += _klen;
+ _trans += _klen;
+ }
+
+ _klen = _JSON_array_range_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + (_klen<<1) - 2;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
+ if ( data[p] < _JSON_array_trans_keys[_mid] )
+ _upper = _mid - 2;
+ else if ( data[p] > _JSON_array_trans_keys[_mid+1] )
+ _lower = _mid + 2;
+ else {
+ _trans += ((_mid - _keys)>>1);
+ break _match;
+ }
+ }
+ _trans += _klen;
+ }
+ } while (false);
+
+ _trans = _JSON_array_indicies[_trans];
+ cs = _JSON_array_trans_targs[_trans];
+
+ if ( _JSON_array_trans_actions[_trans] != 0 ) {
+ _acts = _JSON_array_trans_actions[_trans];
+ _nacts = (int) _JSON_array_actions[_acts++];
+ while ( _nacts-- > 0 )
+ {
+ switch ( _JSON_array_actions[_acts++] )
+ {
+ case 0:
+// line 593 "Parser.rl"
+ {
+ ParserResult res = parseValue(p, pe);
+ if (res == null) {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ } else {
+ result.append(res.result);
+ {p = (( res.p))-1;}
+ }
+ }
+ break;
+ case 1:
+// line 604 "Parser.rl"
+ {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ }
+ break;
+// line 1657 "Parser.java"
+ }
+ }
+ }
+
+case 2:
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+ if ( ++p != pe ) {
+ _goto_targ = 1;
+ continue _goto;
+ }
+case 4:
+case 5:
+ }
+ break; }
+ }
+
+// line 638 "Parser.rl"
+
+ if (cs >= JSON_array_first_final) {
+ return new ParserResult(result, p + 1);
+ } else {
+ throw unexpectedToken(p, pe);
+ }
+ }
+
+
+// line 1687 "Parser.java"
+private static byte[] init__JSON_object_actions_0()
+{
+ return new byte [] {
+ 0, 1, 0, 1, 1, 1, 2
+ };
+}
+
+private static final byte _JSON_object_actions[] = init__JSON_object_actions_0();
+
+
+private static byte[] init__JSON_object_key_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 1, 8, 14, 16, 17, 19, 20, 36, 43, 49,
+ 51, 52, 54, 55, 57, 58, 60, 61, 63, 64, 66, 67,
+ 69, 70, 72, 73
+ };
+}
+
+private static final byte _JSON_object_key_offsets[] = init__JSON_object_key_offsets_0();
+
+
+private static char[] init__JSON_object_trans_keys_0()
+{
+ return new char [] {
+ 123, 13, 32, 34, 47, 125, 9, 10, 13, 32, 47, 58,
+ 9, 10, 42, 47, 42, 42, 47, 10, 13, 32, 34, 45,
+ 47, 73, 78, 91, 102, 110, 116, 123, 9, 10, 48, 57,
+ 13, 32, 44, 47, 125, 9, 10, 13, 32, 34, 47, 9,
+ 10, 42, 47, 42, 42, 47, 10, 42, 47, 42, 42, 47,
+ 10, 42, 47, 42, 42, 47, 10, 42, 47, 42, 42, 47,
+ 10, 0
+ };
+}
+
+private static final char _JSON_object_trans_keys[] = init__JSON_object_trans_keys_0();
+
+
+private static byte[] init__JSON_object_single_lengths_0()
+{
+ return new byte [] {
+ 0, 1, 5, 4, 2, 1, 2, 1, 12, 5, 4, 2,
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
+ 1, 2, 1, 0
+ };
+}
+
+private static final byte _JSON_object_single_lengths[] = init__JSON_object_single_lengths_0();
+
+
+private static byte[] init__JSON_object_range_lengths_0()
+{
+ return new byte [] {
+ 0, 0, 1, 1, 0, 0, 0, 0, 2, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0
+ };
+}
+
+private static final byte _JSON_object_range_lengths[] = init__JSON_object_range_lengths_0();
+
+
+private static byte[] init__JSON_object_index_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 2, 9, 15, 18, 20, 23, 25, 40, 47, 53,
+ 56, 58, 61, 63, 66, 68, 71, 73, 76, 78, 81, 83,
+ 86, 88, 91, 93
+ };
+}
+
+private static final byte _JSON_object_index_offsets[] = init__JSON_object_index_offsets_0();
+
+
+private static byte[] init__JSON_object_indicies_0()
+{
+ return new byte [] {
+ 0, 1, 0, 0, 2, 3, 4, 0, 1, 5, 5, 6,
+ 7, 5, 1, 8, 9, 1, 10, 8, 10, 5, 8, 5,
+ 9, 7, 7, 11, 11, 12, 11, 11, 11, 11, 11, 11,
+ 11, 7, 11, 1, 13, 13, 14, 15, 4, 13, 1, 14,
+ 14, 2, 16, 14, 1, 17, 18, 1, 19, 17, 19, 14,
+ 17, 14, 18, 20, 21, 1, 22, 20, 22, 13, 20, 13,
+ 21, 23, 24, 1, 25, 23, 25, 7, 23, 7, 24, 26,
+ 27, 1, 28, 26, 28, 0, 26, 0, 27, 1, 0
+ };
+}
+
+private static final byte _JSON_object_indicies[] = init__JSON_object_indicies_0();
+
+
+private static byte[] init__JSON_object_trans_targs_0()
+{
+ return new byte [] {
+ 2, 0, 3, 23, 27, 3, 4, 8, 5, 7, 6, 9,
+ 19, 9, 10, 15, 11, 12, 14, 13, 16, 18, 17, 20,
+ 22, 21, 24, 26, 25
+ };
+}
+
+private static final byte _JSON_object_trans_targs[] = init__JSON_object_trans_targs_0();
+
+
+private static byte[] init__JSON_object_trans_actions_0()
+{
+ return new byte [] {
+ 0, 0, 3, 0, 5, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0
+ };
+}
+
+private static final byte _JSON_object_trans_actions[] = init__JSON_object_trans_actions_0();
+
+
+static final int JSON_object_start = 1;
+static final int JSON_object_first_final = 27;
+static final int JSON_object_error = 0;
+
+static final int JSON_object_en_main = 1;
+
+
+// line 694 "Parser.rl"
+
+
+ ParserResult parseObject(int p, int pe) {
+ int cs = EVIL;
+ IRubyObject lastName = null;
+
+ if (parser.maxNesting > 0 && currentNesting > parser.maxNesting) {
+ throw newException(Utils.M_NESTING_ERROR,
+ "nesting of " + currentNesting + " is too deep");
+ }
+
+ // this is guaranteed to be a RubyHash due to the earlier
+ // allocator test at OptionsReader#getClass
+ RubyHash result =
+ (RubyHash)parser.objectClass.newInstance(context,
+ IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
+
+
+// line 1829 "Parser.java"
+ {
+ cs = JSON_object_start;
+ }
+
+// line 712 "Parser.rl"
+
+// line 1836 "Parser.java"
+ {
+ int _klen;
+ int _trans = 0;
+ int _acts;
+ int _nacts;
+ int _keys;
+ int _goto_targ = 0;
+
+ _goto: while (true) {
+ switch ( _goto_targ ) {
+ case 0:
+ if ( p == pe ) {
+ _goto_targ = 4;
+ continue _goto;
+ }
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+case 1:
+ _match: do {
+ _keys = _JSON_object_key_offsets[cs];
+ _trans = _JSON_object_index_offsets[cs];
+ _klen = _JSON_object_single_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + _klen - 1;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + ((_upper-_lower) >> 1);
+ if ( data[p] < _JSON_object_trans_keys[_mid] )
+ _upper = _mid - 1;
+ else if ( data[p] > _JSON_object_trans_keys[_mid] )
+ _lower = _mid + 1;
+ else {
+ _trans += (_mid - _keys);
+ break _match;
+ }
+ }
+ _keys += _klen;
+ _trans += _klen;
+ }
+
+ _klen = _JSON_object_range_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + (_klen<<1) - 2;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
+ if ( data[p] < _JSON_object_trans_keys[_mid] )
+ _upper = _mid - 2;
+ else if ( data[p] > _JSON_object_trans_keys[_mid+1] )
+ _lower = _mid + 2;
+ else {
+ _trans += ((_mid - _keys)>>1);
+ break _match;
+ }
+ }
+ _trans += _klen;
+ }
+ } while (false);
+
+ _trans = _JSON_object_indicies[_trans];
+ cs = _JSON_object_trans_targs[_trans];
+
+ if ( _JSON_object_trans_actions[_trans] != 0 ) {
+ _acts = _JSON_object_trans_actions[_trans];
+ _nacts = (int) _JSON_object_actions[_acts++];
+ while ( _nacts-- > 0 )
+ {
+ switch ( _JSON_object_actions[_acts++] )
+ {
+ case 0:
+// line 652 "Parser.rl"
+ {
+ ParserResult res = parseValue(p, pe);
+ if (res == null) {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ } else {
+ result.op_aset(context, lastName, res.result);
+ {p = (( res.p))-1;}
+ }
+ }
+ break;
+ case 1:
+// line 663 "Parser.rl"
+ {
+ ParserResult res = parseString(p, pe);
+ if (res == null) {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ } else {
+ RubyString name = (RubyString)res.result;
+ if (parser.symbolizeNames) {
+ lastName = context.getRuntime().is1_9()
+ ? name.intern19()
+ : name.intern();
+ } else {
+ lastName = name;
+ }
+ {p = (( res.p))-1;}
+ }
+ }
+ break;
+ case 2:
+// line 681 "Parser.rl"
+ {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ }
+ break;
+// line 1956 "Parser.java"
+ }
+ }
+ }
+
+case 2:
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+ if ( ++p != pe ) {
+ _goto_targ = 1;
+ continue _goto;
+ }
+case 4:
+case 5:
+ }
+ break; }
+ }
+
+// line 713 "Parser.rl"
+
+ if (cs < JSON_object_first_final) {
+ return null;
+ }
+
+ IRubyObject returnedResult = result;
+
+ // attempt to de-serialize object
+ if (parser.createAdditions) {
+ IRubyObject vKlassName = result.op_aref(context, parser.createId);
+ if (!vKlassName.isNil()) {
+ // might throw ArgumentError, we let it propagate
+ IRubyObject klass = parser.info.jsonModule.
+ callMethod(context, "deep_const_get", vKlassName);
+ if (klass.respondsTo("json_creatable?") &&
+ klass.callMethod(context, "json_creatable?").isTrue()) {
+
+ returnedResult = klass.callMethod(context, "json_create", result);
+ }
+ }
+ }
+ return new ParserResult(returnedResult, p + 1);
+ }
+
+
+// line 2002 "Parser.java"
+private static byte[] init__JSON_actions_0()
+{
+ return new byte [] {
+ 0, 1, 0, 1, 1
+ };
+}
+
+private static final byte _JSON_actions[] = init__JSON_actions_0();
+
+
+private static byte[] init__JSON_key_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 7, 9, 10, 12, 13, 15, 16, 18, 19
+ };
+}
+
+private static final byte _JSON_key_offsets[] = init__JSON_key_offsets_0();
+
+
+private static char[] init__JSON_trans_keys_0()
+{
+ return new char [] {
+ 13, 32, 47, 91, 123, 9, 10, 42, 47, 42, 42, 47,
+ 10, 42, 47, 42, 42, 47, 10, 13, 32, 47, 9, 10,
+ 0
+ };
+}
+
+private static final char _JSON_trans_keys[] = init__JSON_trans_keys_0();
+
+
+private static byte[] init__JSON_single_lengths_0()
+{
+ return new byte [] {
+ 0, 5, 2, 1, 2, 1, 2, 1, 2, 1, 3
+ };
+}
+
+private static final byte _JSON_single_lengths[] = init__JSON_single_lengths_0();
+
+
+private static byte[] init__JSON_range_lengths_0()
+{
+ return new byte [] {
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
+ };
+}
+
+private static final byte _JSON_range_lengths[] = init__JSON_range_lengths_0();
+
+
+private static byte[] init__JSON_index_offsets_0()
+{
+ return new byte [] {
+ 0, 0, 7, 10, 12, 15, 17, 20, 22, 25, 27
+ };
+}
+
+private static final byte _JSON_index_offsets[] = init__JSON_index_offsets_0();
+
+
+private static byte[] init__JSON_indicies_0()
+{
+ return new byte [] {
+ 0, 0, 2, 3, 4, 0, 1, 5, 6, 1, 7, 5,
+ 7, 0, 5, 0, 6, 8, 9, 1, 10, 8, 10, 11,
+ 8, 11, 9, 11, 11, 12, 11, 1, 0
+ };
+}
+
+private static final byte _JSON_indicies[] = init__JSON_indicies_0();
+
+
+private static byte[] init__JSON_trans_targs_0()
+{
+ return new byte [] {
+ 1, 0, 2, 10, 10, 3, 5, 4, 7, 9, 8, 10,
+ 6
+ };
+}
+
+private static final byte _JSON_trans_targs[] = init__JSON_trans_targs_0();
+
+
+private static byte[] init__JSON_trans_actions_0()
+{
+ return new byte [] {
+ 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0
+ };
+}
+
+private static final byte _JSON_trans_actions[] = init__JSON_trans_actions_0();
+
+
+static final int JSON_start = 1;
+static final int JSON_first_final = 10;
+static final int JSON_error = 0;
+
+static final int JSON_en_main = 1;
+
+
+// line 771 "Parser.rl"
+
+
+ public IRubyObject parse() {
+ int cs = EVIL;
+ int p, pe;
+ IRubyObject result = null;
+
+
+// line 2115 "Parser.java"
+ {
+ cs = JSON_start;
+ }
+
+// line 779 "Parser.rl"
+ p = byteList.begin();
+ pe = p + byteList.length();
+
+// line 2124 "Parser.java"
+ {
+ int _klen;
+ int _trans = 0;
+ int _acts;
+ int _nacts;
+ int _keys;
+ int _goto_targ = 0;
+
+ _goto: while (true) {
+ switch ( _goto_targ ) {
+ case 0:
+ if ( p == pe ) {
+ _goto_targ = 4;
+ continue _goto;
+ }
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+case 1:
+ _match: do {
+ _keys = _JSON_key_offsets[cs];
+ _trans = _JSON_index_offsets[cs];
+ _klen = _JSON_single_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + _klen - 1;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + ((_upper-_lower) >> 1);
+ if ( data[p] < _JSON_trans_keys[_mid] )
+ _upper = _mid - 1;
+ else if ( data[p] > _JSON_trans_keys[_mid] )
+ _lower = _mid + 1;
+ else {
+ _trans += (_mid - _keys);
+ break _match;
+ }
+ }
+ _keys += _klen;
+ _trans += _klen;
+ }
+
+ _klen = _JSON_range_lengths[cs];
+ if ( _klen > 0 ) {
+ int _lower = _keys;
+ int _mid;
+ int _upper = _keys + (_klen<<1) - 2;
+ while (true) {
+ if ( _upper < _lower )
+ break;
+
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
+ if ( data[p] < _JSON_trans_keys[_mid] )
+ _upper = _mid - 2;
+ else if ( data[p] > _JSON_trans_keys[_mid+1] )
+ _lower = _mid + 2;
+ else {
+ _trans += ((_mid - _keys)>>1);
+ break _match;
+ }
+ }
+ _trans += _klen;
+ }
+ } while (false);
+
+ _trans = _JSON_indicies[_trans];
+ cs = _JSON_trans_targs[_trans];
+
+ if ( _JSON_trans_actions[_trans] != 0 ) {
+ _acts = _JSON_trans_actions[_trans];
+ _nacts = (int) _JSON_actions[_acts++];
+ while ( _nacts-- > 0 )
+ {
+ switch ( _JSON_actions[_acts++] )
+ {
+ case 0:
+// line 743 "Parser.rl"
+ {
+ currentNesting = 1;
+ ParserResult res = parseObject(p, pe);
+ if (res == null) {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ } else {
+ result = res.result;
+ {p = (( res.p))-1;}
+ }
+ }
+ break;
+ case 1:
+// line 755 "Parser.rl"
+ {
+ currentNesting = 1;
+ ParserResult res = parseArray(p, pe);
+ if (res == null) {
+ p--;
+ { p += 1; _goto_targ = 5; if (true) continue _goto;}
+ } else {
+ result = res.result;
+ {p = (( res.p))-1;}
+ }
+ }
+ break;
+// line 2232 "Parser.java"
+ }
+ }
+ }
+
+case 2:
+ if ( cs == 0 ) {
+ _goto_targ = 5;
+ continue _goto;
+ }
+ if ( ++p != pe ) {
+ _goto_targ = 1;
+ continue _goto;
+ }
+case 4:
+case 5:
+ }
+ break; }
+ }
+
+// line 782 "Parser.rl"
+
+ if (cs >= JSON_first_final && p == pe) {
+ return result;
+ } else {
+ throw unexpectedToken(p, pe);
+ }
+ }
+
+ /**
+ * Returns a subsequence of the source ByteList, based on source
+ * array byte offsets (i.e., the ByteList's own begin offset is not
+ * automatically added).
+ * @param start
+ * @param end
+ */
+ private ByteList absSubSequence(int absStart, int absEnd) {
+ int offset = byteList.begin();
+ return (ByteList)byteList.subSequence(absStart - offset,
+ absEnd - offset);
+ }
+
+ /**
+ * Retrieves a constant directly descended from the <code>JSON</code> module.
+ * @param name The constant name
+ */
+ private IRubyObject getConstant(String name) {
+ return parser.info.jsonModule.getConstant(name);
+ }
+
+ private RaiseException newException(String className, String message) {
+ return Utils.newException(context, className, message);
+ }
+
+ private RaiseException newException(String className, RubyString message) {
+ return Utils.newException(context, className, message);
+ }
+
+ private RaiseException newException(String className,
+ String messageBegin, ByteList messageEnd) {
+ return newException(className,
+ getRuntime().newString(messageBegin).cat(messageEnd));
+ }
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/Parser.rl b/vendor/gems/json-1.5.1/java/src/json/ext/Parser.rl
new file mode 100644
index 000000000..e576b9790
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/Parser.rl
@@ -0,0 +1,825 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import org.jruby.Ruby;
+import org.jruby.RubyArray;
+import org.jruby.RubyClass;
+import org.jruby.RubyEncoding;
+import org.jruby.RubyFloat;
+import org.jruby.RubyHash;
+import org.jruby.RubyInteger;
+import org.jruby.RubyModule;
+import org.jruby.RubyNumeric;
+import org.jruby.RubyObject;
+import org.jruby.RubyString;
+import org.jruby.anno.JRubyMethod;
+import org.jruby.exceptions.JumpException;
+import org.jruby.exceptions.RaiseException;
+import org.jruby.runtime.Block;
+import org.jruby.runtime.ObjectAllocator;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.Visibility;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.util.ByteList;
+
+/**
+ * The <code>JSON::Ext::Parser</code> class.
+ *
+ * <p>This is the JSON parser implemented as a Java class. To use it as the
+ * standard parser, set
+ * <pre>JSON.parser = JSON::Ext::Parser</pre>
+ * This is performed for you when you <code>include "json/ext"</code>.
+ *
+ * <p>This class does not perform the actual parsing, just acts as an interface
+ * to Ruby code. When the {@link #parse()} method is invoked, a
+ * Parser.ParserSession object is instantiated, which handles the process.
+ *
+ * @author mernen
+ */
+public class Parser extends RubyObject {
+ private final RuntimeInfo info;
+ private RubyString vSource;
+ private RubyString createId;
+ private boolean createAdditions;
+ private int maxNesting;
+ private boolean allowNaN;
+ private boolean symbolizeNames;
+ private RubyClass objectClass;
+ private RubyClass arrayClass;
+ private RubyHash match_string;
+
+ private static final int DEFAULT_MAX_NESTING = 19;
+
+ private static final String JSON_MINUS_INFINITY = "-Infinity";
+ // constant names in the JSON module containing those values
+ private static final String CONST_NAN = "NaN";
+ private static final String CONST_INFINITY = "Infinity";
+ private static final String CONST_MINUS_INFINITY = "MinusInfinity";
+
+ static final ObjectAllocator ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new Parser(runtime, klazz);
+ }
+ };
+
+ /**
+ * Multiple-value return for internal parser methods.
+ *
+ * <p>All the <code>parse<var>Stuff</var></code> methods return instances of
+ * <code>ParserResult</code> when successful, or <code>null</code> when
+ * there's a problem with the input data.
+ */
+ static final class ParserResult {
+ /**
+ * The result of the successful parsing. Should never be
+ * <code>null</code>.
+ */
+ final IRubyObject result;
+ /**
+ * The point where the parser returned.
+ */
+ final int p;
+
+ ParserResult(IRubyObject result, int p) {
+ this.result = result;
+ this.p = p;
+ }
+ }
+
+ public Parser(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ info = RuntimeInfo.forRuntime(runtime);
+ }
+
+ /**
+ * <code>Parser.new(source, opts = {})</code>
+ *
+ * <p>Creates a new <code>JSON::Ext::Parser</code> instance for the string
+ * <code>source</code>.
+ * It will be configured by the <code>opts</code> Hash.
+ * <code>opts</code> can have the following keys:
+ *
+ * <dl>
+ * <dt><code>:max_nesting</code>
+ * <dd>The maximum depth of nesting allowed in the parsed data
+ * structures. Disable depth checking with <code>:max_nesting => false|nil|0</code>,
+ * it defaults to 19.
+ *
+ * <dt><code>:allow_nan</code>
+ * <dd>If set to <code>true</code>, allow <code>NaN</code>,
+ * <code>Infinity</code> and <code>-Infinity</code> in defiance of RFC 4627
+ * to be parsed by the Parser. This option defaults to <code>false</code>.
+ *
+ * <dt><code>:symbolize_names</code>
+ * <dd>If set to <code>true</code>, returns symbols for the names (keys) in
+ * a JSON object. Otherwise strings are returned, which is also the default.
+ *
+ * <dt><code>:create_additions</code>
+ * <dd>If set to <code>false</code>, the Parser doesn't create additions
+ * even if a matchin class and <code>create_id</code> was found. This option
+ * defaults to <code>true</code>.
+ *
+ * <dt><code>:object_class</code>
+ * <dd>Defaults to Hash.
+ *
+ * <dt><code>:array_class</code>
+ * <dd>Defaults to Array.
+ * </dl>
+ */
+ @JRubyMethod(name = "new", required = 1, optional = 1, meta = true)
+ public static IRubyObject newInstance(IRubyObject clazz, IRubyObject[] args, Block block) {
+ Parser parser = (Parser)((RubyClass)clazz).allocate();
+
+ parser.callInit(args, block);
+
+ return parser;
+ }
+
+ @JRubyMethod(required = 1, optional = 1, visibility = Visibility.PRIVATE)
+ public IRubyObject initialize(ThreadContext context, IRubyObject[] args) {
+ Ruby runtime = context.getRuntime();
+ RubyString source = convertEncoding(context, args[0].convertToString());
+
+ OptionsReader opts = new OptionsReader(context, args.length > 1 ? args[1] : null);
+ this.maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
+ this.allowNaN = opts.getBool("allow_nan", false);
+ this.symbolizeNames = opts.getBool("symbolize_names", false);
+ this.createId = opts.getString("create_id", getCreateId(context));
+ this.createAdditions = opts.getBool("create_additions", true);
+ this.objectClass = opts.getClass("object_class", runtime.getHash());
+ this.arrayClass = opts.getClass("array_class", runtime.getArray());
+ this.match_string = opts.getHash("match_string");
+
+ this.vSource = source;
+ return this;
+ }
+
+ /**
+ * Checks the given string's encoding. If a non-UTF-8 encoding is detected,
+ * a converted copy is returned.
+ * Returns the source string if no conversion is needed.
+ */
+ private RubyString convertEncoding(ThreadContext context, RubyString source) {
+ ByteList bl = source.getByteList();
+ int len = bl.length();
+ if (len < 2) {
+ throw Utils.newException(context, Utils.M_PARSER_ERROR,
+ "A JSON text must at least contain two octets!");
+ }
+
+ if (info.encodingsSupported()) {
+ RubyEncoding encoding = (RubyEncoding)source.encoding(context);
+ if (encoding != info.ascii8bit) {
+ return (RubyString)source.encode(context, info.utf8);
+ }
+
+ String sniffedEncoding = sniffByteList(bl);
+ if (sniffedEncoding == null) return source; // assume UTF-8
+ return reinterpretEncoding(context, source, sniffedEncoding);
+ }
+
+ String sniffedEncoding = sniffByteList(bl);
+ if (sniffedEncoding == null) return source; // assume UTF-8
+ Ruby runtime = context.getRuntime();
+ return (RubyString)info.jsonModule.
+ callMethod(context, "iconv",
+ new IRubyObject[] {
+ runtime.newString("utf-8"),
+ runtime.newString(sniffedEncoding),
+ source});
+ }
+
+ /**
+ * Checks the first four bytes of the given ByteList to infer its encoding,
+ * using the principle demonstrated on section 3 of RFC 4627 (JSON).
+ */
+ private static String sniffByteList(ByteList bl) {
+ if (bl.length() < 4) return null;
+ if (bl.get(0) == 0 && bl.get(2) == 0) {
+ return bl.get(1) == 0 ? "utf-32be" : "utf-16be";
+ }
+ if (bl.get(1) == 0 && bl.get(3) == 0) {
+ return bl.get(2) == 0 ? "utf-32le" : "utf-16le";
+ }
+ return null;
+ }
+
+ /**
+ * Assumes the given (binary) RubyString to be in the given encoding, then
+ * converts it to UTF-8.
+ */
+ private RubyString reinterpretEncoding(ThreadContext context,
+ RubyString str, String sniffedEncoding) {
+ RubyEncoding actualEncoding = info.getEncoding(context, sniffedEncoding);
+ RubyEncoding targetEncoding = info.utf8;
+ RubyString dup = (RubyString)str.dup();
+ dup.force_encoding(context, actualEncoding);
+ return (RubyString)dup.encode_bang(context, targetEncoding);
+ }
+
+ /**
+ * <code>Parser#parse()</code>
+ *
+ * <p>Parses the current JSON text <code>source</code> and returns the
+ * complete data structure as a result.
+ */
+ @JRubyMethod
+ public IRubyObject parse(ThreadContext context) {
+ return new ParserSession(this, context).parse();
+ }
+
+ /**
+ * <code>Parser#source()</code>
+ *
+ * <p>Returns a copy of the current <code>source</code> string, that was
+ * used to construct this Parser.
+ */
+ @JRubyMethod(name = "source")
+ public IRubyObject source_get() {
+ return vSource.dup();
+ }
+
+ /**
+ * Queries <code>JSON.create_id</code>. Returns <code>null</code> if it is
+ * set to <code>nil</code> or <code>false</code>, and a String if not.
+ */
+ private RubyString getCreateId(ThreadContext context) {
+ IRubyObject v = info.jsonModule.callMethod(context, "create_id");
+ return v.isTrue() ? v.convertToString() : null;
+ }
+
+ /**
+ * A string parsing session.
+ *
+ * <p>Once a ParserSession is instantiated, the source string should not
+ * change until the parsing is complete. The ParserSession object assumes
+ * the source {@link RubyString} is still associated to its original
+ * {@link ByteList}, which in turn must still be bound to the same
+ * <code>byte[]</code> value (and on the same offset).
+ */
+ // Ragel uses lots of fall-through
+ @SuppressWarnings("fallthrough")
+ private static class ParserSession {
+ private final Parser parser;
+ private final ThreadContext context;
+ private final ByteList byteList;
+ private final byte[] data;
+ private final StringDecoder decoder;
+ private int currentNesting = 0;
+
+ // initialization value for all state variables.
+ // no idea about the origins of this value, ask Flori ;)
+ private static final int EVIL = 0x666;
+
+ private ParserSession(Parser parser, ThreadContext context) {
+ this.parser = parser;
+ this.context = context;
+ this.byteList = parser.vSource.getByteList();
+ this.data = byteList.unsafeBytes();
+ this.decoder = new StringDecoder(context);
+ }
+
+ private RaiseException unexpectedToken(int absStart, int absEnd) {
+ RubyString msg = getRuntime().newString("unexpected token at '")
+ .cat(data, absStart, absEnd - absStart)
+ .cat((byte)'\'');
+ return newException(Utils.M_PARSER_ERROR, msg);
+ }
+
+ private Ruby getRuntime() {
+ return context.getRuntime();
+ }
+
+ %%{
+ machine JSON_common;
+
+ cr = '\n';
+ cr_neg = [^\n];
+ ws = [ \t\r\n];
+ c_comment = '/*' ( any* - (any* '*/' any* ) ) '*/';
+ cpp_comment = '//' cr_neg* cr;
+ comment = c_comment | cpp_comment;
+ ignore = ws | comment;
+ name_separator = ':';
+ value_separator = ',';
+ Vnull = 'null';
+ Vfalse = 'false';
+ Vtrue = 'true';
+ VNaN = 'NaN';
+ VInfinity = 'Infinity';
+ VMinusInfinity = '-Infinity';
+ begin_value = [nft"\-[{NI] | digit;
+ begin_object = '{';
+ end_object = '}';
+ begin_array = '[';
+ end_array = ']';
+ begin_string = '"';
+ begin_name = begin_string;
+ begin_number = digit | '-';
+ }%%
+
+ %%{
+ machine JSON_value;
+ include JSON_common;
+
+ write data;
+
+ action parse_null {
+ result = getRuntime().getNil();
+ }
+ action parse_false {
+ result = getRuntime().getFalse();
+ }
+ action parse_true {
+ result = getRuntime().getTrue();
+ }
+ action parse_nan {
+ if (parser.allowNaN) {
+ result = getConstant(CONST_NAN);
+ } else {
+ throw unexpectedToken(p - 2, pe);
+ }
+ }
+ action parse_infinity {
+ if (parser.allowNaN) {
+ result = getConstant(CONST_INFINITY);
+ } else {
+ throw unexpectedToken(p - 7, pe);
+ }
+ }
+ action parse_number {
+ if (pe > fpc + 9 &&
+ absSubSequence(fpc, fpc + 9).toString().equals(JSON_MINUS_INFINITY)) {
+
+ if (parser.allowNaN) {
+ result = getConstant(CONST_MINUS_INFINITY);
+ fexec p + 10;
+ fhold;
+ fbreak;
+ } else {
+ throw unexpectedToken(p, pe);
+ }
+ }
+ ParserResult res = parseFloat(fpc, pe);
+ if (res != null) {
+ result = res.result;
+ fexec res.p;
+ }
+ res = parseInteger(fpc, pe);
+ if (res != null) {
+ result = res.result;
+ fexec res.p;
+ }
+ fhold;
+ fbreak;
+ }
+ action parse_string {
+ ParserResult res = parseString(fpc, pe);
+ if (res == null) {
+ fhold;
+ fbreak;
+ } else {
+ result = res.result;
+ fexec res.p;
+ }
+ }
+ action parse_array {
+ currentNesting++;
+ ParserResult res = parseArray(fpc, pe);
+ currentNesting--;
+ if (res == null) {
+ fhold;
+ fbreak;
+ } else {
+ result = res.result;
+ fexec res.p;
+ }
+ }
+ action parse_object {
+ currentNesting++;
+ ParserResult res = parseObject(fpc, pe);
+ currentNesting--;
+ if (res == null) {
+ fhold;
+ fbreak;
+ } else {
+ result = res.result;
+ fexec res.p;
+ }
+ }
+ action exit {
+ fhold;
+ fbreak;
+ }
+
+ main := ( Vnull @parse_null |
+ Vfalse @parse_false |
+ Vtrue @parse_true |
+ VNaN @parse_nan |
+ VInfinity @parse_infinity |
+ begin_number >parse_number |
+ begin_string >parse_string |
+ begin_array >parse_array |
+ begin_object >parse_object
+ ) %*exit;
+ }%%
+
+ ParserResult parseValue(int p, int pe) {
+ int cs = EVIL;
+ IRubyObject result = null;
+
+ %% write init;
+ %% write exec;
+
+ if (cs >= JSON_value_first_final && result != null) {
+ return new ParserResult(result, p);
+ } else {
+ return null;
+ }
+ }
+
+ %%{
+ machine JSON_integer;
+
+ write data;
+
+ action exit {
+ fhold;
+ fbreak;
+ }
+
+ main := '-'? ( '0' | [1-9][0-9]* ) ( ^[0-9] @exit );
+ }%%
+
+ ParserResult parseInteger(int p, int pe) {
+ int cs = EVIL;
+
+ %% write init;
+ int memo = p;
+ %% write exec;
+
+ if (cs < JSON_integer_first_final) {
+ return null;
+ }
+
+ ByteList num = absSubSequence(memo, p);
+ // note: this is actually a shared string, but since it is temporary and
+ // read-only, it doesn't really matter
+ RubyString expr = RubyString.newStringLight(getRuntime(), num);
+ RubyInteger number = RubyNumeric.str2inum(getRuntime(), expr, 10, true);
+ return new ParserResult(number, p + 1);
+ }
+
+ %%{
+ machine JSON_float;
+ include JSON_common;
+
+ write data;
+
+ action exit {
+ fhold;
+ fbreak;
+ }
+
+ main := '-'?
+ ( ( ( '0' | [1-9][0-9]* ) '.' [0-9]+ ( [Ee] [+\-]?[0-9]+ )? )
+ | ( ( '0' | [1-9][0-9]* ) ( [Ee] [+\-]? [0-9]+ ) ) )
+ ( ^[0-9Ee.\-] @exit );
+ }%%
+
+ ParserResult parseFloat(int p, int pe) {
+ int cs = EVIL;
+
+ %% write init;
+ int memo = p;
+ %% write exec;
+
+ if (cs < JSON_float_first_final) {
+ return null;
+ }
+
+ ByteList num = absSubSequence(memo, p);
+ // note: this is actually a shared string, but since it is temporary and
+ // read-only, it doesn't really matter
+ RubyString expr = RubyString.newStringLight(getRuntime(), num);
+ RubyFloat number = RubyNumeric.str2fnum(getRuntime(), expr, true);
+ return new ParserResult(number, p + 1);
+ }
+
+ %%{
+ machine JSON_string;
+ include JSON_common;
+
+ write data;
+
+ action parse_string {
+ int offset = byteList.begin();
+ ByteList decoded = decoder.decode(byteList, memo + 1 - offset,
+ p - offset);
+ result = getRuntime().newString(decoded);
+ if (result == null) {
+ fhold;
+ fbreak;
+ } else {
+ fexec p + 1;
+ }
+ }
+
+ action exit {
+ fhold;
+ fbreak;
+ }
+
+ main := '"'
+ ( ( ^(["\\]|0..0x1f)
+ | '\\'["\\/bfnrt]
+ | '\\u'[0-9a-fA-F]{4}
+ | '\\'^(["\\/bfnrtu]|0..0x1f)
+ )* %parse_string
+ ) '"' @exit;
+ }%%
+
+ ParserResult parseString(int p, int pe) {
+ int cs = EVIL;
+ IRubyObject result = null;
+
+ %% write init;
+ int memo = p;
+ %% write exec;
+
+ if (parser.createAdditions) {
+ RubyHash match_string = parser.match_string;
+ if (match_string != null) {
+ final IRubyObject[] memoArray = { result, null };
+ try {
+ match_string.visitAll(new RubyHash.Visitor() {
+ @Override
+ public void visit(IRubyObject pattern, IRubyObject klass) {
+ if (pattern.callMethod(context, "===", memoArray[0]).isTrue()) {
+ memoArray[1] = klass;
+ throw JumpException.SPECIAL_JUMP;
+ }
+ }
+ });
+ } catch (JumpException e) { }
+ if (memoArray[1] != null) {
+ RubyClass klass = (RubyClass) memoArray[1];
+ if (klass.respondsTo("json_creatable?") &&
+ klass.callMethod(context, "json_creatable?").isTrue()) {
+ result = klass.callMethod(context, "json_create", result);
+ }
+ }
+ }
+ }
+
+ if (cs >= JSON_string_first_final && result != null) {
+ return new ParserResult(result, p + 1);
+ } else {
+ return null;
+ }
+ }
+
+ %%{
+ machine JSON_array;
+ include JSON_common;
+
+ write data;
+
+ action parse_value {
+ ParserResult res = parseValue(fpc, pe);
+ if (res == null) {
+ fhold;
+ fbreak;
+ } else {
+ result.append(res.result);
+ fexec res.p;
+ }
+ }
+
+ action exit {
+ fhold;
+ fbreak;
+ }
+
+ next_element = value_separator ignore* begin_value >parse_value;
+
+ main := begin_array
+ ignore*
+ ( ( begin_value >parse_value
+ ignore* )
+ ( ignore*
+ next_element
+ ignore* )* )?
+ ignore*
+ end_array @exit;
+ }%%
+
+ ParserResult parseArray(int p, int pe) {
+ int cs = EVIL;
+
+ if (parser.maxNesting > 0 && currentNesting > parser.maxNesting) {
+ throw newException(Utils.M_NESTING_ERROR,
+ "nesting of " + currentNesting + " is too deep");
+ }
+
+ // this is guaranteed to be a RubyArray due to the earlier
+ // allocator test at OptionsReader#getClass
+ RubyArray result =
+ (RubyArray)parser.arrayClass.newInstance(context,
+ IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
+
+ %% write init;
+ %% write exec;
+
+ if (cs >= JSON_array_first_final) {
+ return new ParserResult(result, p + 1);
+ } else {
+ throw unexpectedToken(p, pe);
+ }
+ }
+
+ %%{
+ machine JSON_object;
+ include JSON_common;
+
+ write data;
+
+ action parse_value {
+ ParserResult res = parseValue(fpc, pe);
+ if (res == null) {
+ fhold;
+ fbreak;
+ } else {
+ result.op_aset(context, lastName, res.result);
+ fexec res.p;
+ }
+ }
+
+ action parse_name {
+ ParserResult res = parseString(fpc, pe);
+ if (res == null) {
+ fhold;
+ fbreak;
+ } else {
+ RubyString name = (RubyString)res.result;
+ if (parser.symbolizeNames) {
+ lastName = context.getRuntime().is1_9()
+ ? name.intern19()
+ : name.intern();
+ } else {
+ lastName = name;
+ }
+ fexec res.p;
+ }
+ }
+
+ action exit {
+ fhold;
+ fbreak;
+ }
+
+ a_pair = ignore*
+ begin_name >parse_name
+ ignore* name_separator ignore*
+ begin_value >parse_value;
+
+ main := begin_object
+ (a_pair (ignore* value_separator a_pair)*)?
+ ignore* end_object @exit;
+ }%%
+
+ ParserResult parseObject(int p, int pe) {
+ int cs = EVIL;
+ IRubyObject lastName = null;
+
+ if (parser.maxNesting > 0 && currentNesting > parser.maxNesting) {
+ throw newException(Utils.M_NESTING_ERROR,
+ "nesting of " + currentNesting + " is too deep");
+ }
+
+ // this is guaranteed to be a RubyHash due to the earlier
+ // allocator test at OptionsReader#getClass
+ RubyHash result =
+ (RubyHash)parser.objectClass.newInstance(context,
+ IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
+
+ %% write init;
+ %% write exec;
+
+ if (cs < JSON_object_first_final) {
+ return null;
+ }
+
+ IRubyObject returnedResult = result;
+
+ // attempt to de-serialize object
+ if (parser.createAdditions) {
+ IRubyObject vKlassName = result.op_aref(context, parser.createId);
+ if (!vKlassName.isNil()) {
+ // might throw ArgumentError, we let it propagate
+ IRubyObject klass = parser.info.jsonModule.
+ callMethod(context, "deep_const_get", vKlassName);
+ if (klass.respondsTo("json_creatable?") &&
+ klass.callMethod(context, "json_creatable?").isTrue()) {
+
+ returnedResult = klass.callMethod(context, "json_create", result);
+ }
+ }
+ }
+ return new ParserResult(returnedResult, p + 1);
+ }
+
+ %%{
+ machine JSON;
+ include JSON_common;
+
+ write data;
+
+ action parse_object {
+ currentNesting = 1;
+ ParserResult res = parseObject(fpc, pe);
+ if (res == null) {
+ fhold;
+ fbreak;
+ } else {
+ result = res.result;
+ fexec res.p;
+ }
+ }
+
+ action parse_array {
+ currentNesting = 1;
+ ParserResult res = parseArray(fpc, pe);
+ if (res == null) {
+ fhold;
+ fbreak;
+ } else {
+ result = res.result;
+ fexec res.p;
+ }
+ }
+
+ main := ignore*
+ ( begin_object >parse_object
+ | begin_array >parse_array )
+ ignore*;
+ }%%
+
+ public IRubyObject parse() {
+ int cs = EVIL;
+ int p, pe;
+ IRubyObject result = null;
+
+ %% write init;
+ p = byteList.begin();
+ pe = p + byteList.length();
+ %% write exec;
+
+ if (cs >= JSON_first_final && p == pe) {
+ return result;
+ } else {
+ throw unexpectedToken(p, pe);
+ }
+ }
+
+ /**
+ * Returns a subsequence of the source ByteList, based on source
+ * array byte offsets (i.e., the ByteList's own begin offset is not
+ * automatically added).
+ * @param start
+ * @param end
+ */
+ private ByteList absSubSequence(int absStart, int absEnd) {
+ int offset = byteList.begin();
+ return (ByteList)byteList.subSequence(absStart - offset,
+ absEnd - offset);
+ }
+
+ /**
+ * Retrieves a constant directly descended from the <code>JSON</code> module.
+ * @param name The constant name
+ */
+ private IRubyObject getConstant(String name) {
+ return parser.info.jsonModule.getConstant(name);
+ }
+
+ private RaiseException newException(String className, String message) {
+ return Utils.newException(context, className, message);
+ }
+
+ private RaiseException newException(String className, RubyString message) {
+ return Utils.newException(context, className, message);
+ }
+
+ private RaiseException newException(String className,
+ String messageBegin, ByteList messageEnd) {
+ return newException(className,
+ getRuntime().newString(messageBegin).cat(messageEnd));
+ }
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/ParserService.java b/vendor/gems/json-1.5.1/java/src/json/ext/ParserService.java
new file mode 100644
index 000000000..e0805a743
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/ParserService.java
@@ -0,0 +1,34 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import java.io.IOException;
+
+import org.jruby.Ruby;
+import org.jruby.RubyClass;
+import org.jruby.RubyModule;
+import org.jruby.runtime.load.BasicLibraryService;
+
+/**
+ * The service invoked by JRuby's {@link org.jruby.runtime.load.LoadService LoadService}.
+ * Defines the <code>JSON::Ext::Parser</code> class.
+ * @author mernen
+ */
+public class ParserService implements BasicLibraryService {
+ public boolean basicLoad(Ruby runtime) throws IOException {
+ runtime.getLoadService().require("json/common");
+ RuntimeInfo info = RuntimeInfo.initRuntime(runtime);
+
+ info.jsonModule = runtime.defineModule("JSON");
+ RubyModule jsonExtModule = info.jsonModule.defineModuleUnder("Ext");
+ RubyClass parserClass =
+ jsonExtModule.defineClassUnder("Parser", runtime.getObject(),
+ Parser.ALLOCATOR);
+ parserClass.defineAnnotatedMethods(Parser.class);
+ return true;
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/RuntimeInfo.java b/vendor/gems/json-1.5.1/java/src/json/ext/RuntimeInfo.java
new file mode 100644
index 000000000..f446afe5d
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/RuntimeInfo.java
@@ -0,0 +1,119 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import java.lang.ref.WeakReference;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.WeakHashMap;
+import org.jruby.Ruby;
+import org.jruby.RubyClass;
+import org.jruby.RubyEncoding;
+import org.jruby.RubyModule;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+
+
+final class RuntimeInfo {
+ // since the vast majority of cases runs just one runtime,
+ // we optimize for that
+ private static WeakReference<Ruby> runtime1 = new WeakReference<Ruby>(null);
+ private static RuntimeInfo info1;
+ // store remaining runtimes here (does not include runtime1)
+ private static Map<Ruby, RuntimeInfo> runtimes;
+
+ // these fields are filled by the service loaders
+ /** JSON */
+ RubyModule jsonModule;
+ /** JSON::Ext::Generator::GeneratorMethods::String::Extend */
+ RubyModule stringExtendModule;
+ /** JSON::Ext::Generator::State */
+ RubyClass generatorStateClass;
+ /** JSON::SAFE_STATE_PROTOTYPE */
+ GeneratorState safeStatePrototype;
+
+ final RubyEncoding utf8;
+ final RubyEncoding ascii8bit;
+ // other encodings
+ private final Map<String, RubyEncoding> encodings;
+
+ private RuntimeInfo(Ruby runtime) {
+ RubyClass encodingClass = runtime.getEncoding();
+ if (encodingClass == null) { // 1.8 mode
+ utf8 = ascii8bit = null;
+ encodings = null;
+ } else {
+ ThreadContext context = runtime.getCurrentContext();
+
+ utf8 = (RubyEncoding)RubyEncoding.find(context,
+ encodingClass, runtime.newString("utf-8"));
+ ascii8bit = (RubyEncoding)RubyEncoding.find(context,
+ encodingClass, runtime.newString("ascii-8bit"));
+ encodings = new HashMap<String, RubyEncoding>();
+ }
+ }
+
+ static RuntimeInfo initRuntime(Ruby runtime) {
+ synchronized (RuntimeInfo.class) {
+ if (runtime1.get() == runtime) {
+ return info1;
+ } else if (runtime1.get() == null) {
+ runtime1 = new WeakReference<Ruby>(runtime);
+ info1 = new RuntimeInfo(runtime);
+ return info1;
+ } else {
+ if (runtimes == null) {
+ runtimes = new WeakHashMap<Ruby, RuntimeInfo>(1);
+ }
+ RuntimeInfo cache = runtimes.get(runtime);
+ if (cache == null) {
+ cache = new RuntimeInfo(runtime);
+ runtimes.put(runtime, cache);
+ }
+ return cache;
+ }
+ }
+ }
+
+ public static RuntimeInfo forRuntime(Ruby runtime) {
+ synchronized (RuntimeInfo.class) {
+ if (runtime1.get() == runtime) return info1;
+ RuntimeInfo cache = null;
+ if (runtimes != null) cache = runtimes.get(runtime);
+ assert cache != null : "Runtime given has not initialized JSON::Ext";
+ return cache;
+ }
+ }
+
+ public boolean encodingsSupported() {
+ return utf8 != null;
+ }
+
+ public RubyEncoding getEncoding(ThreadContext context, String name) {
+ synchronized (encodings) {
+ RubyEncoding encoding = encodings.get(name);
+ if (encoding == null) {
+ Ruby runtime = context.getRuntime();
+ encoding = (RubyEncoding)RubyEncoding.find(context,
+ runtime.getEncoding(), runtime.newString(name));
+ encodings.put(name, encoding);
+ }
+ return encoding;
+ }
+ }
+
+ public GeneratorState getSafeStatePrototype(ThreadContext context) {
+ if (safeStatePrototype == null) {
+ IRubyObject value = jsonModule.getConstant("SAFE_STATE_PROTOTYPE");
+ if (!(value instanceof GeneratorState)) {
+ throw context.getRuntime().newTypeError(value, generatorStateClass);
+ }
+ safeStatePrototype = (GeneratorState)value;
+ }
+ return safeStatePrototype;
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/StringDecoder.java b/vendor/gems/json-1.5.1/java/src/json/ext/StringDecoder.java
new file mode 100644
index 000000000..a4ee975cc
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/StringDecoder.java
@@ -0,0 +1,166 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import org.jruby.exceptions.RaiseException;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.util.ByteList;
+
+/**
+ * A decoder that reads a JSON-encoded string from the given sources and
+ * returns its decoded form on a new ByteList. Escaped Unicode characters
+ * are encoded as UTF-8.
+ */
+final class StringDecoder extends ByteListTranscoder {
+ /**
+ * Stores the offset of the high surrogate when reading a surrogate pair,
+ * or -1 when not.
+ */
+ private int surrogatePairStart = -1;
+
+ // Array used for writing multi-byte characters into the buffer at once
+ private final byte[] aux = new byte[4];
+
+ StringDecoder(ThreadContext context) {
+ super(context);
+ }
+
+ ByteList decode(ByteList src, int start, int end) {
+ ByteList out = new ByteList(end - start);
+ init(src, start, end, out);
+ while (hasNext()) {
+ handleChar(readUtf8Char());
+ }
+ quoteStop(pos);
+ return out;
+ }
+
+ private void handleChar(int c) {
+ if (c == '\\') {
+ quoteStop(charStart);
+ handleEscapeSequence();
+ } else {
+ quoteStart();
+ }
+ }
+
+ private void handleEscapeSequence() {
+ ensureMin(1);
+ switch (readUtf8Char()) {
+ case 'b':
+ append('\b');
+ break;
+ case 'f':
+ append('\f');
+ break;
+ case 'n':
+ append('\n');
+ break;
+ case 'r':
+ append('\r');
+ break;
+ case 't':
+ append('\t');
+ break;
+ case 'u':
+ ensureMin(4);
+ int cp = readHex();
+ if (Character.isHighSurrogate((char)cp)) {
+ handleLowSurrogate((char)cp);
+ } else if (Character.isLowSurrogate((char)cp)) {
+ // low surrogate with no high surrogate
+ throw invalidUtf8();
+ } else {
+ writeUtf8Char(cp);
+ }
+ break;
+ default: // '\\', '"', '/'...
+ quoteStart();
+ }
+ }
+
+ private void handleLowSurrogate(char highSurrogate) {
+ surrogatePairStart = charStart;
+ ensureMin(1);
+ int lowSurrogate = readUtf8Char();
+
+ if (lowSurrogate == '\\') {
+ ensureMin(5);
+ if (readUtf8Char() != 'u') throw invalidUtf8();
+ lowSurrogate = readHex();
+ }
+
+ if (Character.isLowSurrogate((char)lowSurrogate)) {
+ writeUtf8Char(Character.toCodePoint(highSurrogate,
+ (char)lowSurrogate));
+ surrogatePairStart = -1;
+ } else {
+ throw invalidUtf8();
+ }
+ }
+
+ private void writeUtf8Char(int codePoint) {
+ if (codePoint < 0x80) {
+ append(codePoint);
+ } else if (codePoint < 0x800) {
+ aux[0] = (byte)(0xc0 | (codePoint >>> 6));
+ aux[1] = tailByte(codePoint & 0x3f);
+ append(aux, 0, 2);
+ } else if (codePoint < 0x10000) {
+ aux[0] = (byte)(0xe0 | (codePoint >>> 12));
+ aux[1] = tailByte(codePoint >>> 6);
+ aux[2] = tailByte(codePoint);
+ append(aux, 0, 3);
+ } else {
+ aux[0] = (byte)(0xf0 | codePoint >>> 18);
+ aux[1] = tailByte(codePoint >>> 12);
+ aux[2] = tailByte(codePoint >>> 6);
+ aux[3] = tailByte(codePoint);
+ append(aux, 0, 4);
+ }
+ }
+
+ private byte tailByte(int value) {
+ return (byte)(0x80 | (value & 0x3f));
+ }
+
+ /**
+ * Reads a 4-digit unsigned hexadecimal number from the source.
+ */
+ private int readHex() {
+ int numberStart = pos;
+ int result = 0;
+ int length = 4;
+ for (int i = 0; i < length; i++) {
+ int digit = readUtf8Char();
+ int digitValue;
+ if (digit >= '0' && digit <= '9') {
+ digitValue = digit - '0';
+ } else if (digit >= 'a' && digit <= 'f') {
+ digitValue = 10 + digit - 'a';
+ } else if (digit >= 'A' && digit <= 'F') {
+ digitValue = 10 + digit - 'A';
+ } else {
+ throw new NumberFormatException("Invalid base 16 number "
+ + src.subSequence(numberStart, numberStart + length));
+ }
+ result = result * 16 + digitValue;
+ }
+ return result;
+ }
+
+ @Override
+ protected RaiseException invalidUtf8() {
+ ByteList message = new ByteList(
+ ByteList.plain("partial character in source, " +
+ "but hit end near "));
+ int start = surrogatePairStart != -1 ? surrogatePairStart : charStart;
+ message.append(src, start, srcEnd - start);
+ return Utils.newException(context, Utils.M_PARSER_ERROR,
+ context.getRuntime().newString(message));
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/StringEncoder.java b/vendor/gems/json-1.5.1/java/src/json/ext/StringEncoder.java
new file mode 100644
index 000000000..57bd19bce
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/StringEncoder.java
@@ -0,0 +1,106 @@
+package json.ext;
+
+import org.jruby.exceptions.RaiseException;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.util.ByteList;
+
+/**
+ * An encoder that reads from the given source and outputs its representation
+ * to another ByteList. The source string is fully checked for UTF-8 validity,
+ * and throws a GeneratorError if any problem is found.
+ */
+final class StringEncoder extends ByteListTranscoder {
+ private final boolean asciiOnly;
+
+ // Escaped characters will reuse this array, to avoid new allocations
+ // or appending them byte-by-byte
+ private final byte[] aux =
+ new byte[] {/* First unicode character */
+ '\\', 'u', 0, 0, 0, 0,
+ /* Second unicode character (for surrogate pairs) */
+ '\\', 'u', 0, 0, 0, 0,
+ /* "\X" characters */
+ '\\', 0};
+ // offsets on the array above
+ private static final int ESCAPE_UNI1_OFFSET = 0;
+ private static final int ESCAPE_UNI2_OFFSET = ESCAPE_UNI1_OFFSET + 6;
+ private static final int ESCAPE_CHAR_OFFSET = ESCAPE_UNI2_OFFSET + 6;
+ /** Array used for code point decomposition in surrogates */
+ private final char[] utf16 = new char[2];
+
+ private static final byte[] HEX =
+ new byte[] {'0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+ StringEncoder(ThreadContext context, boolean asciiOnly) {
+ super(context);
+ this.asciiOnly = asciiOnly;
+ }
+
+ void encode(ByteList src, ByteList out) {
+ init(src, out);
+ append('"');
+ while (hasNext()) {
+ handleChar(readUtf8Char());
+ }
+ quoteStop(pos);
+ append('"');
+ }
+
+ private void handleChar(int c) {
+ switch (c) {
+ case '"':
+ case '\\':
+ escapeChar((char)c);
+ break;
+ case '\n':
+ escapeChar('n');
+ break;
+ case '\r':
+ escapeChar('r');
+ break;
+ case '\t':
+ escapeChar('t');
+ break;
+ case '\f':
+ escapeChar('f');
+ break;
+ case '\b':
+ escapeChar('b');
+ break;
+ default:
+ if (c >= 0x20 && c <= 0x7f ||
+ (c >= 0x80 && !asciiOnly)) {
+ quoteStart();
+ } else {
+ quoteStop(charStart);
+ escapeUtf8Char(c);
+ }
+ }
+ }
+
+ private void escapeChar(char c) {
+ quoteStop(charStart);
+ aux[ESCAPE_CHAR_OFFSET + 1] = (byte)c;
+ append(aux, ESCAPE_CHAR_OFFSET, 2);
+ }
+
+ private void escapeUtf8Char(int codePoint) {
+ int numChars = Character.toChars(codePoint, utf16, 0);
+ escapeCodeUnit(utf16[0], ESCAPE_UNI1_OFFSET + 2);
+ if (numChars > 1) escapeCodeUnit(utf16[1], ESCAPE_UNI2_OFFSET + 2);
+ append(aux, ESCAPE_UNI1_OFFSET, 6 * numChars);
+ }
+
+ private void escapeCodeUnit(char c, int auxOffset) {
+ for (int i = 0; i < 4; i++) {
+ aux[auxOffset + i] = HEX[(c >>> (12 - 4 * i)) & 0xf];
+ }
+ }
+
+ @Override
+ protected RaiseException invalidUtf8() {
+ return Utils.newException(context, Utils.M_GENERATOR_ERROR,
+ "source sequence is illegal/malformed utf-8");
+ }
+}
diff --git a/vendor/gems/json-1.5.1/java/src/json/ext/Utils.java b/vendor/gems/json-1.5.1/java/src/json/ext/Utils.java
new file mode 100644
index 000000000..7a1dfee83
--- /dev/null
+++ b/vendor/gems/json-1.5.1/java/src/json/ext/Utils.java
@@ -0,0 +1,89 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import org.jruby.Ruby;
+import org.jruby.RubyArray;
+import org.jruby.RubyClass;
+import org.jruby.RubyException;
+import org.jruby.RubyHash;
+import org.jruby.RubyString;
+import org.jruby.exceptions.RaiseException;
+import org.jruby.runtime.Block;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.util.ByteList;
+
+/**
+ * Library of miscellaneous utility functions
+ */
+final class Utils {
+ public static final String M_GENERATOR_ERROR = "GeneratorError";
+ public static final String M_NESTING_ERROR = "NestingError";
+ public static final String M_PARSER_ERROR = "ParserError";
+
+ private Utils() {
+ throw new RuntimeException();
+ }
+
+ /**
+ * Safe {@link RubyArray} type-checking.
+ * Returns the given object if it is an <code>Array</code>,
+ * or throws an exception if not.
+ * @param object The object to test
+ * @return The given object if it is an <code>Array</code>
+ * @throws RaiseException <code>TypeError</code> if the object is not
+ * of the expected type
+ */
+ static RubyArray ensureArray(IRubyObject object) throws RaiseException {
+ if (object instanceof RubyArray) return (RubyArray)object;
+ Ruby runtime = object.getRuntime();
+ throw runtime.newTypeError(object, runtime.getArray());
+ }
+
+ static RubyHash ensureHash(IRubyObject object) throws RaiseException {
+ if (object instanceof RubyHash) return (RubyHash)object;
+ Ruby runtime = object.getRuntime();
+ throw runtime.newTypeError(object, runtime.getHash());
+ }
+
+ static RubyString ensureString(IRubyObject object) throws RaiseException {
+ if (object instanceof RubyString) return (RubyString)object;
+ Ruby runtime = object.getRuntime();
+ throw runtime.newTypeError(object, runtime.getString());
+ }
+
+ static RaiseException newException(ThreadContext context,
+ String className, String message) {
+ return newException(context, className,
+ context.getRuntime().newString(message));
+ }
+
+ static RaiseException newException(ThreadContext context,
+ String className, RubyString message) {
+ RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime());
+ RubyClass klazz = info.jsonModule.getClass(className);
+ RubyException excptn =
+ (RubyException)klazz.newInstance(context,
+ new IRubyObject[] {message}, Block.NULL_BLOCK);
+ return new RaiseException(excptn);
+ }
+
+ static byte[] repeat(ByteList a, int n) {
+ return repeat(a.unsafeBytes(), a.begin(), a.length(), n);
+ }
+
+ static byte[] repeat(byte[] a, int begin, int length, int n) {
+ if (length == 0) return ByteList.NULL_ARRAY;
+ int resultLen = length * n;
+ byte[] result = new byte[resultLen];
+ for (int pos = 0; pos < resultLen; pos += length) {
+ System.arraycopy(a, begin, result, pos, length);
+ }
+ return result;
+ }
+}
diff --git a/vendor/gems/json-1.5.1/json-java.gemspec b/vendor/gems/json-1.5.1/json-java.gemspec
new file mode 100644
index 000000000..144f650e7
--- /dev/null
+++ b/vendor/gems/json-1.5.1/json-java.gemspec
@@ -0,0 +1,20 @@
+#! /usr/bin/env jruby
+require "rubygems"
+
+spec = Gem::Specification.new do |s|
+ s.name = "json"
+ s.version = File.read("VERSION").chomp
+ s.summary = "JSON implementation for JRuby"
+ s.description = "A JSON implementation as a JRuby extension."
+ s.author = "Daniel Luz"
+ s.email = "dev+ruby@mernen.com"
+ s.homepage = "http://json-jruby.rubyforge.org/"
+ s.platform = 'java'
+ s.rubyforge_project = "json-jruby"
+
+ s.files = Dir["{docs,lib,tests}/**/*"]
+end
+
+if $0 == __FILE__
+ Gem::Builder.new(spec).build
+end
diff --git a/vendor/gems/json-1.5.1/lib/json.rb b/vendor/gems/json-1.5.1/lib/json.rb
new file mode 100644
index 000000000..789b0de54
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json.rb
@@ -0,0 +1,10 @@
+require 'json/common'
+module JSON
+ require 'json/version'
+
+ begin
+ require 'json/ext'
+ rescue LoadError
+ require 'json/pure'
+ end
+end
diff --git a/vendor/gems/json-1.5.1/lib/json/Array.xpm b/vendor/gems/json-1.5.1/lib/json/Array.xpm
new file mode 100644
index 000000000..27c48011f
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/Array.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * Array_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" .......... ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" .......... ",
+" ",
+" ",
+" "};
diff --git a/vendor/gems/json-1.5.1/lib/json/FalseClass.xpm b/vendor/gems/json-1.5.1/lib/json/FalseClass.xpm
new file mode 100644
index 000000000..25ce60832
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/FalseClass.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * False_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #FF0000",
+" ",
+" ",
+" ",
+" ...... ",
+" . ",
+" . ",
+" . ",
+" ...... ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" ",
+" ",
+" "};
diff --git a/vendor/gems/json-1.5.1/lib/json/Hash.xpm b/vendor/gems/json-1.5.1/lib/json/Hash.xpm
new file mode 100644
index 000000000..cd8f6f7b5
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/Hash.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * Hash_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" . . ",
+" . . ",
+" . . ",
+" ......... ",
+" . . ",
+" . . ",
+" ......... ",
+" . . ",
+" . . ",
+" . . ",
+" ",
+" ",
+" "};
diff --git a/vendor/gems/json-1.5.1/lib/json/Key.xpm b/vendor/gems/json-1.5.1/lib/json/Key.xpm
new file mode 100644
index 000000000..9fd728138
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/Key.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char * Key_xpm[] = {
+"16 16 54 1",
+" c None",
+". c #110007",
+"+ c #0E0900",
+"@ c #000013",
+"# c #070600",
+"$ c #F6F006",
+"% c #ECE711",
+"& c #E5EE00",
+"* c #16021E",
+"= c #120900",
+"- c #EDF12B",
+"; c #000033",
+"> c #0F0000",
+", c #FFFE03",
+"' c #E6E500",
+") c #16021B",
+"! c #F7F502",
+"~ c #000E00",
+"{ c #130000",
+"] c #FFF000",
+"^ c #FFE711",
+"/ c #140005",
+"( c #190025",
+"_ c #E9DD27",
+": c #E7DC04",
+"< c #FFEC09",
+"[ c #FFE707",
+"} c #FFDE10",
+"| c #150021",
+"1 c #160700",
+"2 c #FAF60E",
+"3 c #EFE301",
+"4 c #FEF300",
+"5 c #E7E000",
+"6 c #FFFF08",
+"7 c #0E0206",
+"8 c #040000",
+"9 c #03052E",
+"0 c #041212",
+"a c #070300",
+"b c #F2E713",
+"c c #F9DE13",
+"d c #36091E",
+"e c #00001C",
+"f c #1F0010",
+"g c #FFF500",
+"h c #DEDE00",
+"i c #050A00",
+"j c #FAF14A",
+"k c #F5F200",
+"l c #040404",
+"m c #1A0D00",
+"n c #EDE43D",
+"o c #ECE007",
+" ",
+" ",
+" .+@ ",
+" #$%&* ",
+" =-;>,') ",
+" >!~{]^/ ",
+" (_:<[}| ",
+" 1234567 ",
+" 890abcd ",
+" efghi ",
+" >jkl ",
+" mnol ",
+" >kl ",
+" ll ",
+" ",
+" "};
diff --git a/vendor/gems/json-1.5.1/lib/json/NilClass.xpm b/vendor/gems/json-1.5.1/lib/json/NilClass.xpm
new file mode 100644
index 000000000..3509f06c9
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/NilClass.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * False_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" ... ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" ... ",
+" ",
+" ",
+" "};
diff --git a/vendor/gems/json-1.5.1/lib/json/Numeric.xpm b/vendor/gems/json-1.5.1/lib/json/Numeric.xpm
new file mode 100644
index 000000000..e071e2ee9
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/Numeric.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * Numeric_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #FF0000",
+"+ c #0000FF",
+"@ c #0023DB",
+"# c #00EA14",
+"$ c #00FF00",
+"% c #004FAF",
+"& c #0028D6",
+"* c #00F20C",
+" ",
+" ",
+" ",
+" ... +++@#$$$$ ",
+" .+ %& $$ ",
+" . + $ ",
+" . + $$ ",
+" . ++$$$$ ",
+" . + $$ ",
+" . + $ ",
+" . + $ ",
+" . + $ $$ ",
+" .....++++*$$ ",
+" ",
+" ",
+" "};
diff --git a/vendor/gems/json-1.5.1/lib/json/String.xpm b/vendor/gems/json-1.5.1/lib/json/String.xpm
new file mode 100644
index 000000000..f79a89cdc
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/String.xpm
@@ -0,0 +1,96 @@
+/* XPM */
+static char * String_xpm[] = {
+"16 16 77 1",
+" c None",
+". c #000000",
+"+ c #040404",
+"@ c #080806",
+"# c #090606",
+"$ c #EEEAE1",
+"% c #E7E3DA",
+"& c #E0DBD1",
+"* c #D4B46F",
+"= c #0C0906",
+"- c #E3C072",
+"; c #E4C072",
+"> c #060505",
+", c #0B0A08",
+"' c #D5B264",
+") c #D3AF5A",
+"! c #080602",
+"~ c #E1B863",
+"{ c #DDB151",
+"] c #DBAE4A",
+"^ c #DDB152",
+"/ c #DDB252",
+"( c #070705",
+"_ c #0C0A07",
+": c #D3A33B",
+"< c #020201",
+"[ c #DAAA41",
+"} c #040302",
+"| c #E4D9BF",
+"1 c #0B0907",
+"2 c #030201",
+"3 c #020200",
+"4 c #C99115",
+"5 c #080704",
+"6 c #DBC8A2",
+"7 c #E7D7B4",
+"8 c #E0CD9E",
+"9 c #080601",
+"0 c #040400",
+"a c #010100",
+"b c #0B0B08",
+"c c #DCBF83",
+"d c #DCBC75",
+"e c #DEB559",
+"f c #040301",
+"g c #BC8815",
+"h c #120E07",
+"i c #060402",
+"j c #0A0804",
+"k c #D4A747",
+"l c #D6A12F",
+"m c #0E0C05",
+"n c #C8C1B0",
+"o c #1D1B15",
+"p c #D7AD51",
+"q c #070502",
+"r c #080804",
+"s c #BC953B",
+"t c #C4BDAD",
+"u c #0B0807",
+"v c #DBAC47",
+"w c #1B150A",
+"x c #B78A2C",
+"y c #D8A83C",
+"z c #D4A338",
+"A c #0F0B03",
+"B c #181105",
+"C c #C59325",
+"D c #C18E1F",
+"E c #060600",
+"F c #CC992D",
+"G c #B98B25",
+"H c #B3831F",
+"I c #C08C1C",
+"J c #060500",
+"K c #0E0C03",
+"L c #0D0A00",
+" ",
+" .+@# ",
+" .$%&*= ",
+" .-;>,')! ",
+" .~. .{]. ",
+" .^/. (_:< ",
+" .[.}|$12 ",
+" 345678}90 ",
+" a2bcdefgh ",
+" ijkl.mno ",
+" <pq. rstu ",
+" .]v. wx= ",
+" .yzABCDE ",
+" .FGHIJ ",
+" 0KL0 ",
+" "};
diff --git a/vendor/gems/json-1.5.1/lib/json/TrueClass.xpm b/vendor/gems/json-1.5.1/lib/json/TrueClass.xpm
new file mode 100644
index 000000000..143eef49b
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/TrueClass.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * TrueClass_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #0BF311",
+" ",
+" ",
+" ",
+" ......... ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" ",
+" ",
+" "};
diff --git a/vendor/gems/json-1.5.1/lib/json/add/core.rb b/vendor/gems/json-1.5.1/lib/json/add/core.rb
new file mode 100644
index 000000000..7a901d0b2
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/add/core.rb
@@ -0,0 +1,147 @@
+# This file contains implementations of ruby core's custom objects for
+# serialisation/deserialisation.
+
+unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
+ require 'json'
+end
+require 'date'
+
+class Symbol
+ def to_json(*a)
+ {
+ JSON.create_id => self.class.name,
+ 's' => to_s,
+ }.to_json(*a)
+ end
+
+ def self.json_create(o)
+ o['s'].to_sym
+ end
+end
+
+class Time
+ def self.json_create(object)
+ if usec = object.delete('u') # used to be tv_usec -> tv_nsec
+ object['n'] = usec * 1000
+ end
+ if respond_to?(:tv_nsec)
+ at(*object.values_at('s', 'n'))
+ else
+ at(object['s'], object['n'] / 1000)
+ end
+ end
+
+ def to_json(*args)
+ {
+ JSON.create_id => self.class.name,
+ 's' => tv_sec,
+ 'n' => respond_to?(:tv_nsec) ? tv_nsec : tv_usec * 1000
+ }.to_json(*args)
+ end
+end
+
+class Date
+ def self.json_create(object)
+ civil(*object.values_at('y', 'm', 'd', 'sg'))
+ end
+
+ alias start sg unless method_defined?(:start)
+
+ def to_json(*args)
+ {
+ JSON.create_id => self.class.name,
+ 'y' => year,
+ 'm' => month,
+ 'd' => day,
+ 'sg' => start,
+ }.to_json(*args)
+ end
+end
+
+class DateTime
+ def self.json_create(object)
+ args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
+ of_a, of_b = object['of'].split('/')
+ if of_b and of_b != '0'
+ args << Rational(of_a.to_i, of_b.to_i)
+ else
+ args << of_a
+ end
+ args << object['sg']
+ civil(*args)
+ end
+
+ alias start sg unless method_defined?(:start)
+
+ def to_json(*args)
+ {
+ JSON.create_id => self.class.name,
+ 'y' => year,
+ 'm' => month,
+ 'd' => day,
+ 'H' => hour,
+ 'M' => min,
+ 'S' => sec,
+ 'of' => offset.to_s,
+ 'sg' => start,
+ }.to_json(*args)
+ end
+end
+
+class Range
+ def self.json_create(object)
+ new(*object['a'])
+ end
+
+ def to_json(*args)
+ {
+ JSON.create_id => self.class.name,
+ 'a' => [ first, last, exclude_end? ]
+ }.to_json(*args)
+ end
+end
+
+class Struct
+ def self.json_create(object)
+ new(*object['v'])
+ end
+
+ def to_json(*args)
+ klass = self.class.name
+ klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
+ {
+ JSON.create_id => klass,
+ 'v' => values,
+ }.to_json(*args)
+ end
+end
+
+class Exception
+ def self.json_create(object)
+ result = new(object['m'])
+ result.set_backtrace object['b']
+ result
+ end
+
+ def to_json(*args)
+ {
+ JSON.create_id => self.class.name,
+ 'm' => message,
+ 'b' => backtrace,
+ }.to_json(*args)
+ end
+end
+
+class Regexp
+ def self.json_create(object)
+ new(object['s'], object['o'])
+ end
+
+ def to_json(*)
+ {
+ JSON.create_id => self.class.name,
+ 'o' => options,
+ 's' => source,
+ }.to_json
+ end
+end
diff --git a/vendor/gems/json-1.5.1/lib/json/add/rails.rb b/vendor/gems/json-1.5.1/lib/json/add/rails.rb
new file mode 100644
index 000000000..af95e52d4
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/add/rails.rb
@@ -0,0 +1,8 @@
+# This file used to implementations of rails custom objects for
+# serialisation/deserialisation and is obsoleted now.
+
+unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
+ require 'json'
+end
+
+$DEBUG and warn "required json/add/rails which is obsolete now!"
diff --git a/vendor/gems/json-1.5.1/lib/json/common.rb b/vendor/gems/json-1.5.1/lib/json/common.rb
new file mode 100644
index 000000000..f8ce2da7b
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/common.rb
@@ -0,0 +1,419 @@
+require 'json/version'
+
+module JSON
+ class << self
+ # If _object_ is string-like parse the string and return the parsed result
+ # as a Ruby data structure. Otherwise generate a JSON text from the Ruby
+ # data structure object and return it.
+ #
+ # The _opts_ argument is passed through to generate/parse respectively, see
+ # generate and parse for their documentation.
+ def [](object, opts = {})
+ if object.respond_to? :to_str
+ JSON.parse(object.to_str, opts)
+ else
+ JSON.generate(object, opts)
+ end
+ end
+
+ # Returns the JSON parser class, that is used by JSON. This might be either
+ # JSON::Ext::Parser or JSON::Pure::Parser.
+ attr_reader :parser
+
+ # Set the JSON parser class _parser_ to be used by JSON.
+ def parser=(parser) # :nodoc:
+ @parser = parser
+ remove_const :Parser if JSON.const_defined_in?(self, :Parser)
+ const_set :Parser, parser
+ end
+
+ # Return the constant located at _path_. The format of _path_ has to be
+ # either ::A::B::C or A::B::C. In any case A has to be located at the top
+ # level (absolute namespace path?). If there doesn't exist a constant at
+ # the given path, an ArgumentError is raised.
+ def deep_const_get(path) # :nodoc:
+ path.to_s.split(/::/).inject(Object) do |p, c|
+ case
+ when c.empty? then p
+ when JSON.const_defined_in?(p, c) then p.const_get(c)
+ else
+ begin
+ p.const_missing(c)
+ rescue NameError => e
+ raise ArgumentError, "can't get const #{path}: #{e}"
+ end
+ end
+ end
+ end
+
+ # Set the module _generator_ to be used by JSON.
+ def generator=(generator) # :nodoc:
+ old, $VERBOSE = $VERBOSE, nil
+ @generator = generator
+ generator_methods = generator::GeneratorMethods
+ for const in generator_methods.constants
+ klass = deep_const_get(const)
+ modul = generator_methods.const_get(const)
+ klass.class_eval do
+ instance_methods(false).each do |m|
+ m.to_s == 'to_json' and remove_method m
+ end
+ include modul
+ end
+ end
+ self.state = generator::State
+ const_set :State, self.state
+ const_set :SAFE_STATE_PROTOTYPE, State.new
+ const_set :FAST_STATE_PROTOTYPE, State.new(
+ :indent => '',
+ :space => '',
+ :object_nl => "",
+ :array_nl => "",
+ :max_nesting => false
+ )
+ const_set :PRETTY_STATE_PROTOTYPE, State.new(
+ :indent => ' ',
+ :space => ' ',
+ :object_nl => "\n",
+ :array_nl => "\n"
+ )
+ ensure
+ $VERBOSE = old
+ end
+
+ # Returns the JSON generator modul, that is used by JSON. This might be
+ # either JSON::Ext::Generator or JSON::Pure::Generator.
+ attr_reader :generator
+
+ # Returns the JSON generator state class, that is used by JSON. This might
+ # be either JSON::Ext::Generator::State or JSON::Pure::Generator::State.
+ attr_accessor :state
+
+ # This is create identifier, that is used to decide, if the _json_create_
+ # hook of a class should be called. It defaults to 'json_class'.
+ attr_accessor :create_id
+ end
+ self.create_id = 'json_class'
+
+ NaN = 0.0/0
+
+ Infinity = 1.0/0
+
+ MinusInfinity = -Infinity
+
+ # The base exception for JSON errors.
+ class JSONError < StandardError; end
+
+ # This exception is raised, if a parser error occurs.
+ class ParserError < JSONError; end
+
+ # This exception is raised, if the nesting of parsed datastructures is too
+ # deep.
+ class NestingError < ParserError; end
+
+ # :stopdoc:
+ class CircularDatastructure < NestingError; end
+ # :startdoc:
+
+ # This exception is raised, if a generator or unparser error occurs.
+ class GeneratorError < JSONError; end
+ # For backwards compatibility
+ UnparserError = GeneratorError
+
+ # This exception is raised, if the required unicode support is missing on the
+ # system. Usually this means, that the iconv library is not installed.
+ class MissingUnicodeSupport < JSONError; end
+
+ module_function
+
+ # Parse the JSON document _source_ into a Ruby data structure and return it.
+ #
+ # _opts_ can have the following
+ # keys:
+ # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
+ # structures. Disable depth checking with :max_nesting => false, it defaults
+ # to 19.
+ # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
+ # defiance of RFC 4627 to be parsed by the Parser. This option defaults
+ # to false.
+ # * *symbolize_names*: If set to true, returns symbols for the names
+ # (keys) in a JSON object. Otherwise strings are returned, which is also
+ # the default.
+ # * *create_additions*: If set to false, the Parser doesn't create
+ # additions even if a matchin class and create_id was found. This option
+ # defaults to true.
+ # * *object_class*: Defaults to Hash
+ # * *array_class*: Defaults to Array
+ def parse(source, opts = {})
+ Parser.new(source, opts).parse
+ end
+
+ # Parse the JSON document _source_ into a Ruby data structure and return it.
+ # The bang version of the parse method, defaults to the more dangerous values
+ # for the _opts_ hash, so be sure only to parse trusted _source_ documents.
+ #
+ # _opts_ can have the following keys:
+ # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
+ # structures. Enable depth checking with :max_nesting => anInteger. The parse!
+ # methods defaults to not doing max depth checking: This can be dangerous,
+ # if someone wants to fill up your stack.
+ # * *allow_nan*: If set to true, allow NaN, Infinity, and -Infinity in
+ # defiance of RFC 4627 to be parsed by the Parser. This option defaults
+ # to true.
+ # * *create_additions*: If set to false, the Parser doesn't create
+ # additions even if a matchin class and create_id was found. This option
+ # defaults to true.
+ def parse!(source, opts = {})
+ opts = {
+ :max_nesting => false,
+ :allow_nan => true
+ }.update(opts)
+ Parser.new(source, opts).parse
+ end
+
+ # Generate a JSON document from the Ruby data structure _obj_ and return
+ # it. _state_ is * a JSON::State object,
+ # * or a Hash like object (responding to to_hash),
+ # * an object convertible into a hash by a to_h method,
+ # that is used as or to configure a State object.
+ #
+ # It defaults to a state object, that creates the shortest possible JSON text
+ # in one line, checks for circular data structures and doesn't allow NaN,
+ # Infinity, and -Infinity.
+ #
+ # A _state_ hash can have the following keys:
+ # * *indent*: a string used to indent levels (default: ''),
+ # * *space*: a string that is put after, a : or , delimiter (default: ''),
+ # * *space_before*: a string that is put before a : pair delimiter (default: ''),
+ # * *object_nl*: a string that is put at the end of a JSON object (default: ''),
+ # * *array_nl*: a string that is put at the end of a JSON array (default: ''),
+ # * *allow_nan*: true if NaN, Infinity, and -Infinity should be
+ # generated, otherwise an exception is thrown, if these values are
+ # encountered. This options defaults to false.
+ # * *max_nesting*: The maximum depth of nesting allowed in the data
+ # structures from which JSON is to be generated. Disable depth checking
+ # with :max_nesting => false, it defaults to 19.
+ #
+ # See also the fast_generate for the fastest creation method with the least
+ # amount of sanity checks, and the pretty_generate method for some
+ # defaults for a pretty output.
+ def generate(obj, opts = nil)
+ state = SAFE_STATE_PROTOTYPE.dup
+ if opts
+ if opts.respond_to? :to_hash
+ opts = opts.to_hash
+ elsif opts.respond_to? :to_h
+ opts = opts.to_h
+ else
+ raise TypeError, "can't convert #{opts.class} into Hash"
+ end
+ state = state.configure(opts)
+ end
+ state.generate(obj)
+ end
+
+ # :stopdoc:
+ # I want to deprecate these later, so I'll first be silent about them, and
+ # later delete them.
+ alias unparse generate
+ module_function :unparse
+ # :startdoc:
+
+ # Generate a JSON document from the Ruby data structure _obj_ and return it.
+ # This method disables the checks for circles in Ruby objects.
+ #
+ # *WARNING*: Be careful not to pass any Ruby data structures with circles as
+ # _obj_ argument, because this will cause JSON to go into an infinite loop.
+ def fast_generate(obj, opts = nil)
+ state = FAST_STATE_PROTOTYPE.dup
+ if opts
+ if opts.respond_to? :to_hash
+ opts = opts.to_hash
+ elsif opts.respond_to? :to_h
+ opts = opts.to_h
+ else
+ raise TypeError, "can't convert #{opts.class} into Hash"
+ end
+ state.configure(opts)
+ end
+ state.generate(obj)
+ end
+
+ # :stopdoc:
+ # I want to deprecate these later, so I'll first be silent about them, and later delete them.
+ alias fast_unparse fast_generate
+ module_function :fast_unparse
+ # :startdoc:
+
+ # Generate a JSON document from the Ruby data structure _obj_ and return it.
+ # The returned document is a prettier form of the document returned by
+ # #unparse.
+ #
+ # The _opts_ argument can be used to configure the generator, see the
+ # generate method for a more detailed explanation.
+ def pretty_generate(obj, opts = nil)
+ state = PRETTY_STATE_PROTOTYPE.dup
+ if opts
+ if opts.respond_to? :to_hash
+ opts = opts.to_hash
+ elsif opts.respond_to? :to_h
+ opts = opts.to_h
+ else
+ raise TypeError, "can't convert #{opts.class} into Hash"
+ end
+ state.configure(opts)
+ end
+ state.generate(obj)
+ end
+
+ # :stopdoc:
+ # I want to deprecate these later, so I'll first be silent about them, and later delete them.
+ alias pretty_unparse pretty_generate
+ module_function :pretty_unparse
+ # :startdoc:
+
+ # Load a ruby data structure from a JSON _source_ and return it. A source can
+ # either be a string-like object, an IO like object, or an object responding
+ # to the read method. If _proc_ was given, it will be called with any nested
+ # Ruby object as an argument recursively in depth first order.
+ #
+ # This method is part of the implementation of the load/dump interface of
+ # Marshal and YAML.
+ def load(source, proc = nil)
+ if source.respond_to? :to_str
+ source = source.to_str
+ elsif source.respond_to? :to_io
+ source = source.to_io.read
+ else
+ source = source.read
+ end
+ result = parse(source, :max_nesting => false, :allow_nan => true)
+ recurse_proc(result, &proc) if proc
+ result
+ end
+
+ def recurse_proc(result, &proc)
+ case result
+ when Array
+ result.each { |x| recurse_proc x, &proc }
+ proc.call result
+ when Hash
+ result.each { |x, y| recurse_proc x, &proc; recurse_proc y, &proc }
+ proc.call result
+ else
+ proc.call result
+ end
+ end
+
+ alias restore load
+ module_function :restore
+
+ # Dumps _obj_ as a JSON string, i.e. calls generate on the object and returns
+ # the result.
+ #
+ # If anIO (an IO like object or an object that responds to the write method)
+ # was given, the resulting JSON is written to it.
+ #
+ # If the number of nested arrays or objects exceeds _limit_ an ArgumentError
+ # exception is raised. This argument is similar (but not exactly the
+ # same!) to the _limit_ argument in Marshal.dump.
+ #
+ # This method is part of the implementation of the load/dump interface of
+ # Marshal and YAML.
+ def dump(obj, anIO = nil, limit = nil)
+ if anIO and limit.nil?
+ anIO = anIO.to_io if anIO.respond_to?(:to_io)
+ unless anIO.respond_to?(:write)
+ limit = anIO
+ anIO = nil
+ end
+ end
+ limit ||= 0
+ result = generate(obj, :allow_nan => true, :max_nesting => limit)
+ if anIO
+ anIO.write result
+ anIO
+ else
+ result
+ end
+ rescue JSON::NestingError
+ raise ArgumentError, "exceed depth limit"
+ end
+
+ # Swap consecutive bytes of _string_ in place.
+ def self.swap!(string) # :nodoc:
+ 0.upto(string.size / 2) do |i|
+ break unless string[2 * i + 1]
+ string[2 * i], string[2 * i + 1] = string[2 * i + 1], string[2 * i]
+ end
+ string
+ end
+
+ # Shortuct for iconv.
+ if ::String.method_defined?(:encode)
+ def self.iconv(to, from, string)
+ string.encode(to, from)
+ end
+ else
+ require 'iconv'
+ def self.iconv(to, from, string)
+ Iconv.iconv(to, from, string).first
+ end
+ end
+
+ if ::Object.method(:const_defined?).arity == 1
+ def self.const_defined_in?(modul, constant)
+ modul.const_defined?(constant)
+ end
+ else
+ def self.const_defined_in?(modul, constant)
+ modul.const_defined?(constant, false)
+ end
+ end
+end
+
+module ::Kernel
+ private
+
+ # Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in
+ # one line.
+ def j(*objs)
+ objs.each do |obj|
+ puts JSON::generate(obj, :allow_nan => true, :max_nesting => false)
+ end
+ nil
+ end
+
+ # Ouputs _objs_ to STDOUT as JSON strings in a pretty format, with
+ # indentation and over many lines.
+ def jj(*objs)
+ objs.each do |obj|
+ puts JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false)
+ end
+ nil
+ end
+
+ # If _object_ is string-like parse the string and return the parsed result as
+ # a Ruby data structure. Otherwise generate a JSON text from the Ruby data
+ # structure object and return it.
+ #
+ # The _opts_ argument is passed through to generate/parse respectively, see
+ # generate and parse for their documentation.
+ def JSON(object, *args)
+ if object.respond_to? :to_str
+ JSON.parse(object.to_str, args.first)
+ else
+ JSON.generate(object, args.first)
+ end
+ end
+end
+
+class ::Class
+ # Returns true, if this class can be used to create an instance
+ # from a serialised JSON string. The class has to implement a class
+ # method _json_create_ that expects a hash as first parameter, which includes
+ # the required data.
+ def json_creatable?
+ respond_to?(:json_create)
+ end
+end
diff --git a/vendor/gems/json-1.5.1/lib/json/editor.rb b/vendor/gems/json-1.5.1/lib/json/editor.rb
new file mode 100644
index 000000000..3450455be
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/editor.rb
@@ -0,0 +1,1369 @@
+# To use the GUI JSON editor, start the edit_json.rb executable script. It
+# requires ruby-gtk to be installed.
+
+require 'gtk2'
+require 'json'
+require 'rbconfig'
+require 'open-uri'
+
+module JSON
+ module Editor
+ include Gtk
+
+ # Beginning of the editor window title
+ TITLE = 'JSON Editor'.freeze
+
+ # Columns constants
+ ICON_COL, TYPE_COL, CONTENT_COL = 0, 1, 2
+
+ # JSON primitive types (Containers)
+ CONTAINER_TYPES = %w[Array Hash].sort
+ # All JSON primitive types
+ ALL_TYPES = (%w[TrueClass FalseClass Numeric String NilClass] +
+ CONTAINER_TYPES).sort
+
+ # The Nodes necessary for the tree representation of a JSON document
+ ALL_NODES = (ALL_TYPES + %w[Key]).sort
+
+ DEFAULT_DIALOG_KEY_PRESS_HANDLER = lambda do |dialog, event|
+ case event.keyval
+ when Gdk::Keyval::GDK_Return
+ dialog.response Dialog::RESPONSE_ACCEPT
+ when Gdk::Keyval::GDK_Escape
+ dialog.response Dialog::RESPONSE_REJECT
+ end
+ end
+
+ # Returns the Gdk::Pixbuf of the icon named _name_ from the icon cache.
+ def Editor.fetch_icon(name)
+ @icon_cache ||= {}
+ unless @icon_cache.key?(name)
+ path = File.dirname(__FILE__)
+ @icon_cache[name] = Gdk::Pixbuf.new(File.join(path, name + '.xpm'))
+ end
+ @icon_cache[name]
+ end
+
+ # Opens an error dialog on top of _window_ showing the error message
+ # _text_.
+ def Editor.error_dialog(window, text)
+ dialog = MessageDialog.new(window, Dialog::MODAL,
+ MessageDialog::ERROR,
+ MessageDialog::BUTTONS_CLOSE, text)
+ dialog.show_all
+ dialog.run
+ rescue TypeError
+ dialog = MessageDialog.new(Editor.window, Dialog::MODAL,
+ MessageDialog::ERROR,
+ MessageDialog::BUTTONS_CLOSE, text)
+ dialog.show_all
+ dialog.run
+ ensure
+ dialog.destroy if dialog
+ end
+
+ # Opens a yes/no question dialog on top of _window_ showing the error
+ # message _text_. If yes was answered _true_ is returned, otherwise
+ # _false_.
+ def Editor.question_dialog(window, text)
+ dialog = MessageDialog.new(window, Dialog::MODAL,
+ MessageDialog::QUESTION,
+ MessageDialog::BUTTONS_YES_NO, text)
+ dialog.show_all
+ dialog.run do |response|
+ return Gtk::Dialog::RESPONSE_YES === response
+ end
+ ensure
+ dialog.destroy if dialog
+ end
+
+ # Convert the tree model starting from Gtk::TreeIter _iter_ into a Ruby
+ # data structure and return it.
+ def Editor.model2data(iter)
+ return nil if iter.nil?
+ case iter.type
+ when 'Hash'
+ hash = {}
+ iter.each { |c| hash[c.content] = Editor.model2data(c.first_child) }
+ hash
+ when 'Array'
+ array = Array.new(iter.n_children)
+ iter.each_with_index { |c, i| array[i] = Editor.model2data(c) }
+ array
+ when 'Key'
+ iter.content
+ when 'String'
+ iter.content
+ when 'Numeric'
+ content = iter.content
+ if /\./.match(content)
+ content.to_f
+ else
+ content.to_i
+ end
+ when 'TrueClass'
+ true
+ when 'FalseClass'
+ false
+ when 'NilClass'
+ nil
+ else
+ fail "Unknown type found in model: #{iter.type}"
+ end
+ end
+
+ # Convert the Ruby data structure _data_ into tree model data for Gtk and
+ # returns the whole model. If the parameter _model_ wasn't given a new
+ # Gtk::TreeStore is created as the model. The _parent_ parameter specifies
+ # the parent node (iter, Gtk:TreeIter instance) to which the data is
+ # appended, alternativeley the result of the yielded block is used as iter.
+ def Editor.data2model(data, model = nil, parent = nil)
+ model ||= TreeStore.new(Gdk::Pixbuf, String, String)
+ iter = if block_given?
+ yield model
+ else
+ model.append(parent)
+ end
+ case data
+ when Hash
+ iter.type = 'Hash'
+ data.sort.each do |key, value|
+ pair_iter = model.append(iter)
+ pair_iter.type = 'Key'
+ pair_iter.content = key.to_s
+ Editor.data2model(value, model, pair_iter)
+ end
+ when Array
+ iter.type = 'Array'
+ data.each do |value|
+ Editor.data2model(value, model, iter)
+ end
+ when Numeric
+ iter.type = 'Numeric'
+ iter.content = data.to_s
+ when String, true, false, nil
+ iter.type = data.class.name
+ iter.content = data.nil? ? 'null' : data.to_s
+ else
+ iter.type = 'String'
+ iter.content = data.to_s
+ end
+ model
+ end
+
+ # The Gtk::TreeIter class is reopened and some auxiliary methods are added.
+ class Gtk::TreeIter
+ include Enumerable
+
+ # Traverse each of this Gtk::TreeIter instance's children
+ # and yield to them.
+ def each
+ n_children.times { |i| yield nth_child(i) }
+ end
+
+ # Recursively traverse all nodes of this Gtk::TreeIter's subtree
+ # (including self) and yield to them.
+ def recursive_each(&block)
+ yield self
+ each do |i|
+ i.recursive_each(&block)
+ end
+ end
+
+ # Remove the subtree of this Gtk::TreeIter instance from the
+ # model _model_.
+ def remove_subtree(model)
+ while current = first_child
+ model.remove(current)
+ end
+ end
+
+ # Returns the type of this node.
+ def type
+ self[TYPE_COL]
+ end
+
+ # Sets the type of this node to _value_. This implies setting
+ # the respective icon accordingly.
+ def type=(value)
+ self[TYPE_COL] = value
+ self[ICON_COL] = Editor.fetch_icon(value)
+ end
+
+ # Returns the content of this node.
+ def content
+ self[CONTENT_COL]
+ end
+
+ # Sets the content of this node to _value_.
+ def content=(value)
+ self[CONTENT_COL] = value
+ end
+ end
+
+ # This module bundles some method, that can be used to create a menu. It
+ # should be included into the class in question.
+ module MenuExtension
+ include Gtk
+
+ # Creates a Menu, that includes MenuExtension. _treeview_ is the
+ # Gtk::TreeView, on which it operates.
+ def initialize(treeview)
+ @treeview = treeview
+ @menu = Menu.new
+ end
+
+ # Returns the Gtk::TreeView of this menu.
+ attr_reader :treeview
+
+ # Returns the menu.
+ attr_reader :menu
+
+ # Adds a Gtk::SeparatorMenuItem to this instance's #menu.
+ def add_separator
+ menu.append SeparatorMenuItem.new
+ end
+
+ # Adds a Gtk::MenuItem to this instance's #menu. _label_ is the label
+ # string, _klass_ is the item type, and _callback_ is the procedure, that
+ # is called if the _item_ is activated.
+ def add_item(label, keyval = nil, klass = MenuItem, &callback)
+ label = "#{label} (C-#{keyval.chr})" if keyval
+ item = klass.new(label)
+ item.signal_connect(:activate, &callback)
+ if keyval
+ self.signal_connect(:'key-press-event') do |item, event|
+ if event.state & Gdk::Window::ModifierType::CONTROL_MASK != 0 and
+ event.keyval == keyval
+ callback.call item
+ end
+ end
+ end
+ menu.append item
+ item
+ end
+
+ # This method should be implemented in subclasses to create the #menu of
+ # this instance. It has to be called after an instance of this class is
+ # created, to build the menu.
+ def create
+ raise NotImplementedError
+ end
+
+ def method_missing(*a, &b)
+ treeview.__send__(*a, &b)
+ end
+ end
+
+ # This class creates the popup menu, that opens when clicking onto the
+ # treeview.
+ class PopUpMenu
+ include MenuExtension
+
+ # Change the type or content of the selected node.
+ def change_node(item)
+ if current = selection.selected
+ parent = current.parent
+ old_type, old_content = current.type, current.content
+ if ALL_TYPES.include?(old_type)
+ @clipboard_data = Editor.model2data(current)
+ type, content = ask_for_element(parent, current.type,
+ current.content)
+ if type
+ current.type, current.content = type, content
+ current.remove_subtree(model)
+ toplevel.display_status("Changed a node in tree.")
+ window.change
+ end
+ else
+ toplevel.display_status(
+ "Cannot change node of type #{old_type} in tree!")
+ end
+ end
+ end
+
+ # Cut the selected node and its subtree, and save it into the
+ # clipboard.
+ def cut_node(item)
+ if current = selection.selected
+ if current and current.type == 'Key'
+ @clipboard_data = {
+ current.content => Editor.model2data(current.first_child)
+ }
+ else
+ @clipboard_data = Editor.model2data(current)
+ end
+ model.remove(current)
+ window.change
+ toplevel.display_status("Cut a node from tree.")
+ end
+ end
+
+ # Copy the selected node and its subtree, and save it into the
+ # clipboard.
+ def copy_node(item)
+ if current = selection.selected
+ if current and current.type == 'Key'
+ @clipboard_data = {
+ current.content => Editor.model2data(current.first_child)
+ }
+ else
+ @clipboard_data = Editor.model2data(current)
+ end
+ window.change
+ toplevel.display_status("Copied a node from tree.")
+ end
+ end
+
+ # Paste the data in the clipboard into the selected Array or Hash by
+ # appending it.
+ def paste_node_appending(item)
+ if current = selection.selected
+ if @clipboard_data
+ case current.type
+ when 'Array'
+ Editor.data2model(@clipboard_data, model, current)
+ expand_collapse(current)
+ when 'Hash'
+ if @clipboard_data.is_a? Hash
+ parent = current.parent
+ hash = Editor.model2data(current)
+ model.remove(current)
+ hash.update(@clipboard_data)
+ Editor.data2model(hash, model, parent)
+ if parent
+ expand_collapse(parent)
+ elsif @expanded
+ expand_all
+ end
+ window.change
+ else
+ toplevel.display_status(
+ "Cannot paste non-#{current.type} data into '#{current.type}'!")
+ end
+ else
+ toplevel.display_status(
+ "Cannot paste node below '#{current.type}'!")
+ end
+ else
+ toplevel.display_status("Nothing to paste in clipboard!")
+ end
+ else
+ toplevel.display_status("Append a node into the root first!")
+ end
+ end
+
+ # Paste the data in the clipboard into the selected Array inserting it
+ # before the selected element.
+ def paste_node_inserting_before(item)
+ if current = selection.selected
+ if @clipboard_data
+ parent = current.parent or return
+ parent_type = parent.type
+ if parent_type == 'Array'
+ selected_index = parent.each_with_index do |c, i|
+ break i if c == current
+ end
+ Editor.data2model(@clipboard_data, model, parent) do |m|
+ m.insert_before(parent, current)
+ end
+ expand_collapse(current)
+ toplevel.display_status("Inserted an element to " +
+ "'#{parent_type}' before index #{selected_index}.")
+ window.change
+ else
+ toplevel.display_status(
+ "Cannot insert node below '#{parent_type}'!")
+ end
+ else
+ toplevel.display_status("Nothing to paste in clipboard!")
+ end
+ else
+ toplevel.display_status("Append a node into the root first!")
+ end
+ end
+
+ # Append a new node to the selected Hash or Array.
+ def append_new_node(item)
+ if parent = selection.selected
+ parent_type = parent.type
+ case parent_type
+ when 'Hash'
+ key, type, content = ask_for_hash_pair(parent)
+ key or return
+ iter = create_node(parent, 'Key', key)
+ iter = create_node(iter, type, content)
+ toplevel.display_status(
+ "Added a (key, value)-pair to '#{parent_type}'.")
+ window.change
+ when 'Array'
+ type, content = ask_for_element(parent)
+ type or return
+ iter = create_node(parent, type, content)
+ window.change
+ toplevel.display_status("Appendend an element to '#{parent_type}'.")
+ else
+ toplevel.display_status("Cannot append to '#{parent_type}'!")
+ end
+ else
+ type, content = ask_for_element
+ type or return
+ iter = create_node(nil, type, content)
+ window.change
+ end
+ end
+
+ # Insert a new node into an Array before the selected element.
+ def insert_new_node(item)
+ if current = selection.selected
+ parent = current.parent or return
+ parent_parent = parent.parent
+ parent_type = parent.type
+ if parent_type == 'Array'
+ selected_index = parent.each_with_index do |c, i|
+ break i if c == current
+ end
+ type, content = ask_for_element(parent)
+ type or return
+ iter = model.insert_before(parent, current)
+ iter.type, iter.content = type, content
+ toplevel.display_status("Inserted an element to " +
+ "'#{parent_type}' before index #{selected_index}.")
+ window.change
+ else
+ toplevel.display_status(
+ "Cannot insert node below '#{parent_type}'!")
+ end
+ else
+ toplevel.display_status("Append a node into the root first!")
+ end
+ end
+
+ # Recursively collapse/expand a subtree starting from the selected node.
+ def collapse_expand(item)
+ if current = selection.selected
+ if row_expanded?(current.path)
+ collapse_row(current.path)
+ else
+ expand_row(current.path, true)
+ end
+ else
+ toplevel.display_status("Append a node into the root first!")
+ end
+ end
+
+ # Create the menu.
+ def create
+ add_item("Change node", ?n, &method(:change_node))
+ add_separator
+ add_item("Cut node", ?X, &method(:cut_node))
+ add_item("Copy node", ?C, &method(:copy_node))
+ add_item("Paste node (appending)", ?A, &method(:paste_node_appending))
+ add_item("Paste node (inserting before)", ?I,
+ &method(:paste_node_inserting_before))
+ add_separator
+ add_item("Append new node", ?a, &method(:append_new_node))
+ add_item("Insert new node before", ?i, &method(:insert_new_node))
+ add_separator
+ add_item("Collapse/Expand node (recursively)", ?e,
+ &method(:collapse_expand))
+
+ menu.show_all
+ signal_connect(:button_press_event) do |widget, event|
+ if event.kind_of? Gdk::EventButton and event.button == 3
+ menu.popup(nil, nil, event.button, event.time)
+ end
+ end
+ signal_connect(:popup_menu) do
+ menu.popup(nil, nil, 0, Gdk::Event::CURRENT_TIME)
+ end
+ end
+ end
+
+ # This class creates the File pulldown menu.
+ class FileMenu
+ include MenuExtension
+
+ # Clear the model and filename, but ask to save the JSON document, if
+ # unsaved changes have occured.
+ def new(item)
+ window.clear
+ end
+
+ # Open a file and load it into the editor. Ask to save the JSON document
+ # first, if unsaved changes have occured.
+ def open(item)
+ window.file_open
+ end
+
+ def open_location(item)
+ window.location_open
+ end
+
+ # Revert the current JSON document in the editor to the saved version.
+ def revert(item)
+ window.instance_eval do
+ @filename and file_open(@filename)
+ end
+ end
+
+ # Save the current JSON document.
+ def save(item)
+ window.file_save
+ end
+
+ # Save the current JSON document under the given filename.
+ def save_as(item)
+ window.file_save_as
+ end
+
+ # Quit the editor, after asking to save any unsaved changes first.
+ def quit(item)
+ window.quit
+ end
+
+ # Create the menu.
+ def create
+ title = MenuItem.new('File')
+ title.submenu = menu
+ add_item('New', &method(:new))
+ add_item('Open', ?o, &method(:open))
+ add_item('Open location', ?l, &method(:open_location))
+ add_item('Revert', &method(:revert))
+ add_separator
+ add_item('Save', ?s, &method(:save))
+ add_item('Save As', ?S, &method(:save_as))
+ add_separator
+ add_item('Quit', ?q, &method(:quit))
+ title
+ end
+ end
+
+ # This class creates the Edit pulldown menu.
+ class EditMenu
+ include MenuExtension
+
+ # Copy data from model into primary clipboard.
+ def copy(item)
+ data = Editor.model2data(model.iter_first)
+ json = JSON.pretty_generate(data, :max_nesting => false)
+ c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
+ c.text = json
+ end
+
+ # Copy json text from primary clipboard into model.
+ def paste(item)
+ c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
+ if json = c.wait_for_text
+ window.ask_save if @changed
+ begin
+ window.edit json
+ rescue JSON::ParserError
+ window.clear
+ end
+ end
+ end
+
+ # Find a string in all nodes' contents and select the found node in the
+ # treeview.
+ def find(item)
+ @search = ask_for_find_term(@search) or return
+ iter = model.get_iter('0') or return
+ iter.recursive_each do |i|
+ if @iter
+ if @iter != i
+ next
+ else
+ @iter = nil
+ next
+ end
+ elsif @search.match(i[CONTENT_COL])
+ set_cursor(i.path, nil, false)
+ @iter = i
+ break
+ end
+ end
+ end
+
+ # Repeat the last search given by #find.
+ def find_again(item)
+ @search or return
+ iter = model.get_iter('0')
+ iter.recursive_each do |i|
+ if @iter
+ if @iter != i
+ next
+ else
+ @iter = nil
+ next
+ end
+ elsif @search.match(i[CONTENT_COL])
+ set_cursor(i.path, nil, false)
+ @iter = i
+ break
+ end
+ end
+ end
+
+ # Sort (Reverse sort) all elements of the selected array by the given
+ # expression. _x_ is the element in question.
+ def sort(item)
+ if current = selection.selected
+ if current.type == 'Array'
+ parent = current.parent
+ ary = Editor.model2data(current)
+ order, reverse = ask_for_order
+ order or return
+ begin
+ block = eval "lambda { |x| #{order} }"
+ if reverse
+ ary.sort! { |a,b| block[b] <=> block[a] }
+ else
+ ary.sort! { |a,b| block[a] <=> block[b] }
+ end
+ rescue => e
+ Editor.error_dialog(self, "Failed to sort Array with #{order}: #{e}!")
+ else
+ Editor.data2model(ary, model, parent) do |m|
+ m.insert_before(parent, current)
+ end
+ model.remove(current)
+ expand_collapse(parent)
+ window.change
+ toplevel.display_status("Array has been sorted.")
+ end
+ else
+ toplevel.display_status("Only Array nodes can be sorted!")
+ end
+ else
+ toplevel.display_status("Select an Array to sort first!")
+ end
+ end
+
+ # Create the menu.
+ def create
+ title = MenuItem.new('Edit')
+ title.submenu = menu
+ add_item('Copy', ?c, &method(:copy))
+ add_item('Paste', ?v, &method(:paste))
+ add_separator
+ add_item('Find', ?f, &method(:find))
+ add_item('Find Again', ?g, &method(:find_again))
+ add_separator
+ add_item('Sort', ?S, &method(:sort))
+ title
+ end
+ end
+
+ class OptionsMenu
+ include MenuExtension
+
+ # Collapse/Expand all nodes by default.
+ def collapsed_nodes(item)
+ if expanded
+ self.expanded = false
+ collapse_all
+ else
+ self.expanded = true
+ expand_all
+ end
+ end
+
+ # Toggle pretty saving mode on/off.
+ def pretty_saving(item)
+ @pretty_item.toggled
+ window.change
+ end
+
+ attr_reader :pretty_item
+
+ # Create the menu.
+ def create
+ title = MenuItem.new('Options')
+ title.submenu = menu
+ add_item('Collapsed nodes', nil, CheckMenuItem, &method(:collapsed_nodes))
+ @pretty_item = add_item('Pretty saving', nil, CheckMenuItem,
+ &method(:pretty_saving))
+ @pretty_item.active = true
+ window.unchange
+ title
+ end
+ end
+
+ # This class inherits from Gtk::TreeView, to configure it and to add a lot
+ # of behaviour to it.
+ class JSONTreeView < Gtk::TreeView
+ include Gtk
+
+ # Creates a JSONTreeView instance, the parameter _window_ is
+ # a MainWindow instance and used for self delegation.
+ def initialize(window)
+ @window = window
+ super(TreeStore.new(Gdk::Pixbuf, String, String))
+ self.selection.mode = SELECTION_BROWSE
+
+ @expanded = false
+ self.headers_visible = false
+ add_columns
+ add_popup_menu
+ end
+
+ # Returns the MainWindow instance of this JSONTreeView.
+ attr_reader :window
+
+ # Returns true, if nodes are autoexpanding, false otherwise.
+ attr_accessor :expanded
+
+ private
+
+ def add_columns
+ cell = CellRendererPixbuf.new
+ column = TreeViewColumn.new('Icon', cell,
+ 'pixbuf' => ICON_COL
+ )
+ append_column(column)
+
+ cell = CellRendererText.new
+ column = TreeViewColumn.new('Type', cell,
+ 'text' => TYPE_COL
+ )
+ append_column(column)
+
+ cell = CellRendererText.new
+ cell.editable = true
+ column = TreeViewColumn.new('Content', cell,
+ 'text' => CONTENT_COL
+ )
+ cell.signal_connect(:edited, &method(:cell_edited))
+ append_column(column)
+ end
+
+ def unify_key(iter, key)
+ return unless iter.type == 'Key'
+ parent = iter.parent
+ if parent.any? { |c| c != iter and c.content == key }
+ old_key = key
+ i = 0
+ begin
+ key = sprintf("%s.%d", old_key, i += 1)
+ end while parent.any? { |c| c != iter and c.content == key }
+ end
+ iter.content = key
+ end
+
+ def cell_edited(cell, path, value)
+ iter = model.get_iter(path)
+ case iter.type
+ when 'Key'
+ unify_key(iter, value)
+ toplevel.display_status('Key has been changed.')
+ when 'FalseClass'
+ value.downcase!
+ if value == 'true'
+ iter.type, iter.content = 'TrueClass', 'true'
+ end
+ when 'TrueClass'
+ value.downcase!
+ if value == 'false'
+ iter.type, iter.content = 'FalseClass', 'false'
+ end
+ when 'Numeric'
+ iter.content =
+ if value == 'Infinity'
+ value
+ else
+ (Integer(value) rescue Float(value) rescue 0).to_s
+ end
+ when 'String'
+ iter.content = value
+ when 'Hash', 'Array'
+ return
+ else
+ fail "Unknown type found in model: #{iter.type}"
+ end
+ window.change
+ end
+
+ def configure_value(value, type)
+ value.editable = false
+ case type
+ when 'Array', 'Hash'
+ value.text = ''
+ when 'TrueClass'
+ value.text = 'true'
+ when 'FalseClass'
+ value.text = 'false'
+ when 'NilClass'
+ value.text = 'null'
+ when 'Numeric', 'String'
+ value.text ||= ''
+ value.editable = true
+ else
+ raise ArgumentError, "unknown type '#{type}' encountered"
+ end
+ end
+
+ def add_popup_menu
+ menu = PopUpMenu.new(self)
+ menu.create
+ end
+
+ public
+
+ # Create a _type_ node with content _content_, and add it to _parent_
+ # in the model. If _parent_ is nil, create a new model and put it into
+ # the editor treeview.
+ def create_node(parent, type, content)
+ iter = if parent
+ model.append(parent)
+ else
+ new_model = Editor.data2model(nil)
+ toplevel.view_new_model(new_model)
+ new_model.iter_first
+ end
+ iter.type, iter.content = type, content
+ expand_collapse(parent) if parent
+ iter
+ end
+
+ # Ask for a hash key, value pair to be added to the Hash node _parent_.
+ def ask_for_hash_pair(parent)
+ key_input = type_input = value_input = nil
+
+ dialog = Dialog.new("New (key, value) pair for Hash", nil, nil,
+ [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
+ [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
+ )
+ dialog.width_request = 640
+
+ hbox = HBox.new(false, 5)
+ hbox.pack_start(Label.new("Key:"), false)
+ hbox.pack_start(key_input = Entry.new)
+ key_input.text = @key || ''
+ dialog.vbox.pack_start(hbox, false)
+ key_input.signal_connect(:activate) do
+ if parent.any? { |c| c.content == key_input.text }
+ toplevel.display_status('Key already exists in Hash!')
+ key_input.text = ''
+ else
+ toplevel.display_status('Key has been changed.')
+ end
+ end
+
+ hbox = HBox.new(false, 5)
+ hbox.pack_start(Label.new("Type:"), false)
+ hbox.pack_start(type_input = ComboBox.new(true))
+ ALL_TYPES.each { |t| type_input.append_text(t) }
+ type_input.active = @type || 0
+ dialog.vbox.pack_start(hbox, false)
+
+ type_input.signal_connect(:changed) do
+ value_input.editable = false
+ case ALL_TYPES[type_input.active]
+ when 'Array', 'Hash'
+ value_input.text = ''
+ when 'TrueClass'
+ value_input.text = 'true'
+ when 'FalseClass'
+ value_input.text = 'false'
+ when 'NilClass'
+ value_input.text = 'null'
+ else
+ value_input.text = ''
+ value_input.editable = true
+ end
+ end
+
+ hbox = HBox.new(false, 5)
+ hbox.pack_start(Label.new("Value:"), false)
+ hbox.pack_start(value_input = Entry.new)
+ value_input.width_chars = 60
+ value_input.text = @value || ''
+ dialog.vbox.pack_start(hbox, false)
+
+ dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
+ dialog.show_all
+ self.focus = dialog
+ dialog.run do |response|
+ if response == Dialog::RESPONSE_ACCEPT
+ @key = key_input.text
+ type = ALL_TYPES[@type = type_input.active]
+ content = value_input.text
+ return @key, type, content
+ end
+ end
+ return
+ ensure
+ dialog.destroy
+ end
+
+ # Ask for an element to be appended _parent_.
+ def ask_for_element(parent = nil, default_type = nil, value_text = @content)
+ type_input = value_input = nil
+
+ dialog = Dialog.new(
+ "New element into #{parent ? parent.type : 'root'}",
+ nil, nil,
+ [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
+ [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
+ )
+ hbox = HBox.new(false, 5)
+ hbox.pack_start(Label.new("Type:"), false)
+ hbox.pack_start(type_input = ComboBox.new(true))
+ default_active = 0
+ types = parent ? ALL_TYPES : CONTAINER_TYPES
+ types.each_with_index do |t, i|
+ type_input.append_text(t)
+ if t == default_type
+ default_active = i
+ end
+ end
+ type_input.active = default_active
+ dialog.vbox.pack_start(hbox, false)
+ type_input.signal_connect(:changed) do
+ configure_value(value_input, types[type_input.active])
+ end
+
+ hbox = HBox.new(false, 5)
+ hbox.pack_start(Label.new("Value:"), false)
+ hbox.pack_start(value_input = Entry.new)
+ value_input.width_chars = 60
+ value_input.text = value_text if value_text
+ configure_value(value_input, types[type_input.active])
+
+ dialog.vbox.pack_start(hbox, false)
+
+ dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
+ dialog.show_all
+ self.focus = dialog
+ dialog.run do |response|
+ if response == Dialog::RESPONSE_ACCEPT
+ type = types[type_input.active]
+ @content = case type
+ when 'Numeric'
+ if (t = value_input.text) == 'Infinity'
+ 1 / 0.0
+ else
+ Integer(t) rescue Float(t) rescue 0
+ end
+ else
+ value_input.text
+ end.to_s
+ return type, @content
+ end
+ end
+ return
+ ensure
+ dialog.destroy if dialog
+ end
+
+ # Ask for an order criteria for sorting, using _x_ for the element in
+ # question. Returns the order criterium, and true/false for reverse
+ # sorting.
+ def ask_for_order
+ dialog = Dialog.new(
+ "Give an order criterium for 'x'.",
+ nil, nil,
+ [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
+ [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
+ )
+ hbox = HBox.new(false, 5)
+
+ hbox.pack_start(Label.new("Order:"), false)
+ hbox.pack_start(order_input = Entry.new)
+ order_input.text = @order || 'x'
+ order_input.width_chars = 60
+
+ hbox.pack_start(reverse_checkbox = CheckButton.new('Reverse'), false)
+
+ dialog.vbox.pack_start(hbox, false)
+
+ dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
+ dialog.show_all
+ self.focus = dialog
+ dialog.run do |response|
+ if response == Dialog::RESPONSE_ACCEPT
+ return @order = order_input.text, reverse_checkbox.active?
+ end
+ end
+ return
+ ensure
+ dialog.destroy if dialog
+ end
+
+ # Ask for a find term to search for in the tree. Returns the term as a
+ # string.
+ def ask_for_find_term(search = nil)
+ dialog = Dialog.new(
+ "Find a node matching regex in tree.",
+ nil, nil,
+ [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
+ [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
+ )
+ hbox = HBox.new(false, 5)
+
+ hbox.pack_start(Label.new("Regex:"), false)
+ hbox.pack_start(regex_input = Entry.new)
+ hbox.pack_start(icase_checkbox = CheckButton.new('Icase'), false)
+ regex_input.width_chars = 60
+ if search
+ regex_input.text = search.source
+ icase_checkbox.active = search.casefold?
+ end
+
+ dialog.vbox.pack_start(hbox, false)
+
+ dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
+ dialog.show_all
+ self.focus = dialog
+ dialog.run do |response|
+ if response == Dialog::RESPONSE_ACCEPT
+ begin
+ return Regexp.new(regex_input.text, icase_checkbox.active? ? Regexp::IGNORECASE : 0)
+ rescue => e
+ Editor.error_dialog(self, "Evaluation of regex /#{regex_input.text}/ failed: #{e}!")
+ return
+ end
+ end
+ end
+ return
+ ensure
+ dialog.destroy if dialog
+ end
+
+ # Expand or collapse row pointed to by _iter_ according
+ # to the #expanded attribute.
+ def expand_collapse(iter)
+ if expanded
+ expand_row(iter.path, true)
+ else
+ collapse_row(iter.path)
+ end
+ end
+ end
+
+ # The editor main window
+ class MainWindow < Gtk::Window
+ include Gtk
+
+ def initialize(encoding)
+ @changed = false
+ @encoding = encoding
+ super(TOPLEVEL)
+ display_title
+ set_default_size(800, 600)
+ signal_connect(:delete_event) { quit }
+
+ vbox = VBox.new(false, 0)
+ add(vbox)
+ #vbox.border_width = 0
+
+ @treeview = JSONTreeView.new(self)
+ @treeview.signal_connect(:'cursor-changed') do
+ display_status('')
+ end
+
+ menu_bar = create_menu_bar
+ vbox.pack_start(menu_bar, false, false, 0)
+
+ sw = ScrolledWindow.new(nil, nil)
+ sw.shadow_type = SHADOW_ETCHED_IN
+ sw.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC)
+ vbox.pack_start(sw, true, true, 0)
+ sw.add(@treeview)
+
+ @status_bar = Statusbar.new
+ vbox.pack_start(@status_bar, false, false, 0)
+
+ @filename ||= nil
+ if @filename
+ data = read_data(@filename)
+ view_new_model Editor.data2model(data)
+ end
+
+ signal_connect(:button_release_event) do |_,event|
+ if event.button == 2
+ c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
+ if url = c.wait_for_text
+ location_open url
+ end
+ false
+ else
+ true
+ end
+ end
+ end
+
+ # Creates the menu bar with the pulldown menus and returns it.
+ def create_menu_bar
+ menu_bar = MenuBar.new
+ @file_menu = FileMenu.new(@treeview)
+ menu_bar.append @file_menu.create
+ @edit_menu = EditMenu.new(@treeview)
+ menu_bar.append @edit_menu.create
+ @options_menu = OptionsMenu.new(@treeview)
+ menu_bar.append @options_menu.create
+ menu_bar
+ end
+
+ # Sets editor status to changed, to indicate that the edited data
+ # containts unsaved changes.
+ def change
+ @changed = true
+ display_title
+ end
+
+ # Sets editor status to unchanged, to indicate that the edited data
+ # doesn't containt unsaved changes.
+ def unchange
+ @changed = false
+ display_title
+ end
+
+ # Puts a new model _model_ into the Gtk::TreeView to be edited.
+ def view_new_model(model)
+ @treeview.model = model
+ @treeview.expanded = true
+ @treeview.expand_all
+ unchange
+ end
+
+ # Displays _text_ in the status bar.
+ def display_status(text)
+ @cid ||= nil
+ @status_bar.pop(@cid) if @cid
+ @cid = @status_bar.get_context_id('dummy')
+ @status_bar.push(@cid, text)
+ end
+
+ # Opens a dialog, asking, if changes should be saved to a file.
+ def ask_save
+ if Editor.question_dialog(self,
+ "Unsaved changes to JSON model. Save?")
+ if @filename
+ file_save
+ else
+ file_save_as
+ end
+ end
+ end
+
+ # Quit this editor, that is, leave this editor's main loop.
+ def quit
+ ask_save if @changed
+ if Gtk.main_level > 0
+ destroy
+ Gtk.main_quit
+ end
+ nil
+ end
+
+ # Display the new title according to the editor's current state.
+ def display_title
+ title = TITLE.dup
+ title << ": #@filename" if @filename
+ title << " *" if @changed
+ self.title = title
+ end
+
+ # Clear the current model, after asking to save all unsaved changes.
+ def clear
+ ask_save if @changed
+ @filename = nil
+ self.view_new_model nil
+ end
+
+ def check_pretty_printed(json)
+ pretty = !!((nl_index = json.index("\n")) && nl_index != json.size - 1)
+ @options_menu.pretty_item.active = pretty
+ end
+ private :check_pretty_printed
+
+ # Open the data at the location _uri_, if given. Otherwise open a dialog
+ # to ask for the _uri_.
+ def location_open(uri = nil)
+ uri = ask_for_location unless uri
+ uri or return
+ ask_save if @changed
+ data = load_location(uri) or return
+ view_new_model Editor.data2model(data)
+ end
+
+ # Open the file _filename_ or call the #select_file method to ask for a
+ # filename.
+ def file_open(filename = nil)
+ filename = select_file('Open as a JSON file') unless filename
+ data = load_file(filename) or return
+ view_new_model Editor.data2model(data)
+ end
+
+ # Edit the string _json_ in the editor.
+ def edit(json)
+ if json.respond_to? :read
+ json = json.read
+ end
+ data = parse_json json
+ view_new_model Editor.data2model(data)
+ end
+
+ # Save the current file.
+ def file_save
+ if @filename
+ store_file(@filename)
+ else
+ file_save_as
+ end
+ end
+
+ # Save the current file as the filename
+ def file_save_as
+ filename = select_file('Save as a JSON file')
+ store_file(filename)
+ end
+
+ # Store the current JSON document to _path_.
+ def store_file(path)
+ if path
+ data = Editor.model2data(@treeview.model.iter_first)
+ File.open(path + '.tmp', 'wb') do |output|
+ data or break
+ if @options_menu.pretty_item.active?
+ output.puts JSON.pretty_generate(data, :max_nesting => false)
+ else
+ output.write JSON.generate(data, :max_nesting => false)
+ end
+ end
+ File.rename path + '.tmp', path
+ @filename = path
+ toplevel.display_status("Saved data to '#@filename'.")
+ unchange
+ end
+ rescue SystemCallError => e
+ Editor.error_dialog(self, "Failed to store JSON file: #{e}!")
+ end
+
+ # Load the file named _filename_ into the editor as a JSON document.
+ def load_file(filename)
+ if filename
+ if File.directory?(filename)
+ Editor.error_dialog(self, "Try to select a JSON file!")
+ nil
+ else
+ @filename = filename
+ if data = read_data(filename)
+ toplevel.display_status("Loaded data from '#@filename'.")
+ end
+ display_title
+ data
+ end
+ end
+ end
+
+ # Load the data at location _uri_ into the editor as a JSON document.
+ def load_location(uri)
+ data = read_data(uri) or return
+ @filename = nil
+ toplevel.display_status("Loaded data from '#{uri}'.")
+ display_title
+ data
+ end
+
+ def parse_json(json)
+ check_pretty_printed(json)
+ if @encoding && !/^utf8$/i.match(@encoding)
+ json = JSON.iconv 'utf-8', @encoding, json
+ end
+ JSON::parse(json, :max_nesting => false, :create_additions => false)
+ end
+ private :parse_json
+
+ # Read a JSON document from the file named _filename_, parse it into a
+ # ruby data structure, and return the data.
+ def read_data(filename)
+ open(filename) do |f|
+ json = f.read
+ return parse_json(json)
+ end
+ rescue => e
+ Editor.error_dialog(self, "Failed to parse JSON file: #{e}!")
+ return
+ end
+
+ # Open a file selecton dialog, displaying _message_, and return the
+ # selected filename or nil, if no file was selected.
+ def select_file(message)
+ filename = nil
+ fs = FileSelection.new(message)
+ fs.set_modal(true)
+ @default_dir = File.join(Dir.pwd, '') unless @default_dir
+ fs.set_filename(@default_dir)
+ fs.set_transient_for(self)
+ fs.signal_connect(:destroy) { Gtk.main_quit }
+ fs.ok_button.signal_connect(:clicked) do
+ filename = fs.filename
+ @default_dir = File.join(File.dirname(filename), '')
+ fs.destroy
+ Gtk.main_quit
+ end
+ fs.cancel_button.signal_connect(:clicked) do
+ fs.destroy
+ Gtk.main_quit
+ end
+ fs.show_all
+ Gtk.main
+ filename
+ end
+
+ # Ask for location URI a to load data from. Returns the URI as a string.
+ def ask_for_location
+ dialog = Dialog.new(
+ "Load data from location...",
+ nil, nil,
+ [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
+ [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
+ )
+ hbox = HBox.new(false, 5)
+
+ hbox.pack_start(Label.new("Location:"), false)
+ hbox.pack_start(location_input = Entry.new)
+ location_input.width_chars = 60
+ location_input.text = @location || ''
+
+ dialog.vbox.pack_start(hbox, false)
+
+ dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
+ dialog.show_all
+ dialog.run do |response|
+ if response == Dialog::RESPONSE_ACCEPT
+ return @location = location_input.text
+ end
+ end
+ return
+ ensure
+ dialog.destroy if dialog
+ end
+ end
+
+ class << self
+ # Starts a JSON Editor. If a block was given, it yields
+ # to the JSON::Editor::MainWindow instance.
+ def start(encoding = 'utf8') # :yield: window
+ Gtk.init
+ @window = Editor::MainWindow.new(encoding)
+ @window.icon_list = [ Editor.fetch_icon('json') ]
+ yield @window if block_given?
+ @window.show_all
+ Gtk.main
+ end
+
+ # Edit the string _json_ with encoding _encoding_ in the editor.
+ def edit(json, encoding = 'utf8')
+ start(encoding) do |window|
+ window.edit json
+ end
+ end
+
+ attr_reader :window
+ end
+ end
+end
diff --git a/vendor/gems/json-1.5.1/lib/json/ext.rb b/vendor/gems/json-1.5.1/lib/json/ext.rb
new file mode 100644
index 000000000..1fbc3fd7d
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/ext.rb
@@ -0,0 +1,28 @@
+require 'json/common'
+
+module JSON
+ # This module holds all the modules/classes that implement JSON's
+ # functionality as C extensions.
+ module Ext
+ begin
+ if defined?(RUBY_ENGINE) == 'constant' and RUBY_ENGINE == 'ruby' and RUBY_VERSION =~ /\A1\.9\./
+ require 'json/ext/1.9/parser'
+ require 'json/ext/1.9/generator'
+ elsif !defined?(RUBY_ENGINE) && RUBY_VERSION =~ /\A1\.8\./
+ require 'json/ext/1.8/parser'
+ require 'json/ext/1.8/generator'
+ else
+ require 'json/ext/parser'
+ require 'json/ext/generator'
+ end
+ rescue LoadError
+ require 'json/ext/parser'
+ require 'json/ext/generator'
+ end
+ $DEBUG and warn "Using Ext extension for JSON."
+ JSON.parser = Parser
+ JSON.generator = Generator
+ end
+
+ JSON_LOADED = true unless defined?(::JSON::JSON_LOADED)
+end
diff --git a/vendor/gems/json-1.5.1/lib/json/json.xpm b/vendor/gems/json-1.5.1/lib/json/json.xpm
new file mode 100644
index 000000000..2cb626bb0
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/json.xpm
@@ -0,0 +1,1499 @@
+/* XPM */
+static char * json_xpm[] = {
+"64 64 1432 2",
+" c None",
+". c #641839",
+"+ c #CF163C",
+"@ c #D31C3B",
+"# c #E11A38",
+"$ c #5F242D",
+"% c #320C22",
+"& c #9B532D",
+"* c #F32E34",
+"= c #820F33",
+"- c #4B0F34",
+"; c #8E1237",
+"> c #944029",
+", c #961325",
+"' c #A00C24",
+") c #872C23",
+"! c #694021",
+"~ c #590D1F",
+"{ c #420528",
+"] c #D85A2D",
+"^ c #7E092B",
+"/ c #0E0925",
+"( c #0D081F",
+"_ c #0F081E",
+": c #12071F",
+"< c #360620",
+"[ c #682A21",
+"} c #673F21",
+"| c #780E21",
+"1 c #A82320",
+"2 c #8D1D1F",
+"3 c #970127",
+"4 c #0D0123",
+"5 c #0D0324",
+"6 c #3B1E28",
+"7 c #C28429",
+"8 c #0C0523",
+"9 c #0C041E",
+"0 c #0E031A",
+"a c #11031A",
+"b c #13031B",
+"c c #13031C",
+"d c #11031D",
+"e c #19051E",
+"f c #390E20",
+"g c #9C0C20",
+"h c #C00721",
+"i c #980320",
+"j c #14031E",
+"k c #CD9F32",
+"l c #C29F2E",
+"m c #0F0325",
+"n c #0D0321",
+"o c #0E0324",
+"p c #D08329",
+"q c #9D1B27",
+"r c #1C0320",
+"s c #0D011A",
+"t c #120117",
+"u c #130017",
+"v c #150018",
+"w c #160119",
+"x c #17021A",
+"y c #15021B",
+"z c #11021E",
+"A c #0F021F",
+"B c #8C1821",
+"C c #CF4522",
+"D c #831821",
+"E c #BA7033",
+"F c #EDB339",
+"G c #C89733",
+"H c #280727",
+"I c #0F051F",
+"J c #0E0420",
+"K c #591F27",
+"L c #E47129",
+"M c #612224",
+"N c #0C021D",
+"O c #120018",
+"P c #140017",
+"Q c #170017",
+"R c #190018",
+"S c #1B0019",
+"T c #1B011A",
+"U c #18011B",
+"V c #15011C",
+"W c #12031E",
+"X c #460A21",
+"Y c #A13823",
+"Z c #784323",
+"` c #5A0C21",
+" . c #BC4530",
+".. c #EB5B38",
+"+. c #CE4E3B",
+"@. c #DD9334",
+"#. c #751A27",
+"$. c #11071E",
+"%. c #0F041C",
+"&. c #1E0824",
+"*. c #955A28",
+"=. c #9A5027",
+"-. c #1E0321",
+";. c #11011A",
+">. c #140018",
+",. c #180018",
+"'. c #1F001A",
+"). c #20001B",
+"!. c #1E001A",
+"~. c #1B001A",
+"{. c #16021B",
+"]. c #16041E",
+"^. c #220622",
+"/. c #5F3525",
+"(. c #DE5724",
+"_. c #611021",
+":. c #0F0925",
+"<. c #D1892E",
+"[. c #F27036",
+"}. c #EC633B",
+"|. c #DA293C",
+"1. c #E64833",
+"2. c #912226",
+"3. c #11081C",
+"4. c #110419",
+"5. c #0F041E",
+"6. c #451425",
+"7. c #BF6F28",
+"8. c #332225",
+"9. c #0E021E",
+"0. c #13001B",
+"a. c #17001A",
+"b. c #1C001B",
+"c. c #21001C",
+"d. c #23001C",
+"e. c #21001B",
+"f. c #19021A",
+"g. c #17041E",
+"h. c #150721",
+"i. c #602424",
+"j. c #D51223",
+"k. c #540820",
+"l. c #D04D2D",
+"m. c #EA8933",
+"n. c #875637",
+"o. c #88543A",
+"p. c #E5923A",
+"q. c #891931",
+"r. c #130B25",
+"s. c #10051B",
+"t. c #110217",
+"u. c #12021A",
+"v. c #761826",
+"w. c #E2A728",
+"x. c #300224",
+"y. c #10011E",
+"z. c #16001B",
+"A. c #1B001B",
+"B. c #21001A",
+"C. c #1E0019",
+"D. c #1D0019",
+"E. c #1A011A",
+"F. c #17031C",
+"G. c #120720",
+"H. c #4E0822",
+"I. c #670721",
+"J. c #C07630",
+"K. c #F59734",
+"L. c #BE1B35",
+"M. c #0E1435",
+"N. c #522037",
+"O. c #DB8039",
+"P. c #D45933",
+"Q. c #420927",
+"R. c #0F041D",
+"S. c #140118",
+"T. c #13021D",
+"U. c #100423",
+"V. c #7B6227",
+"W. c #C04326",
+"X. c #0E0020",
+"Y. c #13001D",
+"Z. c #18001B",
+"`. c #1E001B",
+" + c #22001C",
+".+ c #22001B",
+"++ c #1B011B",
+"@+ c #16041D",
+"#+ c #130520",
+"$+ c #860521",
+"%+ c #710520",
+"&+ c #670A2A",
+"*+ c #A66431",
+"=+ c #E97536",
+"-+ c #F8833A",
+";+ c #F77A3A",
+">+ c #C45337",
+",+ c #0A1C35",
+"'+ c #993638",
+")+ c #F7863B",
+"!+ c #F49736",
+"~+ c #94462B",
+"{+ c #0E031F",
+"]+ c #130119",
+"^+ c #160018",
+"/+ c #16011B",
+"(+ c #15021F",
+"_+ c #120123",
+":+ c #A65C28",
+"<+ c #5C4D23",
+"[+ c #0F001F",
+"}+ c #14001D",
+"|+ c #1A001B",
+"1+ c #1F001B",
+"2+ c #24001D",
+"3+ c #25001D",
+"4+ c #24001C",
+"5+ c #1F001C",
+"6+ c #1A011C",
+"7+ c #16021E",
+"8+ c #3F0421",
+"9+ c #BC0522",
+"0+ c #1C041E",
+"a+ c #7F5531",
+"b+ c #E68A38",
+"c+ c #F8933E",
+"d+ c #FA7942",
+"e+ c #FB7543",
+"f+ c #FA6F41",
+"g+ c #F1793D",
+"h+ c #7D3B3A",
+"i+ c #28263B",
+"j+ c #D45441",
+"k+ c #F8A238",
+"l+ c #996B2D",
+"m+ c #0E0421",
+"n+ c #12011A",
+"o+ c #180019",
+"p+ c #17001C",
+"q+ c #12001F",
+"r+ c #4C2B2A",
+"s+ c #DB8130",
+"t+ c #540023",
+"u+ c #0F0120",
+"v+ c #16011C",
+"w+ c #22001D",
+"x+ c #25001F",
+"y+ c #26001F",
+"z+ c #25001E",
+"A+ c #24001E",
+"B+ c #1D001C",
+"C+ c #18011D",
+"D+ c #16031F",
+"E+ c #3C0522",
+"F+ c #9B0821",
+"G+ c #13041E",
+"H+ c #F6462E",
+"I+ c #E6AB37",
+"J+ c #E7A03E",
+"K+ c #FA9F44",
+"L+ c #FB8A48",
+"M+ c #FD7A4A",
+"N+ c #FD794A",
+"O+ c #FD7748",
+"P+ c #FD7E45",
+"Q+ c #FD8343",
+"R+ c #FB5D42",
+"S+ c #6E3A40",
+"T+ c #EE8A37",
+"U+ c #7E252B",
+"V+ c #100520",
+"W+ c #13011A",
+"X+ c #170019",
+"Y+ c #15001C",
+"Z+ c #0F0020",
+"`+ c #564427",
+" @ c #E0BA29",
+".@ c #5E2B25",
+"+@ c #10011F",
+"@@ c #17011C",
+"#@ c #1E001D",
+"$@ c #23001F",
+"%@ c #250020",
+"&@ c #24001F",
+"*@ c #23001E",
+"=@ c #21001E",
+"-@ c #1B001C",
+";@ c #17021D",
+">@ c #14041E",
+",@ c #AC0B25",
+"'@ c #5E1420",
+")@ c #F28635",
+"!@ c #C2733E",
+"~@ c #984C44",
+"{@ c #EA9148",
+"]@ c #FB844B",
+"^@ c #FD7E4C",
+"/@ c #FE7E4C",
+"(@ c #FE7E4B",
+"_@ c #FE7749",
+":@ c #FD7148",
+"<@ c #FB7D46",
+"[@ c #F89641",
+"}@ c #B95634",
+"|@ c #0D0927",
+"1@ c #11041D",
+"2@ c #150119",
+"3@ c #180017",
+"4@ c #16001A",
+"5@ c #13001E",
+"6@ c #110023",
+"7@ c #944C29",
+"8@ c #EE6229",
+"9@ c #3D0324",
+"0@ c #12021F",
+"a@ c #19011D",
+"b@ c #21001F",
+"c@ c #22001F",
+"d@ c #20001E",
+"e@ c #1F001D",
+"f@ c #1C001C",
+"g@ c #19011C",
+"h@ c #3D1621",
+"i@ c #B53622",
+"j@ c #31061F",
+"k@ c #841D34",
+"l@ c #F2703F",
+"m@ c #C14445",
+"n@ c #E67349",
+"o@ c #FB8E4B",
+"p@ c #FD834C",
+"q@ c #FE834D",
+"r@ c #FE834C",
+"s@ c #FE804C",
+"t@ c #FD814B",
+"u@ c #FB7D49",
+"v@ c #F79B43",
+"w@ c #AF1234",
+"x@ c #0D0625",
+"y@ c #13021C",
+"z@ c #1A0019",
+"A@ c #190019",
+"B@ c #410225",
+"C@ c #D39729",
+"D@ c #AA5927",
+"E@ c #0E0422",
+"F@ c #15021E",
+"G@ c #1A011D",
+"H@ c #1D001D",
+"I@ c #15031D",
+"J@ c #240820",
+"K@ c #A01023",
+"L@ c #670B21",
+"M@ c #3D0D33",
+"N@ c #E63C3E",
+"O@ c #EF7C45",
+"P@ c #F59048",
+"Q@ c #FB944A",
+"R@ c #FD904A",
+"S@ c #FE8E4B",
+"T@ c #FE854A",
+"U@ c #FE854B",
+"V@ c #FE884C",
+"W@ c #FC954B",
+"X@ c #F8AB45",
+"Y@ c #C37A35",
+"Z@ c #0D0425",
+"`@ c #13011B",
+" # c #170018",
+".# c #1A0018",
+"+# c #1C0019",
+"@# c #15001B",
+"## c #100120",
+"$# c #311F25",
+"%# c #E68E28",
+"&# c #7A1425",
+"*# c #130321",
+"=# c #17011E",
+"-# c #1A001D",
+";# c #19001B",
+"># c #16021C",
+",# c #130521",
+"'# c #6F3123",
+")# c #6D3022",
+"!# c #C89433",
+"~# c #EA7E3E",
+"{# c #DB2943",
+"]# c #EF7745",
+"^# c #FB8544",
+"/# c #FD9A43",
+"(# c #FE9941",
+"_# c #FE9D43",
+":# c #FEA548",
+"<# c #FEAE49",
+"[# c #FCB944",
+"}# c #CA9F35",
+"|# c #0E0225",
+"1# c #11001B",
+"2# c #160019",
+"3# c #12011B",
+"4# c #0F0220",
+"5# c #351D26",
+"6# c #D85B28",
+"7# c #6C0F26",
+"8# c #190121",
+"9# c #1B001E",
+"0# c #1A001C",
+"a# c #1D001B",
+"b# c #130220",
+"c# c #703A23",
+"d# c #713A23",
+"e# c #140327",
+"f# c #411B36",
+"g# c #C8713E",
+"h# c #7A3A3F",
+"i# c #CE2C3C",
+"j# c #E77338",
+"k# c #9C6535",
+"l# c #9C6233",
+"m# c #9C6332",
+"n# c #9C6A35",
+"o# c #C37D3C",
+"p# c #FEAC41",
+"q# c #FEC23E",
+"r# c #826330",
+"s# c #100122",
+"t# c #120019",
+"u# c #150017",
+"v# c #190017",
+"w# c #1B0018",
+"x# c #12001A",
+"y# c #10021F",
+"z# c #1A0326",
+"A# c #5F292A",
+"B# c #7B4E29",
+"C# c #3C0E25",
+"D# c #1A0020",
+"E# c #14021F",
+"F# c #723B23",
+"G# c #14001A",
+"H# c #58042A",
+"I# c #A28337",
+"J# c #C8813B",
+"K# c #B14B38",
+"L# c #761231",
+"M# c #5A132A",
+"N# c #0D0726",
+"O# c #0C0623",
+"P# c #0B0723",
+"Q# c #0B0A26",
+"R# c #321C2D",
+"S# c #C45B33",
+"T# c #FEBB33",
+"U# c #13052A",
+"V# c #13011F",
+"W# c #160017",
+"X# c #15001A",
+"Y# c #12001D",
+"Z# c #94062A",
+"`# c #630D2C",
+" $ c #85292B",
+".$ c #AA5E29",
+"+$ c #1F0123",
+"@$ c #19011F",
+"#$ c #1E001C",
+"$$ c #15031F",
+"%$ c #712122",
+"&$ c #712223",
+"*$ c #14011B",
+"=$ c #110321",
+"-$ c #AF0C2B",
+";$ c #E7D534",
+">$ c #EAC934",
+",$ c #84582D",
+"'$ c #1B0824",
+")$ c #11041E",
+"!$ c #10021B",
+"~$ c #100119",
+"{$ c #100218",
+"]$ c #0F041A",
+"^$ c #0E0720",
+"/$ c #2C1026",
+"($ c #D8A328",
+"_$ c #140322",
+":$ c #160016",
+"<$ c #14001F",
+"[$ c #120024",
+"}$ c #100128",
+"|$ c #3C032F",
+"1$ c #2C062E",
+"2$ c #29022B",
+"3$ c #A31D29",
+"4$ c #976A25",
+"5$ c #1A0321",
+"6$ c #17031E",
+"7$ c #1B021D",
+"8$ c #20001C",
+"9$ c #14041F",
+"0$ c #703422",
+"a$ c #6F3522",
+"b$ c #8D0328",
+"c$ c #920329",
+"d$ c #0F0326",
+"e$ c #100321",
+"f$ c #11021B",
+"g$ c #130117",
+"h$ c #140016",
+"i$ c #150015",
+"j$ c #140015",
+"k$ c #130116",
+"l$ c #120219",
+"m$ c #11031C",
+"n$ c #12031D",
+"o$ c #170016",
+"p$ c #160020",
+"q$ c #250029",
+"r$ c #670033",
+"s$ c #DCA238",
+"t$ c #F5C736",
+"u$ c #9A732E",
+"v$ c #110227",
+"w$ c #110324",
+"x$ c #811924",
+"y$ c #A04323",
+"z$ c #250721",
+"A$ c #1A041F",
+"B$ c #1E011D",
+"C$ c #1C011C",
+"D$ c #18031D",
+"E$ c #130721",
+"F$ c #6F3623",
+"G$ c #6B3622",
+"H$ c #1A001A",
+"I$ c #14011F",
+"J$ c #12011E",
+"K$ c #11011C",
+"L$ c #140117",
+"M$ c #170015",
+"N$ c #150016",
+"O$ c #120119",
+"P$ c #11011B",
+"Q$ c #11001A",
+"R$ c #130018",
+"S$ c #170118",
+"T$ c #170119",
+"U$ c #18021E",
+"V$ c #1A0126",
+"W$ c #6F2332",
+"X$ c #E5563B",
+"Y$ c #F1B83F",
+"Z$ c #F6CC38",
+"`$ c #9D7A2D",
+" % c #130123",
+".% c #130320",
+"+% c #2A0721",
+"@% c #B00E24",
+"#% c #7D0B23",
+"$% c #1F0522",
+"%% c #1E0220",
+"&% c #1D011E",
+"*% c #1A031E",
+"=% c #15051F",
+"-% c #241322",
+";% c #A32F23",
+">% c #670E21",
+",% c #1C001A",
+"'% c #19001A",
+")% c #180016",
+"!% c #160118",
+"~% c #140219",
+"{% c #11021C",
+"]% c #10021E",
+"^% c #0F011D",
+"/% c #170117",
+"(% c #160219",
+"_% c #17041D",
+":% c #190523",
+"<% c #8C042E",
+"[% c #B65838",
+"}% c #E9D73F",
+"|% c #EED43E",
+"1% c #D85538",
+"2% c #493129",
+"3% c #130120",
+"4% c #15021D",
+"5% c #330822",
+"6% c #8A0825",
+"7% c #3C0424",
+"8% c #1E0322",
+"9% c #1C0321",
+"0% c #180421",
+"a% c #130822",
+"b% c #AF2D24",
+"c% c #BC5623",
+"d% c #2F071F",
+"e% c #1A041C",
+"f% c #1C031C",
+"g% c #1D011C",
+"h% c #160117",
+"i% c #150419",
+"j% c #12081D",
+"k% c #0F0923",
+"l% c #A77027",
+"m% c #A60525",
+"n% c #11021A",
+"o% c #130218",
+"p% c #150319",
+"q% c #16061D",
+"r% c #180923",
+"s% c #9C1D2B",
+"t% c #A32636",
+"u% c #A66E3B",
+"v% c #4B2E3C",
+"w% c #412C36",
+"x% c #36012D",
+"y% c #140123",
+"z% c #17001E",
+"A% c #19011B",
+"B% c #1A0421",
+"C% c #340425",
+"D% c #9E0326",
+"E% c #1F0424",
+"F% c #1C0524",
+"G% c #180724",
+"H% c #A91024",
+"I% c #D55D24",
+"J% c #90071E",
+"K% c #3C051D",
+"L% c #1C021C",
+"M% c #1C011A",
+"N% c #1D001A",
+"O% c #160116",
+"P% c #150216",
+"Q% c #140217",
+"R% c #140618",
+"S% c #120D1D",
+"T% c #231925",
+"U% c #B16A2E",
+"V% c #FDAC34",
+"W% c #D58631",
+"X% c #280E2A",
+"Y% c #0D0A23",
+"Z% c #0F0920",
+"`% c #120C21",
+" & c #1F1026",
+".& c #A3352E",
+"+& c #EE9F36",
+"@& c #5D2A3C",
+"#& c #960D3C",
+"$& c #970638",
+"%& c #A00330",
+"&& c #4D0126",
+"*& c #1C001F",
+"=& c #280120",
+"-& c #290223",
+";& c #1F0425",
+">& c #260726",
+",& c #340A26",
+"'& c #850925",
+")& c #3A0823",
+"!& c #82071D",
+"~& c #5E071D",
+"{& c #18051C",
+"]& c #18021A",
+"^& c #190118",
+"/& c #160217",
+"(& c #150418",
+"_& c #130618",
+":& c #110718",
+"<& c #10081A",
+"[& c #110D1D",
+"}& c #291C24",
+"|& c #A73B2D",
+"1& c #FD6B36",
+"2& c #FD853C",
+"3& c #FD863B",
+"4& c #C24A35",
+"5& c #6B442F",
+"6& c #6D302D",
+"7& c #6E252E",
+"8& c #8E3B32",
+"9& c #DE7739",
+"0& c #F48E3F",
+"a& c #DD8D41",
+"b& c #854F3D",
+"c& c #7E2D35",
+"d& c #33082B",
+"e& c #1C0222",
+"f& c #20001F",
+"g& c #1F0222",
+"h& c #1A0524",
+"i& c #440C27",
+"j& c #BC1427",
+"k& c #20041B",
+"l& c #53061C",
+"m& c #25071B",
+"n& c #11061A",
+"o& c #130418",
+"p& c #140317",
+"q& c #150217",
+"r& c #160318",
+"s& c #12051B",
+"t& c #100C1D",
+"u& c #0E101E",
+"v& c #0C121F",
+"w& c #0C1321",
+"x& c #781725",
+"y& c #B25D2C",
+"z& c #FA6335",
+"A& c #FD633C",
+"B& c #FE6D42",
+"C& c #FE7C42",
+"D& c #FE813F",
+"E& c #FE873C",
+"F& c #FD743B",
+"G& c #FB683B",
+"H& c #FA7A3E",
+"I& c #F98242",
+"J& c #F97844",
+"K& c #F98943",
+"L& c #F79C3D",
+"M& c #A25133",
+"N& c #280B28",
+"O& c #1D021F",
+"P& c #1F011C",
+"Q& c #280321",
+"R& c #1C0724",
+"S& c #3F1C27",
+"T& c #D33C27",
+"U& c #0E061B",
+"V& c #0C091C",
+"W& c #0C0A1B",
+"X& c #0E091A",
+"Y& c #11081B",
+"Z& c #100A20",
+"`& c #0E0D23",
+" * c #551227",
+".* c #B21829",
+"+* c #C42329",
+"@* c #C62C29",
+"#* c #C55429",
+"$* c #E76F2B",
+"%* c #F14232",
+"&* c #F95E3A",
+"** c #FC6740",
+"=* c #FE6E45",
+"-* c #FE7246",
+";* c #FE7545",
+">* c #FE7744",
+",* c #FD7745",
+"'* c #FD7845",
+")* c #FD7847",
+"!* c #FD7948",
+"~* c #FD7B44",
+"{* c #FC7C3B",
+"]* c #6F3130",
+"^* c #140B24",
+"/* c #19031D",
+"(* c #1C011B",
+"_* c #5A011F",
+":* c #B70421",
+"<* c #380824",
+"[* c #3E2626",
+"}* c #9F5626",
+"|* c #13051E",
+"1* c #360A21",
+"2* c #361223",
+"3* c #371724",
+"4* c #381824",
+"5* c #3B1524",
+"6* c #3E1E26",
+"7* c #471A29",
+"8* c #DB252E",
+"9* c #ED2733",
+"0* c #EE5436",
+"a* c #F04237",
+"b* c #F33934",
+"c* c #F53D2F",
+"d* c #D7312B",
+"e* c #AF212B",
+"f* c #3A2C31",
+"g* c #F65F39",
+"h* c #FB6F41",
+"i* c #FD6D45",
+"j* c #FE7047",
+"k* c #FE7647",
+"l* c #FE7847",
+"m* c #FE7848",
+"n* c #FE7748",
+"o* c #FE7948",
+"p* c #FE7C48",
+"q* c #FE7C47",
+"r* c #FE7642",
+"s* c #FE7439",
+"t* c #6D332C",
+"u* c #100B21",
+"v* c #16031B",
+"w* c #2B001B",
+"x* c #22011F",
+"y* c #220521",
+"z* c #1B0A23",
+"A* c #421425",
+"B* c #951924",
+"C* c #381023",
+"D* c #E94028",
+"E* c #E7302B",
+"F* c #EF432D",
+"G* c #F4302E",
+"H* c #F32C30",
+"I* c #CB4432",
+"J* c #DD3235",
+"K* c #EF4B3A",
+"L* c #F0333E",
+"M* c #CC3D3F",
+"N* c #E4313C",
+"O* c #F34834",
+"P* c #D13E2C",
+"Q* c #431825",
+"R* c #0E1424",
+"S* c #3C202C",
+"T* c #F15537",
+"U* c #F97140",
+"V* c #FC6E45",
+"W* c #FE7547",
+"X* c #FE7947",
+"Y* c #FE7B48",
+"Z* c #FE7D48",
+"`* c #FE8047",
+" = c #FE7A42",
+".= c #FE7A38",
+"+= c #6D442B",
+"@= c #0F0B21",
+"#= c #15031A",
+"$= c #49001B",
+"%= c #2F001C",
+"&= c #21021E",
+"*= c #220620",
+"== c #1B0D23",
+"-= c #641625",
+";= c #951823",
+">= c #390F25",
+",= c #AC3A2A",
+"'= c #B6492E",
+")= c #ED7531",
+"!= c #F45A34",
+"~= c #F54C36",
+"{= c #C72D39",
+"]= c #DE283C",
+"^= c #F33B40",
+"/= c #F34142",
+"(= c #D0393F",
+"_= c #E72E39",
+":= c #DB3C2E",
+"<= c #461724",
+"[= c #0F0D1E",
+"}= c #140B1E",
+"|= c #341427",
+"1= c #CB4834",
+"2= c #F7743F",
+"3= c #FB7145",
+"4= c #FE7747",
+"5= c #FE7A47",
+"6= c #FF7B48",
+"7= c #FF7C48",
+"8= c #FE7F47",
+"9= c #FE8247",
+"0= c #FE8642",
+"a= c #FE8439",
+"b= c #6D442D",
+"c= c #0F0A21",
+"d= c #14031A",
+"e= c #20031D",
+"f= c #210821",
+"g= c #191024",
+"h= c #CC1C25",
+"i= c #961423",
+"j= c #2C162C",
+"k= c #BD242E",
+"l= c #EF2C31",
+"m= c #F54C34",
+"n= c #F34037",
+"o= c #F5353A",
+"p= c #F7413D",
+"q= c #F8423D",
+"r= c #F93A39",
+"s= c #F95731",
+"t= c #341425",
+"u= c #110A1D",
+"v= c #140619",
+"w= c #18051B",
+"x= c #200F26",
+"y= c #864833",
+"z= c #F8773F",
+"A= c #FC7445",
+"B= c #FF7E48",
+"C= c #FF7E49",
+"D= c #FF7D49",
+"E= c #FF7D48",
+"F= c #FE8347",
+"G= c #FE8743",
+"H= c #FE893B",
+"I= c #6E452F",
+"J= c #100E23",
+"K= c #14041A",
+"L= c #55041D",
+"M= c #540921",
+"N= c #161124",
+"O= c #CE6A25",
+"P= c #3F1129",
+"Q= c #170A29",
+"R= c #0F0F29",
+"S= c #15132B",
+"T= c #1E182D",
+"U= c #A82B3D",
+"V= c #CB6633",
+"W= c #CC6932",
+"X= c #CC3D2D",
+"Y= c #331225",
+"Z= c #0F091C",
+"`= c #120417",
+" - c #160216",
+".- c #190419",
+"+- c #210F26",
+"@- c #8C4934",
+"#- c #F97A40",
+"$- c #FC7545",
+"%- c #FF7B49",
+"&- c #FE7D46",
+"*- c #FE7E43",
+"=- c #FD7B3E",
+"-- c #FA6934",
+";- c #532328",
+">- c #130B1D",
+",- c #150519",
+"'- c #14041C",
+")- c #120920",
+"!- c #C43624",
+"~- c #A21E23",
+"{- c #F87C30",
+"]- c #C9302D",
+"^- c #300F2A",
+"/- c #591129",
+"(- c #171328",
+"_- c #171628",
+":- c #141829",
+"<- c #101A2B",
+"[- c #0F172B",
+"}- c #0F1226",
+"|- c #0E0C20",
+"1- c #100619",
+"2- c #140316",
+"3- c #19051B",
+"4- c #3C1428",
+"5- c #E04B36",
+"6- c #FA7B41",
+"7- c #FD7346",
+"8- c #FE7548",
+"9- c #FF7849",
+"0- c #FF7749",
+"a- c #FE7B47",
+"b- c #FE7945",
+"c- c #FC7740",
+"d- c #FA7E39",
+"e- c #C1432F",
+"f- c #131523",
+"g- c #130A1C",
+"h- c #420621",
+"i- c #D08423",
+"j- c #F87739",
+"k- c #C03D37",
+"l- c #962B34",
+"m- c #A14332",
+"n- c #E54B30",
+"o- c #9E3E2F",
+"p- c #7F262E",
+"q- c #922D2E",
+"r- c #9C4B2E",
+"s- c #65212C",
+"t- c #101628",
+"u- c #101022",
+"v- c #11091C",
+"w- c #130619",
+"x- c #160A1E",
+"y- c #43252C",
+"z- c #F66439",
+"A- c #FA6942",
+"B- c #FD6C47",
+"C- c #FE6E48",
+"D- c #FE6F48",
+"E- c #FE7049",
+"F- c #FE714A",
+"G- c #FE744A",
+"H- c #FE7846",
+"I- c #FD7243",
+"J- c #FC703E",
+"K- c #FA6C37",
+"L- c #81312B",
+"M- c #121123",
+"N- c #15071D",
+"O- c #16031A",
+"P- c #17021B",
+"Q- c #8F3D22",
+"R- c #F8393E",
+"S- c #E42A3D",
+"T- c #E7473B",
+"U- c #FB503B",
+"V- c #FB4F3A",
+"W- c #F95439",
+"X- c #ED4C38",
+"Y- c #F45938",
+"Z- c #FB6537",
+"`- c #EA5236",
+" ; c #CE6232",
+".; c #CD392C",
+"+; c #181425",
+"@; c #120F21",
+"#; c #130D20",
+"$; c #151225",
+"%; c #903431",
+"&; c #F8703D",
+"*; c #FB6344",
+"=; c #FD6748",
+"-; c #FE6849",
+";; c #FE6949",
+">; c #FE6A49",
+",; c #FE6C4A",
+"'; c #FE704A",
+"); c #FE734A",
+"!; c #FE7449",
+"~; c #FE7347",
+"{; c #FE7145",
+"]; c #FD6C42",
+"^; c #FD753D",
+"/; c #F36E35",
+"(; c #CB452C",
+"_; c #600D24",
+":; c #1C061F",
+"<; c #1E031F",
+"[; c #5B3821",
+"}; c #CE9822",
+"|; c #FA4341",
+"1; c #FB4341",
+"2; c #FC4541",
+"3; c #FC4542",
+"4; c #FC4143",
+"5; c #FC4D42",
+"6; c #FB5042",
+"7; c #FB5342",
+"8; c #FC5242",
+"9; c #FD4F40",
+"0; c #FD503E",
+"a; c #FB6339",
+"b; c #F45E33",
+"c; c #A12A2E",
+"d; c #401E2C",
+"e; c #452D2F",
+"f; c #F74F38",
+"g; c #FA5940",
+"h; c #FC6245",
+"i; c #FE6447",
+"j; c #FE6449",
+"k; c #FE6549",
+"l; c #FE6749",
+"m; c #FE6B49",
+"n; c #FE6D49",
+"o; c #FE6D48",
+"p; c #FE6D47",
+"q; c #FE6D45",
+"r; c #FE6C44",
+"s; c #FE6A42",
+"t; c #FE663C",
+"u; c #FC6233",
+"v; c #752129",
+"w; c #1F0922",
+"x; c #750520",
+"y; c #81061F",
+"z; c #FA3D42",
+"A; c #FB4142",
+"B; c #FD4543",
+"C; c #FD4844",
+"D; c #FD4A45",
+"E; c #FD4D45",
+"F; c #FD5045",
+"G; c #FD5345",
+"H; c #FE5346",
+"I; c #FE5445",
+"J; c #FD5444",
+"K; c #FC4F41",
+"L; c #FA513D",
+"M; c #F95339",
+"N; c #F63736",
+"O; c #F75737",
+"P; c #F95F3B",
+"Q; c #FB5840",
+"R; c #FD5F43",
+"S; c #FE6345",
+"T; c #FE6547",
+"U; c #FE6548",
+"V; c #FE6448",
+"W; c #FE6248",
+"X; c #FE6348",
+"Y; c #FE6748",
+"Z; c #FE6848",
+"`; c #FE6846",
+" > c #FE6A45",
+".> c #FE6D43",
+"+> c #FE703F",
+"@> c #FC6F36",
+"#> c #6F302B",
+"$> c #140A22",
+"%> c #FA3B42",
+"&> c #FC4243",
+"*> c #FD4744",
+"=> c #FE4A45",
+"-> c #FE4C47",
+";> c #FE4D47",
+">> c #FE5047",
+",> c #FE5347",
+"'> c #FE5447",
+")> c #FD5246",
+"!> c #FB503F",
+"~> c #FA543D",
+"{> c #9B3D3B",
+"]> c #A3433B",
+"^> c #F9683D",
+"/> c #FC6940",
+"(> c #FE6342",
+"_> c #FE6645",
+":> c #FE6646",
+"<> c #FE6147",
+"[> c #FE6048",
+"}> c #FE6148",
+"|> c #FE6746",
+"1> c #FE6A46",
+"2> c #FE6F45",
+"3> c #FE7441",
+"4> c #FC7D39",
+"5> c #6C422E",
+"6> c #0F0F23",
+"7> c #FA4142",
+"8> c #FC4643",
+"9> c #FE4D46",
+"0> c #FE4E47",
+"a> c #FE4F48",
+"b> c #FE5148",
+"c> c #FE5348",
+"d> c #FE5548",
+"e> c #FE5247",
+"f> c #FD5445",
+"g> c #FC5544",
+"h> c #F96041",
+"i> c #D33F3D",
+"j> c #392D39",
+"k> c #973C38",
+"l> c #F94E3A",
+"m> c #FD693E",
+"n> c #FE6C43",
+"o> c #FE6047",
+"p> c #FE5D47",
+"q> c #FE5E48",
+"r> c #FE6948",
+"s> c #FE6947",
+"t> c #FE6B47",
+"u> c #FE6E46",
+"v> c #FD6D43",
+"w> c #FB723D",
+"x> c #D54A33",
+"y> c #301C29",
+"z> c #FB4A42",
+"A> c #FD4B44",
+"B> c #FE4F47",
+"C> c #FE5048",
+"D> c #FE5648",
+"E> c #FE5848",
+"F> c #FE5747",
+"G> c #FE5547",
+"H> c #FC5945",
+"I> c #F95742",
+"J> c #F3543D",
+"K> c #A33336",
+"L> c #302032",
+"M> c #152433",
+"N> c #CD3E38",
+"O> c #FD5A3F",
+"P> c #FE6343",
+"Q> c #FE6446",
+"R> c #FE6247",
+"S> c #FE6A47",
+"T> c #FC6542",
+"U> c #FB6A3B",
+"V> c #FA6D34",
+"W> c #D73C2D",
+"X> c #442428",
+"Y> c #281323",
+"Z> c #FD4E42",
+"`> c #FD4D43",
+" , c #FE4D45",
+"., c #FE5248",
+"+, c #FE5947",
+"@, c #FE5C47",
+"#, c #FE5B47",
+"$, c #FE5A47",
+"%, c #FE5847",
+"&, c #FC5C45",
+"*, c #F95B43",
+"=, c #F3613F",
+"-, c #E74F37",
+";, c #8C2431",
+">, c #161E2F",
+",, c #CD4E33",
+"', c #FD503A",
+"), c #FE5D40",
+"!, c #FE6445",
+"~, c #FE6946",
+"{, c #FE6847",
+"], c #FE6747",
+"^, c #FD6644",
+"/, c #FD6241",
+"(, c #FD5B3D",
+"_, c #FE6739",
+":, c #FE6135",
+"<, c #AB4830",
+"[, c #733E2A",
+"}, c #161224",
+"|, c #FC4E42",
+"1, c #FE4D44",
+"2, c #FE4E46",
+"3, c #FE5147",
+"4, c #FE5E47",
+"5, c #FD5C46",
+"6, c #FA5B44",
+"7, c #F45441",
+"8, c #EB393A",
+"9, c #CC3433",
+"0, c #47212F",
+"a, c #59242F",
+"b, c #FC6734",
+"c, c #FC6F3A",
+"d, c #FC723E",
+"e, c #FD6540",
+"f, c #FE6442",
+"g, c #FE6643",
+"h, c #FE6944",
+"i, c #FE6546",
+"j, c #FE6444",
+"k, c #FE6143",
+"l, c #FE5E41",
+"m, c #FE613F",
+"n, c #FE683C",
+"o, c #FE7937",
+"p, c #A25030",
+"q, c #692629",
+"r, c #151122",
+"s, c #FA573F",
+"t, c #FB4D40",
+"u, c #FC4F43",
+"v, c #FE5246",
+"w, c #FF6347",
+"x, c #FE5F48",
+"y, c #F65942",
+"z, c #F0493D",
+"A, c #ED3736",
+"B, c #73262F",
+"C, c #10152C",
+"D, c #3B292F",
+"E, c #363034",
+"F, c #AC3938",
+"G, c #FC6B3B",
+"H, c #FD763C",
+"I, c #FE6D3F",
+"J, c #FE6341",
+"K, c #FE6642",
+"L, c #FE6745",
+"M, c #FE6245",
+"N, c #FE6244",
+"O, c #FE6841",
+"P, c #FF683B",
+"Q, c #EC7035",
+"R, c #D0412D",
+"S, c #3A1627",
+"T, c #CF3938",
+"U, c #F6543C",
+"V, c #FB5040",
+"W, c #FD5544",
+"X, c #FE5A48",
+"Y, c #FE5D48",
+"Z, c #FE5F47",
+"`, c #FF6147",
+" ' c #FD5C45",
+".' c #FB5B43",
+"+' c #FA5A42",
+"@' c #F76040",
+"#' c #F4623D",
+"$' c #F26D38",
+"%' c #EC4130",
+"&' c #380E2B",
+"*' c #13122C",
+"=' c #362D31",
+"-' c #353435",
+";' c #352E37",
+">' c #2D3337",
+",' c #CC5838",
+"'' c #CD6F3A",
+")' c #CE6E3D",
+"!' c #FE793F",
+"~' c #FD7541",
+"{' c #FD6243",
+"]' c #FE6545",
+"^' c #FF6543",
+"/' c #FF6240",
+"(' c #FE723B",
+"_' c #FE8034",
+":' c #442D2C",
+"<' c #311725",
+"[' c #222830",
+"}' c #B73B36",
+"|' c #F94C3D",
+"1' c #FD5543",
+"2' c #FE5B48",
+"3' c #FF5E47",
+"4' c #FE5C48",
+"5' c #FC5B44",
+"6' c #F95640",
+"7' c #C34E3D",
+"8' c #A45A3A",
+"9' c #F37438",
+"0' c #F28935",
+"a' c #AF422F",
+"b' c #240D2B",
+"c' c #88292F",
+"d' c #FA8E34",
+"e' c #FC7E38",
+"f' c #FC5939",
+"g' c #694A37",
+"h' c #693437",
+"i' c #382638",
+"j' c #142439",
+"k' c #9F483A",
+"l' c #C45E3C",
+"m' c #FD7240",
+"n' c #FF6645",
+"o' c #FF6245",
+"p' c #FF6045",
+"q' c #FF6146",
+"r' c #FF6246",
+"s' c #FF6446",
+"t' c #FF6545",
+"u' c #FE763F",
+"v' c #FE7237",
+"w' c #C65331",
+"x' c #3D272A",
+"y' c #0D1E2B",
+"z' c #683032",
+"A' c #F9453A",
+"B' c #FD5341",
+"C' c #FE5A46",
+"D' c #FF5A48",
+"E' c #FE5948",
+"F' c #FD5A47",
+"G' c #FC5D43",
+"H' c #F95B3D",
+"I' c #713F37",
+"J' c #1E2D32",
+"K' c #C44531",
+"L' c #EF7A2F",
+"M' c #6B2E2C",
+"N' c #0F0E2C",
+"O' c #F56633",
+"P' c #FA803A",
+"Q' c #FC673E",
+"R' c #FD673E",
+"S' c #FC6F3C",
+"T' c #FA6E3B",
+"U' c #C6633A",
+"V' c #A06739",
+"W' c #835638",
+"X' c #381F38",
+"Y' c #713B38",
+"Z' c #7B503C",
+"`' c #FE7741",
+" ) c #FE7344",
+".) c #FE6D46",
+"+) c #FF6946",
+"@) c #FF5E46",
+"#) c #FF5D46",
+"$) c #FF5D47",
+"%) c #FF5F48",
+"&) c #FF6248",
+"*) c #FE6941",
+"=) c #FC783C",
+"-) c #C46B35",
+";) c #892730",
+">) c #111629",
+",) c #1F2630",
+"') c #AD3939",
+")) c #FC5D41",
+"!) c #FE5946",
+"~) c #FF5848",
+"{) c #FE5549",
+"]) c #FC5E42",
+"^) c #FA673B",
+"/) c #DB7033",
+"() c #392E2B",
+"_) c #311A28",
+":) c #3C2127",
+"<) c #1D1027",
+"[) c #92102C",
+"}) c #F58336",
+"|) c #FA673E",
+"1) c #FD6642",
+"2) c #FD5A41",
+"3) c #FC6D41",
+"4) c #FC6D3F",
+"5) c #FD683E",
+"6) c #F38C39",
+"7) c #CE6535",
+"8) c #612E34",
+"9) c #1D2637",
+"0) c #71513E",
+"a) c #FF6847",
+"b) c #FF5F47",
+"c) c #FF5A46",
+"d) c #FF5847",
+"e) c #FF5748",
+"f) c #FF594A",
+"g) c #FF5E4B",
+"h) c #FE654C",
+"i) c #FE694B",
+"j) c #FE6B48",
+"k) c #FC6A43",
+"l) c #F7683E",
+"m) c #EC6E39",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + @ # $ % ",
+" & * = - ; > , ' ) ! ~ ",
+" { ] ^ / ( _ : < [ } | 1 2 ",
+" 3 4 5 6 7 8 9 0 a b c d e f g h i j ",
+" k l m n o p q r s t u v w x y z A B C D ",
+" E F G H I J K L M N O P Q R S T U V W X Y Z ` ",
+" ...+.@.#.$.%.&.*.=.-.;.>.,.S '.).!.~.{.].^./.(._. ",
+" :.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.!.S f.g.h.i.j.k. ",
+" l.m.n.o.p.q.r.s.t.u.J v.w.x.y.z.A.c.d.d.B.C.D.E.F.G.H.I. ",
+" J.K.L.M.N.O.P.Q.R.t S.T.U.V.W.X.Y.Z.`. +d.d..+B.'.++@+#+$+%+ ",
+" &+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+d.2+3+4+d.5+6+7+8+9+0+ ",
+" a+b+c+d+e+f+g+h+i+j+k+l+m+n+^+o+p+q+r+s+t+u+v+b.w+x+y+z+A+w+B+C+D+E+F+G+ ",
+" H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+Q ,.X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@#@-@;@>@,@'@ ",
+" )@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@R ,.4@5@6@7@8@9@0@a@#@b@c@=@d@e@f@g@>@h@i@j@ ",
+" k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@^+R S z@A@z.q+B@C@D@E@F@G@H@#@e@#@#@f@g@I@J@K@L@ ",
+" M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@`@ #.#+#+#S A@@###$#%#&#*#=#-#f@B+B+B+f@;#>#,#'#)# ",
+" !#~#{#]#^#/#(#(#_#:#<#[#}#|#1#^+.#S +#+#z@2#3#4#5#6#7#8#9#0#A.B+B+a#A.@@b#c#d# ",
+" e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#.#w#S R ^+x#y#z#A#B#C#D#-#A.a#`.`.b.g@E#d#F# ",
+" G#0@H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#>.W#3@v#R R X+X#Y#s#Z#`# $.$+$@$g@f@5+5+#$6+$$%$&$ ",
+" *$=$-$;$>$,$'$)$!$~${$]$^$/$($_$*$u#:$Q 3@,.X+z.<$[$}$|$1$2$3$4$5$6$7$e@8$#$G@9$0$a$ ",
+" ,.4@E#b$c$d$e$f$g$h$i$j$k$l$m$n$`@>.:$o$3@,. #a.p$q$r$s$t$u$v$w$x$y$z$A$B$#@C$D$E$F$G$ ",
+" R S H$v+I$J$K$n+L$:$o$o$M$N$L$O$P$Q$R$N$o$3@S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>% ",
+" E.,%~.'%Z.4@v W#o$)%)%)%Q !%~%{%]%^%Q$u u#/%(%_%:%<%[%}%|%1%2%3%4%=%5%6%7%8%9%0%a%b%c%d% ",
+" e%f%g%a#,%,%z@R 3@3@3@)%Q h%i%j%k%l%m%{+n%o%p%q%r%s%t%u%v%w%x%y%z%A%*%B%C%D%E%F%G%H%I% ",
+" J%K%L%M%N%D.S v#)%)%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&f@a##@=&-&;&>&,&'&)& ",
+" !&~&{&]&^&.#w#^&/%/&(&_&:&<&[&}&|&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&e@1+5+e@f&g&h&i&j& ",
+" k&l&m&n&o&p&q&r&i%s&3.t&u&v&w&x&y&z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&1+`.e@f&Q&R&S&T& ",
+" 0 U&V&W&X&<&Y&j%Z&`& *.*+*@*#*$*%*&***=*-*;*>*>*,*'*)*!*~*{*]*^*/*(*a#B+#@_*:*<*[*}* ",
+" |*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*E.w*d.e@x*y*z*A*B* ",
+" C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*l*X*o*o*Y*Z*`* =.=+=@=#='%$=%=e@&=*===-=;= ",
+" >=,='=)=!=~={=]=^=/=(=_=:=<=[=}=|=1=2=3=4=5=p*6=6=7=8=9=0=a=b=c=d=A@~.b.B+e=f=g=h=i= ",
+" j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=5=Z*B=C=D=E=8=F=G=H=I=J=K=S$R z@'%L=M=N=O= ",
+" P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-5=p*E=D=%-%-q*&-*-=---;->-,-/%3@^+'-)-!-~- ",
+" {-]-^-/-(-_-:-<-[-}-|-1-2- -3-4-5-6-7-8-n*m*9-0-9-o*a-b-c-d-e-f-g-(&h%w c h-i- ",
+" j-k-l-m-n-o-p-q-r-s-t-u-v-w-,-x-y-z-A-B-C-D-E-E-F-G-_@m*H-I-J-K-L-M-N-O-P-(+Q- ",
+" R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;-;;;>;,;';);!;~;{;];^;/;(;_;:;<;[;}; ",
+" |;1;2;3;4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;j;k;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y; ",
+" z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;k;Y;Z;`; >r;.>+>@>#>$> ",
+" %>&>*>=>->;>>>,>'>,>)>F;8;!>~>{>]>^>/>(>_>:>i;<>[>X;}>i;|>1>q;2>3>4>5>6> ",
+" 7>8>=>9>0>a>b>c>d>,>e>e>f>g>h>i>j>k>l>m>n>:>i;o>p>q>W;r>s>t>p;u>v>w>x>y> ",
+" z>A>9>0>B>C>c>D>E>F>G>G>F>H>I>J>K>L>M>N>O>P>Q>R>o>R>T;s>S>S>S>t>1>T>U>V>W>X>Y> ",
+" Z>`> ,9>B>.,D>+,@,#,$,%,$,&,*,=,-,;,>,,,',),P>!,!,_>~,t>s>{,],{,],^,/,(,_,:,<,[,}, ",
+" |,`>1,2,3,G>+,4,o>o>4,@,@,5,6,7,8,9,0,a,b,c,d,e,f,g,h, >~,|>T;T;T;i,j,k,l,m,n,o,p,q,r, ",
+" s,t,u,v,G>%,@,o>w,R>x,p>@,5,6,y,z,A,B,C,D,E,F,G,H,I,J,K,L,L,i,i;i;i;Q>S;M,N,P>O,P,Q,R,S, ",
+" T,U,V,W,%,X,Y,Z,`,[>q>@, '.'+'@'#'$'%'&'*'='-';'>',''')'!'~'{'N,i,:>_>]'M,M,Q>_>^'/'('_':'<' ",
+" ['}'|'1'$,X,2'p>3'4'2'@,5'6'7'8'9'0'a'b'c'd'e'f'g'h'i'j'k'l'd,m'g, > >n'o'p'q'r's't'.>u'v'w'x' ",
+" y'z'A'B'C'X,X,2'D'E'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'`' ).)+)r'@)#)$)%)&)l;1>*)=)-);) ",
+" >),)')))!)X,E'X,~){)d>!)])^)/)()_):)<)[)})|)1)f,2)3)4)5)6)7)8)9)0)*--*a)b)c)d)e)f)g)h)i)j)k)l)m) ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/vendor/gems/json-1.5.1/lib/json/pure.rb b/vendor/gems/json-1.5.1/lib/json/pure.rb
new file mode 100644
index 000000000..dbac93cf6
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/pure.rb
@@ -0,0 +1,15 @@
+require 'json/common'
+require 'json/pure/parser'
+require 'json/pure/generator'
+
+module JSON
+ # This module holds all the modules/classes that implement JSON's
+ # functionality in pure ruby.
+ module Pure
+ $DEBUG and warn "Using Pure library for JSON."
+ JSON.parser = Parser
+ JSON.generator = Generator
+ end
+
+ JSON_LOADED = true unless defined?(::JSON::JSON_LOADED)
+end
diff --git a/vendor/gems/json-1.5.1/lib/json/pure/generator.rb b/vendor/gems/json-1.5.1/lib/json/pure/generator.rb
new file mode 100644
index 000000000..44cca605f
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/pure/generator.rb
@@ -0,0 +1,441 @@
+module JSON
+ MAP = {
+ "\x0" => '\u0000',
+ "\x1" => '\u0001',
+ "\x2" => '\u0002',
+ "\x3" => '\u0003',
+ "\x4" => '\u0004',
+ "\x5" => '\u0005',
+ "\x6" => '\u0006',
+ "\x7" => '\u0007',
+ "\b" => '\b',
+ "\t" => '\t',
+ "\n" => '\n',
+ "\xb" => '\u000b',
+ "\f" => '\f',
+ "\r" => '\r',
+ "\xe" => '\u000e',
+ "\xf" => '\u000f',
+ "\x10" => '\u0010',
+ "\x11" => '\u0011',
+ "\x12" => '\u0012',
+ "\x13" => '\u0013',
+ "\x14" => '\u0014',
+ "\x15" => '\u0015',
+ "\x16" => '\u0016',
+ "\x17" => '\u0017',
+ "\x18" => '\u0018',
+ "\x19" => '\u0019',
+ "\x1a" => '\u001a',
+ "\x1b" => '\u001b',
+ "\x1c" => '\u001c',
+ "\x1d" => '\u001d',
+ "\x1e" => '\u001e',
+ "\x1f" => '\u001f',
+ '"' => '\"',
+ '\\' => '\\\\',
+ } # :nodoc:
+
+ # Convert a UTF8 encoded Ruby string _string_ to a JSON string, encoded with
+ # UTF16 big endian characters as \u????, and return it.
+ if defined?(::Encoding)
+ def utf8_to_json(string) # :nodoc:
+ string = string.dup
+ string << '' # XXX workaround: avoid buffer sharing
+ string.force_encoding(::Encoding::ASCII_8BIT)
+ string.gsub!(/["\\\x0-\x1f]/) { MAP[$&] }
+ string.force_encoding(::Encoding::UTF_8)
+ string
+ end
+
+ def utf8_to_json_ascii(string) # :nodoc:
+ string = string.dup
+ string << '' # XXX workaround: avoid buffer sharing
+ string.force_encoding(::Encoding::ASCII_8BIT)
+ string.gsub!(/["\\\x0-\x1f]/) { MAP[$&] }
+ string.gsub!(/(
+ (?:
+ [\xc2-\xdf][\x80-\xbf] |
+ [\xe0-\xef][\x80-\xbf]{2} |
+ [\xf0-\xf4][\x80-\xbf]{3}
+ )+ |
+ [\x80-\xc1\xf5-\xff] # invalid
+ )/nx) { |c|
+ c.size == 1 and raise GeneratorError, "invalid utf8 byte: '#{c}'"
+ s = JSON.iconv('utf-16be', 'utf-8', c).unpack('H*')[0]
+ s.gsub!(/.{4}/n, '\\\\u\&')
+ }
+ string.force_encoding(::Encoding::UTF_8)
+ string
+ rescue => e
+ raise GeneratorError, "Caught #{e.class}: #{e}"
+ end
+ else
+ def utf8_to_json(string) # :nodoc:
+ string.gsub(/["\\\x0-\x1f]/) { MAP[$&] }
+ end
+
+ def utf8_to_json_ascii(string) # :nodoc:
+ string = string.gsub(/["\\\x0-\x1f]/) { MAP[$&] }
+ string.gsub!(/(
+ (?:
+ [\xc2-\xdf][\x80-\xbf] |
+ [\xe0-\xef][\x80-\xbf]{2} |
+ [\xf0-\xf4][\x80-\xbf]{3}
+ )+ |
+ [\x80-\xc1\xf5-\xff] # invalid
+ )/nx) { |c|
+ c.size == 1 and raise GeneratorError, "invalid utf8 byte: '#{c}'"
+ s = JSON.iconv('utf-16be', 'utf-8', c).unpack('H*')[0]
+ s.gsub!(/.{4}/n, '\\\\u\&')
+ }
+ string
+ rescue => e
+ raise GeneratorError, "Caught #{e.class}: #{e}"
+ end
+ end
+ module_function :utf8_to_json, :utf8_to_json_ascii
+
+ module Pure
+ module Generator
+ # This class is used to create State instances, that are use to hold data
+ # while generating a JSON text from a a Ruby data structure.
+ class State
+ # Creates a State object from _opts_, which ought to be Hash to create
+ # a new State instance configured by _opts_, something else to create
+ # an unconfigured instance. If _opts_ is a State object, it is just
+ # returned.
+ def self.from_state(opts)
+ case
+ when self === opts
+ opts
+ when opts.respond_to?(:to_hash)
+ new(opts.to_hash)
+ when opts.respond_to?(:to_h)
+ new(opts.to_h)
+ else
+ SAFE_STATE_PROTOTYPE.dup
+ end
+ end
+
+ # Instantiates a new State object, configured by _opts_.
+ #
+ # _opts_ can have the following keys:
+ #
+ # * *indent*: a string used to indent levels (default: ''),
+ # * *space*: a string that is put after, a : or , delimiter (default: ''),
+ # * *space_before*: a string that is put before a : pair delimiter (default: ''),
+ # * *object_nl*: a string that is put at the end of a JSON object (default: ''),
+ # * *array_nl*: a string that is put at the end of a JSON array (default: ''),
+ # * *check_circular*: is deprecated now, use the :max_nesting option instead,
+ # * *max_nesting*: sets the maximum level of data structure nesting in
+ # the generated JSON, max_nesting = 0 if no maximum should be checked.
+ # * *allow_nan*: true if NaN, Infinity, and -Infinity should be
+ # generated, otherwise an exception is thrown, if these values are
+ # encountered. This options defaults to false.
+ def initialize(opts = {})
+ @indent = ''
+ @space = ''
+ @space_before = ''
+ @object_nl = ''
+ @array_nl = ''
+ @allow_nan = false
+ @ascii_only = false
+ configure opts
+ end
+
+ # This string is used to indent levels in the JSON text.
+ attr_accessor :indent
+
+ # This string is used to insert a space between the tokens in a JSON
+ # string.
+ attr_accessor :space
+
+ # This string is used to insert a space before the ':' in JSON objects.
+ attr_accessor :space_before
+
+ # This string is put at the end of a line that holds a JSON object (or
+ # Hash).
+ attr_accessor :object_nl
+
+ # This string is put at the end of a line that holds a JSON array.
+ attr_accessor :array_nl
+
+ # This integer returns the maximum level of data structure nesting in
+ # the generated JSON, max_nesting = 0 if no maximum is checked.
+ attr_accessor :max_nesting
+
+ # This integer returns the current depth data structure nesting in the
+ # generated JSON.
+ attr_accessor :depth
+
+ def check_max_nesting # :nodoc:
+ return if @max_nesting.zero?
+ current_nesting = depth + 1
+ current_nesting > @max_nesting and
+ raise NestingError, "nesting of #{current_nesting} is too deep"
+ end
+
+ # Returns true, if circular data structures are checked,
+ # otherwise returns false.
+ def check_circular?
+ !@max_nesting.zero?
+ end
+
+ # Returns true if NaN, Infinity, and -Infinity should be considered as
+ # valid JSON and output.
+ def allow_nan?
+ @allow_nan
+ end
+
+ def ascii_only?
+ @ascii_only
+ end
+
+ # Configure this State instance with the Hash _opts_, and return
+ # itself.
+ def configure(opts)
+ @indent = opts[:indent] if opts.key?(:indent)
+ @space = opts[:space] if opts.key?(:space)
+ @space_before = opts[:space_before] if opts.key?(:space_before)
+ @object_nl = opts[:object_nl] if opts.key?(:object_nl)
+ @array_nl = opts[:array_nl] if opts.key?(:array_nl)
+ @allow_nan = !!opts[:allow_nan] if opts.key?(:allow_nan)
+ @ascii_only = opts[:ascii_only] if opts.key?(:ascii_only)
+ @depth = opts[:depth] || 0
+ if !opts.key?(:max_nesting) # defaults to 19
+ @max_nesting = 19
+ elsif opts[:max_nesting]
+ @max_nesting = opts[:max_nesting]
+ else
+ @max_nesting = 0
+ end
+ self
+ end
+
+ # Returns the configuration instance variables as a hash, that can be
+ # passed to the configure method.
+ def to_h
+ result = {}
+ for iv in %w[indent space space_before object_nl array_nl allow_nan max_nesting ascii_only depth]
+ result[iv.intern] = instance_variable_get("@#{iv}")
+ end
+ result
+ end
+
+ # Generates a valid JSON document from object +obj+ and returns the
+ # result. If no valid JSON document can be created this method raises a
+ # GeneratorError exception.
+ def generate(obj)
+ result = obj.to_json(self)
+ if result !~ /\A\s*(?:\[.*\]|\{.*\})\s*\Z/m
+ raise GeneratorError, "only generation of JSON objects or arrays allowed"
+ end
+ result
+ end
+
+ # Return the value returned by method +name+.
+ def [](name)
+ __send__ name
+ end
+ end
+
+ module GeneratorMethods
+ module Object
+ # Converts this object to a string (calling #to_s), converts
+ # it to a JSON string, and returns the result. This is a fallback, if no
+ # special method #to_json was defined for some object.
+ def to_json(*) to_s.to_json end
+ end
+
+ module Hash
+ # Returns a JSON string containing a JSON object, that is unparsed from
+ # this Hash instance.
+ # _state_ is a JSON::State object, that can also be used to configure the
+ # produced JSON string output further.
+ # _depth_ is used to find out nesting depth, to indent accordingly.
+ def to_json(state = nil, *)
+ state = State.from_state(state)
+ state.check_max_nesting
+ json_transform(state)
+ end
+
+ private
+
+ def json_shift(state)
+ state.object_nl.empty? or return ''
+ state.indent * state.depth
+ end
+
+ def json_transform(state)
+ delim = ','
+ delim << state.object_nl
+ result = '{'
+ result << state.object_nl
+ depth = state.depth += 1
+ first = true
+ indent = !state.object_nl.empty?
+ each { |key,value|
+ result << delim unless first
+ result << state.indent * depth if indent
+ result << key.to_s.to_json(state)
+ result << state.space_before
+ result << ':'
+ result << state.space
+ result << value.to_json(state)
+ first = false
+ }
+ depth = state.depth -= 1
+ result << state.object_nl
+ result << state.indent * depth if indent if indent
+ result << '}'
+ result
+ end
+ end
+
+ module Array
+ # Returns a JSON string containing a JSON array, that is unparsed from
+ # this Array instance.
+ # _state_ is a JSON::State object, that can also be used to configure the
+ # produced JSON string output further.
+ def to_json(state = nil, *)
+ state = State.from_state(state)
+ state.check_max_nesting
+ json_transform(state)
+ end
+
+ private
+
+ def json_transform(state)
+ delim = ','
+ delim << state.array_nl
+ result = '['
+ result << state.array_nl
+ depth = state.depth += 1
+ first = true
+ indent = !state.array_nl.empty?
+ each { |value|
+ result << delim unless first
+ result << state.indent * depth if indent
+ result << value.to_json(state)
+ first = false
+ }
+ depth = state.depth -= 1
+ result << state.array_nl
+ result << state.indent * depth if indent
+ result << ']'
+ end
+ end
+
+ module Integer
+ # Returns a JSON string representation for this Integer number.
+ def to_json(*) to_s end
+ end
+
+ module Float
+ # Returns a JSON string representation for this Float number.
+ def to_json(state = nil, *)
+ state = State.from_state(state)
+ case
+ when infinite?
+ if state.allow_nan?
+ to_s
+ else
+ raise GeneratorError, "#{self} not allowed in JSON"
+ end
+ when nan?
+ if state.allow_nan?
+ to_s
+ else
+ raise GeneratorError, "#{self} not allowed in JSON"
+ end
+ else
+ to_s
+ end
+ end
+ end
+
+ module String
+ if defined?(::Encoding)
+ # This string should be encoded with UTF-8 A call to this method
+ # returns a JSON string encoded with UTF16 big endian characters as
+ # \u????.
+ def to_json(state = nil, *args)
+ state = State.from_state(state)
+ if encoding == ::Encoding::UTF_8
+ string = self
+ else
+ string = encode(::Encoding::UTF_8)
+ end
+ if state.ascii_only?
+ '"' << JSON.utf8_to_json_ascii(string) << '"'
+ else
+ '"' << JSON.utf8_to_json(string) << '"'
+ end
+ end
+ else
+ # This string should be encoded with UTF-8 A call to this method
+ # returns a JSON string encoded with UTF16 big endian characters as
+ # \u????.
+ def to_json(state = nil, *args)
+ state = State.from_state(state)
+ if state.ascii_only?
+ '"' << JSON.utf8_to_json_ascii(self) << '"'
+ else
+ '"' << JSON.utf8_to_json(self) << '"'
+ end
+ end
+ end
+
+ # Module that holds the extinding methods if, the String module is
+ # included.
+ module Extend
+ # Raw Strings are JSON Objects (the raw bytes are stored in an
+ # array for the key "raw"). The Ruby String can be created by this
+ # module method.
+ def json_create(o)
+ o['raw'].pack('C*')
+ end
+ end
+
+ # Extends _modul_ with the String::Extend module.
+ def self.included(modul)
+ modul.extend Extend
+ end
+
+ # This method creates a raw object hash, that can be nested into
+ # other data structures and will be unparsed as a raw string. This
+ # method should be used, if you want to convert raw strings to JSON
+ # instead of UTF-8 strings, e. g. binary data.
+ def to_json_raw_object
+ {
+ JSON.create_id => self.class.name,
+ 'raw' => self.unpack('C*'),
+ }
+ end
+
+ # This method creates a JSON text from the result of
+ # a call to to_json_raw_object of this String.
+ def to_json_raw(*args)
+ to_json_raw_object.to_json(*args)
+ end
+ end
+
+ module TrueClass
+ # Returns a JSON string for true: 'true'.
+ def to_json(*) 'true' end
+ end
+
+ module FalseClass
+ # Returns a JSON string for false: 'false'.
+ def to_json(*) 'false' end
+ end
+
+ module NilClass
+ # Returns a JSON string for nil: 'null'.
+ def to_json(*) 'null' end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/json-1.5.1/lib/json/pure/parser.rb b/vendor/gems/json-1.5.1/lib/json/pure/parser.rb
new file mode 100644
index 000000000..8043e675a
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/pure/parser.rb
@@ -0,0 +1,320 @@
+require 'strscan'
+
+module JSON
+ module Pure
+ # This class implements the JSON parser that is used to parse a JSON string
+ # into a Ruby data structure.
+ class Parser < StringScanner
+ STRING = /" ((?:[^\x0-\x1f"\\] |
+ # escaped special characters:
+ \\["\\\/bfnrt] |
+ \\u[0-9a-fA-F]{4} |
+ # match all but escaped special characters:
+ \\[\x20-\x21\x23-\x2e\x30-\x5b\x5d-\x61\x63-\x65\x67-\x6d\x6f-\x71\x73\x75-\xff])*)
+ "/nx
+ INTEGER = /(-?0|-?[1-9]\d*)/
+ FLOAT = /(-?
+ (?:0|[1-9]\d*)
+ (?:
+ \.\d+(?i:e[+-]?\d+) |
+ \.\d+ |
+ (?i:e[+-]?\d+)
+ )
+ )/x
+ NAN = /NaN/
+ INFINITY = /Infinity/
+ MINUS_INFINITY = /-Infinity/
+ OBJECT_OPEN = /\{/
+ OBJECT_CLOSE = /\}/
+ ARRAY_OPEN = /\[/
+ ARRAY_CLOSE = /\]/
+ PAIR_DELIMITER = /:/
+ COLLECTION_DELIMITER = /,/
+ TRUE = /true/
+ FALSE = /false/
+ NULL = /null/
+ IGNORE = %r(
+ (?:
+ //[^\n\r]*[\n\r]| # line comments
+ /\* # c-style comments
+ (?:
+ [^*/]| # normal chars
+ /[^*]| # slashes that do not start a nested comment
+ \*[^/]| # asterisks that do not end this comment
+ /(?=\*/) # single slash before this comment's end
+ )*
+ \*/ # the End of this comment
+ |[ \t\r\n]+ # whitespaces: space, horicontal tab, lf, cr
+ )+
+ )mx
+
+ UNPARSED = Object.new
+
+ # Creates a new JSON::Pure::Parser instance for the string _source_.
+ #
+ # It will be configured by the _opts_ hash. _opts_ can have the following
+ # keys:
+ # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
+ # structures. Disable depth checking with :max_nesting => false|nil|0,
+ # it defaults to 19.
+ # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
+ # defiance of RFC 4627 to be parsed by the Parser. This option defaults
+ # to false.
+ # * *symbolize_names*: If set to true, returns symbols for the names
+ # (keys) in a JSON object. Otherwise strings are returned, which is also
+ # the default.
+ # * *create_additions*: If set to false, the Parser doesn't create
+ # additions even if a matchin class and create_id was found. This option
+ # defaults to true.
+ # * *object_class*: Defaults to Hash
+ # * *array_class*: Defaults to Array
+ def initialize(source, opts = {})
+ opts ||= {}
+ if defined?(::Encoding)
+ if source.encoding == ::Encoding::ASCII_8BIT
+ b = source[0, 4].bytes.to_a
+ source = case
+ when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
+ source.dup.force_encoding(::Encoding::UTF_32BE).encode!(::Encoding::UTF_8)
+ when b.size >= 4 && b[0] == 0 && b[2] == 0
+ source.dup.force_encoding(::Encoding::UTF_16BE).encode!(::Encoding::UTF_8)
+ when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
+ source.dup.force_encoding(::Encoding::UTF_32LE).encode!(::Encoding::UTF_8)
+
+ when b.size >= 4 && b[1] == 0 && b[3] == 0
+ source.dup.force_encoding(::Encoding::UTF_16LE).encode!(::Encoding::UTF_8)
+ else
+ source.dup
+ end
+ else
+ source = source.encode(::Encoding::UTF_8)
+ end
+ source.force_encoding(::Encoding::ASCII_8BIT)
+ else
+ b = source
+ source = case
+ when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
+ JSON.iconv('utf-8', 'utf-32be', b)
+ when b.size >= 4 && b[0] == 0 && b[2] == 0
+ JSON.iconv('utf-8', 'utf-16be', b)
+ when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
+ JSON.iconv('utf-8', 'utf-32le', b)
+ when b.size >= 4 && b[1] == 0 && b[3] == 0
+ JSON.iconv('utf-8', 'utf-16le', b)
+ else
+ b
+ end
+ end
+ super source
+ if !opts.key?(:max_nesting) # defaults to 19
+ @max_nesting = 19
+ elsif opts[:max_nesting]
+ @max_nesting = opts[:max_nesting]
+ else
+ @max_nesting = 0
+ end
+ @allow_nan = !!opts[:allow_nan]
+ @symbolize_names = !!opts[:symbolize_names]
+ @create_additions = opts.key?(:create_additions) ? !!opts[:create_additions] : true
+ @create_id = opts[:create_id] || JSON.create_id
+ @object_class = opts[:object_class] || Hash
+ @array_class = opts[:array_class] || Array
+ @match_string = opts[:match_string]
+ end
+
+ alias source string
+
+ # Parses the current JSON string _source_ and returns the complete data
+ # structure as a result.
+ def parse
+ reset
+ obj = nil
+ until eos?
+ case
+ when scan(OBJECT_OPEN)
+ obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
+ @current_nesting = 1
+ obj = parse_object
+ when scan(ARRAY_OPEN)
+ obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
+ @current_nesting = 1
+ obj = parse_array
+ when skip(IGNORE)
+ ;
+ else
+ raise ParserError, "source '#{peek(20)}' not in JSON!"
+ end
+ end
+ obj or raise ParserError, "source did not contain any JSON!"
+ obj
+ end
+
+ private
+
+ # Unescape characters in strings.
+ UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
+ UNESCAPE_MAP.update({
+ ?" => '"',
+ ?\\ => '\\',
+ ?/ => '/',
+ ?b => "\b",
+ ?f => "\f",
+ ?n => "\n",
+ ?r => "\r",
+ ?t => "\t",
+ ?u => nil,
+ })
+
+ EMPTY_8BIT_STRING = ''
+ if ::String.method_defined?(:encode)
+ EMPTY_8BIT_STRING.force_encoding Encoding::ASCII_8BIT
+ end
+
+ def parse_string
+ if scan(STRING)
+ return '' if self[1].empty?
+ string = self[1].gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c|
+ if u = UNESCAPE_MAP[$&[1]]
+ u
+ else # \uXXXX
+ bytes = EMPTY_8BIT_STRING.dup
+ i = 0
+ while c[6 * i] == ?\\ && c[6 * i + 1] == ?u
+ bytes << c[6 * i + 2, 2].to_i(16) << c[6 * i + 4, 2].to_i(16)
+ i += 1
+ end
+ JSON.iconv('utf-8', 'utf-16be', bytes)
+ end
+ end
+ if string.respond_to?(:force_encoding)
+ string.force_encoding(::Encoding::UTF_8)
+ end
+ if @create_additions and @match_string
+ for (regexp, klass) in @match_string
+ klass.json_creatable? or next
+ string =~ regexp and return klass.json_create(string)
+ end
+ end
+ string
+ else
+ UNPARSED
+ end
+ rescue => e
+ raise ParserError, "Caught #{e.class} at '#{peek(20)}': #{e}"
+ end
+
+ def parse_value
+ case
+ when scan(FLOAT)
+ Float(self[1])
+ when scan(INTEGER)
+ Integer(self[1])
+ when scan(TRUE)
+ true
+ when scan(FALSE)
+ false
+ when scan(NULL)
+ nil
+ when (string = parse_string) != UNPARSED
+ string
+ when scan(ARRAY_OPEN)
+ @current_nesting += 1
+ ary = parse_array
+ @current_nesting -= 1
+ ary
+ when scan(OBJECT_OPEN)
+ @current_nesting += 1
+ obj = parse_object
+ @current_nesting -= 1
+ obj
+ when @allow_nan && scan(NAN)
+ NaN
+ when @allow_nan && scan(INFINITY)
+ Infinity
+ when @allow_nan && scan(MINUS_INFINITY)
+ MinusInfinity
+ else
+ UNPARSED
+ end
+ end
+
+ def parse_array
+ raise NestingError, "nesting of #@current_nesting is too deep" if
+ @max_nesting.nonzero? && @current_nesting > @max_nesting
+ result = @array_class.new
+ delim = false
+ until eos?
+ case
+ when (value = parse_value) != UNPARSED
+ delim = false
+ result << value
+ skip(IGNORE)
+ if scan(COLLECTION_DELIMITER)
+ delim = true
+ elsif match?(ARRAY_CLOSE)
+ ;
+ else
+ raise ParserError, "expected ',' or ']' in array at '#{peek(20)}'!"
+ end
+ when scan(ARRAY_CLOSE)
+ if delim
+ raise ParserError, "expected next element in array at '#{peek(20)}'!"
+ end
+ break
+ when skip(IGNORE)
+ ;
+ else
+ raise ParserError, "unexpected token in array at '#{peek(20)}'!"
+ end
+ end
+ result
+ end
+
+ def parse_object
+ raise NestingError, "nesting of #@current_nesting is too deep" if
+ @max_nesting.nonzero? && @current_nesting > @max_nesting
+ result = @object_class.new
+ delim = false
+ until eos?
+ case
+ when (string = parse_string) != UNPARSED
+ skip(IGNORE)
+ unless scan(PAIR_DELIMITER)
+ raise ParserError, "expected ':' in object at '#{peek(20)}'!"
+ end
+ skip(IGNORE)
+ unless (value = parse_value).equal? UNPARSED
+ result[@symbolize_names ? string.to_sym : string] = value
+ delim = false
+ skip(IGNORE)
+ if scan(COLLECTION_DELIMITER)
+ delim = true
+ elsif match?(OBJECT_CLOSE)
+ ;
+ else
+ raise ParserError, "expected ',' or '}' in object at '#{peek(20)}'!"
+ end
+ else
+ raise ParserError, "expected value in object at '#{peek(20)}'!"
+ end
+ when scan(OBJECT_CLOSE)
+ if delim
+ raise ParserError, "expected next name, value pair in object at '#{peek(20)}'!"
+ end
+ if @create_additions and klassname = result[@create_id]
+ klass = JSON.deep_const_get klassname
+ break unless klass and klass.json_creatable?
+ result = klass.json_create(result)
+ end
+ break
+ when skip(IGNORE)
+ ;
+ else
+ raise ParserError, "unexpected token in object at '#{peek(20)}'!"
+ end
+ end
+ result
+ end
+ end
+ end
+end
diff --git a/vendor/gems/json-1.5.1/lib/json/version.rb b/vendor/gems/json-1.5.1/lib/json/version.rb
new file mode 100644
index 000000000..86a741a8d
--- /dev/null
+++ b/vendor/gems/json-1.5.1/lib/json/version.rb
@@ -0,0 +1,8 @@
+module JSON
+ # JSON version
+ VERSION = '1.5.1'
+ VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
+ VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
+ VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
+ VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
+end
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail1.json b/vendor/gems/json-1.5.1/tests/fixtures/fail1.json
new file mode 100644
index 000000000..6216b865f
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail1.json
@@ -0,0 +1 @@
+"A JSON payload should be an object or array, not a string." \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail10.json b/vendor/gems/json-1.5.1/tests/fixtures/fail10.json
new file mode 100644
index 000000000..5d8c0047b
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail10.json
@@ -0,0 +1 @@
+{"Extra value after close": true} "misplaced quoted value" \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail11.json b/vendor/gems/json-1.5.1/tests/fixtures/fail11.json
new file mode 100644
index 000000000..76eb95b45
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail11.json
@@ -0,0 +1 @@
+{"Illegal expression": 1 + 2} \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail12.json b/vendor/gems/json-1.5.1/tests/fixtures/fail12.json
new file mode 100644
index 000000000..77580a452
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail12.json
@@ -0,0 +1 @@
+{"Illegal invocation": alert()} \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail13.json b/vendor/gems/json-1.5.1/tests/fixtures/fail13.json
new file mode 100644
index 000000000..379406b59
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail13.json
@@ -0,0 +1 @@
+{"Numbers cannot have leading zeroes": 013} \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail14.json b/vendor/gems/json-1.5.1/tests/fixtures/fail14.json
new file mode 100644
index 000000000..0ed366b38
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail14.json
@@ -0,0 +1 @@
+{"Numbers cannot be hex": 0x14} \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail18.json b/vendor/gems/json-1.5.1/tests/fixtures/fail18.json
new file mode 100644
index 000000000..e2d130c6e
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail18.json
@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail19.json b/vendor/gems/json-1.5.1/tests/fixtures/fail19.json
new file mode 100644
index 000000000..3b9c46fa9
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail19.json
@@ -0,0 +1 @@
+{"Missing colon" null} \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail2.json b/vendor/gems/json-1.5.1/tests/fixtures/fail2.json
new file mode 100644
index 000000000..6b7c11e5a
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail2.json
@@ -0,0 +1 @@
+["Unclosed array" \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail20.json b/vendor/gems/json-1.5.1/tests/fixtures/fail20.json
new file mode 100644
index 000000000..27c1af3e7
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail20.json
@@ -0,0 +1 @@
+{"Double colon":: null} \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail21.json b/vendor/gems/json-1.5.1/tests/fixtures/fail21.json
new file mode 100644
index 000000000..62474573b
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail21.json
@@ -0,0 +1 @@
+{"Comma instead of colon", null} \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail22.json b/vendor/gems/json-1.5.1/tests/fixtures/fail22.json
new file mode 100644
index 000000000..a7752581b
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail22.json
@@ -0,0 +1 @@
+["Colon instead of comma": false] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail23.json b/vendor/gems/json-1.5.1/tests/fixtures/fail23.json
new file mode 100644
index 000000000..494add1ca
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail23.json
@@ -0,0 +1 @@
+["Bad value", truth] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail24.json b/vendor/gems/json-1.5.1/tests/fixtures/fail24.json
new file mode 100644
index 000000000..caff239bf
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail24.json
@@ -0,0 +1 @@
+['single quote'] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail25.json b/vendor/gems/json-1.5.1/tests/fixtures/fail25.json
new file mode 100644
index 000000000..2dfbd259e
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail25.json
@@ -0,0 +1 @@
+["tab character in string "]
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail27.json b/vendor/gems/json-1.5.1/tests/fixtures/fail27.json
new file mode 100644
index 000000000..6b01a2ca4
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail27.json
@@ -0,0 +1,2 @@
+["line
+break"] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail28.json b/vendor/gems/json-1.5.1/tests/fixtures/fail28.json
new file mode 100644
index 000000000..621a0101c
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail28.json
@@ -0,0 +1,2 @@
+["line\
+break"] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail3.json b/vendor/gems/json-1.5.1/tests/fixtures/fail3.json
new file mode 100644
index 000000000..168c81eb7
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail3.json
@@ -0,0 +1 @@
+{unquoted_key: "keys must be quoted"} \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail4.json b/vendor/gems/json-1.5.1/tests/fixtures/fail4.json
new file mode 100644
index 000000000..9de168bf3
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail4.json
@@ -0,0 +1 @@
+["extra comma",] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail5.json b/vendor/gems/json-1.5.1/tests/fixtures/fail5.json
new file mode 100644
index 000000000..ddf3ce3d2
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail5.json
@@ -0,0 +1 @@
+["double extra comma",,] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail6.json b/vendor/gems/json-1.5.1/tests/fixtures/fail6.json
new file mode 100644
index 000000000..ed91580e1
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail6.json
@@ -0,0 +1 @@
+[ , "<-- missing value"] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail7.json b/vendor/gems/json-1.5.1/tests/fixtures/fail7.json
new file mode 100644
index 000000000..8a96af3e4
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail7.json
@@ -0,0 +1 @@
+["Comma after the close"], \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail8.json b/vendor/gems/json-1.5.1/tests/fixtures/fail8.json
new file mode 100644
index 000000000..b28479c6e
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail8.json
@@ -0,0 +1 @@
+["Extra close"]] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/fail9.json b/vendor/gems/json-1.5.1/tests/fixtures/fail9.json
new file mode 100644
index 000000000..5815574f3
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/fail9.json
@@ -0,0 +1 @@
+{"Extra comma": true,} \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/pass1.json b/vendor/gems/json-1.5.1/tests/fixtures/pass1.json
new file mode 100644
index 000000000..7828fcc13
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/pass1.json
@@ -0,0 +1,56 @@
+[
+ "JSON Test Pattern pass1",
+ {"object with 1 member":["array with 1 element"]},
+ {},
+ [],
+ -42,
+ true,
+ false,
+ null,
+ {
+ "integer": 1234567890,
+ "real": -9876.543210,
+ "e": 0.123456789e-12,
+ "E": 1.234567890E+34,
+ "": 23456789012E666,
+ "zero": 0,
+ "one": 1,
+ "space": " ",
+ "quote": "\"",
+ "backslash": "\\",
+ "controls": "\b\f\n\r\t",
+ "slash": "/ & \/",
+ "alpha": "abcdefghijklmnopqrstuvwyz",
+ "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
+ "digit": "0123456789",
+ "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
+ "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
+ "true": true,
+ "false": false,
+ "null": null,
+ "array":[ ],
+ "object":{ },
+ "address": "50 St. James Street",
+ "url": "http://www.JSON.org/",
+ "comment": "// /* <!-- --",
+ "# -- --> */": " ",
+ " s p a c e d " :[1,2 , 3
+
+,
+
+4 , 5 , 6 ,7 ],
+ "compact": [1,2,3,4,5,6,7],
+ "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
+ "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
+ "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
+: "A key can be any string"
+ },
+ 0.5 ,98.6
+,
+99.44
+,
+
+1066
+
+
+,"rosebud"] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/pass15.json b/vendor/gems/json-1.5.1/tests/fixtures/pass15.json
new file mode 100644
index 000000000..fc8376b60
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/pass15.json
@@ -0,0 +1 @@
+["Illegal backslash escape: \x15"] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/pass16.json b/vendor/gems/json-1.5.1/tests/fixtures/pass16.json
new file mode 100644
index 000000000..c43ae3c28
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/pass16.json
@@ -0,0 +1 @@
+["Illegal backslash escape: \'"] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/pass17.json b/vendor/gems/json-1.5.1/tests/fixtures/pass17.json
new file mode 100644
index 000000000..62b9214ae
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/pass17.json
@@ -0,0 +1 @@
+["Illegal backslash escape: \017"] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/pass2.json b/vendor/gems/json-1.5.1/tests/fixtures/pass2.json
new file mode 100644
index 000000000..d3c63c7ad
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/pass2.json
@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/pass26.json b/vendor/gems/json-1.5.1/tests/fixtures/pass26.json
new file mode 100644
index 000000000..845d26a6a
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/pass26.json
@@ -0,0 +1 @@
+["tab\ character\ in\ string\ "] \ No newline at end of file
diff --git a/vendor/gems/json-1.5.1/tests/fixtures/pass3.json b/vendor/gems/json-1.5.1/tests/fixtures/pass3.json
new file mode 100644
index 000000000..4528d51f1
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/fixtures/pass3.json
@@ -0,0 +1,6 @@
+{
+ "JSON Test Pattern pass3": {
+ "The outermost value": "must be an object or array.",
+ "In this test": "It is an object."
+ }
+}
diff --git a/vendor/gems/json-1.5.1/tests/setup_variant.rb b/vendor/gems/json-1.5.1/tests/setup_variant.rb
new file mode 100644
index 000000000..2dab184bc
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/setup_variant.rb
@@ -0,0 +1,11 @@
+case ENV['JSON']
+when 'pure'
+ $:.unshift 'lib'
+ require 'json/pure'
+when 'ext'
+ $:.unshift 'ext', 'lib'
+ require 'json/ext'
+else
+ $:.unshift 'ext', 'lib'
+ require 'json'
+end
diff --git a/vendor/gems/json-1.5.1/tests/test_json.rb b/vendor/gems/json-1.5.1/tests/test_json.rb
new file mode 100755
index 000000000..2fc3c099d
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/test_json.rb
@@ -0,0 +1,390 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+require File.join(File.dirname(__FILE__), 'setup_variant')
+require 'stringio'
+
+unless Array.method_defined?(:permutation)
+ begin
+ require 'enumerator'
+ require 'permutation'
+ class Array
+ def permutation
+ Permutation.for(self).to_enum.map { |x| x.project }
+ end
+ end
+ rescue LoadError
+ warn "Skipping permutation tests."
+ end
+end
+
+class TC_JSON < Test::Unit::TestCase
+ include JSON
+
+ def setup
+ @ary = [1, "foo", 3.14, 4711.0, 2.718, nil, [1,-2,3], false, true].map do
+ |x| [x]
+ end
+ @ary_to_parse = ["1", '"foo"', "3.14", "4711.0", "2.718", "null",
+ "[1,-2,3]", "false", "true"].map do
+ |x| "[#{x}]"
+ end
+ @hash = {
+ 'a' => 2,
+ 'b' => 3.141,
+ 'c' => 'c',
+ 'd' => [ 1, "b", 3.14 ],
+ 'e' => { 'foo' => 'bar' },
+ 'g' => "\"\0\037",
+ 'h' => 1000.0,
+ 'i' => 0.001
+ }
+ @json = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},'\
+ '"g":"\\"\\u0000\\u001f","h":1.0E3,"i":1.0E-3}'
+ end
+
+ def test_construction
+ parser = JSON::Parser.new('test')
+ assert_equal 'test', parser.source
+ end
+
+ def assert_equal_float(expected, is)
+ assert_in_delta(expected.first, is.first, 1e-2)
+ end
+
+ def test_parse_simple_arrays
+ assert_equal([], parse('[]'))
+ assert_equal([], parse(' [ ] '))
+ assert_equal([nil], parse('[null]'))
+ assert_equal([false], parse('[false]'))
+ assert_equal([true], parse('[true]'))
+ assert_equal([-23], parse('[-23]'))
+ assert_equal([23], parse('[23]'))
+ assert_equal([0.23], parse('[0.23]'))
+ assert_equal([0.0], parse('[0e0]'))
+ assert_raises(JSON::ParserError) { parse('[+23.2]') }
+ assert_raises(JSON::ParserError) { parse('[+23]') }
+ assert_raises(JSON::ParserError) { parse('[.23]') }
+ assert_raises(JSON::ParserError) { parse('[023]') }
+ assert_equal_float [3.141], parse('[3.141]')
+ assert_equal_float [-3.141], parse('[-3.141]')
+ assert_equal_float [3.141], parse('[3141e-3]')
+ assert_equal_float [3.141], parse('[3141.1e-3]')
+ assert_equal_float [3.141], parse('[3141E-3]')
+ assert_equal_float [3.141], parse('[3141.0E-3]')
+ assert_equal_float [-3.141], parse('[-3141.0e-3]')
+ assert_equal_float [-3.141], parse('[-3141e-3]')
+ assert_raises(ParserError) { parse('[NaN]') }
+ assert parse('[NaN]', :allow_nan => true).first.nan?
+ assert_raises(ParserError) { parse('[Infinity]') }
+ assert_equal [1.0/0], parse('[Infinity]', :allow_nan => true)
+ assert_raises(ParserError) { parse('[-Infinity]') }
+ assert_equal [-1.0/0], parse('[-Infinity]', :allow_nan => true)
+ assert_equal([""], parse('[""]'))
+ assert_equal(["foobar"], parse('["foobar"]'))
+ assert_equal([{}], parse('[{}]'))
+ end
+
+ def test_parse_simple_objects
+ assert_equal({}, parse('{}'))
+ assert_equal({}, parse(' { } '))
+ assert_equal({ "a" => nil }, parse('{ "a" : null}'))
+ assert_equal({ "a" => nil }, parse('{"a":null}'))
+ assert_equal({ "a" => false }, parse('{ "a" : false } '))
+ assert_equal({ "a" => false }, parse('{"a":false}'))
+ assert_raises(JSON::ParserError) { parse('{false}') }
+ assert_equal({ "a" => true }, parse('{"a":true}'))
+ assert_equal({ "a" => true }, parse(' { "a" : true } '))
+ assert_equal({ "a" => -23 }, parse(' { "a" : -23 } '))
+ assert_equal({ "a" => -23 }, parse(' { "a" : -23 } '))
+ assert_equal({ "a" => 23 }, parse('{"a":23 } '))
+ assert_equal({ "a" => 23 }, parse(' { "a" : 23 } '))
+ assert_equal({ "a" => 0.23 }, parse(' { "a" : 0.23 } '))
+ assert_equal({ "a" => 0.23 }, parse(' { "a" : 0.23 } '))
+ end
+
+ if Array.method_defined?(:permutation)
+ def test_parse_more_complex_arrays
+ a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
+ a.permutation.each do |perm|
+ json = pretty_generate(perm)
+ assert_equal perm, parse(json)
+ end
+ end
+
+ def test_parse_complex_objects
+ a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
+ a.permutation.each do |perm|
+ s = "a"
+ orig_obj = perm.inject({}) { |h, x| h[s.dup] = x; s = s.succ; h }
+ json = pretty_generate(orig_obj)
+ assert_equal orig_obj, parse(json)
+ end
+ end
+ end
+
+ def test_parse_arrays
+ assert_equal([1,2,3], parse('[1,2,3]'))
+ assert_equal([1.2,2,3], parse('[1.2,2,3]'))
+ assert_equal([[],[[],[]]], parse('[[],[[],[]]]'))
+ end
+
+ def test_parse_values
+ assert_equal([""], parse('[""]'))
+ assert_equal(["\\"], parse('["\\\\"]'))
+ assert_equal(['"'], parse('["\""]'))
+ assert_equal(['\\"\\'], parse('["\\\\\\"\\\\"]'))
+ assert_equal(["\"\b\n\r\t\0\037"],
+ parse('["\"\b\n\r\t\u0000\u001f"]'))
+ for i in 0 ... @ary.size
+ assert_equal(@ary[i], parse(@ary_to_parse[i]))
+ end
+ end
+
+ def test_parse_array
+ assert_equal([], parse('[]'))
+ assert_equal([], parse(' [ ] '))
+ assert_equal([1], parse('[1]'))
+ assert_equal([1], parse(' [ 1 ] '))
+ assert_equal(@ary,
+ parse('[[1],["foo"],[3.14],[47.11e+2],[2718.0E-3],[null],[[1,-2,3]]'\
+ ',[false],[true]]'))
+ assert_equal(@ary, parse(%Q{ [ [1] , ["foo"] , [3.14] \t , [47.11e+2]
+ , [2718.0E-3 ],\r[ null] , [[1, -2, 3 ]], [false ],[ true]\n ] }))
+ end
+
+ class SubArray < Array; end
+
+ class SubArray2 < Array
+ def to_json(*a)
+ {
+ JSON.create_id => self.class.name,
+ 'ary' => to_a,
+ }.to_json(*a)
+ end
+
+ def self.json_create(o)
+ o.delete JSON.create_id
+ o['ary']
+ end
+ end
+
+ def test_parse_array_custom_class
+ res = parse('[]', :array_class => SubArray)
+ assert_equal([], res)
+ assert_equal(SubArray, res.class)
+ end
+
+ def test_parse_object
+ assert_equal({}, parse('{}'))
+ assert_equal({}, parse(' { } '))
+ assert_equal({'foo'=>'bar'}, parse('{"foo":"bar"}'))
+ assert_equal({'foo'=>'bar'}, parse(' { "foo" : "bar" } '))
+ end
+
+ class SubHash < Hash
+ end
+
+ class SubHash2 < Hash
+ def to_json(*a)
+ {
+ JSON.create_id => self.class.name,
+ }.merge(self).to_json(*a)
+ end
+
+ def self.json_create(o)
+ o.delete JSON.create_id
+ self[o]
+ end
+ end
+
+ def test_parse_object_custom_class
+ res = parse('{}', :object_class => SubHash2)
+ assert_equal({}, res)
+ assert_equal(SubHash2, res.class)
+ end
+
+ def test_generation_of_core_subclasses_with_new_to_json
+ obj = SubHash2["foo" => SubHash2["bar" => true]]
+ obj_json = JSON(obj)
+ obj_again = JSON(obj_json)
+ assert_kind_of SubHash2, obj_again
+ assert_kind_of SubHash2, obj_again['foo']
+ assert obj_again['foo']['bar']
+ assert_equal obj, obj_again
+ assert_equal ["foo"], JSON(JSON(SubArray2["foo"]))
+ end
+
+ def test_generation_of_core_subclasses_with_default_to_json
+ assert_equal '{"foo":"bar"}', JSON(SubHash["foo" => "bar"])
+ assert_equal '["foo"]', JSON(SubArray["foo"])
+ end
+
+ def test_generation_of_core_subclasses
+ obj = SubHash["foo" => SubHash["bar" => true]]
+ obj_json = JSON(obj)
+ obj_again = JSON(obj_json)
+ assert_kind_of Hash, obj_again
+ assert_kind_of Hash, obj_again['foo']
+ assert obj_again['foo']['bar']
+ assert_equal obj, obj_again
+ end
+
+ def test_parser_reset
+ parser = Parser.new(@json)
+ assert_equal(@hash, parser.parse)
+ assert_equal(@hash, parser.parse)
+ end
+
+ def test_comments
+ json = <<EOT
+{
+ "key1":"value1", // eol comment
+ "key2":"value2" /* multi line
+ * comment */,
+ "key3":"value3" /* multi line
+ // nested eol comment
+ * comment */
+}
+EOT
+ assert_equal(
+ { "key1" => "value1", "key2" => "value2", "key3" => "value3" },
+ parse(json))
+ json = <<EOT
+{
+ "key1":"value1" /* multi line
+ // nested eol comment
+ /* illegal nested multi line comment */
+ * comment */
+}
+EOT
+ assert_raises(ParserError) { parse(json) }
+ json = <<EOT
+{
+ "key1":"value1" /* multi line
+ // nested eol comment
+ closed multi comment */
+ and again, throw an Error */
+}
+EOT
+ assert_raises(ParserError) { parse(json) }
+ json = <<EOT
+{
+ "key1":"value1" /*/*/
+}
+EOT
+ assert_equal({ "key1" => "value1" }, parse(json))
+ end
+
+ def test_backslash
+ data = [ '\\.(?i:gif|jpe?g|png)$' ]
+ json = '["\\\\.(?i:gif|jpe?g|png)$"]'
+ assert_equal json, JSON.generate(data)
+ assert_equal data, JSON.parse(json)
+ #
+ data = [ '\\"' ]
+ json = '["\\\\\""]'
+ assert_equal json, JSON.generate(data)
+ assert_equal data, JSON.parse(json)
+ #
+ json = '["/"]'
+ data = JSON.parse(json)
+ assert_equal ['/'], data
+ assert_equal json, JSON.generate(data)
+ #
+ json = '["\""]'
+ data = JSON.parse(json)
+ assert_equal ['"'], data
+ assert_equal json, JSON.generate(data)
+ json = '["\\\'"]'
+ data = JSON.parse(json)
+ assert_equal ["'"], data
+ assert_equal '["\'"]', JSON.generate(data)
+ end
+
+ def test_wrong_inputs
+ assert_raises(ParserError) { JSON.parse('"foo"') }
+ assert_raises(ParserError) { JSON.parse('123') }
+ assert_raises(ParserError) { JSON.parse('[] bla') }
+ assert_raises(ParserError) { JSON.parse('[] 1') }
+ assert_raises(ParserError) { JSON.parse('[] []') }
+ assert_raises(ParserError) { JSON.parse('[] {}') }
+ assert_raises(ParserError) { JSON.parse('{} []') }
+ assert_raises(ParserError) { JSON.parse('{} {}') }
+ assert_raises(ParserError) { JSON.parse('[NULL]') }
+ assert_raises(ParserError) { JSON.parse('[FALSE]') }
+ assert_raises(ParserError) { JSON.parse('[TRUE]') }
+ assert_raises(ParserError) { JSON.parse('[07] ') }
+ assert_raises(ParserError) { JSON.parse('[0a]') }
+ assert_raises(ParserError) { JSON.parse('[1.]') }
+ assert_raises(ParserError) { JSON.parse(' ') }
+ end
+
+ def test_nesting
+ assert_raises(JSON::NestingError) { JSON.parse '[[]]', :max_nesting => 1 }
+ assert_raises(JSON::NestingError) { JSON.parser.new('[[]]', :max_nesting => 1).parse }
+ assert_equal [[]], JSON.parse('[[]]', :max_nesting => 2)
+ too_deep = '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]'
+ too_deep_ary = eval too_deep
+ assert_raises(JSON::NestingError) { JSON.parse too_deep }
+ assert_raises(JSON::NestingError) { JSON.parser.new(too_deep).parse }
+ assert_raises(JSON::NestingError) { JSON.parse too_deep, :max_nesting => 19 }
+ ok = JSON.parse too_deep, :max_nesting => 20
+ assert_equal too_deep_ary, ok
+ ok = JSON.parse too_deep, :max_nesting => nil
+ assert_equal too_deep_ary, ok
+ ok = JSON.parse too_deep, :max_nesting => false
+ assert_equal too_deep_ary, ok
+ ok = JSON.parse too_deep, :max_nesting => 0
+ assert_equal too_deep_ary, ok
+ assert_raises(JSON::NestingError) { JSON.generate [[]], :max_nesting => 1 }
+ assert_equal '[[]]', JSON.generate([[]], :max_nesting => 2)
+ assert_raises(JSON::NestingError) { JSON.generate too_deep_ary }
+ assert_raises(JSON::NestingError) { JSON.generate too_deep_ary, :max_nesting => 19 }
+ ok = JSON.generate too_deep_ary, :max_nesting => 20
+ assert_equal too_deep, ok
+ ok = JSON.generate too_deep_ary, :max_nesting => nil
+ assert_equal too_deep, ok
+ ok = JSON.generate too_deep_ary, :max_nesting => false
+ assert_equal too_deep, ok
+ ok = JSON.generate too_deep_ary, :max_nesting => 0
+ assert_equal too_deep, ok
+ end
+
+ def test_symbolize_names
+ assert_equal({ "foo" => "bar", "baz" => "quux" },
+ JSON.parse('{"foo":"bar", "baz":"quux"}'))
+ assert_equal({ :foo => "bar", :baz => "quux" },
+ JSON.parse('{"foo":"bar", "baz":"quux"}', :symbolize_names => true))
+ end
+
+ def test_load_dump
+ too_deep = '[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]'
+ assert_equal too_deep, JSON.dump(eval(too_deep))
+ assert_kind_of String, Marshal.dump(eval(too_deep))
+ assert_raises(ArgumentError) { JSON.dump(eval(too_deep), 19) }
+ assert_raises(ArgumentError) { Marshal.dump(eval(too_deep), 19) }
+ assert_equal too_deep, JSON.dump(eval(too_deep), 20)
+ assert_kind_of String, Marshal.dump(eval(too_deep), 20)
+ output = StringIO.new
+ JSON.dump(eval(too_deep), output)
+ assert_equal too_deep, output.string
+ output = StringIO.new
+ JSON.dump(eval(too_deep), output, 20)
+ assert_equal too_deep, output.string
+ end
+
+ def test_big_integers
+ json1 = JSON([orig = (1 << 31) - 1])
+ assert_equal orig, JSON[json1][0]
+ json2 = JSON([orig = 1 << 31])
+ assert_equal orig, JSON[json2][0]
+ json3 = JSON([orig = (1 << 62) - 1])
+ assert_equal orig, JSON[json3][0]
+ json4 = JSON([orig = 1 << 62])
+ assert_equal orig, JSON[json4][0]
+ json5 = JSON([orig = 1 << 64])
+ assert_equal orig, JSON[json5][0]
+ end
+end
diff --git a/vendor/gems/json-1.5.1/tests/test_json_addition.rb b/vendor/gems/json-1.5.1/tests/test_json_addition.rb
new file mode 100755
index 000000000..c8bfb41b8
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/test_json_addition.rb
@@ -0,0 +1,167 @@
+#!/usr/bin/env ruby
+# -*- coding:utf-8 -*-
+
+require 'test/unit'
+require File.join(File.dirname(__FILE__), 'setup_variant')
+load 'json/add/core.rb'
+require 'date'
+
+class TC_JSONAddition < Test::Unit::TestCase
+ include JSON
+
+ class A
+ def initialize(a)
+ @a = a
+ end
+
+ attr_reader :a
+
+ def ==(other)
+ a == other.a
+ end
+
+ def self.json_create(object)
+ new(*object['args'])
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ 'args' => [ @a ],
+ }.to_json(*args)
+ end
+ end
+
+ class A2 < A
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ 'args' => [ @a ],
+ }.to_json(*args)
+ end
+ end
+
+ class B
+ def self.json_creatable?
+ false
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ }.to_json(*args)
+ end
+ end
+
+ class C
+ def self.json_creatable?
+ false
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => 'TC_JSONAddition::Nix',
+ }.to_json(*args)
+ end
+ end
+
+ def test_extended_json
+ a = A.new(666)
+ assert A.json_creatable?
+ json = generate(a)
+ a_again = JSON.parse(json)
+ assert_kind_of a.class, a_again
+ assert_equal a, a_again
+ end
+
+ def test_extended_json_disabled
+ a = A.new(666)
+ assert A.json_creatable?
+ json = generate(a)
+ a_again = JSON.parse(json, :create_additions => true)
+ assert_kind_of a.class, a_again
+ assert_equal a, a_again
+ a_hash = JSON.parse(json, :create_additions => false)
+ assert_kind_of Hash, a_hash
+ assert_equal(
+ {"args"=>[666], "json_class"=>"TC_JSONAddition::A"}.sort_by { |k,| k },
+ a_hash.sort_by { |k,| k }
+ )
+ end
+
+ def test_extended_json_fail1
+ b = B.new
+ assert !B.json_creatable?
+ json = generate(b)
+ assert_equal({ "json_class"=>"TC_JSONAddition::B" }, JSON.parse(json))
+ end
+
+ def test_extended_json_fail2
+ c = C.new
+ assert !C.json_creatable?
+ json = generate(c)
+ assert_raises(ArgumentError, NameError) { JSON.parse(json) }
+ end
+
+ def test_raw_strings
+ raw = ''
+ raw.respond_to?(:encode!) and raw.encode!(Encoding::ASCII_8BIT)
+ raw_array = []
+ for i in 0..255
+ raw << i
+ raw_array << i
+ end
+ json = raw.to_json_raw
+ json_raw_object = raw.to_json_raw_object
+ hash = { 'json_class' => 'String', 'raw'=> raw_array }
+ assert_equal hash, json_raw_object
+ assert_match(/\A\{.*\}\Z/, json)
+ assert_match(/"json_class":"String"/, json)
+ assert_match(/"raw":\[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255\]/, json)
+ raw_again = JSON.parse(json)
+ assert_equal raw, raw_again
+ end
+
+ MyJsonStruct = Struct.new 'MyJsonStruct', :foo, :bar
+
+ def test_core
+ t = Time.now
+ assert_equal t.inspect, JSON(JSON(t)).inspect
+ d = Date.today
+ assert_equal d, JSON(JSON(d))
+ d = DateTime.civil(2007, 6, 14, 14, 57, 10, Rational(1, 12), 2299161)
+ assert_equal d, JSON(JSON(d))
+ assert_equal 1..10, JSON(JSON(1..10))
+ assert_equal 1...10, JSON(JSON(1...10))
+ assert_equal "a".."c", JSON(JSON("a".."c"))
+ assert_equal "a"..."c", JSON(JSON("a"..."c"))
+ s = MyJsonStruct.new 4711, 'foot'
+ assert_equal s, JSON(JSON(s))
+ struct = Struct.new :foo, :bar
+ s = struct.new 4711, 'foot'
+ assert_raises(JSONError) { JSON(s) }
+ begin
+ raise TypeError, "test me"
+ rescue TypeError => e
+ e_json = JSON.generate e
+ e_again = JSON e_json
+ assert_kind_of TypeError, e_again
+ assert_equal e.message, e_again.message
+ assert_equal e.backtrace, e_again.backtrace
+ end
+ assert_equal(/foo/, JSON(JSON(/foo/)))
+ assert_equal(/foo/i, JSON(JSON(/foo/i)))
+ end
+
+ def test_utc_datetime
+ now = Time.now
+ d = DateTime.parse(now.to_s) # usual case
+ assert_equal d, JSON.parse(d.to_json)
+ d = DateTime.parse(now.utc.to_s) # of = 0
+ assert_equal d, JSON.parse(d.to_json)
+ d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(1,24))
+ assert_equal d, JSON.parse(d.to_json)
+ d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(12,24))
+ assert_equal d, JSON.parse(d.to_json)
+ end
+end
diff --git a/vendor/gems/json-1.5.1/tests/test_json_encoding.rb b/vendor/gems/json-1.5.1/tests/test_json_encoding.rb
new file mode 100644
index 000000000..7af5e63a7
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/test_json_encoding.rb
@@ -0,0 +1,65 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+require File.join(File.dirname(__FILE__), 'setup_variant')
+
+class TC_JSONEncoding < Test::Unit::TestCase
+ include JSON
+
+ def setup
+ @utf_8 = '["© ≠ €!"]'
+ @parsed = [ "© ≠ €!" ]
+ @generated = '["\u00a9 \u2260 \u20ac!"]'
+ if String.method_defined?(:encode)
+ @utf_16_data = [@parsed.first.encode('utf-16be', 'utf-8')]
+ @utf_8_ascii_8bit = @utf_8.dup.force_encoding(Encoding::ASCII_8BIT)
+ @utf_16be = @utf_8.encode('utf-16be', 'utf-8')
+ @utf_16be_ascii_8bit = @utf_16be.dup.force_encoding(Encoding::ASCII_8BIT)
+ @utf_16le = @utf_8.encode('utf-16le', 'utf-8')
+ @utf_16le_ascii_8bit = @utf_16le.dup.force_encoding(Encoding::ASCII_8BIT)
+ @utf_32be = @utf_8.encode('utf-32be', 'utf-8')
+ @utf_32be_ascii_8bit = @utf_32be.dup.force_encoding(Encoding::ASCII_8BIT)
+ @utf_32le = @utf_8.encode('utf-32le', 'utf-8')
+ @utf_32le_ascii_8bit = @utf_32le.dup.force_encoding(Encoding::ASCII_8BIT)
+ else
+ require 'iconv'
+ @utf_16_data = Iconv.iconv('utf-16be', 'utf-8', @parsed.first)
+ @utf_8_ascii_8bit = @utf_8.dup
+ @utf_16be, = Iconv.iconv('utf-16be', 'utf-8', @utf_8)
+ @utf_16be_ascii_8bit = @utf_16be.dup
+ @utf_16le, = Iconv.iconv('utf-16le', 'utf-8', @utf_8)
+ @utf_16le_ascii_8bit = @utf_16le.dup
+ @utf_32be, = Iconv.iconv('utf-32be', 'utf-8', @utf_8)
+ @utf_32be_ascii_8bit = @utf_32be.dup
+ @utf_32le, = Iconv.iconv('utf-32le', 'utf-8', @utf_8)
+ @utf_32le_ascii_8bit = @utf_32le.dup
+ end
+ end
+
+ def test_parse
+ assert_equal @parsed, JSON.parse(@utf_8)
+ assert_equal @parsed, JSON.parse(@utf_16be)
+ assert_equal @parsed, JSON.parse(@utf_16le)
+ assert_equal @parsed, JSON.parse(@utf_32be)
+ assert_equal @parsed, JSON.parse(@utf_32le)
+ end
+
+ def test_parse_ascii_8bit
+ assert_equal @parsed, JSON.parse(@utf_8_ascii_8bit)
+ assert_equal @parsed, JSON.parse(@utf_16be_ascii_8bit)
+ assert_equal @parsed, JSON.parse(@utf_16le_ascii_8bit)
+ assert_equal @parsed, JSON.parse(@utf_32be_ascii_8bit)
+ assert_equal @parsed, JSON.parse(@utf_32le_ascii_8bit)
+ end
+
+ def test_generate
+ assert_equal @generated, JSON.generate(@parsed, :ascii_only => true)
+ if defined?(::Encoding)
+ assert_equal @generated, JSON.generate(@utf_16_data, :ascii_only => true)
+ else
+ # XXX checking of correct utf8 data is not as strict (yet?) without :ascii_only
+ assert_raises(JSON::GeneratorError) { JSON.generate(@utf_16_data, :ascii_only => true) }
+ end
+ end
+end
diff --git a/vendor/gems/json-1.5.1/tests/test_json_fixtures.rb b/vendor/gems/json-1.5.1/tests/test_json_fixtures.rb
new file mode 100755
index 000000000..e9df8f5b1
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/test_json_fixtures.rb
@@ -0,0 +1,35 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+require File.join(File.dirname(__FILE__), 'setup_variant')
+
+class TC_JSONFixtures < Test::Unit::TestCase
+ def setup
+ fixtures = File.join(File.dirname(__FILE__), 'fixtures/*.json')
+ passed, failed = Dir[fixtures].partition { |f| f['pass'] }
+ @passed = passed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
+ @failed = failed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
+ end
+
+ def test_passing
+ for name, source in @passed
+ begin
+ assert JSON.parse(source),
+ "Did not pass for fixture '#{name}': #{source.inspect}"
+ rescue => e
+ warn "\nCaught #{e.class}(#{e}) for fixture '#{name}': #{source.inspect}\n#{e.backtrace * "\n"}"
+ raise e
+ end
+ end
+ end
+
+ def test_failing
+ for name, source in @failed
+ assert_raises(JSON::ParserError, JSON::NestingError,
+ "Did not fail for fixture '#{name}': #{source.inspect}") do
+ JSON.parse(source)
+ end
+ end
+ end
+end
diff --git a/vendor/gems/json-1.5.1/tests/test_json_generate.rb b/vendor/gems/json-1.5.1/tests/test_json_generate.rb
new file mode 100755
index 000000000..e6219df0f
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/test_json_generate.rb
@@ -0,0 +1,179 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+require File.join(File.dirname(__FILE__), 'setup_variant')
+
+class TC_JSONGenerate < Test::Unit::TestCase
+ include JSON
+
+ def setup
+ @hash = {
+ 'a' => 2,
+ 'b' => 3.141,
+ 'c' => 'c',
+ 'd' => [ 1, "b", 3.14 ],
+ 'e' => { 'foo' => 'bar' },
+ 'g' => "\"\0\037",
+ 'h' => 1000.0,
+ 'i' => 0.001
+ }
+ @json2 = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},' +
+ '"g":"\\"\\u0000\\u001f","h":1000.0,"i":0.001}'
+ @json3 = <<'EOT'.chomp
+{
+ "a": 2,
+ "b": 3.141,
+ "c": "c",
+ "d": [
+ 1,
+ "b",
+ 3.14
+ ],
+ "e": {
+ "foo": "bar"
+ },
+ "g": "\"\u0000\u001f",
+ "h": 1000.0,
+ "i": 0.001
+}
+EOT
+ end
+
+ def test_generate
+ json = generate(@hash)
+ assert_equal(JSON.parse(@json2), JSON.parse(json))
+ parsed_json = parse(json)
+ assert_equal(@hash, parsed_json)
+ json = generate({1=>2})
+ assert_equal('{"1":2}', json)
+ parsed_json = parse(json)
+ assert_equal({"1"=>2}, parsed_json)
+ assert_raise(GeneratorError) { generate(666) }
+ end
+
+ def test_generate_pretty
+ json = pretty_generate(@hash)
+ assert_equal(JSON.parse(@json3), JSON.parse(json))
+ parsed_json = parse(json)
+ assert_equal(@hash, parsed_json)
+ json = pretty_generate({1=>2})
+ assert_equal(<<'EOT'.chomp, json)
+{
+ "1": 2
+}
+EOT
+ parsed_json = parse(json)
+ assert_equal({"1"=>2}, parsed_json)
+ assert_raise(GeneratorError) { pretty_generate(666) }
+ end
+
+ def test_fast_generate
+ json = fast_generate(@hash)
+ assert_equal(JSON.parse(@json2), JSON.parse(json))
+ parsed_json = parse(json)
+ assert_equal(@hash, parsed_json)
+ json = fast_generate({1=>2})
+ assert_equal('{"1":2}', json)
+ parsed_json = parse(json)
+ assert_equal({"1"=>2}, parsed_json)
+ assert_raise(GeneratorError) { fast_generate(666) }
+ end
+
+
+
+ def test_states
+ json = generate({1=>2}, nil)
+ assert_equal('{"1":2}', json)
+ s = JSON.state.new
+ assert s.check_circular?
+ assert s[:check_circular?]
+ h = { 1=>2 }
+ h[3] = h
+ assert_raises(JSON::NestingError) { generate(h) }
+ assert_raises(JSON::NestingError) { generate(h, s) }
+ s = JSON.state.new
+ a = [ 1, 2 ]
+ a << a
+ assert_raises(JSON::NestingError) { generate(a, s) }
+ assert s.check_circular?
+ assert s[:check_circular?]
+ end
+
+ def test_pretty_state
+ state = PRETTY_STATE_PROTOTYPE.dup
+ assert_equal({
+ :allow_nan => false,
+ :array_nl => "\n",
+ :ascii_only => false,
+ :depth => 0,
+ :indent => " ",
+ :max_nesting => 19,
+ :object_nl => "\n",
+ :space => " ",
+ :space_before => "",
+ }.sort_by { |n,| n.to_s }, state.to_h.sort_by { |n,| n.to_s })
+ end
+
+ def test_safe_state
+ state = SAFE_STATE_PROTOTYPE.dup
+ assert_equal({
+ :allow_nan => false,
+ :array_nl => "",
+ :ascii_only => false,
+ :depth => 0,
+ :indent => "",
+ :max_nesting => 19,
+ :object_nl => "",
+ :space => "",
+ :space_before => "",
+ }.sort_by { |n,| n.to_s }, state.to_h.sort_by { |n,| n.to_s })
+ end
+
+ def test_fast_state
+ state = FAST_STATE_PROTOTYPE.dup
+ assert_equal({
+ :allow_nan => false,
+ :array_nl => "",
+ :ascii_only => false,
+ :depth => 0,
+ :indent => "",
+ :max_nesting => 0,
+ :object_nl => "",
+ :space => "",
+ :space_before => "",
+ }.sort_by { |n,| n.to_s }, state.to_h.sort_by { |n,| n.to_s })
+ end
+
+ def test_allow_nan
+ assert_raises(GeneratorError) { generate([JSON::NaN]) }
+ assert_equal '[NaN]', generate([JSON::NaN], :allow_nan => true)
+ assert_raises(GeneratorError) { fast_generate([JSON::NaN]) }
+ assert_raises(GeneratorError) { pretty_generate([JSON::NaN]) }
+ assert_equal "[\n NaN\n]", pretty_generate([JSON::NaN], :allow_nan => true)
+ assert_raises(GeneratorError) { generate([JSON::Infinity]) }
+ assert_equal '[Infinity]', generate([JSON::Infinity], :allow_nan => true)
+ assert_raises(GeneratorError) { fast_generate([JSON::Infinity]) }
+ assert_raises(GeneratorError) { pretty_generate([JSON::Infinity]) }
+ assert_equal "[\n Infinity\n]", pretty_generate([JSON::Infinity], :allow_nan => true)
+ assert_raises(GeneratorError) { generate([JSON::MinusInfinity]) }
+ assert_equal '[-Infinity]', generate([JSON::MinusInfinity], :allow_nan => true)
+ assert_raises(GeneratorError) { fast_generate([JSON::MinusInfinity]) }
+ assert_raises(GeneratorError) { pretty_generate([JSON::MinusInfinity]) }
+ assert_equal "[\n -Infinity\n]", pretty_generate([JSON::MinusInfinity], :allow_nan => true)
+ end
+
+ def test_depth
+ ary = []; ary << ary
+ assert_equal 0, JSON::SAFE_STATE_PROTOTYPE.depth
+ assert_raises(JSON::NestingError) { JSON.generate(ary) }
+ assert_equal 0, JSON::SAFE_STATE_PROTOTYPE.depth
+ assert_equal 0, JSON::PRETTY_STATE_PROTOTYPE.depth
+ assert_raises(JSON::NestingError) { JSON.pretty_generate(ary) }
+ assert_equal 0, JSON::PRETTY_STATE_PROTOTYPE.depth
+ s = JSON.state.new
+ assert_equal 0, s.depth
+ assert_raises(JSON::NestingError) { ary.to_json(s) }
+ assert_equal 19, s.depth
+ end
+end
diff --git a/vendor/gems/json-1.5.1/tests/test_json_string_matching.rb b/vendor/gems/json-1.5.1/tests/test_json_string_matching.rb
new file mode 100644
index 000000000..df26a68a4
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/test_json_string_matching.rb
@@ -0,0 +1,40 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+require File.join(File.dirname(__FILE__), 'setup_variant')
+require 'stringio'
+require 'time'
+
+class TestJsonStringMatching < Test::Unit::TestCase
+ include JSON
+
+ class TestTime < ::Time
+ def self.json_create(string)
+ Time.parse(string)
+ end
+
+ def to_json(*)
+ %{"#{strftime('%FT%T%z')}"}
+ end
+
+ def ==(other)
+ to_i == other.to_i
+ end
+ end
+
+ def test_match_date
+ t = TestTime.new
+ t_json = [ t ].to_json
+ assert_equal [ t ],
+ JSON.parse(t_json,
+ :match_string => { /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\Z/ => TestTime })
+ assert_equal [ t.strftime('%FT%T%z') ],
+ JSON.parse(t_json,
+ :match_string => { /\A\d{3}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\Z/ => TestTime })
+ assert_equal [ t.strftime('%FT%T%z') ],
+ JSON.parse(t_json,
+ :match_string => { /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\Z/ => TestTime },
+ :create_additions => false)
+ end
+end
diff --git a/vendor/gems/json-1.5.1/tests/test_json_unicode.rb b/vendor/gems/json-1.5.1/tests/test_json_unicode.rb
new file mode 100755
index 000000000..ace56cae3
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tests/test_json_unicode.rb
@@ -0,0 +1,72 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+require File.join(File.dirname(__FILE__), 'setup_variant')
+
+class TC_JSONUnicode < Test::Unit::TestCase
+ include JSON
+
+ def test_unicode
+ assert_equal '""', ''.to_json
+ assert_equal '"\\b"', "\b".to_json
+ assert_equal '"\u0001"', 0x1.chr.to_json
+ assert_equal '"\u001f"', 0x1f.chr.to_json
+ assert_equal '" "', ' '.to_json
+ assert_equal "\"#{0x7f.chr}\"", 0x7f.chr.to_json
+ utf8 = [ "© ≠ €! \01" ]
+ json = '["© ≠ €! \u0001"]'
+ assert_equal json, utf8.to_json(:ascii_only => false)
+ assert_equal utf8, parse(json)
+ json = '["\u00a9 \u2260 \u20ac! \u0001"]'
+ assert_equal json, utf8.to_json(:ascii_only => true)
+ assert_equal utf8, parse(json)
+ utf8 = ["\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212"]
+ json = "[\"\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212\"]"
+ assert_equal utf8, parse(json)
+ assert_equal json, utf8.to_json(:ascii_only => false)
+ utf8 = ["\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212"]
+ assert_equal utf8, parse(json)
+ json = "[\"\\u3042\\u3044\\u3046\\u3048\\u304a\"]"
+ assert_equal json, utf8.to_json(:ascii_only => true)
+ assert_equal utf8, parse(json)
+ utf8 = ['საქართველო']
+ json = '["საქართველო"]'
+ assert_equal json, utf8.to_json(:ascii_only => false)
+ json = "[\"\\u10e1\\u10d0\\u10e5\\u10d0\\u10e0\\u10d7\\u10d5\\u10d4\\u10da\\u10dd\"]"
+ assert_equal json, utf8.to_json(:ascii_only => true)
+ assert_equal utf8, parse(json)
+ assert_equal '["Ã"]', JSON.generate(["Ã"], :ascii_only => false)
+ assert_equal '["\\u00c3"]', JSON.generate(["Ã"], :ascii_only => true)
+ assert_equal ["€"], JSON.parse('["\u20ac"]')
+ utf8 = ["\xf0\xa0\x80\x81"]
+ json = "[\"\xf0\xa0\x80\x81\"]"
+ assert_equal json, JSON.generate(utf8, :ascii_only => false)
+ assert_equal utf8, JSON.parse(json)
+ json = '["\ud840\udc01"]'
+ assert_equal json, JSON.generate(utf8, :ascii_only => true)
+ assert_equal utf8, JSON.parse(json)
+ end
+
+ def test_chars
+ (0..0x7f).each do |i|
+ json = '["\u%04x"]' % i
+ if RUBY_VERSION >= "1.9."
+ i = i.chr
+ end
+ assert_equal i, JSON.parse(json).first[0]
+ if i == ?\b
+ generated = JSON.generate(["" << i])
+ assert '["\b"]' == generated || '["\10"]' == generated
+ elsif [?\n, ?\r, ?\t, ?\f].include?(i)
+ assert_equal '[' << ('' << i).dump << ']', JSON.generate(["" << i])
+ elsif i.chr < 0x20.chr
+ assert_equal json, JSON.generate(["" << i])
+ end
+ end
+ assert_raise(JSON::GeneratorError) do
+ JSON.generate(["\x80"], :ascii_only => true)
+ end
+ assert_equal "\302\200", JSON.parse('["\u0080"]').first
+ end
+end
diff --git a/vendor/gems/json-1.5.1/tools/fuzz.rb b/vendor/gems/json-1.5.1/tools/fuzz.rb
new file mode 100755
index 000000000..4dacd9584
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tools/fuzz.rb
@@ -0,0 +1,139 @@
+require 'json'
+
+require 'iconv'
+ISO_8859_1_TO_UTF8 = Iconv.new('utf-8', 'iso-8859-15')
+class ::String
+ def to_utf8
+ ISO_8859_1_TO_UTF8.iconv self
+ end
+end
+
+class Fuzzer
+ def initialize(n, freqs = {})
+ sum = freqs.inject(0.0) { |s, x| s + x.last }
+ freqs.each_key { |x| freqs[x] /= sum }
+ s = 0.0
+ freqs.each_key do |x|
+ freqs[x] = s .. (s + t = freqs[x])
+ s += t
+ end
+ @freqs = freqs
+ @n = n
+ @alpha = (0..0xff).to_a
+ end
+
+ def random_string
+ s = ''
+ 30.times { s << @alpha[rand(@alpha.size)] }
+ s.to_utf8
+ end
+
+ def pick
+ r = rand
+ found = @freqs.find { |k, f| f.include? rand }
+ found && found.first
+ end
+
+ def make_pick
+ k = pick
+ case
+ when k == Hash, k == Array
+ k.new
+ when k == true, k == false, k == nil
+ k
+ when k == String
+ random_string
+ when k == Fixnum
+ rand(2 ** 30) - 2 ** 29
+ when k == Bignum
+ rand(2 ** 70) - 2 ** 69
+ end
+ end
+
+ def fuzz(current = nil)
+ if @n > 0
+ case current
+ when nil
+ @n -= 1
+ current = fuzz [ Hash, Array ][rand(2)].new
+ when Array
+ while @n > 0
+ @n -= 1
+ current << case p = make_pick
+ when Array, Hash
+ fuzz(p)
+ else
+ p
+ end
+ end
+ when Hash
+ while @n > 0
+ @n -= 1
+ current[random_string] = case p = make_pick
+ when Array, Hash
+ fuzz(p)
+ else
+ p
+ end
+ end
+ end
+ end
+ current
+ end
+end
+
+class MyState < JSON.state
+ WS = " \r\t\n"
+
+ def initialize
+ super(
+ :indent => make_spaces,
+ :space => make_spaces,
+ :space_before => make_spaces,
+ :object_nl => make_spaces,
+ :array_nl => make_spaces,
+ :max_nesting => false
+ )
+ end
+
+ def make_spaces
+ s = ''
+ rand(1).times { s << WS[rand(WS.size)] }
+ s
+ end
+end
+
+n = (ARGV.shift || 500).to_i
+loop do
+ fuzzer = Fuzzer.new(n,
+ Hash => 25,
+ Array => 25,
+ String => 10,
+ Fixnum => 10,
+ Bignum => 10,
+ nil => 5,
+ true => 5,
+ false => 5
+ )
+ o1 = fuzzer.fuzz
+ json = JSON.generate o1, MyState.new
+ if $DEBUG
+ puts "-" * 80
+ puts json, json.size
+ else
+ puts json.size
+ end
+ begin
+ o2 = JSON.parse(json, :max_nesting => false)
+ rescue JSON::ParserError => e
+ puts "Caught #{e.class}: #{e.message}\n#{e.backtrace * "\n"}"
+ puts "o1 = #{o1.inspect}", "json = #{json}", "json_str = #{json.inspect}"
+ puts "locals = #{local_variables.inspect}"
+ exit
+ end
+ if o1 != o2
+ puts "mismatch", "o1 = #{o1.inspect}", "o2 = #{o2.inspect}",
+ "json = #{json}", "json_str = #{json.inspect}"
+ puts "locals = #{local_variables.inspect}"
+ end
+end
diff --git a/vendor/gems/json-1.5.1/tools/server.rb b/vendor/gems/json-1.5.1/tools/server.rb
new file mode 100755
index 000000000..084377fa9
--- /dev/null
+++ b/vendor/gems/json-1.5.1/tools/server.rb
@@ -0,0 +1,61 @@
+#!/usr/bin/env ruby
+
+require 'webrick'
+include WEBrick
+$:.unshift 'ext'
+$:.unshift 'lib'
+require 'json'
+
+class JSONServlet < HTTPServlet::AbstractServlet
+ @@count = 1
+
+ def do_GET(req, res)
+ obj = {
+ "TIME" => Time.now.strftime("%FT%T"),
+ "foo" => "Bär",
+ "bar" => "© ≠ €!",
+ 'a' => 2,
+ 'b' => 3.141,
+ 'COUNT' => @@count += 1,
+ 'c' => 'c',
+ 'd' => [ 1, "b", 3.14 ],
+ 'e' => { 'foo' => 'bar' },
+ 'g' => "松本行弘",
+ 'h' => 1000.0,
+ 'i' => 0.001,
+ 'j' => "\xf0\xa0\x80\x81",
+ }
+ res.body = JSON.generate obj
+ res['Content-Type'] = "application/json"
+ end
+end
+
+def create_server(err, dir, port)
+ dir = File.expand_path(dir)
+ err.puts "Surf to:", "http://#{Socket.gethostname}:#{port}"
+
+ s = HTTPServer.new(
+ :Port => port,
+ :DocumentRoot => dir,
+ :Logger => WEBrick::Log.new(err),
+ :AccessLog => [
+ [ err, WEBrick::AccessLog::COMMON_LOG_FORMAT ],
+ [ err, WEBrick::AccessLog::REFERER_LOG_FORMAT ],
+ [ err, WEBrick::AccessLog::AGENT_LOG_FORMAT ]
+ ]
+ )
+ s.mount("/json", JSONServlet)
+ s
+end
+
+default_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'data'))
+dir = ARGV.shift || default_dir
+port = (ARGV.shift || 6666).to_i
+s = create_server(STDERR, dir, 6666)
+t = Thread.new { s.start }
+trap(:INT) do
+ s.shutdown
+ t.join
+ exit
+end
+sleep