sniffles 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.rvmrc ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
+ # development environment upon cd'ing into the directory
5
+
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
+ # Only full ruby name is supported here, for short names use:
8
+ # echo "rvm use 1.9.3" > .rvmrc
9
+ environment_id="ruby-1.9.3-p125@sniffles"
10
+
11
+ # Uncomment the following lines if you want to verify rvm version per project
12
+ # rvmrc_rvm_version="1.10.2" # 1.10.1 seams as a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
+ # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
+ # return 1
16
+ # }
17
+
18
+ # First we attempt to load the desired environment directly from the environment
19
+ # file. This is very fast and efficient compared to running through the entire
20
+ # CLI and selector. If you want feedback on which environment was used then
21
+ # insert the word 'use' after --create as this triggers verbose mode.
22
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
23
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
24
+ then
25
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
26
+ [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
27
+ \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
28
+ else
29
+ # If the environment file has not yet been created, use the RVM CLI to select.
30
+ rvm --create "$environment_id" || {
31
+ echo "Failed to create RVM environment '${environment_id}'."
32
+ return 1
33
+ }
34
+ fi
35
+
36
+ # If you use bundler, this might be useful to you:
37
+ # if [[ -s Gemfile ]] && {
38
+ # ! builtin command -v bundle >/dev/null ||
39
+ # builtin command -v bundle | grep $rvm_path/bin/bundle >/dev/null
40
+ # }
41
+ # then
42
+ # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
43
+ # gem install bundler
44
+ # fi
45
+ # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
46
+ # then
47
+ # bundle install | grep -vE '^Using|Your bundle is complete'
48
+ # fi
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sniffles.gemspec
4
+ gemspec
5
+
6
+ group :development, :test do
7
+ gem 'guard-rspec'
8
+ end
9
+
10
+ group :test do
11
+ gem 'rake'
12
+ end
13
+
14
+ require 'rbconfig'
15
+
16
+ if RbConfig::CONFIG['target_os'] =~ /darwin/i
17
+ gem 'growl', :require => false
18
+ end
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ guard 'rspec', :version => 2 do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Ezekiel Templin
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # Sniffles
2
+ !["Travis Build Status"](https://secure.travis-ci.org/ezkl/sniffles.png?branch=master)
3
+
4
+ ## Description
5
+ Sniffles parses HTML pages and searches for common patterns suggesting a page is using popular CMS, CSS, and JS libraries.
6
+
7
+ **Work in Progress!**
8
+
9
+ ## Installation
10
+ Rubygems:
11
+
12
+ `gem install sniffles`
13
+
14
+ Bundler:
15
+
16
+ `gem 'sniffles'`
17
+
18
+ ## Usage
19
+ require 'sniffles'
20
+ require 'typhoeus' # Optional: Use your favorite HTTP client.
21
+
22
+ response = Typhoeus::Request.get("http://www.wordpress.com/")
23
+ Sniffles.sniff(response.body) # => {wordpress: true, jquery: true, quantcast: true}
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task :default => :spec
@@ -0,0 +1,3 @@
1
+ module Sniffles
2
+ VERSION = "0.0.1"
3
+ end
data/lib/sniffles.rb ADDED
@@ -0,0 +1,26 @@
1
+ require 'nokogiri'
2
+
3
+ require "sniffles/version"
4
+
5
+ module Sniffles
6
+ def self.sniff(html)
7
+ output = {}
8
+ output[:wordpress] = true if wordpress?(html)
9
+ output[:jquery] = true if jquery?(html)
10
+ output[:quantcast] = true if quantcast?(html)
11
+
12
+ output
13
+ end
14
+
15
+ def self.wordpress?(html)
16
+ !!(html =~ /wp-content/i)
17
+ end
18
+
19
+ def self.jquery?(html)
20
+ !!(html =~ /jQuery/)
21
+ end
22
+
23
+ def self.quantcast?(html)
24
+ !!(html =~ /\.quantserve\.com\/quant\.js/)
25
+ end
26
+ end
data/sniffles.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/sniffles/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Ezekiel Templin"]
6
+ gem.email = ["zeke@templ.in"]
7
+ gem.description = %q{Detects popular CMS, Javascript libraries, and other items of interest.}
8
+ gem.summary = %q{Sniffles helps you determine the platforms and libraries a website is running.}
9
+ gem.homepage = "http://documentup.com/ezkl/sniffles"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "sniffles"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Sniffles::VERSION
17
+
18
+ gem.add_runtime_dependency("nokogiri", "~> 1.5.0")
19
+
20
+ gem.add_development_dependency("rspec", "~> 2.8.0")
21
+ gem.add_development_dependency("typhoeus", "~> 0.3.3")
22
+ gem.add_development_dependency("vcr", "2.0.0.rc2")
23
+ end
@@ -0,0 +1,900 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.wordpress.com/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: !binary |-
14
+ TW92ZWQgUGVybWFuZW50bHk=
15
+ headers:
16
+ !binary "U2VydmVy":
17
+ - !binary |-
18
+ bmdpbng=
19
+ - !binary |-
20
+ bmdpbng=
21
+ !binary "RGF0ZQ==":
22
+ - !binary |-
23
+ VHVlLCAyOCBGZWIgMjAxMiAyMDoxNTozMiBHTVQ=
24
+ - !binary |-
25
+ VHVlLCAyOCBGZWIgMjAxMiAyMDoxNTozMiBHTVQ=
26
+ !binary "Q29udGVudC1UeXBl":
27
+ - !binary |-
28
+ dGV4dC9odG1s
29
+ - !binary |-
30
+ dGV4dC9odG1sOyBjaGFyc2V0PVVURi04
31
+ !binary "Q29ubmVjdGlvbg==":
32
+ - !binary |-
33
+ Y2xvc2U=
34
+ - !binary |-
35
+ Y2xvc2U=
36
+ !binary "Q29udGVudC1MZW5ndGg=":
37
+ - !binary |-
38
+ MTc4
39
+ !binary "TG9jYXRpb24=":
40
+ - !binary |-
41
+ aHR0cDovL3dvcmRwcmVzcy5jb20v
42
+ !binary "VHJhbnNmZXItRW5jb2Rpbmc=":
43
+ - !binary |-
44
+ Y2h1bmtlZA==
45
+ !binary "VmFyeQ==":
46
+ - !binary |-
47
+ QWNjZXB0LUVuY29kaW5n
48
+ - !binary |-
49
+ Q29va2ll
50
+ !binary "TGFzdC1Nb2RpZmllZA==":
51
+ - !binary |-
52
+ VHVlLCAyOCBGZWIgMjAxMiAyMDoxMzoxNCArMDAwMA==
53
+ !binary "Q2FjaGUtQ29udHJvbA==":
54
+ - !binary |-
55
+ bWF4LWFnZT0xNjIsIG11c3QtcmV2YWxpZGF0ZQ==
56
+ !binary "WC1IYWNrZXI=":
57
+ - !binary |-
58
+ SWYgeW91J3JlIHJlYWRpbmcgdGhpcywgeW91IHNob3VsZCB2aXNpdCBhdXRv
59
+ bWF0dGljLmNvbS9qb2JzIGFuZCBhcHBseSB0byBqb2luIHRoZSBmdW4sIG1l
60
+ bnRpb24gdGhpcyBoZWFkZXIu
61
+ !binary "WC1QaW5nYmFjaw==":
62
+ - !binary |-
63
+ aHR0cDovL3dvcmRwcmVzcy5jb20veG1scnBjLnBocA==
64
+ !binary "TGluaw==":
65
+ - !binary |-
66
+ PGh0dHA6Ly93cC5tZS8xPjsgcmVsPXNob3J0bGluaw==
67
+ !binary "WC1OYW5hbmFuYQ==":
68
+ - !binary |-
69
+ QmF0Y2FjaGU=
70
+ !binary "Q29udGVudC1FbmNvZGluZw==":
71
+ - !binary |-
72
+ Z3ppcA==
73
+ body:
74
+ encoding: ASCII-8BIT
75
+ string: !binary |-
76
+ PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAg
77
+ VHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1s
78
+ MS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8aHRtbCB4bWxucz0i
79
+ aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgZGlyPSJsdHIiIGxhbmc9
80
+ ImVuIj48IS0tCglnZW5lcmF0ZWQgMTM4IHNlY29uZHMgYWdvCglnZW5lcmF0
81
+ ZWQgaW4gMC4yOTAgc2Vjb25kcwoJc2VydmVkIGZyb20gYmF0Y2FjaGUgaW4g
82
+ MC4wMDYgc2Vjb25kcwoJZXhwaXJlcyBpbiAxNjIgc2Vjb25kcwotLT4KPGhl
83
+ YWQgcHJvZmlsZT0iaHR0cDovL2dtcGcub3JnL3hmbi8xMSI+CjxtZXRhIGh0
84
+ dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBj
85
+ aGFyc2V0PVVURi04IiAvPgoKCTx0aXRsZT5Xb3JkUHJlc3MuY29tICYjODIx
86
+ MjsgR2V0IGEgRnJlZSBCbG9nIEhlcmU8L3RpdGxlPgoKCgk8bGluayByZWw9
87
+ ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9
88
+ IldvcmRQcmVzcy5jb20gTmV3cyIgaHJlZj0iaHR0cDovL2VuLmJsb2cud29y
89
+ ZHByZXNzLmNvbS9mZWVkLyIgLz4KCTxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0
90
+ eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0iV29yZFByZXNzLmNv
91
+ bSBGcmVzaGx5IFByZXNzZWQiIGhyZWY9Imh0dHA6Ly9mcmVzaGx5cHJlc3Nl
92
+ ZC53b3JkcHJlc3MuY29tL2ZlZWQvIiAvPgo8bGluayByZWw9ImFsdGVybmF0
93
+ ZSIgdHlwZT0idGV4dC9odG1sIiBocmVmbGFuZz0iZXMiIHRpdGxlPSJFc3Bh
94
+ JiMyNDE7b2wiIGhyZWY9Imh0dHA6Ly9lcy53b3JkcHJlc3MuY29tLyIgLz4K
95
+ PGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9InRleHQvaHRtbCIgaHJlZmxh
96
+ bmc9ImRlIiB0aXRsZT0iRGV1dHNjaCIgaHJlZj0iaHR0cDovL2RlLndvcmRw
97
+ cmVzcy5jb20vIiAvPgo8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0idGV4
98
+ dC9odG1sIiBocmVmbGFuZz0icHQtYnIiIHRpdGxlPSJQb3J0dWd1JiMyMzQ7
99
+ cyBkbyBCcmFzaWwiIGhyZWY9Imh0dHA6Ly9wdC1ici53b3JkcHJlc3MuY29t
100
+ LyIgLz4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9InRleHQvaHRtbCIg
101
+ aHJlZmxhbmc9ImlkIiB0aXRsZT0iQmFoYXNhIEluZG9uZXNpYSIgaHJlZj0i
102
+ aHR0cDovL2lkLndvcmRwcmVzcy5jb20vIiAvPgo8bGluayByZWw9ImFsdGVy
103
+ bmF0ZSIgdHlwZT0idGV4dC9odG1sIiBocmVmbGFuZz0iZnIiIHRpdGxlPSJG
104
+ cmFuJiMyMzE7YWlzIiBocmVmPSJodHRwOi8vZnIud29yZHByZXNzLmNvbS8i
105
+ IC8+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJ0ZXh0L2h0bWwiIGhy
106
+ ZWZsYW5nPSJpdCIgdGl0bGU9Ikl0YWxpYW5vIiBocmVmPSJodHRwOi8vaXQu
107
+ d29yZHByZXNzLmNvbS8iIC8+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBl
108
+ PSJ0ZXh0L2h0bWwiIGhyZWZsYW5nPSJ0ciIgdGl0bGU9IlQmIzI1MjtyayYj
109
+ MjMxO2UiIGhyZWY9Imh0dHA6Ly90ci53b3JkcHJlc3MuY29tLyIgLz4KPGxp
110
+ bmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9InRleHQvaHRtbCIgaHJlZmxhbmc9
111
+ InB0IiB0aXRsZT0iUG9ydHVndSYjMjM0O3MiIGhyZWY9Imh0dHA6Ly9wdC53
112
+ b3JkcHJlc3MuY29tLyIgLz4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9
113
+ InRleHQvaHRtbCIgaHJlZmxhbmc9Im5sIiB0aXRsZT0iTmVkZXJsYW5kcyIg
114
+ aHJlZj0iaHR0cDovL25sLndvcmRwcmVzcy5jb20vIiAvPjxtZXRhIHhtbG5z
115
+ OmZiPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS8yMDA4L2ZibWwiIHByb3Bl
116
+ cnR5PSJmYjpwYWdlX2lkIiBjb250ZW50PSIxMzQwOTg5MTM5NzkiIC8+Cjxt
117
+ ZXRhIHhtbG5zOmZiPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS8yMDA4L2Zi
118
+ bWwiIHByb3BlcnR5PSJmYjphcHBfaWQiIGNvbnRlbnQ9IjI0OTY0MzMxMTQ5
119
+ MCIgLz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIg
120
+ aHJlZj0iaHR0cDovL3MyLndwLmNvbS93cC1jb250ZW50L3RoZW1lcy9oNC9z
121
+ dHlsZS5jc3M/bT0xMzMwMDQxMjEyZyZhbXA7NSIgbWVkaWE9InNjcmVlbiIg
122
+ Lz4KPCEtLVtpZiBsdCBJRSA3XT4KPGxpbmsgaHJlZj0iaHR0cDovL3MyLndw
123
+ LmNvbS93cC1jb250ZW50L3RoZW1lcy9oNC9pZTYuY3NzP209MTM0NzMwNTE4
124
+ M2ciIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJz
125
+ Y3JlZW4iIC8+CjwhW2VuZGlmXS0tPgo8IS0tW2lmIGx0IElFIDhdPgoJPHN0
126
+ eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4jZnJvbnQtcGFn
127
+ ZSB1bCN0b3BuYXYsLmxvZ2dlZGluIHVsI3RvcG5hdnt3aWR0aDo1MjVweH11
128
+ bCN0b3BuYXYgbGl7ZGlzcGxheTppbmxpbmV9PC9zdHlsZT4KPCFbZW5kaWZd
129
+ LS0+CjxsaW5rIHJlbD0ic2VhcmNoIiB0eXBlPSJhcHBsaWNhdGlvbi9vcGVu
130
+ c2VhcmNoZGVzY3JpcHRpb24reG1sIiBocmVmPSJodHRwOi8vZW4uc2VhcmNo
131
+ LndvcmRwcmVzcy5jb20vb3BlbnNlYXJjaC54bWwiIHRpdGxlPSJXb3JkUHJl
132
+ c3MuY29tIiAvPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8q
133
+ IDwhW0NEQVRBWyAqLwpmdW5jdGlvbiBhZGRMb2FkRXZlbnQoZnVuYyl7dmFy
134
+ IG9sZG9ubG9hZD13aW5kb3cub25sb2FkO2lmKHR5cGVvZiB3aW5kb3cub25s
135
+ b2FkIT0nZnVuY3Rpb24nKXt3aW5kb3cub25sb2FkPWZ1bmM7fWVsc2V7d2lu
136
+ ZG93Lm9ubG9hZD1mdW5jdGlvbigpe29sZG9ubG9hZCgpO2Z1bmMoKTt9fX0K
137
+ LyogXV0+ICovCjwvc2NyaXB0Pgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
138
+ ZWY9Imh0dHA6Ly9zMC53cC5jb20vd3AtY29udGVudC90aGVtZXMvaDQvZ2xv
139
+ YmFsLmNzcz9tPTEzNTI0MDg0OTRnIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KPGxp
140
+ bmsgcmVsPSdzdHlsZXNoZWV0JyBpZD0ncG9zdC1yZWFjdGlvbnMtY3NzJyAg
141
+ aHJlZj0naHR0cDovL3MyLndwLmNvbS93cC1jb250ZW50L211LXBsdWdpbnMv
142
+ cG9zdC1mbGFpci9zdHlsZS5jc3M/bT0xMzU0NDc0Mzk5ZyYjMDM4O3Zlcj0z
143
+ JyB0eXBlPSd0ZXh0L2NzcycgbWVkaWE9J2FsbCcgLz4KPHNjcmlwdCB0eXBl
144
+ PSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3MwLndwLmNvbS93cC1p
145
+ bmNsdWRlcy9qcy9qcXVlcnkvanF1ZXJ5LmpzP209MTM1MjY1MzE1N2cmIzAz
146
+ ODt2ZXI9MS43LjEnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2
147
+ YXNjcmlwdCcgc3JjPSdodHRwOi8vczIud3AuY29tL3dwLWNvbnRlbnQvdGhl
148
+ bWVzL2g0L2pzL3NjcmlwdHMuanM/bT0xMzUyNjc1NTUwZyYjMDM4O3Zlcj0z
149
+ LjQtYWxwaGEtMTk5MDQnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQv
150
+ amF2YXNjcmlwdCc+Ci8qIDwhW0NEQVRBWyAqLwp2YXIga21fZGF0YSA9IHsi
151
+ ZXZlbnRfbmFtZSI6InZpZXdlZCBob21lcGFnZSJ9OwovKiBdXT4gKi8KPC9z
152
+ Y3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0
153
+ dHA6Ly9zMi53cC5jb20vd3AtY29udGVudC90aGVtZXMvaDQvanMva2lzc21l
154
+ dHJpY3MuanM/bT0xMzU0Mzk5NDM5ZyYjMDM4O3Zlcj0zLjQtYWxwaGEtMTk5
155
+ MDQnPjwvc2NyaXB0Pgo8bGluayByZWw9IkVkaXRVUkkiIHR5cGU9ImFwcGxp
156
+ Y2F0aW9uL3JzZCt4bWwiIHRpdGxlPSJSU0QiIGhyZWY9Imh0dHA6Ly93b3Jk
157
+ cHJlc3MuY29tL3htbHJwYy5waHA/cnNkIiAvPgo8bGluayByZWw9Indsd21h
158
+ bmlmZXN0IiB0eXBlPSJhcHBsaWNhdGlvbi93bHdtYW5pZmVzdCt4bWwiIGhy
159
+ ZWY9Imh0dHA6Ly93b3JkcHJlc3MuY29tL3dwLWluY2x1ZGVzL3dsd21hbmlm
160
+ ZXN0LnhtbCIgLz4gCjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0i
161
+ V29yZFByZXNzLmNvbSIgLz4KPGxpbmsgcmVsPSdzaG9ydGxpbmsnIGhyZWY9
162
+ J2h0dHA6Ly93cC5tZS8xJyAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIg
163
+ Y29udGVudD0iYmxvZyIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBj
164
+ b250ZW50PSJXb3JkUHJlc3MuY29tIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6
165
+ dXJsIiBjb250ZW50PSJodHRwOi8vd29yZHByZXNzLmNvbSIgLz4KPG1ldGEg
166
+ cHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJZb3VyIEJsb2dn
167
+ aW5nIEhvbWUiIC8+CjxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNv
168
+ bnRlbnQ9IldvcmRQcmVzcy5jb20iIC8+CjxtZXRhIHByb3BlcnR5PSJvZzpp
169
+ bWFnZSIgY29udGVudD0iaHR0cDovLzAuZ3JhdmF0YXIuY29tL2JsYXZhdGFy
170
+ LzY1MzE2Njc3M2RjODgxMjdiZDNhZmUwYjZkZmU1ZWE3P3M9MzAwIiAvPgo8
171
+ bGluayByZWw9J29wZW5pZC5zZXJ2ZXInIGhyZWY9J2h0dHA6Ly93b3JkcHJl
172
+ c3MuY29tLz9vcGVuaWRzZXJ2ZXI9MScgLz4KPGxpbmsgcmVsPSdvcGVuaWQu
173
+ ZGVsZWdhdGUnIGhyZWY9J2h0dHA6Ly93b3JkcHJlc3MuY29tLycgLz4KPGxp
174
+ bmsgcmVsPSJzZWFyY2giIHR5cGU9ImFwcGxpY2F0aW9uL29wZW5zZWFyY2hk
175
+ ZXNjcmlwdGlvbit4bWwiIGhyZWY9Imh0dHA6Ly93b3JkcHJlc3MuY29tL29z
176
+ ZC54bWwiIHRpdGxlPSJXb3JkUHJlc3MuY29tIiAvPgo8bGluayByZWw9InNl
177
+ YXJjaCIgdHlwZT0iYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9u
178
+ K3htbCIgaHJlZj0iaHR0cDovL3dvcmRwcmVzcy5jb20vb3BlbnNlYXJjaC54
179
+ bWwiIHRpdGxlPSJXb3JkUHJlc3MuY29tIiAvPgoJPHN0eWxlIHR5cGU9InRl
180
+ eHQvY3NzIj4KCS8qIDwhW0NEQVRBWyAqLwoJCQkvKiBdXT4gKi8KCTwvc3R5
181
+ bGU+Cgk8bGluayByZWw9InNob3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3Zu
182
+ ZC5taWNyb3NvZnQuaWNvbiIgaHJlZj0iaHR0cDovL3MxLndwLmNvbS9pL2Zh
183
+ dmljb24tc3RhY2tlZC5pY28/bT0xMzExOTc2MDIzZyIgc2l6ZXM9IjE2eDE2
184
+ IDMyeDMyIDQ4eDQ4IiAvPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIHR5
185
+ cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iaHR0cDovL3MyLndwLmNvbS9pL2Zh
186
+ dmljb24uaWNvP209MTMxMTk3NjAyM2ciIHNpemVzPSIxNngxNiIgLz4KPGxp
187
+ bmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9Imh0dHA6
188
+ Ly9zMi53cC5jb20vaS9mYXZpY29uLmljbz9tPTEzMTE5NzYwMjNnIiBzaXpl
189
+ cz0iMTZ4MTYiIC8+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbi1wcmVj
190
+ b21wb3NlZCIgdHlwZT0iaW1hZ2UvcG5nIiBocmVmPSJodHRwOi8vMC5ncmF2
191
+ YXRhci5jb20vYmxhdmF0YXIvNjUzMTY2NzczZGM4ODEyN2JkM2FmZTBiNmRm
192
+ ZTVlYTc/cz0xMTQmIzAzODtkPWh0dHAlM0ElMkYlMkZzMC53cC5jb20lMkZp
193
+ JTJGd2ViY2xpcC5wbmciIHNpemVzPSIxMTR4MTE0IiAvPgoJPHN0eWxlIHR5
194
+ cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KCQkvKiBtb2JpbGUgKi8K
195
+ CQkJPC9zdHlsZT4KCTxtZXRhIG5hbWU9ImFwcGxpY2F0aW9uLW5hbWUiIGNv
196
+ bnRlbnQ9IldvcmRQcmVzcy5jb20iIC8+PG1ldGEgbmFtZT0ibXNhcHBsaWNh
197
+ dGlvbi13aW5kb3ciIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aDtoZWln
198
+ aHQ9ZGV2aWNlLWhlaWdodCIgLz48bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9u
199
+ LXRvb2x0aXAiIGNvbnRlbnQ9IllvdXIgQmxvZ2dpbmcgSG9tZSIgLz48bWV0
200
+ YSBuYW1lPSJtc2FwcGxpY2F0aW9uLXRhc2siIGNvbnRlbnQ9Im5hbWU9U3Vi
201
+ c2NyaWJlO2FjdGlvbi11cmk9aHR0cDovL3dvcmRwcmVzcy5jb20vZmVlZC87
202
+ aWNvbi11cmk9aHR0cDovLzAuZ3JhdmF0YXIuY29tL2JsYXZhdGFyLzRlMjFk
203
+ NzAzZDgxODA5ZDIxNWNlYWFiYmYwN2VmYmM2P3M9MTYiIC8+PG1ldGEgbmFt
204
+ ZT0ibXNhcHBsaWNhdGlvbi10YXNrIiBjb250ZW50PSJuYW1lPVNpZ24gdXAg
205
+ Zm9yIGEgZnJlZSBibG9nO2FjdGlvbi11cmk9aHR0cDovL3dvcmRwcmVzcy5j
206
+ b20vc2lnbnVwLztpY29uLXVyaT1odHRwOi8vczIud3AuY29tL2kvZmF2aWNv
207
+ bi5pY28iIC8+PG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi10YXNrIiBjb250
208
+ ZW50PSJuYW1lPVdvcmRQcmVzcy5jb20gU3VwcG9ydDthY3Rpb24tdXJpPWh0
209
+ dHA6Ly9zdXBwb3J0LndvcmRwcmVzcy5jb20vO2ljb24tdXJpPWh0dHA6Ly9z
210
+ Mi53cC5jb20vaS9mYXZpY29uLmljbyIgLz48bWV0YSBuYW1lPSJtc2FwcGxp
211
+ Y2F0aW9uLXRhc2siIGNvbnRlbnQ9Im5hbWU9V29yZFByZXNzLmNvbSBGb3J1
212
+ bXM7YWN0aW9uLXVyaT1odHRwOi8vZm9ydW1zLndvcmRwcmVzcy5jb20vO2lj
213
+ b24tdXJpPWh0dHA6Ly9zMi53cC5jb20vaS9mYXZpY29uLmljbyIgLz48c2Ny
214
+ aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CjwhLS0KZnVuY3Rpb24gZ290
215
+ b0Z1bmN0aW9uKCkgeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICBkb2N1bWVu
216
+ dC5sYW5ndWFnZS5sYW5ndWFnZXNlbC5vcHRpb25zW2RvY3VtZW50Lmxhbmd1
217
+ YWdlLmxhbmd1YWdlc2VsLnNlbGVjdGVkSW5kZXhdLnZhbHVlOyB9Ci8vIC0t
218
+ Pgo8L3NjcmlwdD4KCjxsaW5rIHJlbD0iZmx1aWQtaWNvbiIgaHJlZj0iaHR0
219
+ cDovL3dvcmRwcmVzcy5jb20vd3AtY29udGVudC90aGVtZXMvaDQvaS9mbHVp
220
+ ZGljb24ucG5nP209MTMyNjM0NjQyN2ciIHRpdGxlPSJXb3JkUHJlc3MuY29t
221
+ IiAvPgo8L2hlYWQ+Cgo8Ym9keSBpZD0iaDRob21lIj4KCgoJPHNjcmlwdCB0
222
+ eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KCXZhciBX
223
+ UENPTURvTG9naW5Gb3JtID0gZnVuY3Rpb24oKSB7CgkJalF1ZXJ5KCAnLmxv
224
+ Z2luLWZvcm0nICkuZWFjaCggZnVuY3Rpb24oKSB7CgkJCXZhciBsRm9ybSA9
225
+ IHRoaXM7CgoJCQkvLyBpbml0IGZpZWxkcwoJCQlpZihqUXVlcnkoJy51c2Vy
226
+ LWxvZ2luLWlucHV0JywgbEZvcm0pLnZhbCgpICE9PSAnJykKCQkJCWpRdWVy
227
+ eSgnLnVzZXJsb2dpbi1sYWJlbCBzcGFuJywgbEZvcm0pLmhpZGUoKTsKCgkJ
228
+ CWlmKGpRdWVyeSgnLnVzZXItcGFzcy1pbnB1dCcsIGxGb3JtKS52YWwoKSAh
229
+ PSAgJycpCgkJCQlqUXVlcnkoJy5wYXNzd29yZC1sYWJlbCBzcGFuJywgbEZv
230
+ cm0pLmhpZGUoKTsKCgkJCS8vIG9uIGZvY3VzCgkJCWpRdWVyeSgnLnVzZXJs
231
+ b2dpbi1sYWJlbCBpbnB1dCcsIGxGb3JtKS5mb2N1cyhmdW5jdGlvbigpIHsK
232
+ CQkJCWpRdWVyeSgnLnVzZXJsb2dpbi1sYWJlbCBzcGFuJywgbEZvcm0pLmZh
233
+ ZGVUbygxMDAsIDAuNSk7CgoJCQkJaWYoalF1ZXJ5KCcudXNlci1sb2dpbi1p
234
+ bnB1dCcsIGxGb3JtKS52YWwoKSAhPT0gJycpCgkJCQlqUXVlcnkoJy51c2Vy
235
+ bG9naW4tbGFiZWwgc3BhbicsIGxGb3JtKS5oaWRlKCk7CgoJCQkJaWYoalF1
236
+ ZXJ5KCcudXNlci1wYXNzLWlucHV0JywgbEZvcm0pLnZhbCgpICE9ICAnJykK
237
+ CQkJCWpRdWVyeSgnLnBhc3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuaGlk
238
+ ZSgpOwoKCQkJfSk7CgoJCQlqUXVlcnkoJy5wYXNzd29yZC1sYWJlbCBpbnB1
239
+ dCcsIGxGb3JtKS5mb2N1cyhmdW5jdGlvbigpIHsKCQkJCWpRdWVyeSgnLnBh
240
+ c3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuZmFkZVRvKDEwMCwgMC41KTsK
241
+ CgkJCQlpZihqUXVlcnkoJy51c2VyLXBhc3MtaW5wdXQnLCBsRm9ybSkudmFs
242
+ KCkgIT09ICAnJykKCQkJCWpRdWVyeSgnLnBhc3N3b3JkLWxhYmVsIHNwYW4n
243
+ LCBsRm9ybSkuaGlkZSgpOwoJCQl9KTsKCgkJCS8vb24ga2V5ZG93bgoJCQlq
244
+ UXVlcnkoJy51c2VybG9naW4tbGFiZWwgaW5wdXQnLCBsRm9ybSkua2V5ZG93
245
+ bihmdW5jdGlvbigpIHsKIMKgIMKgCQkJCWlmKGpRdWVyeSgnLnVzZXJsb2dp
246
+ bi1sYWJlbCBzcGFuJywgbEZvcm0pLmlzKCc6dmlzaWJsZScpICkKIMKgIMKg
247
+ CQkJCWpRdWVyeSgnLnVzZXJsb2dpbi1sYWJlbCBzcGFuJywgbEZvcm0pLmhp
248
+ ZGUoKTsKIMKgIAkJCX0pOwoKCQkJalF1ZXJ5KCcucGFzc3dvcmQtbGFiZWwg
249
+ aW5wdXQnLCBsRm9ybSkua2V5ZG93bihmdW5jdGlvbigpIHsKCQkJCWlmKGpR
250
+ dWVyeSgnLnBhc3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuaXMoJzp2aXNp
251
+ YmxlJykgKQoJCQkJalF1ZXJ5KCcucGFzc3dvcmQtbGFiZWwgc3BhbicsIGxG
252
+ b3JtKS5oaWRlKCk7CgkJCX0pOwoKCQkJLy9vbiBjbGljawoJCQlqUXVlcnko
253
+ Jy5wYXNzd29yZC1sYWJlbCcsIGxGb3JtKS5jbGljayhmdW5jdGlvbigpIHsK
254
+ CQkJCWpRdWVyeSgnLnVzZXItcGFzcy1pbnB1dCcsIGxGb3JtKS50cmlnZ2Vy
255
+ KCdmb2N1cycpOwoJCQkJalF1ZXJ5KCcucGFzc3dvcmQtbGFiZWwgc3Bhbics
256
+ IGxGb3JtKS5oaWRlKCk7CgkJCX0pOwoJCQlqUXVlcnkoJy51c2VybG9naW4t
257
+ bGFiZWwnLCBsRm9ybSkuY2xpY2soZnVuY3Rpb24oKSB7CgkJCQlqUXVlcnko
258
+ Jy51c2VyLWxvZ2luLWlucHV0JywgbEZvcm0pLnRyaWdnZXIoJ2ZvY3VzJyk7
259
+ CgkJCQlqUXVlcnkoJy51c2VybG9naW4tbGFiZWwgc3BhbicsIGxGb3JtKS5o
260
+ aWRlKCk7CgkJCX0pOwoKCQkJLy9vbiBibHVyCgkJCWpRdWVyeSgnLnVzZXIt
261
+ bG9naW4taW5wdXQnLCBsRm9ybSkuYmx1cihmdW5jdGlvbigpIHsKCQkJCWlm
262
+ KCBqUXVlcnkoJy51c2VyLWxvZ2luLWlucHV0JywgbEZvcm0pLnZhbCgpID09
263
+ ICAnJykgewoJCQkJCWpRdWVyeSgnLnVzZXJsb2dpbi1sYWJlbCBzcGFuJywg
264
+ bEZvcm0pLnNob3coKTsKCQkJCQlqUXVlcnkoJy51c2VybG9naW4tbGFiZWwg
265
+ c3BhbicsIGxGb3JtKS5mYWRlVG8oMTAwLCAxKTsKCQkJCX0KCQkJCWlmKGpR
266
+ dWVyeSgnLnVzZXItbG9naW4taW5wdXQnLCBsRm9ybSkudmFsKCkgIT09ICcn
267
+ KQoJCQkJalF1ZXJ5KCcudXNlcmxvZ2luLWxhYmVsIHNwYW4nLCBsRm9ybSku
268
+ aGlkZSgpOwoJCQl9KTsKCQkJalF1ZXJ5KCcudXNlci1wYXNzLWlucHV0Jywg
269
+ bEZvcm0pLmJsdXIoZnVuY3Rpb24oKSB7CgkJCQlpZiggalF1ZXJ5KCcudXNl
270
+ ci1wYXNzLWlucHV0JywgbEZvcm0pLnZhbCgpID09ICAnJykgewoJCQkJCWpR
271
+ dWVyeSgnLnBhc3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuc2hvdygpOwoJ
272
+ CQkJCWpRdWVyeSgnLnBhc3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuZmFk
273
+ ZVRvKDEwMCwgMSk7CgkJCQl9CgkJCQlpZihqUXVlcnkoJy51c2VyLXBhc3Mt
274
+ aW5wdXQnLCBsRm9ybSkudmFsKCkgIT09ICAnJykKCQkJCWpRdWVyeSgnLnBh
275
+ c3N3b3JkLWxhYmVsIHNwYW4nLCBsRm9ybSkuaGlkZSgpOwoJCQl9KTsKCgkJ
276
+ fSk7Cgl9OwoJalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewoJ
277
+ CWlmICggISAoICdwbGFjZWhvbGRlcicgaW4gZG9jdW1lbnQuY3JlYXRlRWxl
278
+ bWVudCggJ2lucHV0JyApICkgKSB7CgkJCWpRdWVyeSgnLnVzZXItbG9naW4t
279
+ aW5wdXQnKS5iZWZvcmUoIjxzcGFuPiIgKyBqUXVlcnkoJy51c2VyLWxvZ2lu
280
+ LWlucHV0JykuYXR0cigncGxhY2Vob2xkZXInKSArICI8L3NwYW4+Iik7CgkJ
281
+ CWpRdWVyeSgnLnVzZXItcGFzcy1pbnB1dCcpLmJlZm9yZSgiPHNwYW4+IiAr
282
+ IGpRdWVyeSgnLnVzZXItcGFzcy1pbnB1dCcpLmF0dHIoJ3BsYWNlaG9sZGVy
283
+ JykgKyAiPC9zcGFuPiIpOwoJCQl2YXIgbG9naW5JbnB1dHMgPSBqUXVlcnko
284
+ Jy51c2VyLWxvZ2luLWlucHV0LCAudXNlci1wYXNzLWlucHV0JykuYmluZCgg
285
+ J2NoYW5nZS53cGNvbWRvbG9naW4nLCBmdW5jdGlvbigpIHsgV1BDT01Eb0xv
286
+ Z2luRm9ybSgpOyB9ICk7CgkJCXNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeyBs
287
+ b2dpbklucHV0cy51bmJpbmQoICcud3Bjb21kb2xvZ2luJyApOyBXUENPTURv
288
+ TG9naW5Gb3JtKCk7IH0sIDIwMCApOwoJCX0KCX0gKTsKCTwvc2NyaXB0Pgo8
289
+ IS0tIGdvb2dsZV9hZF9zZWN0aW9uX3N0YXJ0KHdlaWdodD1pZ25vcmUpIC0t
290
+ Pgo8ZGl2IGlkPSJhZG1pbmJhciI+Cgk8Zm9ybSBuYW1lPSJsb2dpbmZvcm0i
291
+ IGNsYXNzPSJsb2dpbi1mb3JtIiBpZD0iYWRtaW5iYXJsb2dpbiIgYWN0aW9u
292
+ PSJodHRwczovL2VuLndvcmRwcmVzcy5jb20vd3AtbG9naW4ucGhwIiBtZXRo
293
+ b2Q9InBvc3QiPgoJPGxhYmVsIGNsYXNzPSJsb2dpbiB1c2VybG9naW4tbGFi
294
+ ZWwiIGlkPSJ1c2VybG9naW5fbGFiZWwiPjxpbnB1dCBjbGFzcz0iYWRtaW5i
295
+ YXItaW5wdXQgdXNlci1sb2dpbi1pbnB1dCIgdHlwZT0idGV4dCIgbmFtZT0i
296
+ bG9nIiBpZD0idXNlcl9sb2dpbiIgdmFsdWU9IiIgdGFiaW5kZXg9IjEiIHBs
297
+ YWNlaG9sZGVyPSJFbWFpbCBvciBVc2VybmFtZSIvPjwvbGFiZWw+Cgk8bGFi
298
+ ZWwgY2xhc3M9ImxvZ2luIHBhc3N3b3JkLWxhYmVsIiBpZD0icGFzc3dvcmRf
299
+ bGFiZWwiPjxpbnB1dCBjbGFzcz0iYWRtaW5iYXItaW5wdXQgdXNlci1wYXNz
300
+ LWlucHV0IiB0eXBlPSJwYXNzd29yZCIgbmFtZT0icHdkIiBpZD0idXNlcl9w
301
+ YXNzIiB2YWx1ZT0iIiB0YWJpbmRleD0iMiIgcGxhY2Vob2xkZXI9IlBhc3N3
302
+ b3JkIiAvPjwvbGFiZWw+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0idGVz
303
+ dGNvb2tpZSIgY2xhc3M9InRlc3Rjb29raWUiIG5hbWU9InRlc3Rjb29raWUi
304
+ IHZhbHVlPSIwIiAvPgoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJyZWRp
305
+ cmVjdF90byIgbmFtZT0icmVkaXJlY3RfdG8iIHZhbHVlPSJodHRwOi8vd29y
306
+ ZHByZXNzLmNvbS8iIC8+Cgk8YnV0dG9uIGNsYXNzPSJhZG1pbmJhci1idXR0
307
+ b24iIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiBpZD0ibG9naW4tZm9y
308
+ bSIgdGFiaW5kZXg9IjQiPjxzcGFuPkxvZyBJbjwvc3Bhbj48L2J1dHRvbj4K
309
+ CTxzcGFuIGNsYXNzPSJhZG1pbmJhci1sb2dpbm1ldGEiPjxpbnB1dCBuYW1l
310
+ PSJyZW1lbWJlcm1lIiB0eXBlPSJjaGVja2JveCIgaWQ9InJlbWVtYmVybWUi
311
+ IHZhbHVlPSJmb3JldmVyIiB0YWJpbmRleD0iMyIgY2hlY2tlZD0iY2hlY2tl
312
+ ZCIgLz4KCTxsYWJlbCBmb3I9InJlbWVtYmVybWUiPlJlbWVtYmVyIG1lPC9s
313
+ YWJlbD4KCTxhIGhyZWY9Imh0dHA6Ly93b3JkcHJlc3MuY29tL3dwLWxvZ2lu
314
+ LnBocD9hY3Rpb249bG9zdHBhc3N3b3JkIj5Gb3Jnb3QgcGFzc3dvcmQ/PC9h
315
+ PgoJPGEgY2xhc3M9ImFkbWluYmFyc2lnbnVwIiBocmVmPSJodHRwOi8vd29y
316
+ ZHByZXNzLmNvbS9zaWdudXAvP3JlZj13cGNvbWFkbWluYmFyIj5TaWduIFVw
317
+ PC9hPgoJPC9zcGFuPgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
318
+ PgoJPCEtLQoJZG9jdW1lbnQuY29va2llPSdURVNUQ09PS0lFPWhvbWU7IGV4
319
+ cGlyZXM9RnJpLCAwOSBNYXIgMjAxMiAyMDoxMzoxNCArMDAwMDsgcGF0aD0v
320
+ JztqUXVlcnkoJy50ZXN0Y29va2llJykudmFsKCcxJyk7CgkvLyAtLT4KCTwv
321
+ c2NyaXB0PgoJPC9mb3JtPgoJPHNwYW4gaWQ9J2FkbWluYmFyc2VhcmNoLXdy
322
+ YXAnPgoJCTxmb3JtIGlkPSJhZG1pbmJhcnNlYXJjaCIgbmFtZT0iYWRtaW5i
323
+ YXJzZWFyY2giIGFjdGlvbj0iaHR0cDovL2VuLnNlYXJjaC53b3JkcHJlc3Mu
324
+ Y29tLyIgbWV0aG9kPSJnZXQiPgoJCQk8aW5wdXQgY2xhc3M9J2FkbWluYmFy
325
+ LXNlYXJjaC1pbnB1dCcgbmFtZT0ncScgaWQ9J3EnIHR5cGU9J3RleHQnIG1h
326
+ eGxlbmd0aD0iMTUwIiBwbGFjZWhvbGRlcj0iU2VhcmNoIFdvcmRQcmVzcy5j
327
+ b20gQmxvZ3MiIC8+CgkJPC9mb3JtPgoJPC9zcGFuPgo8L2Rpdj4KPCEtLSBn
328
+ b29nbGVfYWRfc2VjdGlvbl9lbmQgLS0+CjxkaXYgaWQ9IndyYXBwZXIiIGNs
329
+ YXNzPSJlbi13cmFwcGVyIj4KCgoJPGRpdiBpZD0ibGFuZy1ndWVzcy13cmFw
330
+ Ij48L2Rpdj4KCjxkaXYgb25jbGljaz0iaGlkZUxvZ29zKCk7IiBjbGFzcz0i
331
+ Y29yZV9zaGFkZSIgaWQ9ImNvcmVfc2hhZGUiIHN0eWxlPSJkaXNwbGF5OiBu
332
+ b25lOyI+PC9kaXY+CjxkaXYgY2xhc3M9InBhZ2Vib2R5Ij4KCTxkaXYgaWQ9
333
+ ImhlYWRlciI+CiAgICAJPGRpdiBjbGFzcz0iY29yZV9sb2dvIj48aDEgY2xh
334
+ c3M9ImxvZ28iIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbmNsaWNrPSJs
335
+ b2NhdGlvbi5ocmVmPSdodHRwOi8vd29yZHByZXNzLmNvbS9mcmVzaCciPldv
336
+ cmRQcmVzcy5jb208L2gxPjwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImRp
337
+ c3BsYXk6IG5vbmU7IiBpZD0ibG9nby1wb3B1cCI+CiAgICAgICAgICAgIDxh
338
+ IGNsYXNzPSJsb2dvLXBvcHVwLWNsb3NlIiBvbmNsaWNrPSJoaWRlTG9nb3Mo
339
+ KTsgcmV0dXJuIGZhbHNlOyIgaHJlZj0iIyI+JnRpbWVzOzwvYT4KICAgICAg
340
+ ICAgICAgPGRpdiBjbGFzcz0ibG9nby1wb3B1cC1oZWFkZXIiPgoJCQk8aDM+
341
+ TG9va2luZyBmb3IgdGhlIFdvcmRQcmVzcy5jb20gbG9nbz88L2gzPgoJCQk8
342
+ cCBjbGFzcz0iZGVzY3JpcHRpb24iPkhlcmUgYXJlIGEgZmV3IHRvIGNob29z
343
+ ZSBmcm9tOjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDx1
344
+ bCBjbGFzcz0ibG9nby1wb3B1cC1jb2x1bW4iPgogICAgICAgICAgICAgICAg
345
+ PGxpPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNhbXBsZSB2
346
+ ZXJ0Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8dWw+CgkJCQkJCTxs
347
+ aT48YSBocmVmPSJodHRwOi8vcy53cC5jb20vd3AtY29udGVudC90aGVtZXMv
348
+ aDQvaS9sb2dvLXYtY215ay5wZGYiIHRhcmdldD0iX2JsYW5rIj5WZXJ0aWNh
349
+ bCBMb2dvIFBERjwvYT4gPHNwYW4+KHByaW50KTwvc3Bhbj48L2xpPgoJCQkJ
350
+ CQk8bGk+PGEgaHJlZj0iaHR0cDovL3Mud3AuY29tL3dwLWNvbnRlbnQvdGhl
351
+ bWVzL2g0L2kvbG9nby12LXJnYi5wbmc/bT0xMzA4OTM3ODMwZyIgdGFyZ2V0
352
+ PSJfYmxhbmsiPlZlcnRpY2FsIExvZ28gUE5HPC9hPiA8c3Bhbj4od2ViKTwv
353
+ c3Bhbj48L2xpPgogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAg
354
+ ICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8
355
+ dWwgY2xhc3M9ImxvZ28tcG9wdXAtY29sdW1uIj4KICAgICAgICAgICAgICAg
356
+ IDxsaT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzYW1wbGUg
357
+ aG96Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8dWw+CgkJCQkJPGxp
358
+ PjxhIGhyZWY9Imh0dHA6Ly9zLndwLmNvbS93cC1jb250ZW50L3RoZW1lcy9o
359
+ NC9pL2xvZ28taC1jbXlrLnBkZiIgdGFyZ2V0PSJfYmxhbmsiPkhvcml6b250
360
+ YWwgTG9nbyBQREY8L2E+IDxzcGFuPihwcmludCk8L3NwYW4+PC9saT4KCQkJ
361
+ CQk8bGk+PGEgaHJlZj0iaHR0cDovL3Mud3AuY29tL3dwLWNvbnRlbnQvdGhl
362
+ bWVzL2g0L2kvbG9nby1oLXJnYi5wbmc/bT0xMzA4OTM3ODMwZyIgdGFyZ2V0
363
+ PSJfYmxhbmsiPkhvcml6b250YWwgTG9nbyBQTkc8L2E+IDxzcGFuPih3ZWIp
364
+ PC9zcGFuPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAg
365
+ ICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9k
366
+ aXY+PCEtLSBFTkQgbG9nby1wb3B1cCAtLT4KICAgIDxzY3JpcHQ+CiAgICAJ
367
+ ZnVuY3Rpb24gaGlkZUxvZ29zICgpIHsKCQkJalF1ZXJ5KCIjY29yZV9zaGFk
368
+ ZSIpLmhpZGUoKTsKCQkJalF1ZXJ5KCIjbG9nby1wb3B1cCIpLmhpZGUoKTsK
369
+ CQl9CgkJZnVuY3Rpb24gc2hvd0xvZ29zICgpIHsKCQkJdmFyIHRvdGFsSGVp
370
+ Z2h0ID0galF1ZXJ5KGRvY3VtZW50KS5oZWlnaHQoKTsKCQkJalF1ZXJ5KCIj
371
+ bG9nby1wb3B1cCIpLnNsaWRlRG93bigiZmFzdCIpOwoJCQlqUXVlcnkoIiNj
372
+ b3JlX3NoYWRlIikuY3NzKCJoZWlnaHQiLCB0b3RhbEhlaWdodCArICJweCIp
373
+ LnNob3coKTsKCQl9CgkJLy8gV2hlbiB0aGUgRE9NIGlzIHJlYWR5CgkJalF1
374
+ ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CgkJCS8vIEhhY2sg
375
+ dG8gZ2V0IElFIHRvIGJlaGF2ZQoJCQlqUXVlcnkoIi5jb3JlX2xvZ28iKS5i
376
+ aW5kKCdjb250ZXh0bWVudScsZnVuY3Rpb24oZSl7CgkJCQllLnJldHVyblZh
377
+ bHVlPSBmYWxzZTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfSkuYmluZCgnbW91
378
+ c2Vkb3duIGNvbnRleHRtZW51JyxmdW5jdGlvbihlKXsgLy8gQ2FwdHVyZSBy
379
+ aWdodCBjbGljawoJCQkJLy8gQWRkIG5ldyByaWdodCBjbGljayBmdW5jdGlv
380
+ bmFsaXR5CgkJCQlpZihlLmJ1dHRvbiA9PT0gMil7IC8vIDIgPSBSaWdodCBj
381
+ bGljawoJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewoJCQkJCQlzaG93
382
+ TG9nb3MoKTsKCQkJCQl9LCAzMDApOwoJCQkJCS8vIERpc2FibGUgcmVndWxh
383
+ ciBjb250ZXh0IG1lbnUgb24gbG9nbwoJCQkJCWUucHJldmVudERlZmF1bHQo
384
+ KTsKCQkJCX0KCQkJfSk7CgkJfSk7CiAgICA8L3NjcmlwdD4KCQkJPGZvcm0g
385
+ aWQ9Imxhbmd1YWdlIiBuYW1lPSJsYW5ndWFnZSIgYWN0aW9uPSIiPgoJCTxs
386
+ YWJlbCBmb3I9Imxhbmd1YWdlLXNlbGVjdCI+TGFuZ3VhZ2U6PC9sYWJlbD4K
387
+ CQk8c2VsZWN0IGlkPSJsYW5ndWFnZS1zZWxlY3QiIG5hbWU9Imxhbmd1YWdl
388
+ c2VsIiBvbmNoYW5nZT0iZ290b0Z1bmN0aW9uKCk7Ij4KCQkJPG9wdGlvbiB2
389
+ YWx1ZT0iaHR0cDovL3dvcmRwcmVzcy5jb20vIj5FbmdsaXNoPC9vcHRpb24+
390
+ CgkJCTxvcHRpb24gdmFsdWU9J2h0dHA6Ly9lcy53b3JkcHJlc3MuY29tLycg
391
+ PkVzcGEmIzI0MTtvbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2h0dHA6Ly9k
392
+ ZS53b3JkcHJlc3MuY29tLycgPkRldXRzY2g8L29wdGlvbj48b3B0aW9uIHZh
393
+ bHVlPSdodHRwOi8vcHQtYnIud29yZHByZXNzLmNvbS8nID5Qb3J0dWd1JiMy
394
+ MzQ7cyBkbyBCcmFzaWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdodHRwOi8v
395
+ aWQud29yZHByZXNzLmNvbS8nID5CYWhhc2EgSW5kb25lc2lhPC9vcHRpb24+
396
+ PG9wdGlvbiB2YWx1ZT0naHR0cDovL2ZyLndvcmRwcmVzcy5jb20vJyA+RnJh
397
+ biYjMjMxO2Fpczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2h0dHA6Ly9pdC53
398
+ b3JkcHJlc3MuY29tLycgPkl0YWxpYW5vPC9vcHRpb24+PG9wdGlvbiB2YWx1
399
+ ZT0naHR0cDovL3RyLndvcmRwcmVzcy5jb20vJyA+VCYjMjUyO3JrJiMyMzE7
400
+ ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2h0dHA6Ly9wdC53b3JkcHJlc3Mu
401
+ Y29tLycgPlBvcnR1Z3UmIzIzNDtzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0n
402
+ aHR0cDovL25sLndvcmRwcmVzcy5jb20vJyA+TmVkZXJsYW5kczwvb3B0aW9u
403
+ PgkJCTxvcHRpb24gdmFsdWU9Ii9sYW5ndWFnZXMvIj5Nb3JlIExhbmd1YWdl
404
+ czwvb3B0aW9uPgoJCTwvc2VsZWN0PgoJPC9mb3JtPgoJPC9kaXY+CgkKCQkJ
405
+ CQk8ZGl2IGNsYXNzPSJzaWdudXBzaWRlYmFyIj4KCQkJPGgyPkEgYmV0dGVy
406
+ IHdheSB0byZuYnNwO2Jsb2cuPC9oMj4KCQkJPGEgY2xhc3M9ImJpZ2Fzc2J1
407
+ dHRvbiIgaHJlZj0iL3NpZ251cC8/cmVmPWJpZ2Fzc29yYW5nZW9ubGVmdCI+
408
+ PHNwYW4+R2V0IHN0YXJ0ZWQgaGVyZTwvc3Bhbj48L2E+CgkJCTxwIGNsYXNz
409
+ PSJjYWxsIj4KCQkJCTxhIGhyZWY9Imh0dHA6Ly93b3JkcHJlc3MuY29tL2Zl
410
+ YXR1cmVzIj5MZWFybiBtb3JlPC9hPiBvciA8YSBjbGFzcz0ic2lnbnVwdHh0
411
+ IiBocmVmPSIvc2lnbnVwLz9yZWY9Ym90dG9tdGV4dCI+c2lnbiB1cCBub3cu
412
+ PC9hPjwvcD4KCQk8L2Rpdj4KCQkJCgoJPGRpdiBpZD0iaG9tZS10YWJzIj4K
413
+ CgkJCgkJCQkJPGRpdiBpZD0iZWRpdG9ycGlja3MiIGNsYXNzPSJob21lZGl2
414
+ IGN1cnJlbnQgbG9hZGVkIj4KCQkJCQk8ZGl2IGlkPSJmcC0xIiBjbGFzcz0i
415
+ ZnAtcGFnZSI+Cgk8ZGl2IGNsYXNzPSJlZGl0b3Jyb3cgZmlyc3QiPgoJCTxk
416
+ aXYgY2xhc3M9InRpdGxlIj48c3BhbiBjbGFzcz0ic3RvcnkiPjxzcGFuIGNs
417
+ YXNzPSJmcmVzaGx5Ij5GcmVzaGx5IFByZXNzZWQ6PC9zcGFuPgoJCTxzcGFu
418
+ IGNsYXNzPSJ0aGViZXN0b2YiPlRoZSBiZXN0IG9mIDxzdHJvbmc+NDA5LDg1
419
+ NTwvc3Ryb25nPiBibG9nZ2VycywgPHN0cm9uZz45MzEsMDk5PC9zdHJvbmc+
420
+ IG5ldyBwb3N0cywgPHN0cm9uZz4xLDEwNiwyOTA8L3N0cm9uZz4gY29tbWVu
421
+ dHMsIDxzcGFuIGNsYXNzPSJhbXAiPiZhbXA7PC9zcGFuPiA8c3Ryb25nPjE3
422
+ OCw3NDgsNzMwPC9zdHJvbmc+IHdvcmRzIHBvc3RlZCB0b2RheSBvbiBXb3Jk
423
+ UHJlc3MuY29tLjwvc3Bhbj48L3NwYW4+PC9kaXY+CgkJPGRpdiBjbGFzcz0i
424
+ cGljayI+PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+PGEgaHJlZj0iaHR0
425
+ cDovL25ha2VkZW52ZWxvcGUuY29tLzIwMTIvMDIvMjcvZGF0ZS1uaWdodC13
426
+ aXRoLW15c2VsZi10aGUtcHJvcy1hbmQtY29ucy1vZi1nb2luZy10by10aGUt
427
+ bW92aWVzLWFsb25lLyIgY2xhc3M9InN0b3J5Ij48c3BhbiBjbGFzcz0icGlj
428
+ dHVyZSIgaWQ9InBpY3R1cmVfMjk5NzY0MzZfMTYzIiBzdHlsZT0iaGVpZ2h0
429
+ OiA4MnB4OyB3aWR0aDogMjIycHg7IG92ZXJmbG93OiBoaWRkZW47IG1hcmdp
430
+ bi1ib3R0b206IDVweDsgZGlzcGxheTogYmxvY2s7IGJhY2tncm91bmQtaW1h
431
+ Z2U6IHVybCgnaHR0cDovL3MyLndwLmNvbS9tc2hvdHMvdjEvaHR0cCUzQSUy
432
+ RiUyRm5ha2VkZW52ZWxvcGUuY29tJTJGMjAxMiUyRjAyJTJGMjclMkZkYXRl
433
+ LW5pZ2h0LXdpdGgtbXlzZWxmLXRoZS1wcm9zLWFuZC1jb25zLW9mLWdvaW5n
434
+ LXRvLXRoZS1tb3ZpZXMtYWxvbmUlMkY/dz0yMjInKTsgYmFja2dyb3VuZC1y
435
+ ZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkw
436
+ cHg7Ij48L3NwYW4+PHNwYW4gY2xhc3M9InBvc3R0aXRsZSI+RGF0ZSBOaWdo
437
+ dCAoV2l0aCBNeXNlbGYpOiBUaGUgUHJvcyBhbmQgQ29ucyBvZiBHb2luZyB0
438
+ byB0aGUgTW92aWVzIEFsb25lIDwvc3Bhbj48c21hbGw+VGhlIE5ha2VkIEVu
439
+ dmVsb3BlPC9zbWFsbD48L2E+PGEgaHJlZj0iaHR0cDovL2VuLndvcmRwcmVz
440
+ cy5jb20vdGFnL21vdmllcy8iIGNsYXNzPSJ0YWdhemluZSI+UG9zdHMgYWJv
441
+ dXQgTW92aWVzIOKGkjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJwaWNrIj48ZGl2
442
+ IGNsYXNzPSJsZWZ0bnVtIj48L2Rpdj48YSBocmVmPSJodHRwOi8vbWVldHRo
443
+ ZWJ1dHRyYW1zLndvcmRwcmVzcy5jb20vMjAxMi8wMi8yNy9jb25mZXNzaW9u
444
+ cy1mcm9tLWEtYmFyYmVyLWNoYWlyLyIgY2xhc3M9InN0b3J5Ij48c3BhbiBj
445
+ bGFzcz0icGljdHVyZSIgaWQ9InBpY3R1cmVfMTM2NTEyMDlfMjA2OSIgc3R5
446
+ bGU9ImhlaWdodDogODJweDsgd2lkdGg6IDIyMnB4OyBvdmVyZmxvdzogaGlk
447
+ ZGVuOyBtYXJnaW4tYm90dG9tOiA1cHg7IGRpc3BsYXk6IGJsb2NrOyBiYWNr
448
+ Z3JvdW5kLWltYWdlOiB1cmwoJ2h0dHA6Ly9zMC53cC5jb20vaW1ncHJlc3M/
449
+ cmVzaXplPTIyMiw4MiYjMDM4O3VybD1odHRwJTNBJTJGJTJGbWVldHRoZWJ1
450
+ dHRyYW1zLmZpbGVzLndvcmRwcmVzcy5jb20lMkYyMDEyJTJGMDElMkZtdGJi
451
+ YW5uZXJ3aGl0ZTEuanBnJyk7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBl
452
+ YXQ7IGJhY2tncm91bmQtcG9zaXRpb246IDAgMHB4OyI+PC9zcGFuPjxzcGFu
453
+ IGNsYXNzPSJwb3N0dGl0bGUiPkNvbmZlc3Npb25zIEZyb20gQSBCYXJiZXIg
454
+ Q2hhaXIgPC9zcGFuPjxzbWFsbD5NZWV0IHRoZSBCdXR0cmFtczwvc21hbGw+
455
+ PC9hPjxhIGhyZWY9Imh0dHA6Ly9lbi53b3JkcHJlc3MuY29tL3RhZy9odW1v
456
+ ci8iIGNsYXNzPSJ0YWdhemluZSI+UG9zdHMgYWJvdXQgSHVtb3Ig4oaSPC9h
457
+ PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImVkaXRvcnJvdyI+PGRpdiBjbGFz
458
+ cz0icGljayI+PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+PGEgaHJlZj0i
459
+ aHR0cDovL3Bob3RvYm90b3MuY29tLzIwMTIvMDIvMjgvZ3JlYXQtZ3JheS1v
460
+ d2wtZHVucm9iaW4tb250YXJpby1jYW5hZGEtamltLWN1bW1pbmctZmVhdHVy
461
+ ZWQtcGhvdG9ncmFwaGVyLyIgY2xhc3M9InN0b3J5Ij48c3BhbiBjbGFzcz0i
462
+ cGljdHVyZSIgaWQ9InBpY3R1cmVfMjkwMjAzNDFfMTIyNSIgc3R5bGU9Imhl
463
+ aWdodDogODJweDsgd2lkdGg6IDIyMnB4OyBvdmVyZmxvdzogaGlkZGVuOyBt
464
+ YXJnaW4tYm90dG9tOiA1cHg7IGRpc3BsYXk6IGJsb2NrOyBiYWNrZ3JvdW5k
465
+ LWltYWdlOiB1cmwoJ2h0dHA6Ly9zMS53cC5jb20vaW1ncHJlc3M/dz0yMjIm
466
+ IzAzODt1cmw9aHR0cCUzQSUyRiUyRnBob3RvYm90b3MuZmlsZXMud29yZHBy
467
+ ZXNzLmNvbSUyRjIwMTIlMkYwMiUyRmdyZWF0LWdyYXktb3dsLmpwZycpOyBi
468
+ YWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0
469
+ aW9uOiAwIC0yMHB4OyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0dGl0bGUi
470
+ PkdyZWF0IEdyYXkgT3dsIOKAkyBEdW5yb2JpbiwgT250YXJpbyA8L3NwYW4+
471
+ PHNtYWxsPlBob3RvQm90b3MuY29tPC9zbWFsbD48L2E+PC9kaXY+PGRpdiBj
472
+ bGFzcz0icGljayI+PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+PGEgaHJl
473
+ Zj0iaHR0cDovL2Jsb2ctYWF1dy5vcmcvMjAxMi8wMi8yOC9vbi1zY3JlZW4t
474
+ d29tZW4taW4tc3RlbS8iIGNsYXNzPSJzdG9yeSI+PHNwYW4gY2xhc3M9InBp
475
+ Y3R1cmUiIGlkPSJwaWN0dXJlXzIxMjIyNTlfMTA2NTEiIHN0eWxlPSJoZWln
476
+ aHQ6IDgycHg7IHdpZHRoOiAyMjJweDsgb3ZlcmZsb3c6IGhpZGRlbjsgbWFy
477
+ Z2luLWJvdHRvbTogNXB4OyBkaXNwbGF5OiBibG9jazsgYmFja2dyb3VuZC1p
478
+ bWFnZTogdXJsKCdodHRwOi8vczAud3AuY29tL2ltZ3ByZXNzP3Jlc2l6ZT0y
479
+ MjIsODImIzAzODt1cmw9aHR0cCUzQSUyRiUyRmFhdXduYXRpb25hbC5maWxl
480
+ cy53b3JkcHJlc3MuY29tJTJGMjAwOCUyRjA5JTJGYmxvZ19iYW5uZXIuanBn
481
+ Jyk7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91bmQt
482
+ cG9zaXRpb246IDAgMHB4OyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0dGl0
483
+ bGUiPk91ciBGYXZvcml0ZSBPbi1zY3JlZW4gV29tZW4gaW4gU1RFTSA8L3Nw
484
+ YW4+PHNtYWxsPkFBVVcgRGlhbG9nPC9zbWFsbD48L2E+PGEgaHJlZj0iaHR0
485
+ cDovL2VuLndvcmRwcmVzcy5jb20vdGFnL2VkdWNhdGlvbi8iIGNsYXNzPSJ0
486
+ YWdhemluZSI+UG9zdHMgYWJvdXQgRWR1Y2F0aW9uIOKGkjwvYT48L2Rpdj48
487
+ ZGl2IGNsYXNzPSJwaWNrIj48ZGl2IGNsYXNzPSJsZWZ0bnVtIj48L2Rpdj48
488
+ YSBocmVmPSJodHRwOi8vYWR2ZW50dXJlcGF0Y2hlcy53b3JkcHJlc3MuY29t
489
+ LzIwMTIvMDIvMjgvbWFjYXUtdGhlLXZlZ2FzLW9mLWFzaWEtYWxtb3N0LyIg
490
+ Y2xhc3M9InN0b3J5Ij48c3BhbiBjbGFzcz0icGljdHVyZSIgaWQ9InBpY3R1
491
+ cmVfMTIxNTQ3MzNfMTU1NiIgc3R5bGU9ImhlaWdodDogODJweDsgd2lkdGg6
492
+ IDIyMnB4OyBvdmVyZmxvdzogaGlkZGVuOyBtYXJnaW4tYm90dG9tOiA1cHg7
493
+ IGRpc3BsYXk6IGJsb2NrOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHA6
494
+ Ly9zMi53cC5jb20vaW1ncHJlc3M/dz0yMjImIzAzODt1cmw9aHR0cCUzQSUy
495
+ RiUyRmk2ODgucGhvdG9idWNrZXQuY29tJTJGYWxidW1zJTJGdnYyNDUlMkZr
496
+ c2VhcmwlMkZDaGluYSUyRk1hY2F1JTJGTWFjYXUzMUphbjIwMTIyMi5qcGcn
497
+ KTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1w
498
+ b3NpdGlvbjogMCAtMTBweDsiPjwvc3Bhbj48c3BhbiBjbGFzcz0icG9zdHRp
499
+ dGxlIj5NYWNhdSDigJMgdGhlIFZlZ2FzIG9mIEFzaWEgKEFsbW9zdCkgPC9z
500
+ cGFuPjxzbWFsbD48L3NtYWxsPjwvYT48YSBocmVmPSJodHRwOi8vZW4ud29y
501
+ ZHByZXNzLmNvbS90YWcvcGhvdG9ncmFwaHkvIiBjbGFzcz0idGFnYXppbmUi
502
+ PlBvc3RzIGFib3V0IFBob3RvZ3JhcGh5IOKGkjwvYT48L2Rpdj48L2Rpdj48
503
+ ZGl2IGNsYXNzPSJlZGl0b3Jyb3ciPjxkaXYgY2xhc3M9InBpY2siPjxkaXYg
504
+ Y2xhc3M9ImxlZnRudW0iPjwvZGl2PjxhIGhyZWY9Imh0dHA6Ly9hZXN0aGV0
505
+ aWNwZXJzcGVjdGl2ZS53b3JkcHJlc3MuY29tLzIwMTIvMDIvMDQvc3VycmVh
506
+ bGlzdC1jb2xsYWdlLWJ5LWp1bGllbi1wYWNhdWQvIiBjbGFzcz0ic3Rvcnki
507
+ PjxzcGFuIGNsYXNzPSJwaWN0dXJlIiBpZD0icGljdHVyZV8yMDYxNTA3M18x
508
+ NTUiIHN0eWxlPSJoZWlnaHQ6IDgycHg7IHdpZHRoOiAyMjJweDsgb3ZlcmZs
509
+ b3c6IGhpZGRlbjsgbWFyZ2luLWJvdHRvbTogNXB4OyBkaXNwbGF5OiBibG9j
510
+ azsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdodHRwOi8vczEud3AuY29tL2lt
511
+ Z3ByZXNzP3c9MjIyJiMwMzg7dXJsPWh0dHAlM0ElMkYlMkZhZXN0aGV0aWNw
512
+ ZXJzcGVjdGl2ZS5maWxlcy53b3JkcHJlc3MuY29tJTJGMjAxMiUyRjAyJTJG
513
+ b3BlbmVyMl84MDAuanBnJyk7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBl
514
+ YXQ7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7Ij48L3NwYW4+PHNw
515
+ YW4gY2xhc3M9InBvc3R0aXRsZSI+U3VycmVhbGlzdCBDb2xsYWdlIEJ5IEp1
516
+ bGllbiBQYWNhdWQgPC9zcGFuPjxzbWFsbD5BZXN0aGV0aWMgUGVyc3BlY3Rp
517
+ dmU8L3NtYWxsPjwvYT48YSBocmVmPSJodHRwOi8vZW4ud29yZHByZXNzLmNv
518
+ bS90YWcvZGVzaWduLyIgY2xhc3M9InRhZ2F6aW5lIj5Qb3N0cyBhYm91dCBE
519
+ ZXNpZ24g4oaSPC9hPjwvZGl2PjxkaXYgY2xhc3M9InBpY2siPjxkaXYgY2xh
520
+ c3M9ImxlZnRudW0iPjwvZGl2PjxhIGhyZWY9Imh0dHA6Ly92aW9sZXRzYW5k
521
+ Y2FyZGFtb20uY29tLzIwMTIvMDIvMjcvd2l0aC1yb290cy1wbGFudGVkLWlu
522
+ LXBlcnNpYW4tY3Vpc2luZS8iIGNsYXNzPSJzdG9yeSI+PHNwYW4gY2xhc3M9
523
+ InBpY3R1cmUiIGlkPSJwaWN0dXJlXzI1OTIwNDA4XzE3NzkiIHN0eWxlPSJo
524
+ ZWlnaHQ6IDgycHg7IHdpZHRoOiAyMjJweDsgb3ZlcmZsb3c6IGhpZGRlbjsg
525
+ bWFyZ2luLWJvdHRvbTogNXB4OyBkaXNwbGF5OiBibG9jazsgYmFja2dyb3Vu
526
+ ZC1pbWFnZTogdXJsKCdodHRwOi8vczAud3AuY29tL2ltZ3ByZXNzP3c9MjIy
527
+ JiMwMzg7dXJsPWh0dHAlM0ElMkYlMkZ2aW9sZXRzYW5kY2FyZGFtb20uZmls
528
+ ZXMud29yZHByZXNzLmNvbSUyRjIwMTIlMkYwMiUyRmltZ184ODA0LmpwZycp
529
+ OyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBv
530
+ c2l0aW9uOiAwIDBweDsiPjwvc3Bhbj48c3BhbiBjbGFzcz0icG9zdHRpdGxl
531
+ Ij5XaXRoIFJvb3RzIFBsYW50ZWQgaW4gUGVyc2lhbiBDdWlzaW5lIDwvc3Bh
532
+ bj48c21hbGw+VmlvbGV0cyBhbmQgQ2FyZGFtb208L3NtYWxsPjwvYT48YSBo
533
+ cmVmPSJodHRwOi8vZW4ud29yZHByZXNzLmNvbS90YWcvZm9vZC8iIGNsYXNz
534
+ PSJ0YWdhemluZSI+UG9zdHMgYWJvdXQgRm9vZCDihpI8L2E+PC9kaXY+PGRp
535
+ diBjbGFzcz0icGljayI+PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+PGEg
536
+ aHJlZj0iaHR0cDovL3N0YXlhdGhvbWV0YXR0ZS53b3JkcHJlc3MuY29tLzIw
537
+ MTIvMDIvMjgvY2FuLXlvdS1oZWFyLW1lLyIgY2xhc3M9InN0b3J5Ij48c3Bh
538
+ biBjbGFzcz0icGljdHVyZSIgaWQ9InBpY3R1cmVfMTMxMTYyOTNfMTA4MCIg
539
+ c3R5bGU9ImhlaWdodDogODJweDsgd2lkdGg6IDIyMnB4OyBvdmVyZmxvdzog
540
+ aGlkZGVuOyBtYXJnaW4tYm90dG9tOiA1cHg7IGRpc3BsYXk6IGJsb2NrOyBi
541
+ YWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHA6Ly9zMC53cC5jb20vaW1ncHJl
542
+ c3M/dz0yMjImIzAzODt1cmw9aHR0cCUzQSUyRiUyRnN0YXlhdGhvbWV0YXR0
543
+ ZS5maWxlcy53b3JkcHJlc3MuY29tJTJGMjAxMiUyRjAyJTJGcDIyNzA3OTAu
544
+ anBnJyk7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91
545
+ bmQtcG9zaXRpb246IDAgLTIwcHg7Ij48L3NwYW4+PHNwYW4gY2xhc3M9InBv
546
+ c3R0aXRsZSI+Q2FuIFlvdSBIZWFyIE1lPyA8L3NwYW4+PHNtYWxsPlRoZSBN
547
+ dXNpbmdzIG9mIGEgSmV3aXNoIFN0YXktQXQtSG9tZSBGYXRoZXI8L3NtYWxs
548
+ PjwvYT48YSBocmVmPSJodHRwOi8vZW4ud29yZHByZXNzLmNvbS90YWcvcGFy
549
+ ZW50aW5nLyIgY2xhc3M9InRhZ2F6aW5lIj5Qb3N0cyBhYm91dCBQYXJlbnRp
550
+ bmcg4oaSPC9hPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImVkaXRvcnJvdyI+
551
+ PGRpdiBjbGFzcz0icGljayI+PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+
552
+ PGEgaHJlZj0iaHR0cDovL3BhcmFzZG9zaGkuY29tLzIwMTIvMDIvMjgvYm9v
553
+ ay1yZXZpZXctbGluY2hwaW4tYnktc2V0aC1nb2Rpbi8iIGNsYXNzPSJzdG9y
554
+ eSI+PHNwYW4gY2xhc3M9InBpY3R1cmUiIGlkPSJwaWN0dXJlXzEzODU4OTM1
555
+ XzIwOTAiIHN0eWxlPSJoZWlnaHQ6IDgycHg7IHdpZHRoOiAyMjJweDsgb3Zl
556
+ cmZsb3c6IGhpZGRlbjsgbWFyZ2luLWJvdHRvbTogNXB4OyBkaXNwbGF5OiBi
557
+ bG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdodHRwOi8vczIud3AuY29t
558
+ L21zaG90cy92MS9odHRwJTNBJTJGJTJGcGFyYXNkb3NoaS5jb20lMkYyMDEy
559
+ JTJGMDIlMkYyOCUyRmJvb2stcmV2aWV3LWxpbmNocGluLWJ5LXNldGgtZ29k
560
+ aW4lMkY/dz0yMjInKTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsg
561
+ YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTBweDsiPjwvc3Bhbj48c3BhbiBj
562
+ bGFzcz0icG9zdHRpdGxlIj5Cb29rIHJldmlldzogTGluY2hwaW4gYnkgU2V0
563
+ aCBHb2RpbiA8L3NwYW4+PHNtYWxsPlBhcmFzIERvc2hpJiMwMzk7cyBCbG9n
564
+ PC9zbWFsbD48L2E+PGEgaHJlZj0iaHR0cDovL2VuLndvcmRwcmVzcy5jb20v
565
+ dGFnL2Jvb2tzLyIgY2xhc3M9InRhZ2F6aW5lIj5Qb3N0cyBhYm91dCBCb29r
566
+ cyDihpI8L2E+PC9kaXY+PGRpdiBjbGFzcz0icGljayI+PGRpdiBjbGFzcz0i
567
+ bGVmdG51bSI+PC9kaXY+PGEgaHJlZj0iaHR0cDovL3RyYXNoaWVhcnQud29y
568
+ ZHByZXNzLmNvbS8yMDEyLzAyLzI4L2RyZXNzZXItZHJhd2VyLWNhbnZhcy8i
569
+ IGNsYXNzPSJzdG9yeSI+PHNwYW4gY2xhc3M9InBpY3R1cmUiIGlkPSJwaWN0
570
+ dXJlXzMxNDE0MzQwXzEyMyIgc3R5bGU9ImhlaWdodDogODJweDsgd2lkdGg6
571
+ IDIyMnB4OyBvdmVyZmxvdzogaGlkZGVuOyBtYXJnaW4tYm90dG9tOiA1cHg7
572
+ IGRpc3BsYXk6IGJsb2NrOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHA6
573
+ Ly9zMi53cC5jb20vaW1ncHJlc3M/dz0yMjImIzAzODt1cmw9aHR0cCUzQSUy
574
+ RiUyRnRyYXNoaWVhcnQuZmlsZXMud29yZHByZXNzLmNvbSUyRjIwMTIlMkYw
575
+ MiUyRjMuanBnJyk7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJh
576
+ Y2tncm91bmQtcG9zaXRpb246IDAgLTEwcHg7Ij48L3NwYW4+PHNwYW4gY2xh
577
+ c3M9InBvc3R0aXRsZSI+RHJlc3NlciBEcmF3ZXIgQ2FudmFzIDwvc3Bhbj48
578
+ c21hbGw+dHJhc2hpZUFSVDwvc21hbGw+PC9hPjxhIGhyZWY9Imh0dHA6Ly9l
579
+ bi53b3JkcHJlc3MuY29tL3RhZy9kaXkvIiBjbGFzcz0idGFnYXppbmUiPlBv
580
+ c3RzIGFib3V0IERpeSDihpI8L2E+PC9kaXY+PGRpdiBjbGFzcz0icGljayI+
581
+ PGRpdiBjbGFzcz0ibGVmdG51bSI+PC9kaXY+PGEgaHJlZj0iaHR0cDovL21h
582
+ cmlhbm5lbWFjZ3JlZ29yLndvcmRwcmVzcy5jb20vMjAxMi8wMi8wNi9zdWJt
583
+ ZXJnZWQvIiBjbGFzcz0ic3RvcnkiPjxzcGFuIGNsYXNzPSJwaWN0dXJlIiBp
584
+ ZD0icGljdHVyZV8zMDM2NzI3M181NjgiIHN0eWxlPSJoZWlnaHQ6IDgycHg7
585
+ IHdpZHRoOiAyMjJweDsgb3ZlcmZsb3c6IGhpZGRlbjsgbWFyZ2luLWJvdHRv
586
+ bTogNXB4OyBkaXNwbGF5OiBibG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJs
587
+ KCdodHRwOi8vczEud3AuY29tL2ltZ3ByZXNzP3c9MjIyJiMwMzg7dXJsPWh0
588
+ dHAlM0ElMkYlMkZtYXJpYW5uZW1hY2dyZWdvci5maWxlcy53b3JkcHJlc3Mu
589
+ Y29tJTJGMjAxMSUyRjEyJTJGMjAxMl8wMl8wMl93ZXN0bW9yZWxhbmRfMDAz
590
+ Ny5qcGcnKTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dy
591
+ b3VuZC1wb3NpdGlvbjogMCAtMTBweDsiPjwvc3Bhbj48c3BhbiBjbGFzcz0i
592
+ cG9zdHRpdGxlIj5TdWJtZXJnZWQgPC9zcGFuPjxzbWFsbD5NYXJpQW5uZSBN
593
+ YWNHcmVnb3I8L3NtYWxsPjwvYT48YSBocmVmPSJodHRwOi8vZW4ud29yZHBy
594
+ ZXNzLmNvbS90YWcvbmF0dXJlLyIgY2xhc3M9InRhZ2F6aW5lIj5Qb3N0cyBh
595
+ Ym91dCBOYXR1cmUg4oaSPC9hPjwvZGl2PjwvZGl2Pgo8c2NyaXB0IHR5cGU9
596
+ InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0Pgo8ZGl2IHN0eWxlPSJjbGVh
597
+ cjpib3RoO2hlaWdodDowcHg7d2lkdGg6NzE3cHgiPjwvZGl2Pgo8L2Rpdj4K
598
+ CjxkaXYgaWQ9ImZwbmF2Ij4KCTxhIGNsYXNzPSJlYXJsaWVyIiBocmVmPSI/
599
+ ZnA9MiIgPkVhcmxpZXI8L2E+Cgk8YSBjbGFzcz0ibGF0ZXIiIGhyZWY9Ij9m
600
+ cD0wIiBzdHlsZT0iZGlzcGxheTpub25lIj5MYXRlcjwvYT4KCTxpbWcgaWQ9
601
+ ImZwbG9hZGluZyIgc3JjPSJodHRwOi8vczIud3AuY29tL3dwLWNvbnRlbnQv
602
+ dGhlbWVzL2g0L2kvdy1sb2FkZXIuZ2lmP209MTMxMDY1ODgzNWciIHN0eWxl
603
+ PSJkaXNwbGF5Om5vbmUiIGFsdD0iTG9hZGluZy4uLiIgLz4KPC9kaXY+Cjxz
604
+ Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gc2V0TmF2
605
+ Q2xpY2tzKHBhZ2UsIGVhcmxpZXJfZXhpc3QpIHsKalF1ZXJ5KCdkaXYjZnBu
606
+ YXYgYS5lYXJsaWVyJykudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9u
607
+ KCl7CglqUXVlcnkoIiNmcGxvYWRpbmciKS5mYWRlSW4oKTsKCWpRdWVyeS5n
608
+ ZXQoJy8/bG9hZD1lZGl0b3JwaWNrcyZmcD0nKyhwYWdlKzEpKycmcmFuZD0n
609
+ K01hdGgucmFuZG9tKCksCgkJZnVuY3Rpb24oZGF0YSkgewoJCQlqUXVlcnko
610
+ IiNmcGxvYWRpbmciKS5mYWRlT3V0KCk7CgkJCWpRdWVyeSgiI2ZwbmF2IGEi
611
+ KS51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gZmFs
612
+ c2U7fSk7CgkJCXZhciBsZWZ0PScjZnAtJytwYWdlOwoJCQl2YXIgcmlnaHQ9
613
+ JyNmcC0nKyhwYWdlKzEpOwoJCQlqUXVlcnkoZGF0YSkuaGlkZSgpLmluc2Vy
614
+ dEFmdGVyKGxlZnQpOwoJCQl2YXIgbGhlaWdodD1qUXVlcnkobGVmdCkub3V0
615
+ ZXJIZWlnaHQodHJ1ZSk7CgkJCXZhciByaGVpZ2h0PWpRdWVyeShyaWdodCku
616
+ b3V0ZXJIZWlnaHQodHJ1ZSk7CgkJCXZhciBlaGVpZ2h0MT1qUXVlcnkoJyNl
617
+ ZGl0b3JwaWNrcycpLmhlaWdodCgpOwoJCQl2YXIgZWhlaWdodDI9ZWhlaWdo
618
+ dDEgLSBsaGVpZ2h0ICsgcmhlaWdodDsKCQkJalF1ZXJ5KCIjZWRpdG9ycGlj
619
+ a3MiKQoJCQkJLmNzcyh7J2hlaWdodCc6ZWhlaWdodDErJ3B4J30pOwoJCQlq
620
+ UXVlcnkoIiNmcG5hdiIpCgkJCQkuY3NzKHsncG9zaXRpb24nOidhYnNvbHV0
621
+ ZSd9KTsKCQkJalF1ZXJ5KCIjZWRpdG9ycGlja3MiKQoJCQkJLmFuaW1hdGUo
622
+ eydoZWlnaHQnOmVoZWlnaHQyfSk7CgkJCWpRdWVyeShsZWZ0KQoJCQkJLmNz
623
+ cyh7J3Bvc2l0aW9uJzonYWJzb2x1dGUnfSkKCQkJCS5hbmltYXRlKHsnbGVm
624
+ dCc6Jy03MTdweCcsJ29wYWNpdHknOidoaWRlJ30sCgkJCQkJZnVuY3Rpb24o
625
+ KXtqUXVlcnkobGVmdCkucmVtb3ZlKCk7fSk7CgkJCWpRdWVyeShyaWdodCkK
626
+ CQkJCS5jc3Moeydwb3NpdGlvbic6J2Fic29sdXRlJywndG9wJzonMHB4Jywn
627
+ bGVmdCc6JzcxN3B4J30pCgkJCQkuc2hvdygpCgkJCQkuYW5pbWF0ZSh7J2xl
628
+ ZnQnOicwcHgnfSk7CgkJCWlmICggcGFnZSA9PSAxICkKCQkJCWpRdWVyeSgi
629
+ I2ZwbmF2IC5sYXRlciIpLmZhZGVJbigpOwoJCX0pOwoJcmV0dXJuIGZhbHNl
630
+ Owp9KS5hdHRyKHsnaHJlZic6JyNlYXJsaWVyJ30pOwpqUXVlcnkoJ2RpdiNm
631
+ cG5hdiBhLmxhdGVyJykudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9u
632
+ KCl7CglqUXVlcnkoIiNmcGxvYWRpbmciKS5mYWRlSW4oKTsKCWpRdWVyeS5n
633
+ ZXQoJy8/bG9hZD1lZGl0b3JwaWNrcyZmcD0nKyhwYWdlLTEpKycmcmFuZD0n
634
+ K01hdGgucmFuZG9tKCksCgkJZnVuY3Rpb24oZGF0YSkgewoJCQlqUXVlcnko
635
+ IiNmcGxvYWRpbmciKS5mYWRlT3V0KCk7CgkJCWpRdWVyeSgiI2ZwbmF2IGEi
636
+ KS51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gZmFs
637
+ c2U7fSk7CgkJCXZhciBsZWZ0PScjZnAtJysocGFnZS0xKTsKCQkJdmFyIHJp
638
+ Z2h0PScjZnAtJytwYWdlOwoJCQlqUXVlcnkoZGF0YSkuaGlkZSgpLmluc2Vy
639
+ dEJlZm9yZShyaWdodCk7CgkJCXZhciBsaGVpZ2h0PWpRdWVyeShsZWZ0KS5v
640
+ dXRlckhlaWdodCh0cnVlKTsKCQkJdmFyIHJoZWlnaHQ9alF1ZXJ5KHJpZ2h0
641
+ KS5vdXRlckhlaWdodCh0cnVlKTsKCQkJdmFyIGVoZWlnaHQxPWpRdWVyeSgn
642
+ I2VkaXRvcnBpY2tzJykuaGVpZ2h0KCk7CgkJCXZhciBlaGVpZ2h0Mj1laGVp
643
+ Z2h0MSAtIHJoZWlnaHQgKyBsaGVpZ2h0OwoJCQlqUXVlcnkoIiNlZGl0b3Jw
644
+ aWNrcyIpCgkJCQkuY3NzKHsnaGVpZ2h0JzplaGVpZ2h0MSsncHgnfSk7CgkJ
645
+ CWpRdWVyeSgiI2ZwbmF2IikKCQkJCS5jc3Moeydwb3NpdGlvbic6J2Fic29s
646
+ dXRlJ30pOwoJCQlqUXVlcnkoIiNlZGl0b3JwaWNrcyIpCgkJCQkuYW5pbWF0
647
+ ZSh7J2hlaWdodCc6ZWhlaWdodDJ9KTsKCQkJalF1ZXJ5KHJpZ2h0KQoJCQkJ
648
+ LmNzcyh7J3Bvc2l0aW9uJzonYWJzb2x1dGUnfSkKCQkJCS5hbmltYXRlKHsn
649
+ bGVmdCc6JzcxN3B4Jywnb3BhY2l0eSc6J2hpZGUnfSwKCQkJCQlmdW5jdGlv
650
+ bigpe2pRdWVyeShyaWdodCkuZW1wdHkoKS5yZW1vdmUoKTt9KTsKCQkJalF1
651
+ ZXJ5KGxlZnQpCgkJCQkuY3NzKHsncG9zaXRpb24nOidhYnNvbHV0ZScsJ3Rv
652
+ cCc6JzBweCcsJ2xlZnQnOictNzE3cHgnfSkKCQkJCS5zaG93KCkKCQkJCS5h
653
+ bmltYXRlKHsnbGVmdCc6JzBweCd9KTsKCQkJaWYgKCBwYWdlIC0gMSA9PSAx
654
+ ICkKCQkJCWpRdWVyeSgiI2ZwbmF2IC5sYXRlciIpLnVuYmluZCgnY2xpY2sn
655
+ KS5mYWRlT3V0KCk7CgkJCWlmICggJ25vbmUnID09IGpRdWVyeSgiI2ZwbmF2
656
+ IC5lYXJsaWVyIikuY3NzKCdkaXNwbGF5JykgKQoJCQkJalF1ZXJ5KCIjZnBu
657
+ YXYgLmVhcmxpZXIiKS5mYWRlSW4oKTsKCQl9KTsKCXJldHVybiBmYWxzZTsK
658
+ fSkuYXR0cih7J2hyZWYnOicjbGF0ZXInfSk7CmpRdWVyeSgiI2VkaXRvcnBp
659
+ Y2tzIikuY3NzKHsnYm9yZGVyJzonbm9uZSd9KTsgLy8gSW5leHBsaWNhYmx5
660
+ IHJlcXVpcmVkIGJ5IElFLgppZiAoIDEgIT0gZWFybGllcl9leGlzdCApCglq
661
+ UXVlcnkoIiNmcG5hdiAuZWFybGllciIpLnVuYmluZCgnY2xpY2snKS5mYWRl
662
+ T3V0KCk7Cn0Kc2V0TmF2Q2xpY2tzKDEsIDEpOwo8L3NjcmlwdD4KCTwvZGl2
663
+ PgkJCQkJCQoJCQoJPC9kaXY+IAo8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0i
664
+ bmV3ZGFzaF9ub25jZSIgbmFtZT0ibmV3ZGFzaF9ub25jZSIgdmFsdWU9IjRk
665
+ OGUyN2IzZjkiIC8+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iX3dwX2h0
666
+ dHBfcmVmZXJlciIgdmFsdWU9Ii8iIC8+CjwhLS0gZ29vZ2xlX2FkX3NlY3Rp
667
+ b25fc3RhcnQod2VpZ2h0PWlnbm9yZSkgLS0+CjxkaXYgaWQ9ImZvb3RlciI+
668
+ Cgk8ZGl2IGNsYXNzPSJjMSI+CgkJPGg0Pk9uIFdvcmRQcmVzcy5jb208L2g0
669
+ PgoJCTx1bD4KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9lbi5zdXBwb3J0Lndv
670
+ cmRwcmVzcy5jb20vIiB0aXRsZT0iV2UmIzgyMTc7cmUgaGVyZSBmb3IgeW91
671
+ Ij5TdXBwb3J0PC9hPiAmYW1wOyA8YSBocmVmPSJodHRwOi8vZW4uZm9ydW1z
672
+ LndvcmRwcmVzcy5jb20vIiB0aXRsZT0iQ29tbXVuaWNhdGUgd2l0aCB5b3Vy
673
+ IGZlbGxvdyBXb3JkUHJlc3MuY29tIGJsb2dnZXJzIj5Gb3J1bXM8L2E+PC9s
674
+ aT4KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9lbi53b3JkcHJlc3MuY29tL2Zl
675
+ YXR1cmVzLyIgdGl0bGU9IkEgc2FtcGxpbmcgb2YgdGhlIG1hbnkgZmVhdHVy
676
+ ZXMgV29yZFByZXNzLmNvbSBvZmZlcnMiIGhyZWZsYW5nPSJlbiI+RnJlZSBG
677
+ ZWF0dXJlczwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iaHR0cDovL2VuLndv
678
+ cmRwcmVzcy5jb20vcHJvZHVjdHMvIiB0aXRsZT0iVmFsdWUtYWRkZWQgdXBn
679
+ cmFkZXMgYXZhaWxhYmxlIGEgbGEgY2FydGUiIGhyZWZsYW5nPSJlbiI+UHJl
680
+ bWl1bSBBZGQtT25zPC9hPjwvbGk+CgkJCTxsaT48YSBocmVmPSJodHRwOi8v
681
+ dGhlbWUud29yZHByZXNzLmNvbS8iIHRpdGxlPSJGaW5kIHRoZSBwZXJmZWN0
682
+ IHRoZW1lIj5UaGVtZSBTaG93Y2FzZTwvYT48L2xpPgoJCQk8bGk+PGEgaHJl
683
+ Zj0iaHR0cDovL2VuLndvcmRwcmVzcy5jb20vdGFncy8iIHRpdGxlPSJDdXJy
684
+ ZW50IHRvcGljcyBhbmQgdGFncyIgaHJlZmxhbmc9ImVuIj5Qb3B1bGFyIFRh
685
+ Z3M8L2E+PC9saT4KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly93b3JkcHJlc3Mu
686
+ Y29tL2FkdmFuY2VkLXNlcnZpY2VzIiB0aXRsZT0iQnVpbGQgYXBwcyBmb3Ig
687
+ V29yZFByZXNzLmNvbSI+QWR2YW5jZWQgU2VydmljZXM8L2E+PC9saT4KCQkJ
688
+ PGxpPjxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wLndvcmRwcmVzcy5jb20vIiB0
689
+ aXRsZT0iQnVpbGQgYXBwcyBmb3IgV29yZFByZXNzLmNvbSI+RGV2ZWxvcGVy
690
+ IFJlc291cmNlczwvYT48L2xpPgoJCTwvdWw+Cgk8L2Rpdj4KCTxkaXYgY2xh
691
+ c3M9ImMyIj4KCQk8aDQ+QWxzbyBjb29sPC9oND4KCQk8dWw+CgkJCTxsaT48
692
+ YSBocmVmPSJodHRwOi8vc3VwcG9ydC53b3JkcHJlc3MuY29tL2FwcHMvIiB0
693
+ aXRsZT0iQXBwcyBmb3IgV29yZFByZXNzIj5Xb3JkUHJlc3MgQXBwczwvYT48
694
+ L2xpPgoJCQk8bGk+PGEgaHJlZj0iaHR0cDovL3dvcmRwcmVzcy5vcmcvIiB0
695
+ aXRsZT0iU2VsZi1ob3N0ZWQsIG5vbi1wcm9maXQgdmVyc2lvbiI+V29yZFBy
696
+ ZXNzLm9yZzwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iaHR0cDovL3dvcmRw
697
+ cmVzcy50di8iIHRpdGxlPSJZb3VyIHZpc3VhbCBndWlkZSB0byBXb3JkUHJl
698
+ c3MiPldvcmRQcmVzcy50djwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iaHR0
699
+ cDovL3ZpcC53b3JkcHJlc3MuY29tLyIgdGl0bGU9IkZvciB0aGUgYmVzdCBz
700
+ aXRlcyBpbiB0aGUgd29ybGQiIGhyZWZsYW5nPSJlbiI+VklQIFNlcnZpY2Vz
701
+ OiBTdXBwb3J0ICZhbXA7IEhvc3Rpbmc8L2E+PC9saT4KCQkJPGxpPjxhIGhy
702
+ ZWY9Imh0dHA6Ly92aWRlb3ByZXNzLmNvbS8/cmVmPXdwY29tX2Zvb3RlciIg
703
+ dGl0bGU9IlZpZGVvUHJlc3MiPkVtYmVkIFZpZGVvcyBvbiBXb3JkUHJlc3M8
704
+ L2E+PC9saT4KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdXJ2ZXlkYWRkeS5j
705
+ b20/YWQ9d3AuY29tIiB0aXRsZT0iU3VydmV5ZGFkZHkgb25saW5lIHN1cnZl
706
+ eSBzb2Z0d2FyZSI+T25saW5lIFN1cnZleXMgYnkgU3VydmV5ZGFkZHk8L2E+
707
+ PC9saT4KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9tYS50dC8iIHRpdGxlPSJG
708
+ b3VuZGVyIG9mIEF1dG9tYXR0aWMsIGV4YW1wbGUgb2Ygd2hhdCBXb3JkUHJl
709
+ c3MgY2FuIGRvIiBocmVmbGFuZz0iZW4iPk1hdHQgTXVsbGVud2VnPC9hPjwv
710
+ bGk+CgkJPC91bD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0iYzMiPgo8YSBocmVm
711
+ PSJodHRwOi8vYmxhY2tiZXJyeS53b3JkcHJlc3Mub3JnLyI+PGltZyBzcmM9
712
+ Imh0dHA6Ly9zMC53cC5jb20vd3AtY29udGVudC90aGVtZXMvaDQvaS9mb290
713
+ ZXJwcm9tby9ibGFja2JlcnJ5LnBuZz9tPTEzMDYxNjAxMzhnIiBhbHQ9Ildv
714
+ cmRQcmVzcyBmb3IgQmxhY2tCZXJyeSIgd2lkdGg9IjIyNiIgaGVpZ2h0PSIx
715
+ ODEiIC8+PC9hPgk8L2Rpdj4KCTxkaXYgY2xhc3M9ImM0Ij4KCQk8aDQ+RnJv
716
+ bSBvdXIgYmxvZyA8YSBjbGFzcz0icmVhZG1vcmUiIGhyZWY9Imh0dHA6Ly9l
717
+ bi5ibG9nLndvcmRwcmVzcy5jb20vIj5SZWFkIG1vcmUmIzgyMzA7PC9hPjwv
718
+ aDQ+CgkJCQk8dWw+CgkJCTxsaT48YSBocmVmPSJodHRwOi8vZW4uYmxvZy53
719
+ b3JkcHJlc3MuY29tLzIwMTIvMDIvMjcvd29yZHByZXNzZXItZmFjZXMtYWdv
720
+ cmFwaG9iaWEvIj5Xb3JkUHJlc3NlciBEb2N1bWVudHMgSGVyIE1pc3Npb24g
721
+ dG8gT3ZlcmNvbWUgQWdvcmFwaG9iaWE8L2E+PC9saT48bGk+PGEgaHJlZj0i
722
+ aHR0cDovL2VuLmJsb2cud29yZHByZXNzLmNvbS8yMDEyLzAyLzE0L25ldy10
723
+ aGVtZS1yZXRyby1maXR0ZWQvIj5OZXcgVGhlbWU6IFJldHJvLWZpdHRlZDwv
724
+ YT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vZW4uYmxvZy53b3JkcHJlc3Mu
725
+ Y29tLzIwMTIvMDIvMTAvY29tbWVudC1ub3RpZmljYXRpb25zLyI+Q29tbWVu
726
+ dCBOb3RpZmljYXRpb25zITwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8v
727
+ ZW4uYmxvZy53b3JkcHJlc3MuY29tLzIwMTIvMDIvMDcvbmV3LXRoZW1lcy1z
728
+ cGxlbmRpby1hbmQtc3VidXJiaWEvIj5OZXcgVGhlbWVzOiBTcGxlbmRpbyBh
729
+ bmQgU3VidXJiaWE8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL2VuLmJs
730
+ b2cud29yZHByZXNzLmNvbS8yMDEyLzAyLzAzL3ZpZGVvcHJlc3MtZHVvdG9u
731
+ ZS8iPlBvc3QgVmlkZW9zIGZyb20gWW91ciBpUGhvbmUgb3IgaVBhZDwvYT48
732
+ L2xpPgkJPC91bD4KCTwvZGl2Pgo8cCBjbGFzcz0iYXV0b21hdHRpYyI+Cgk8
733
+ c3BhbiBjbGFzcz0iZm9vdGVybGlua3MiPjxhIGhyZWY9Imh0dHA6Ly9lbi53
734
+ b3JkcHJlc3MuY29tL2Fib3V0LyIgdGl0bGU9IkEgc2hvcnQgaW50cm9kdWN0
735
+ aW9uIHRvIHlvdXIgaG9zdHMiIGhyZWZsYW5nPSJlbiI+QWJvdXQgVXM8L2E+
736
+ ICYjODIyNjsgPGEgaHJlZj0iaHR0cDovL2VuLndvcmRwcmVzcy5jb20vdG9z
737
+ LyIgdGl0bGU9IlNvbWUgbGVnYWxlc2UiPlRlcm1zIG9mIFNlcnZpY2U8L2E+
738
+ ICYjODIyNjsgPGEgaHJlZj0iaHR0cDovL2F1dG9tYXR0aWMuY29tL3ByaXZh
739
+ Y3kvIiB0aXRsZT0iV2UgYXJlIHByb2ZvdW5kbHkgZGlzaW50ZXJlc3RlZCBp
740
+ biB5b3VyIHByaXZhdGUgZGV0YWlscyI+UHJpdmFjeTwvYT4gJiM4MjI2OyA8
741
+ YSBocmVmPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9Xb3JkUHJlc3Njb20i
742
+ PkZvbGxvdyB1cyBvbiBGYWNlYm9vazwvYT4gJiM4MjI2OyA8YSBocmVmPSJo
743
+ dHRwOi8vdHdpdHRlci5jb20vd29yZHByZXNzZG90Y29tIj5Ad29yZHByZXNz
744
+ ZG90Y29tIG9uIFR3aXR0ZXI8L2E+PC9saT4KPC9zcGFuPiAKCglBbiA8YSBo
745
+ cmVmPSJodHRwOi8vYXV0b21hdHRpYy5jb20vIj48aW1nIHNyYz0iaHR0cDov
746
+ L3MwLndwLmNvbS93cC1jb250ZW50L3RoZW1lcy9oNC9pL2F1dG9tYXR0aWMu
747
+ cG5nP209MTMwNjE2MDEzOGcmYW1wOzEiIGFsdD0iQXV0b21hdHRpYyIgd2lk
748
+ dGg9IjEwMiIgaGVpZ2h0PSI5IiAvPjwvYT4gVGhpbmdhbWFqaWc8L3A+Cjwv
749
+ ZGl2Pgo8L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8
750
+ IS0tCmFkZExvYWRFdmVudChmdW5jdGlvbigpe2pRdWVyeSgnI3VzZXJfbG9n
751
+ aW4nKS5mb2N1cygpO30pOwovLyAtLT4KPC9zY3JpcHQ+CjxzY3JpcHQgdHlw
752
+ ZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy8gPCFbQ0RBVEFbCmlmICh0eXBlb2Yg
753
+ amFoICE9ICdmdW5jdGlvbicpewpmdW5jdGlvbiBqYWgodXJsLHRhcmdldCkg
754
+ ewoJdmFyIHJlYyA9IG51bGw7CiAgICAvLyBuYXRpdmUgWE1MSHR0cFJlcXVl
755
+ c3Qgb2JqZWN0CiAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CiAg
756
+ ICAgICAgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgcmVx
757
+ Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGphaERvbmVGYWN0KHJlcSwgdGFyZ2V0
758
+ KTsKICAgICAgICByZXEub3BlbignR0VUJywgdXJsLCB0cnVlKTsKICAgICAg
759
+ ICByZXEuc2VuZChudWxsKTsKICAgIC8vIElFL1dpbmRvd3MgQWN0aXZlWCB2
760
+ ZXJzaW9uCiAgICB9IGVsc2UgaWYgKHdpbmRvdy5BY3RpdmVYT2JqZWN0KSB7
761
+ CiAgICAgICAgcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5Y
762
+ TUxIVFRQJyk7CiAgICAgICAgaWYgKHJlcSkgewogICAgICAgICAgICByZXEu
763
+ b25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7amFoRG9uZShyZXEs
764
+ IHRhcmdldCk7fTsKICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsIHVybCwg
765
+ dHJ1ZSk7CiAgICAgICAgICAgIHJlcS5zZW5kKCk7CgkJfQoJfQp9Cn0KCmlm
766
+ ICh0eXBlb2YgamFoRG9uZSAhPSAnZnVuY3Rpb24nKSB7CmZ1bmN0aW9uIGph
767
+ aERvbmUociwgdGFyZ2V0KSB7CiAgICAvLyBvbmx5IGlmIHJlcSBpcyAibG9h
768
+ ZGVkIgogICAgaWYgKHIucmVhZHlTdGF0ZSA9PSA0KSB7CiAgICAgICAgLy8g
769
+ b25seSBpZiAiT0siCiAgICAgICAgaWYgKHIuc3RhdHVzID09IDIwMCkgewog
770
+ ICAgICAgICAgICByZXN1bHRzID0gci5yZXNwb25zZVRleHQ7CiAgICAgICAg
771
+ ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCkuaW5uZXJIVE1M
772
+ ID0gcmVzdWx0czsKICAgICAgICB9Cgl9Cn0KfQoKaWYgKHR5cGVvZiBqYWhE
773
+ b25lRmFjdCAhPSAnZnVuY3Rpb24nKSB7CmZ1bmN0aW9uIGphaERvbmVGYWN0
774
+ KHIsIHQpIHsKCXJldHVybiBmdW5jdGlvbigpIHtqYWhEb25lKHIsIHQpO30K
775
+ fQp9CWphaCggJy9sYW5nLWd1ZXNzLWFqYXgucGhwP3VyaT0lMkYmZm9ydW1z
776
+ PTAnLCAnbGFuZy1ndWVzcy13cmFwJyApOwovLyBdXT4JCjwvc2NyaXB0Pgo8
777
+ c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vcy5n
778
+ cmF2YXRhci5jb20vanMvZ3Byb2ZpbGVzLmpzP2FhJiMwMzg7dmVyPTMuNC1h
779
+ bHBoYS0xOTkwNCc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZh
780
+ c2NyaXB0Jz4KLyogPCFbQ0RBVEFbICovCnZhciBXUEdyb0hvID0geyJteV9o
781
+ YXNoIjoiIn07Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0
782
+ ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3MxLndwLmNvbS93cC1jb250
783
+ ZW50L211LXBsdWdpbnMvZ3JhdmF0YXItaG92ZXJjYXJkcy93cGdyb2hvLmpz
784
+ P209MTM1MjU3Njc0OGcmIzAzODt2ZXI9My40LWFscGhhLTE5OTA0Jz48L3Nj
785
+ cmlwdD4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KdmFyIF9x
786
+ ZXZlbnRzID0gX3FldmVudHMgfHwgW10sIHdwY29tUXVhbnRjYXN0RGF0YSA9
787
+ IHsicWFjY3QiOiJwLTE4LW1GRWs0SjQ0OE0iLCJsYWJlbHMiOiIsbGFuZ3Vh
788
+ Z2UuZW4sdHlwZS53cGNvbSx3cC5ob21lcGFnZSx3cC5mcmVzaGx5cHJlc3Nl
789
+ ZCJ9OwpmdW5jdGlvbiB3cGNvbVF1YW50Y2FzdFBpeGVsKCBsYWJlbHMsIG9w
790
+ dGlvbnMgKSB7Cgl2YXIgaSwgZGVmYXVsdHMgPSB3cGNvbVF1YW50Y2FzdERh
791
+ dGEsIGRhdGEgPSB7IGV2ZW50OiAnYWpheCcgfTsKCglsYWJlbHMgID0gbGFi
792
+ ZWxzICB8fCAnJzsKCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKCWlmICgg
793
+ dHlwZW9mIGxhYmVscyAhPSAnc3RyaW5nJyApCgkJb3B0aW9ucyA9IGxhYmVs
794
+ czsKCglmb3IgKCBpIGluIGRlZmF1bHRzICkgewoJCWRhdGFbaV0gPSBkZWZh
795
+ dWx0c1tpXTsKCX0KCglmb3IgKCBpIGluIG9wdGlvbnMgKSB7CgkJZGF0YVtp
796
+ XSA9IG9wdGlvbnNbaV07Cgl9CgoJaWYgKCBkYXRhLmxhYmVscyApIHsKCQlk
797
+ YXRhLmxhYmVscyArPSAnLCcgKyBsYWJlbHM7Cgl9IGVsc2UgewoJCWRhdGEu
798
+ bGFiZWxzID0gbGFiZWxzOwoJfQoKCV9xZXZlbnRzLnB1c2goIGRhdGEgKTsK
799
+ fTsKKGZ1bmN0aW9uKCkge3ZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxl
800
+ bWVudCgnc2NyaXB0Jyk7ZWxlbS5zcmMgPSAoZG9jdW1lbnQubG9jYXRpb24u
801
+ cHJvdG9jb2wgPT0gImh0dHBzOiIgPyAiaHR0cHM6Ly9zZWN1cmUiIDogImh0
802
+ dHA6Ly9lZGdlIikgKyAiLnF1YW50c2VydmUuY29tL3F1YW50LmpzIjtlbGVt
803
+ LmFzeW5jID0gdHJ1ZTtlbGVtLnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0Ijt2
804
+ YXIgc2NwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3Jp
805
+ cHQnKVswXTtzY3B0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsZW0sIHNj
806
+ cHQpOyAgfSkoKTsKX3FldmVudHMucHVzaCggd3Bjb21RdWFudGNhc3REYXRh
807
+ ICk7Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+PGRpdiBzdHlsZT0iZGlzcGxheTog
808
+ bm9uZTsiPjxpbWcgc3JjPSIvL3BpeGVsLnF1YW50c2VydmUuY29tL3BpeGVs
809
+ L3AtMTgtbUZFazRKNDQ4TS5naWY/bGFiZWxzPSUyQ2xhbmd1YWdlLmVuJTJD
810
+ dHlwZS53cGNvbSUyQ3dwLmhvbWVwYWdlJTJDd3AuZnJlc2hseXByZXNzZWQi
811
+ IGhlaWdodD0iMSIgd2lkdGg9IjEiIGFsdD0iIiAvPjwvZGl2Pjwvbm9zY3Jp
812
+ cHQ+Cgo8c2NyaXB0PmpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24o
813
+ JCl7IEdyYXZhdGFyLnByb2ZpbGVfY2IgPSBmdW5jdGlvbiggaCwgZCApIHsg
814
+ V1BHcm9Iby5zeW5jUHJvZmlsZURhdGEoIGgsIGQgKTsJfTsgR3JhdmF0YXIu
815
+ bXlfaGFzaCA9IFdQR3JvSG8ubXlfaGFzaDsgR3JhdmF0YXIuaW5pdCggJ2Jv
816
+ ZHknLCAnI3dwLWFkbWluLWJhci1teS1hY2NvdW50JyApOyB9KTs8L3Njcmlw
817
+ dD4JPGRpdiBzdHlsZT0iZGlzcGxheTpub25lIj4KCTwvZGl2PgoJCTxzdHls
818
+ ZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJCQoJCQkJLnJlYmxvZy1mcm9tIGltZyAg
819
+ ICAgICAgICAgICAgICAgICB7IG1hcmdpbjogMCAxMHB4IDAgMDsgdmVydGlj
820
+ YWwtYWxpZ246IG1pZGRsZTsgcGFkZGluZzogMDsgYm9yZGVyOiAwOyB9CgkJ
821
+ CQkucmVibG9nZ2VyLW5vdGUgaW1nLmF2YXRhciAgICAgICAgIHsgZmxvYXQ6
822
+ IGxlZnQ7IHBhZGRpbmc6IDA7IGJvcmRlcjogMDsgfQoJCQkJLnJlYmxvZ2dl
823
+ ci1ub3RlLWNvbnRlbnQgICAgICAgICAgICB7IG1hcmdpbjogMCAwIDIwcHgg
824
+ MzVweDsgfQoJCQkJLnJlYmxvZy1wb3N0ICAgICAgICAgICAgICAgICAgICAg
825
+ ICB7IGJvcmRlci1sZWZ0OiAzcHggc29saWQgI2VlZTsgcGFkZGluZy1sZWZ0
826
+ OiAxNXB4OyB9CgkJCQkucmVibG9nLXBvc3QgdWwudGh1bWItbGlzdCAgICAg
827
+ ICAgIHsgZGlzcGxheTogYmxvY2s7IGxpc3Qtc3R5bGU6IG5vbmU7IG1hcmdp
828
+ bjogMnB4IDA7IHBhZGRpbmc6IDA7IGNsZWFyOiBib3RoOyB9CgkJCQkucmVi
829
+ bG9nLXBvc3QgdWwudGh1bWItbGlzdCBsaSAgICAgIHsgZGlzcGxheTogaW5s
830
+ aW5lOyBtYXJnaW46IDA7IHBhZGRpbmc6IDAgMXB4OyBib3JkZXI6IDA7IH0K
831
+ CQkJCS5yZWJsb2ctcG9zdCB1bC50aHVtYi1saXN0IGxpIGEgICAgeyBtYXJn
832
+ aW46IDA7IHBhZGRpbmc6IDA7IGJvcmRlcjogMDsgfQoJCQkJLnJlYmxvZy1w
833
+ b3N0IHVsLnRodW1iLWxpc3QgbGkgaW1nICB7IG1hcmdpbjogMDsgcGFkZGlu
834
+ ZzogMDsgYm9yZGVyOiAwOyB9CgkJCQkucmVibG9nLXBvc3QgICAgICAgICAg
835
+ ICAgICAgICAgICAgIHsgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAjZWVlOyBw
836
+ YWRkaW5nLWxlZnQ6IDE1cHg7IH0KCQkJCQk8L3N0eWxlPjxsaW5rIHJlbD0n
837
+ c3R5bGVzaGVldCcgaWQ9J3RhYnNfY3NzLWNzcycgIGhyZWY9J2h0dHA6Ly9z
838
+ Mi53cC5jb20vd3AtY29udGVudC90aGVtZXMvaDQvdGFicy90YWIuY3NzP209
839
+ MTMzMDQzMzgzNGcmIzAzODt2ZXI9MjAxMTEyMTknIHR5cGU9J3RleHQvY3Nz
840
+ JyBtZWRpYT0nYWxsJyAvPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
841
+ dCI+Ci8vIDwhW0NEQVRBWwooZnVuY3Rpb24oKSB7CnRyeXsKICBpZiAoIHdp
842
+ bmRvdy5leHRlcm5hbCAmJidtc0lzU2l0ZU1vZGUnIGluIHdpbmRvdy5leHRl
843
+ cm5hbCkgewogICAgaWYgKHdpbmRvdy5leHRlcm5hbC5tc0lzU2l0ZU1vZGUo
844
+ KSkgewogICAgICB2YXIgamwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
845
+ Y3JpcHQnKTsKICAgICAgamwudHlwZT0ndGV4dC9qYXZhc2NyaXB0JzsKICAg
846
+ ICAgamwuYXN5bmM9dHJ1ZTsKICAgICAgamwuc3JjPScvd3AtY29udGVudC9w
847
+ bHVnaW5zL2llLXNpdGVtb2RlL2N1c3RvbS1qdW1wbGlzdC5waHAnOwogICAg
848
+ ICB2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3Jp
849
+ cHQnKVswXTsKICAgICAgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqbCwg
850
+ cyk7CiAgICB9CiAgfQp9Y2F0Y2goZSl7fQp9KSgpOwovLyBdXT4KPC9zY3Jp
851
+ cHQ+CQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJalF1ZXJ5
852
+ KGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oJCkgeyAKCQkJaWYgKCAkKCIj
853
+ aG9tZW5hdiIpLmxlbmd0aCApIHsKCQkJCXZhciBxcyA9IHdpbmRvdy5sb2Nh
854
+ dGlvbi5oYXNoLnNwbGl0KCAnLycgKTsKCgkJCQlpZiAoICdteS1ibG9ncycg
855
+ PT0gcXNbMV0gfHwganEucXVlcnkuZ2V0KCdteS1ibG9ncycpICkgd3Bjb21f
856
+ aG9tZWRhc2guY2xpY2tfdGFiKCAkKCAnbGkubXktYmxvZ3MnICkgKTsKCQkJ
857
+ CWVsc2UgaWYgKCAnZnJlc2gnID09IHFzWzFdIHx8IGpxLnF1ZXJ5LmdldCgn
858
+ ZnJlc2gnKSApIHdwY29tX2hvbWVkYXNoLmNsaWNrX3RhYiggJCggJ2xpLmZy
859
+ ZXNoJyApICk7CgkJCQllbHNlIGlmICggJ3RvcGljcycgPT0gcXNbMV0gfHwg
860
+ anEucXVlcnkuZ2V0KCd0b3BpY3MnKSB8fCAndGFncycgPT0gcXNbMV0gfHwg
861
+ anEucXVlcnkuZ2V0KCd0YWdzJykgKSB3cGNvbV9ob21lZGFzaC5jbGlja190
862
+ YWIoICQoICdsaS50b3BpY3MnICkgKTsKCQkJCWVsc2UgaWYgKCAncG9zdCcg
863
+ PT0gcXNbMV0gfHwganEucXVlcnkuZ2V0KCdwb3N0JykgfHwgJ3F1aWNrcHJl
864
+ c3MnID09IHFzWzFdIHx8IGpxLnF1ZXJ5LmdldCgncXVpY2twcmVzcycpICkg
865
+ d3Bjb21faG9tZWRhc2guY2xpY2tfdGFiKCAkKCAnbGkucG9zdCcgKSApOwoJ
866
+ CQkJZWxzZSBpZiAoICdyZWFkJyA9PSBxc1sxXSB8fCBqcS5xdWVyeS5nZXQo
867
+ J3JlYWQnKSB8fCAnZm9sbG93aW5nJyA9PSBxc1sxXSB8fCBqcS5xdWVyeS5n
868
+ ZXQoJ2ZvbGxvd2luZycpICkgd3Bjb21faG9tZWRhc2guY2xpY2tfdGFiKCAk
869
+ KCAnbGkucmVhZCcgKSApOwoJCQkJZWxzZSBpZiAoICdtZScgPT0gcXNbMV0g
870
+ fHwganEucXVlcnkuZ2V0KCdtZScpICkgd3Bjb21faG9tZWRhc2guY2xpY2tf
871
+ dGFiKCAkKCAnbGkubWUnICkgKTsKCgkJCQllbHNlIGlmICggdW5kZWZpbmVk
872
+ ID09IHFzWzFdICYmIG51bGwgIT0gJC5jb29raWUoJ3dwY29tX2FjdGl2ZV90
873
+ YWInKSAmJiAkKCAnbGkuJyArICQuY29va2llKCd3cGNvbV9hY3RpdmVfdGFi
874
+ JykucmVwbGFjZSggJyBjdXJyZW50JywgJycgKSApLmxlbmd0aCApIHsKCQkJ
875
+ CQl3cGNvbV9ob21lZGFzaC5jbGlja190YWIoICQoICdsaS4nICsgJC5jb29r
876
+ aWUoJ3dwY29tX2FjdGl2ZV90YWInKSApICk7CgkJCQl9CgkJCQllbHNlIHsK
877
+ CQkJCQl3cGNvbV9ob21lZGFzaC5jbGlja190YWIoICQoICdsaS5mcmVzaCcg
878
+ KSApOwoJCQkJfQoJCQl9CgkJfSk7CgkJPC9zY3JpcHQ+PHNjcmlwdCBzcmM9
879
+ Imh0dHA6Ly9zLnN0YXRzLndvcmRwcmVzcy5jb20vdy5qcz8yMSIgdHlwZT0i
880
+ dGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0
881
+ L2phdmFzY3JpcHQiPgpzdF9nbyh7J2Jsb2cnOicxJywndic6J3dwY29tJywn
882
+ dXNlcl9pZCc6JzAnLCdzdWJkJzond29yZHByZXNzLmNvbSd9KTsKZXhfZ28o
883
+ eydjcnlwdCc6J1VFNVZSbmhVWjJWR1FTWXZUVmdsU25CT2FWUjFKazliWW41
884
+ dE5tSitUWG9sY0dKa1Exb3VMM1pkZGtvME5tZEdRbllzYzFKcFlpeCtiVUl5
885
+ TEd0T1MzZHVURzFRUDFwMmVrOXhNUzBsVUhOaWEzbFhWbGQ1YjFaTGQzTjhS
886
+ MFZHYVZ0RFVTeFJQWEo0WDNvd01tbFBXazFHUjBaS0pVbGJLMk44WFRCRFIz
887
+ RlVlRE00S3l0aWVrOUNmRTh5VHl4c2QxMXVXbmc1VVg1SFdIQnJMbTUyY0c1
888
+ aFdud2xUMWNtVWpreGZsQnBiVWxqZURkd0wwUnhWVVZMVlhwYVhUQldMMkZ3
889
+ Vml4dVQxdHFkejgxV1VkYlUxSnJTU3hLWlYxS1VsSkxiMGRQVGtZNU5YRlZU
890
+ WFY4UTNCQkxIVkljblpaU0ZsdWVtNU9UVVkvJ30pOwphZGRMb2FkRXZlbnQo
891
+ ZnVuY3Rpb24oKXtsaW5rdHJhY2tlcl9pbml0KCcxJywwKTt9KTsKCTwvc2Ny
892
+ aXB0Pgo8bm9zY3JpcHQ+PGltZyBzcmM9Imh0dHA6Ly9zdGF0cy53b3JkcHJl
893
+ c3MuY29tL2IuZ2lmP3Y9bm9zY3JpcHQiIHN0eWxlPSJoZWlnaHQ6MHB4O3dp
894
+ ZHRoOjBweDtvdmVyZmxvdzpoaWRkZW4iIGFsdD0iIiAvPjwvbm9zY3JpcHQ+
895
+ CjwhLS0gZ29vZ2xlX2FkX3NlY3Rpb25fZW5kIC0tPgo8L2JvZHk+CjwvaHRt
896
+ bD4=
897
+ http_version: !binary |-
898
+ MS4x
899
+ recorded_at: Tue, 28 Feb 2012 20:15:32 GMT
900
+ recorded_with: VCR 2.0.0.rc2
@@ -0,0 +1,28 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Sniffles do
4
+ it "should have a version" do
5
+ subject.const_defined?("VERSION").should be true
6
+ end
7
+
8
+ describe "#sniff" do
9
+ before(:all) do
10
+ VCR.use_cassette("wordpress") do
11
+ @body = Typhoeus::Request.get("http://www.wordpress.com/", :follow_location => true).body
12
+ end
13
+ @wp = Sniffles.sniff(@body)
14
+ end
15
+
16
+ it "should identify WordPress" do
17
+ @wp.should include(:wordpress => true)
18
+ end
19
+
20
+ it "should identify jQuery" do
21
+ @wp.should include(:jquery => true)
22
+ end
23
+
24
+ it "should identify Quantcast" do
25
+ @wp.should include(:quantcast => true)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/sniffles')
2
+
3
+ require 'vcr'
4
+ require 'typhoeus'
5
+
6
+ VCR.configure do |c|
7
+ c.cassette_library_dir = 'spec/cassettes'
8
+ c.hook_into :typhoeus
9
+ c.configure_rspec_metadata!
10
+ end
11
+
12
+
13
+ RSpec.configure do |config|
14
+ config.treat_symbols_as_metadata_keys_with_true_values = true
15
+ config.run_all_when_everything_filtered = true
16
+ config.filter_run :focus
17
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sniffles
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ezekiel Templin
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: &2156025180 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.5.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2156025180
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &2156040820 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 2.8.0
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2156040820
36
+ - !ruby/object:Gem::Dependency
37
+ name: typhoeus
38
+ requirement: &2156040120 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 0.3.3
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2156040120
47
+ - !ruby/object:Gem::Dependency
48
+ name: vcr
49
+ requirement: &2156039420 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - =
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.0.rc2
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2156039420
58
+ description: Detects popular CMS, Javascript libraries, and other items of interest.
59
+ email:
60
+ - zeke@templ.in
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - .gitignore
66
+ - .rspec
67
+ - .rvmrc
68
+ - .travis.yml
69
+ - Gemfile
70
+ - Guardfile
71
+ - LICENSE
72
+ - README.md
73
+ - Rakefile
74
+ - lib/sniffles.rb
75
+ - lib/sniffles/version.rb
76
+ - sniffles.gemspec
77
+ - spec/cassettes/wordpress.yml
78
+ - spec/sniffles_spec.rb
79
+ - spec/spec_helper.rb
80
+ homepage: http://documentup.com/ezkl/sniffles
81
+ licenses: []
82
+ post_install_message:
83
+ rdoc_options: []
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 1.8.17
101
+ signing_key:
102
+ specification_version: 3
103
+ summary: Sniffles helps you determine the platforms and libraries a website is running.
104
+ test_files:
105
+ - spec/cassettes/wordpress.yml
106
+ - spec/sniffles_spec.rb
107
+ - spec/spec_helper.rb
108
+ has_rdoc: