Browse Source

Godeps, vendor: convert dependency management to trash (#3198)

This commit converts the dependency management from Godeps to the vendor
folder, also switching the tool from godep to trash. Since the upstream tool
lacks a few features proposed via a few PRs, until those PRs are merged in
(if), use github.com/karalabe/trash.

You can update dependencies via trash --update.

All dependencies have been updated to their latest version.

Parts of the build system are reworked to drop old notions of Godeps and
invocation of the go vet command so that it doesn't run against the vendor
folder, as that will just blow up during vetting.

The conversion drops OpenCL (and hence GPU mining support) from ethash and our
codebase. The short reasoning is that there's noone to maintain and having
opencl libs in our deps messes up builds as go install ./... tries to build
them, failing with unsatisfied link errors for the C OpenCL deps.

golang.org/x/net/context is not vendored in. We expect it to be fetched by the
user (i.e. using go get). To keep ci.go builds reproducible the package is
"vendored" in build/_vendor.
Péter Szilágyi 9 years ago
parent
commit
289b30715d
100 changed files with 331 additions and 27153 deletions
  1. 1 2
      .gitignore
  2. 0 332
      Godeps/Godeps.json
  3. 0 5
      Godeps/Readme
  4. 0 2
      Godeps/_workspace/.gitignore
  5. 0 26
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/cl.go
  6. 0 161
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/context.go
  7. 0 510
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/device.go
  8. 0 51
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/device12.go
  9. 0 1210
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/cl.h
  10. 0 315
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/cl_ext.h
  11. 0 158
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/cl_gl.h
  12. 0 65
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/cl_gl_ext.h
  13. 0 1278
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/cl_platform.h
  14. 0 43
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/opencl.h
  15. 0 83
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/image.go
  16. 0 127
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/kernel.go
  17. 0 7
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/kernel10.go
  18. 0 20
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/kernel12.go
  19. 0 83
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/platform.go
  20. 0 105
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/program.go
  21. 0 193
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/queue.go
  22. 0 487
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/types.go
  23. 0 71
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/types12.go
  24. 0 45
      Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/types_darwin.go
  25. 0 628
      Godeps/_workspace/src/github.com/ethereum/ethash/ethash_opencl.go
  26. 0 600
      Godeps/_workspace/src/github.com/ethereum/ethash/ethash_opencl_kernel_go_str.go
  27. 0 3
      Godeps/_workspace/src/github.com/fatih/color/.travis.yml
  28. 0 117
      Godeps/_workspace/src/github.com/gizak/termui/debug/debuger.go
  29. 0 66
      Godeps/_workspace/src/github.com/gizak/termui/test/runtest.go
  30. 0 7
      Godeps/_workspace/src/github.com/golang/snappy/README
  31. 0 20
      Godeps/_workspace/src/github.com/huin/goupnp/cmd/example_httpu_serving/example_httpu_serving.go
  32. 0 67
      Godeps/_workspace/src/github.com/huin/goupnp/cmd/example_internetgateway1/example_internetgateway1.go
  33. 0 27
      Godeps/_workspace/src/github.com/huin/goupnp/cmd/example_ssdp_registry/example_ssdp_registry.go
  34. 0 8452
      Godeps/_workspace/src/github.com/huin/goupnp/dcps/av1/av1.go
  35. 0 6
      Godeps/_workspace/src/github.com/huin/goupnp/example/example.go
  36. 0 603
      Godeps/_workspace/src/github.com/huin/goupnp/gotasks/specgen_task.go
  37. 0 27
      Godeps/_workspace/src/github.com/jackpal/gateway/LICENSE
  38. 0 7
      Godeps/_workspace/src/github.com/jackpal/gateway/README.md
  39. 0 40
      Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go
  40. 0 75
      Godeps/_workspace/src/github.com/jackpal/gateway/gateway_linux.go
  41. 0 14
      Godeps/_workspace/src/github.com/jackpal/gateway/gateway_unimplemented.go
  42. 0 43
      Godeps/_workspace/src/github.com/jackpal/gateway/gateway_windows.go
  43. 0 20
      Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go
  44. 0 154
      Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-example/metrics-example.go
  45. 0 22
      Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/never-read/never-read.go
  46. 0 102
      Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/client.go
  47. 0 235
      Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/librato.go
  48. 0 69
      Godeps/_workspace/src/github.com/rcrowley/go-metrics/stathat/stathat.go
  49. 0 92
      Godeps/_workspace/src/github.com/robertkrimen/otto/ast/comments.go
  50. 0 5
      Godeps/_workspace/src/github.com/robertkrimen/otto/otto/Makefile
  51. 0 48
      Godeps/_workspace/src/github.com/robertkrimen/otto/otto/main.go
  52. 0 115
      Godeps/_workspace/src/github.com/robertkrimen/otto/repl/repl.go
  53. 0 669
      Godeps/_workspace/src/github.com/robertkrimen/otto/terst/terst.go
  54. 0 26
      Godeps/_workspace/src/github.com/robertkrimen/otto/test/Makefile
  55. 0 196
      Godeps/_workspace/src/github.com/robertkrimen/otto/test/tester.go
  56. 0 13
      Godeps/_workspace/src/github.com/robertkrimen/otto/type_error.go
  57. 0 11
      Godeps/_workspace/src/github.com/robertkrimen/otto/underscore/Makefile
  58. 0 53
      Godeps/_workspace/src/github.com/robertkrimen/otto/underscore/README.markdown
  59. 0 3463
      Godeps/_workspace/src/github.com/robertkrimen/otto/underscore/source.go
  60. 0 84
      Godeps/_workspace/src/github.com/robertkrimen/otto/underscore/testify
  61. 0 49
      Godeps/_workspace/src/github.com/robertkrimen/otto/underscore/underscore.go
  62. 0 308
      Godeps/_workspace/src/github.com/rs/cors/cors.go
  63. 0 27
      Godeps/_workspace/src/github.com/rs/cors/utils.go
  64. 0 762
      Godeps/_workspace/src/golang.org/x/text/language/index.go
  65. 0 2791
      Godeps/_workspace/src/golang.org/x/text/language/tables.go
  66. 0 23
      Godeps/_workspace/src/gopkg.in/urfave/cli.v1/.travis.yml
  67. 0 21
      Godeps/_workspace/src/gopkg.in/urfave/cli.v1/LICENSE
  68. 0 579
      Godeps/_workspace/src/gopkg.in/urfave/cli.v1/README.md
  69. 0 16
      Godeps/_workspace/src/gopkg.in/urfave/cli.v1/appveyor.yml
  70. 0 0
      build/_vendor/src/golang.org/x/net/LICENSE
  71. 1 1
      build/_vendor/src/golang.org/x/net/context/context.go
  72. 0 0
      build/_vendor/src/golang.org/x/net/context/go17.go
  73. 0 0
      build/_vendor/src/golang.org/x/net/context/pre_go17.go
  74. 15 0
      build/ci-notes.md
  75. 15 2
      build/ci.go
  76. 1 43
      cmd/geth/main.go
  77. 0 1
      cmd/geth/usage.go
  78. 0 5
      cmd/utils/flags.go
  79. 0 262
      common/natspec/natspec.go
  80. 0 357
      common/natspec/natspec_e2e_test.go
  81. 0 18
      common/natspec/natspec_js.go
  82. 0 160
      common/natspec/natspec_test.go
  83. 2 2
      eth/api.go
  84. 11 0
      eth/backend.go
  85. 0 54
      eth/cpu_mining.go
  86. 0 102
      eth/gpu_mining.go
  87. 4 5
      internal/build/util.go
  88. 40 0
      vendor.conf
  89. 0 0
      vendor/github.com/cespare/cp/LICENSE.txt
  90. 0 0
      vendor/github.com/cespare/cp/README.md
  91. 0 0
      vendor/github.com/cespare/cp/cp.go
  92. 0 0
      vendor/github.com/davecgh/go-spew/.gitignore
  93. 14 0
      vendor/github.com/davecgh/go-spew/.travis.yml
  94. 2 0
      vendor/github.com/davecgh/go-spew/LICENSE
  95. 194 0
      vendor/github.com/davecgh/go-spew/README.md
  96. 22 0
      vendor/github.com/davecgh/go-spew/cov_report.sh
  97. 4 3
      vendor/github.com/davecgh/go-spew/spew/bypass.go
  98. 4 3
      vendor/github.com/davecgh/go-spew/spew/bypasssafe.go
  99. 0 0
      vendor/github.com/davecgh/go-spew/spew/common.go
  100. 1 1
      vendor/github.com/davecgh/go-spew/spew/config.go

+ 1 - 2
.gitignore

@@ -13,8 +13,7 @@
 .ethtest
 */**/*tx_database*
 */**/*dapps*
-Godeps/_workspace/pkg
-Godeps/_workspace/bin
+build/_vendor/pkg
 
 #*
 .#*

+ 0 - 332
Godeps/Godeps.json

@@ -1,332 +0,0 @@
-{
-	"ImportPath": "github.com/ethereum/go-ethereum",
-	"GoVersion": "go1.7",
-	"GodepVersion": "v74",
-	"Packages": [
-		"./..."
-	],
-	"Deps": [
-		{
-			"ImportPath": "github.com/Gustav-Simonsson/go-opencl/cl",
-			"Rev": "593e01cfc4f3353585015321e01951d4a907d3ef"
-		},
-		{
-			"ImportPath": "github.com/cespare/cp",
-			"Rev": "165db2f241fd235aec29ba6d9b1ccd5f1c14637c"
-		},
-		{
-			"ImportPath": "github.com/davecgh/go-spew/spew",
-			"Rev": "5215b55f46b2b919f50a1df0eaa5886afe4e3b3d"
-		},
-		{
-			"ImportPath": "github.com/ethereum/ethash",
-			"Comment": "v23.1-247-g2e80de5",
-			"Rev": "2e80de5022370cfe632195b1720db52d07ff8a77"
-		},
-		{
-			"ImportPath": "github.com/fatih/color",
-			"Comment": "v0.1-12-g9aae6aa",
-			"Rev": "9aae6aaa22315390f03959adca2c4d395b02fcef"
-		},
-		{
-			"ImportPath": "github.com/gizak/termui",
-			"Rev": "08a5d3f67b7d9ec87830ea39c48e570a1f18531f"
-		},
-		{
-			"ImportPath": "github.com/golang/snappy",
-			"Rev": "799c780093d646c1b79d30894e22512c319fa137"
-		},
-		{
-			"ImportPath": "github.com/hashicorp/golang-lru",
-			"Rev": "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4"
-		},
-		{
-			"ImportPath": "github.com/hashicorp/golang-lru/simplelru",
-			"Rev": "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4"
-		},
-		{
-			"ImportPath": "github.com/huin/goupnp",
-			"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
-		},
-		{
-			"ImportPath": "github.com/huin/goupnp/dcps/internetgateway1",
-			"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
-		},
-		{
-			"ImportPath": "github.com/huin/goupnp/dcps/internetgateway2",
-			"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
-		},
-		{
-			"ImportPath": "github.com/huin/goupnp/httpu",
-			"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
-		},
-		{
-			"ImportPath": "github.com/huin/goupnp/scpd",
-			"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
-		},
-		{
-			"ImportPath": "github.com/huin/goupnp/soap",
-			"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
-		},
-		{
-			"ImportPath": "github.com/huin/goupnp/ssdp",
-			"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
-		},
-		{
-			"ImportPath": "github.com/jackpal/gateway",
-			"Rev": "192609c58b8985e645cbe82ddcb28a4362ca0fdc"
-		},
-		{
-			"ImportPath": "github.com/jackpal/go-nat-pmp",
-			"Rev": "46523a463303c6ede3ddfe45bde1c7ed52ebaacd"
-		},
-		{
-			"ImportPath": "github.com/mattn/go-colorable",
-			"Rev": "9fdad7c47650b7d2e1da50644c1f4ba7f172f252"
-		},
-		{
-			"ImportPath": "github.com/mattn/go-isatty",
-			"Rev": "56b76bdf51f7708750eac80fa38b952bb9f32639"
-		},
-		{
-			"ImportPath": "github.com/mattn/go-runewidth",
-			"Comment": "travisish-44-ge882a96",
-			"Rev": "e882a96ec18dd43fa283187b66af74497c9101c0"
-		},
-		{
-			"ImportPath": "github.com/nsf/termbox-go",
-			"Rev": "362329b0aa6447eadd52edd8d660ec1dff470295"
-		},
-		{
-			"ImportPath": "github.com/pborman/uuid",
-			"Comment": "v1.0-6-g0f1a469",
-			"Rev": "0f1a46960a86dcdf5dd30d3e6568a497a997909f"
-		},
-		{
-			"ImportPath": "github.com/peterh/liner",
-			"Rev": "ad1edfd30321d8f006ccf05f1e0524adeb943060"
-		},
-		{
-			"ImportPath": "github.com/rcrowley/go-metrics",
-			"Rev": "51425a2415d21afadfd55cd93432c0bc69e9598d"
-		},
-		{
-			"ImportPath": "github.com/rcrowley/go-metrics/exp",
-			"Rev": "51425a2415d21afadfd55cd93432c0bc69e9598d"
-		},
-		{
-			"ImportPath": "github.com/rjeczalik/notify",
-			"Rev": "f627deca7a510d96f0ef9388f2d0e8b16d21f87f"
-		},
-		{
-			"ImportPath": "github.com/robertkrimen/otto",
-			"Rev": "53221230c215611a90762720c9042ac782ef74ee"
-		},
-		{
-			"ImportPath": "github.com/robertkrimen/otto/ast",
-			"Rev": "53221230c215611a90762720c9042ac782ef74ee"
-		},
-		{
-			"ImportPath": "github.com/robertkrimen/otto/dbg",
-			"Rev": "53221230c215611a90762720c9042ac782ef74ee"
-		},
-		{
-			"ImportPath": "github.com/robertkrimen/otto/file",
-			"Rev": "53221230c215611a90762720c9042ac782ef74ee"
-		},
-		{
-			"ImportPath": "github.com/robertkrimen/otto/parser",
-			"Rev": "53221230c215611a90762720c9042ac782ef74ee"
-		},
-		{
-			"ImportPath": "github.com/robertkrimen/otto/registry",
-			"Rev": "53221230c215611a90762720c9042ac782ef74ee"
-		},
-		{
-			"ImportPath": "github.com/robertkrimen/otto/token",
-			"Rev": "53221230c215611a90762720c9042ac782ef74ee"
-		},
-		{
-			"ImportPath": "github.com/rs/cors",
-			"Rev": "5950cf11d77f8a61b432a25dd4d444b4ced01379"
-		},
-		{
-			"ImportPath": "github.com/rs/xhandler",
-			"Rev": "d9d9599b6aaf6a058cb7b1f48291ded2cbd13390"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/cache",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/comparer",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/errors",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/filter",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/iterator",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/journal",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/memdb",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/opt",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/storage",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/table",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "github.com/syndtr/goleveldb/leveldb/util",
-			"Rev": "6b4daa5362b502898ddf367c5c11deb9e7a5c727"
-		},
-		{
-			"ImportPath": "golang.org/x/crypto/pbkdf2",
-			"Rev": "351dc6a5bf92a5f2ae22fadeee08eb6a45aa2d93"
-		},
-		{
-			"ImportPath": "golang.org/x/crypto/ripemd160",
-			"Rev": "351dc6a5bf92a5f2ae22fadeee08eb6a45aa2d93"
-		},
-		{
-			"ImportPath": "golang.org/x/crypto/scrypt",
-			"Rev": "351dc6a5bf92a5f2ae22fadeee08eb6a45aa2d93"
-		},
-		{
-			"ImportPath": "golang.org/x/net/context",
-			"Rev": "6250b412798208e6c90b03b7c4f226de5aa299e2"
-		},
-		{
-			"ImportPath": "golang.org/x/net/html",
-			"Rev": "6250b412798208e6c90b03b7c4f226de5aa299e2"
-		},
-		{
-			"ImportPath": "golang.org/x/net/html/atom",
-			"Rev": "6250b412798208e6c90b03b7c4f226de5aa299e2"
-		},
-		{
-			"ImportPath": "golang.org/x/net/html/charset",
-			"Rev": "6250b412798208e6c90b03b7c4f226de5aa299e2"
-		},
-		{
-			"ImportPath": "golang.org/x/net/websocket",
-			"Rev": "6250b412798208e6c90b03b7c4f226de5aa299e2"
-		},
-		{
-			"ImportPath": "golang.org/x/sys/unix",
-			"Rev": "a646d33e2ee3172a661fc09bca23bb4889a41bc8"
-		},
-		{
-			"ImportPath": "golang.org/x/text/encoding",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/encoding/charmap",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/encoding/htmlindex",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/encoding/internal",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/encoding/internal/identifier",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/encoding/japanese",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/encoding/korean",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/encoding/simplifiedchinese",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/encoding/traditionalchinese",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/encoding/unicode",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/internal/tag",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/internal/utf8internal",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/language",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/runes",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/text/transform",
-			"Rev": "d69c40b4be55797923cec7457fac7a244d91a9b6"
-		},
-		{
-			"ImportPath": "golang.org/x/tools/go/ast/astutil",
-			"Rev": "9deed8c6c1c89e0b6d68d727f215de8e851d1064"
-		},
-		{
-			"ImportPath": "golang.org/x/tools/imports",
-			"Rev": "9deed8c6c1c89e0b6d68d727f215de8e851d1064"
-		},
-		{
-			"ImportPath": "gopkg.in/check.v1",
-			"Rev": "4f90aeace3a26ad7021961c297b22c42160c7b25"
-		},
-		{
-			"ImportPath": "gopkg.in/fatih/set.v0",
-			"Comment": "v0.1.0-3-g27c4092",
-			"Rev": "27c40922c40b43fe04554d8223a402af3ea333f3"
-		},
-		{
-			"ImportPath": "gopkg.in/karalabe/cookiejar.v2/collections/prque",
-			"Rev": "8dcd6a7f4951f6ff3ee9cbb919a06d8925822e57"
-		},
-		{
-			"ImportPath": "gopkg.in/natefinch/npipe.v2",
-			"Rev": "c1b8fa8bdccecb0b8db834ee0b92fdbcfa606dd6"
-		},
-		{
-			"ImportPath": "gopkg.in/urfave/cli.v1",
-			"Comment": "v1.17.0",
-			"Rev": "01857ac33766ce0c93856370626f9799281c14f4"
-		}
-	]
-}

+ 0 - 5
Godeps/Readme

@@ -1,5 +0,0 @@
-This directory tree is generated automatically by godep.
-
-Please do not edit.
-
-See https://github.com/tools/godep for more information.

+ 0 - 2
Godeps/_workspace/.gitignore

@@ -1,2 +0,0 @@
-/pkg
-/bin

+ 0 - 26
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/cl.go

@@ -1,26 +0,0 @@
-/*
-Package cl provides a binding to the OpenCL api. It's mostly a low-level
-wrapper that avoids adding functionality while still making the interface
-a little more friendly and easy to use.
-
-Resource life-cycle management:
-
-For any CL object that gets created (buffer, queue, kernel, etc..) you should
-call object.Release() when finished with it to free the CL resources. This
-explicitely calls the related clXXXRelease method for the type. However,
-as a fallback there is a finalizer set for every resource item that takes
-care of it (eventually) if Release isn't called. In this way you can have
-better control over the life cycle of resources while having a fall back
-to avoid leaks. This is similar to how file handles and such are handled
-in the Go standard packages.
-*/
-package cl
-
-// #include "headers/1.2/opencl.h"
-// #cgo CFLAGS: -Iheaders/1.2
-// #cgo darwin LDFLAGS: -framework OpenCL
-// #cgo linux LDFLAGS: -lOpenCL
-import "C"
-import "errors"
-
-var ErrUnsupported = errors.New("cl: unsupported")

+ 0 - 161
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/context.go

@@ -1,161 +0,0 @@
-package cl
-
-// #include <stdlib.h>
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-
-import (
-	"runtime"
-	"unsafe"
-)
-
-const maxImageFormats = 256
-
-type Context struct {
-	clContext C.cl_context
-	devices   []*Device
-}
-
-type MemObject struct {
-	clMem C.cl_mem
-	size  int
-}
-
-func releaseContext(c *Context) {
-	if c.clContext != nil {
-		C.clReleaseContext(c.clContext)
-		c.clContext = nil
-	}
-}
-
-func releaseMemObject(b *MemObject) {
-	if b.clMem != nil {
-		C.clReleaseMemObject(b.clMem)
-		b.clMem = nil
-	}
-}
-
-func newMemObject(mo C.cl_mem, size int) *MemObject {
-	memObject := &MemObject{clMem: mo, size: size}
-	runtime.SetFinalizer(memObject, releaseMemObject)
-	return memObject
-}
-
-func (b *MemObject) Release() {
-	releaseMemObject(b)
-}
-
-// TODO: properties
-func CreateContext(devices []*Device) (*Context, error) {
-	deviceIds := buildDeviceIdList(devices)
-	var err C.cl_int
-	clContext := C.clCreateContext(nil, C.cl_uint(len(devices)), &deviceIds[0], nil, nil, &err)
-	if err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	if clContext == nil {
-		return nil, ErrUnknown
-	}
-	context := &Context{clContext: clContext, devices: devices}
-	runtime.SetFinalizer(context, releaseContext)
-	return context, nil
-}
-
-func (ctx *Context) GetSupportedImageFormats(flags MemFlag, imageType MemObjectType) ([]ImageFormat, error) {
-	var formats [maxImageFormats]C.cl_image_format
-	var nFormats C.cl_uint
-	if err := C.clGetSupportedImageFormats(ctx.clContext, C.cl_mem_flags(flags), C.cl_mem_object_type(imageType), maxImageFormats, &formats[0], &nFormats); err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	fmts := make([]ImageFormat, nFormats)
-	for i, f := range formats[:nFormats] {
-		fmts[i] = ImageFormat{
-			ChannelOrder:    ChannelOrder(f.image_channel_order),
-			ChannelDataType: ChannelDataType(f.image_channel_data_type),
-		}
-	}
-	return fmts, nil
-}
-
-func (ctx *Context) CreateCommandQueue(device *Device, properties CommandQueueProperty) (*CommandQueue, error) {
-	var err C.cl_int
-	clQueue := C.clCreateCommandQueue(ctx.clContext, device.id, C.cl_command_queue_properties(properties), &err)
-	if err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	if clQueue == nil {
-		return nil, ErrUnknown
-	}
-	commandQueue := &CommandQueue{clQueue: clQueue, device: device}
-	runtime.SetFinalizer(commandQueue, releaseCommandQueue)
-	return commandQueue, nil
-}
-
-func (ctx *Context) CreateProgramWithSource(sources []string) (*Program, error) {
-	cSources := make([]*C.char, len(sources))
-	for i, s := range sources {
-		cs := C.CString(s)
-		cSources[i] = cs
-		defer C.free(unsafe.Pointer(cs))
-	}
-	var err C.cl_int
-	clProgram := C.clCreateProgramWithSource(ctx.clContext, C.cl_uint(len(sources)), &cSources[0], nil, &err)
-	if err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	if clProgram == nil {
-		return nil, ErrUnknown
-	}
-	program := &Program{clProgram: clProgram, devices: ctx.devices}
-	runtime.SetFinalizer(program, releaseProgram)
-	return program, nil
-}
-
-func (ctx *Context) CreateBufferUnsafe(flags MemFlag, size int, dataPtr unsafe.Pointer) (*MemObject, error) {
-	var err C.cl_int
-	clBuffer := C.clCreateBuffer(ctx.clContext, C.cl_mem_flags(flags), C.size_t(size), dataPtr, &err)
-	if err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	if clBuffer == nil {
-		return nil, ErrUnknown
-	}
-	return newMemObject(clBuffer, size), nil
-}
-
-func (ctx *Context) CreateEmptyBuffer(flags MemFlag, size int) (*MemObject, error) {
-	return ctx.CreateBufferUnsafe(flags, size, nil)
-}
-
-func (ctx *Context) CreateEmptyBufferFloat32(flags MemFlag, size int) (*MemObject, error) {
-	return ctx.CreateBufferUnsafe(flags, 4*size, nil)
-}
-
-func (ctx *Context) CreateBuffer(flags MemFlag, data []byte) (*MemObject, error) {
-	return ctx.CreateBufferUnsafe(flags, len(data), unsafe.Pointer(&data[0]))
-}
-
-//float64
-func (ctx *Context) CreateBufferFloat32(flags MemFlag, data []float32) (*MemObject, error) {
-	return ctx.CreateBufferUnsafe(flags, 4*len(data), unsafe.Pointer(&data[0]))
-}
-
-func (ctx *Context) CreateUserEvent() (*Event, error) {
-	var err C.cl_int
-	clEvent := C.clCreateUserEvent(ctx.clContext, &err)
-	if err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	return newEvent(clEvent), nil
-}
-
-func (ctx *Context) Release() {
-	releaseContext(ctx)
-}
-
-// http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateSubBuffer.html
-// func (memObject *MemObject) CreateSubBuffer(flags MemFlag, bufferCreateType BufferCreateType, )

+ 0 - 510
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/device.go

@@ -1,510 +0,0 @@
-package cl
-
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #include "cl_ext.h"
-// #endif
-import "C"
-
-import (
-	"strings"
-	"unsafe"
-)
-
-const maxDeviceCount = 64
-
-type DeviceType uint
-
-const (
-	DeviceTypeCPU         DeviceType = C.CL_DEVICE_TYPE_CPU
-	DeviceTypeGPU         DeviceType = C.CL_DEVICE_TYPE_GPU
-	DeviceTypeAccelerator DeviceType = C.CL_DEVICE_TYPE_ACCELERATOR
-	DeviceTypeDefault     DeviceType = C.CL_DEVICE_TYPE_DEFAULT
-	DeviceTypeAll         DeviceType = C.CL_DEVICE_TYPE_ALL
-)
-
-type FPConfig int
-
-const (
-	FPConfigDenorm         FPConfig = C.CL_FP_DENORM           // denorms are supported
-	FPConfigInfNaN         FPConfig = C.CL_FP_INF_NAN          // INF and NaNs are supported
-	FPConfigRoundToNearest FPConfig = C.CL_FP_ROUND_TO_NEAREST // round to nearest even rounding mode supported
-	FPConfigRoundToZero    FPConfig = C.CL_FP_ROUND_TO_ZERO    // round to zero rounding mode supported
-	FPConfigRoundToInf     FPConfig = C.CL_FP_ROUND_TO_INF     // round to positive and negative infinity rounding modes supported
-	FPConfigFMA            FPConfig = C.CL_FP_FMA              // IEEE754-2008 fused multiply-add is supported
-	FPConfigSoftFloat      FPConfig = C.CL_FP_SOFT_FLOAT       // Basic floating-point operations (such as addition, subtraction, multiplication) are implemented in software
-)
-
-var fpConfigNameMap = map[FPConfig]string{
-	FPConfigDenorm:         "Denorm",
-	FPConfigInfNaN:         "InfNaN",
-	FPConfigRoundToNearest: "RoundToNearest",
-	FPConfigRoundToZero:    "RoundToZero",
-	FPConfigRoundToInf:     "RoundToInf",
-	FPConfigFMA:            "FMA",
-	FPConfigSoftFloat:      "SoftFloat",
-}
-
-func (c FPConfig) String() string {
-	var parts []string
-	for bit, name := range fpConfigNameMap {
-		if c&bit != 0 {
-			parts = append(parts, name)
-		}
-	}
-	if parts == nil {
-		return ""
-	}
-	return strings.Join(parts, "|")
-}
-
-func (dt DeviceType) String() string {
-	var parts []string
-	if dt&DeviceTypeCPU != 0 {
-		parts = append(parts, "CPU")
-	}
-	if dt&DeviceTypeGPU != 0 {
-		parts = append(parts, "GPU")
-	}
-	if dt&DeviceTypeAccelerator != 0 {
-		parts = append(parts, "Accelerator")
-	}
-	if dt&DeviceTypeDefault != 0 {
-		parts = append(parts, "Default")
-	}
-	if parts == nil {
-		parts = append(parts, "None")
-	}
-	return strings.Join(parts, "|")
-}
-
-type Device struct {
-	id C.cl_device_id
-}
-
-func buildDeviceIdList(devices []*Device) []C.cl_device_id {
-	deviceIds := make([]C.cl_device_id, len(devices))
-	for i, d := range devices {
-		deviceIds[i] = d.id
-	}
-	return deviceIds
-}
-
-// Obtain the list of devices available on a platform. 'platform' refers
-// to the platform returned by GetPlatforms or can be nil. If platform
-// is nil, the behavior is implementation-defined.
-func GetDevices(platform *Platform, deviceType DeviceType) ([]*Device, error) {
-	var deviceIds [maxDeviceCount]C.cl_device_id
-	var numDevices C.cl_uint
-	var platformId C.cl_platform_id
-	if platform != nil {
-		platformId = platform.id
-	}
-	if err := C.clGetDeviceIDs(platformId, C.cl_device_type(deviceType), C.cl_uint(maxDeviceCount), &deviceIds[0], &numDevices); err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	if numDevices > maxDeviceCount {
-		numDevices = maxDeviceCount
-	}
-	devices := make([]*Device, numDevices)
-	for i := 0; i < int(numDevices); i++ {
-		devices[i] = &Device{id: deviceIds[i]}
-	}
-	return devices, nil
-}
-
-func (d *Device) nullableId() C.cl_device_id {
-	if d == nil {
-		return nil
-	}
-	return d.id
-}
-
-func (d *Device) GetInfoString(param C.cl_device_info, panicOnError bool) (string, error) {
-	var strC [1024]C.char
-	var strN C.size_t
-	if err := C.clGetDeviceInfo(d.id, param, 1024, unsafe.Pointer(&strC), &strN); err != C.CL_SUCCESS {
-		if panicOnError {
-			panic("Should never fail")
-		}
-		return "", toError(err)
-	}
-
-	// OpenCL strings are NUL-terminated, and the terminator is included in strN
-	// Go strings aren't NUL-terminated, so subtract 1 from the length
-	return C.GoStringN((*C.char)(unsafe.Pointer(&strC)), C.int(strN-1)), nil
-}
-
-func (d *Device) getInfoUint(param C.cl_device_info, panicOnError bool) (uint, error) {
-	var val C.cl_uint
-	if err := C.clGetDeviceInfo(d.id, param, C.size_t(unsafe.Sizeof(val)), unsafe.Pointer(&val), nil); err != C.CL_SUCCESS {
-		if panicOnError {
-			panic("Should never fail")
-		}
-		return 0, toError(err)
-	}
-	return uint(val), nil
-}
-
-func (d *Device) getInfoSize(param C.cl_device_info, panicOnError bool) (int, error) {
-	var val C.size_t
-	if err := C.clGetDeviceInfo(d.id, param, C.size_t(unsafe.Sizeof(val)), unsafe.Pointer(&val), nil); err != C.CL_SUCCESS {
-		if panicOnError {
-			panic("Should never fail")
-		}
-		return 0, toError(err)
-	}
-	return int(val), nil
-}
-
-func (d *Device) getInfoUlong(param C.cl_device_info, panicOnError bool) (int64, error) {
-	var val C.cl_ulong
-	if err := C.clGetDeviceInfo(d.id, param, C.size_t(unsafe.Sizeof(val)), unsafe.Pointer(&val), nil); err != C.CL_SUCCESS {
-		if panicOnError {
-			panic("Should never fail")
-		}
-		return 0, toError(err)
-	}
-	return int64(val), nil
-}
-
-func (d *Device) getInfoBool(param C.cl_device_info, panicOnError bool) (bool, error) {
-	var val C.cl_bool
-	if err := C.clGetDeviceInfo(d.id, param, C.size_t(unsafe.Sizeof(val)), unsafe.Pointer(&val), nil); err != C.CL_SUCCESS {
-		if panicOnError {
-			panic("Should never fail")
-		}
-		return false, toError(err)
-	}
-	return val == C.CL_TRUE, nil
-}
-
-func (d *Device) Name() string {
-	str, _ := d.GetInfoString(C.CL_DEVICE_NAME, true)
-	return str
-}
-
-func (d *Device) Vendor() string {
-	str, _ := d.GetInfoString(C.CL_DEVICE_VENDOR, true)
-	return str
-}
-
-func (d *Device) Extensions() string {
-	str, _ := d.GetInfoString(C.CL_DEVICE_EXTENSIONS, true)
-	return str
-}
-
-func (d *Device) OpenCLCVersion() string {
-	str, _ := d.GetInfoString(C.CL_DEVICE_OPENCL_C_VERSION, true)
-	return str
-}
-
-func (d *Device) Profile() string {
-	str, _ := d.GetInfoString(C.CL_DEVICE_PROFILE, true)
-	return str
-}
-
-func (d *Device) Version() string {
-	str, _ := d.GetInfoString(C.CL_DEVICE_VERSION, true)
-	return str
-}
-
-func (d *Device) DriverVersion() string {
-	str, _ := d.GetInfoString(C.CL_DRIVER_VERSION, true)
-	return str
-}
-
-// The default compute device address space size specified as an
-// unsigned integer value in bits. Currently supported values are 32 or 64 bits.
-func (d *Device) AddressBits() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_ADDRESS_BITS, true)
-	return int(val)
-}
-
-// Size of global memory cache line in bytes.
-func (d *Device) GlobalMemCachelineSize() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, true)
-	return int(val)
-}
-
-// Maximum configured clock frequency of the device in MHz.
-func (d *Device) MaxClockFrequency() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_MAX_CLOCK_FREQUENCY, true)
-	return int(val)
-}
-
-// The number of parallel compute units on the OpenCL device.
-// A work-group executes on a single compute unit. The minimum value is 1.
-func (d *Device) MaxComputeUnits() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_MAX_COMPUTE_UNITS, true)
-	return int(val)
-}
-
-// Max number of arguments declared with the __constant qualifier in a kernel.
-// The minimum value is 8 for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
-func (d *Device) MaxConstantArgs() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_MAX_CONSTANT_ARGS, true)
-	return int(val)
-}
-
-// Max number of simultaneous image objects that can be read by a kernel.
-// The minimum value is 128 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
-func (d *Device) MaxReadImageArgs() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_MAX_READ_IMAGE_ARGS, true)
-	return int(val)
-}
-
-// Maximum number of samplers that can be used in a kernel. The minimum
-// value is 16 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE. (Also see sampler_t.)
-func (d *Device) MaxSamplers() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_MAX_SAMPLERS, true)
-	return int(val)
-}
-
-// Maximum dimensions that specify the global and local work-item IDs used
-// by the data parallel execution model. (Refer to clEnqueueNDRangeKernel).
-// The minimum value is 3 for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
-func (d *Device) MaxWorkItemDimensions() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, true)
-	return int(val)
-}
-
-// Max number of simultaneous image objects that can be written to by a
-// kernel. The minimum value is 8 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
-func (d *Device) MaxWriteImageArgs() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_MAX_WRITE_IMAGE_ARGS, true)
-	return int(val)
-}
-
-// The minimum value is the size (in bits) of the largest OpenCL built-in
-// data type supported by the device (long16 in FULL profile, long16 or
-// int16 in EMBEDDED profile) for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
-func (d *Device) MemBaseAddrAlign() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_MEM_BASE_ADDR_ALIGN, true)
-	return int(val)
-}
-
-func (d *Device) NativeVectorWidthChar() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, true)
-	return int(val)
-}
-
-func (d *Device) NativeVectorWidthShort() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, true)
-	return int(val)
-}
-
-func (d *Device) NativeVectorWidthInt() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, true)
-	return int(val)
-}
-
-func (d *Device) NativeVectorWidthLong() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, true)
-	return int(val)
-}
-
-func (d *Device) NativeVectorWidthFloat() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, true)
-	return int(val)
-}
-
-func (d *Device) NativeVectorWidthDouble() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, true)
-	return int(val)
-}
-
-func (d *Device) NativeVectorWidthHalf() int {
-	val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, true)
-	return int(val)
-}
-
-// Max height of 2D image in pixels. The minimum value is 8192
-// if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
-func (d *Device) Image2DMaxHeight() int {
-	val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE2D_MAX_HEIGHT, true)
-	return int(val)
-}
-
-// Max width of 2D image or 1D image not created from a buffer object in
-// pixels. The minimum value is 8192 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
-func (d *Device) Image2DMaxWidth() int {
-	val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE2D_MAX_WIDTH, true)
-	return int(val)
-}
-
-// Max depth of 3D image in pixels. The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
-func (d *Device) Image3DMaxDepth() int {
-	val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE3D_MAX_DEPTH, true)
-	return int(val)
-}
-
-// Max height of 3D image in pixels. The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
-func (d *Device) Image3DMaxHeight() int {
-	val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE3D_MAX_HEIGHT, true)
-	return int(val)
-}
-
-// Max width of 3D image in pixels. The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
-func (d *Device) Image3DMaxWidth() int {
-	val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE3D_MAX_WIDTH, true)
-	return int(val)
-}
-
-// Max size in bytes of the arguments that can be passed to a kernel. The
-// minimum value is 1024 for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
-// For this minimum value, only a maximum of 128 arguments can be passed to a kernel.
-func (d *Device) MaxParameterSize() int {
-	val, _ := d.getInfoSize(C.CL_DEVICE_MAX_PARAMETER_SIZE, true)
-	return int(val)
-}
-
-// Maximum number of work-items in a work-group executing a kernel on a
-// single compute unit, using the data parallel execution model. (Refer
-// to clEnqueueNDRangeKernel). The minimum value is 1.
-func (d *Device) MaxWorkGroupSize() int {
-	val, _ := d.getInfoSize(C.CL_DEVICE_MAX_WORK_GROUP_SIZE, true)
-	return int(val)
-}
-
-// Describes the resolution of device timer. This is measured in nanoseconds.
-func (d *Device) ProfilingTimerResolution() int {
-	val, _ := d.getInfoSize(C.CL_DEVICE_PROFILING_TIMER_RESOLUTION, true)
-	return int(val)
-}
-
-// Size of local memory arena in bytes. The minimum value is 32 KB for
-// devices that are not of type CL_DEVICE_TYPE_CUSTOM.
-func (d *Device) LocalMemSize() int64 {
-	val, _ := d.getInfoUlong(C.CL_DEVICE_LOCAL_MEM_SIZE, true)
-	return val
-}
-
-// Max size in bytes of a constant buffer allocation. The minimum value is
-// 64 KB for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
-func (d *Device) MaxConstantBufferSize() int64 {
-	val, _ := d.getInfoUlong(C.CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, true)
-	return val
-}
-
-// Max size of memory object allocation in bytes. The minimum value is max
-// (1/4th of CL_DEVICE_GLOBAL_MEM_SIZE, 128*1024*1024) for devices that are
-// not of type CL_DEVICE_TYPE_CUSTOM.
-func (d *Device) MaxMemAllocSize() int64 {
-	val, _ := d.getInfoUlong(C.CL_DEVICE_MAX_MEM_ALLOC_SIZE, true)
-	return val
-}
-
-// Size of global device memory in bytes.
-func (d *Device) GlobalMemSize() int64 {
-	val, _ := d.getInfoUlong(C.CL_DEVICE_GLOBAL_MEM_SIZE, true)
-	return val
-}
-
-func (d *Device) Available() bool {
-	val, _ := d.getInfoBool(C.CL_DEVICE_AVAILABLE, true)
-	return val
-}
-
-func (d *Device) CompilerAvailable() bool {
-	val, _ := d.getInfoBool(C.CL_DEVICE_COMPILER_AVAILABLE, true)
-	return val
-}
-
-func (d *Device) EndianLittle() bool {
-	val, _ := d.getInfoBool(C.CL_DEVICE_ENDIAN_LITTLE, true)
-	return val
-}
-
-// Is CL_TRUE if the device implements error correction for all
-// accesses to compute device memory (global and constant). Is
-// CL_FALSE if the device does not implement such error correction.
-func (d *Device) ErrorCorrectionSupport() bool {
-	val, _ := d.getInfoBool(C.CL_DEVICE_ERROR_CORRECTION_SUPPORT, true)
-	return val
-}
-
-func (d *Device) HostUnifiedMemory() bool {
-	val, _ := d.getInfoBool(C.CL_DEVICE_HOST_UNIFIED_MEMORY, true)
-	return val
-}
-
-func (d *Device) ImageSupport() bool {
-	val, _ := d.getInfoBool(C.CL_DEVICE_IMAGE_SUPPORT, true)
-	return val
-}
-
-func (d *Device) Type() DeviceType {
-	var deviceType C.cl_device_type
-	if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_TYPE, C.size_t(unsafe.Sizeof(deviceType)), unsafe.Pointer(&deviceType), nil); err != C.CL_SUCCESS {
-		panic("Failed to get device type")
-	}
-	return DeviceType(deviceType)
-}
-
-// Describes double precision floating-point capability of the OpenCL device
-func (d *Device) DoubleFPConfig() FPConfig {
-	var fpConfig C.cl_device_fp_config
-	if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_DOUBLE_FP_CONFIG, C.size_t(unsafe.Sizeof(fpConfig)), unsafe.Pointer(&fpConfig), nil); err != C.CL_SUCCESS {
-		panic("Failed to get double FP config")
-	}
-	return FPConfig(fpConfig)
-}
-
-// Describes the OPTIONAL half precision floating-point capability of the OpenCL device
-func (d *Device) HalfFPConfig() FPConfig {
-	var fpConfig C.cl_device_fp_config
-	err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_HALF_FP_CONFIG, C.size_t(unsafe.Sizeof(fpConfig)), unsafe.Pointer(&fpConfig), nil)
-	if err != C.CL_SUCCESS {
-		return FPConfig(0)
-	}
-	return FPConfig(fpConfig)
-}
-
-// Type of local memory supported. This can be set to CL_LOCAL implying dedicated
-// local memory storage such as SRAM, or CL_GLOBAL. For custom devices, CL_NONE
-// can also be returned indicating no local memory support.
-func (d *Device) LocalMemType() LocalMemType {
-	var memType C.cl_device_local_mem_type
-	if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_LOCAL_MEM_TYPE, C.size_t(unsafe.Sizeof(memType)), unsafe.Pointer(&memType), nil); err != C.CL_SUCCESS {
-		return LocalMemType(C.CL_NONE)
-	}
-	return LocalMemType(memType)
-}
-
-// Describes the execution capabilities of the device. The mandated minimum capability is CL_EXEC_KERNEL.
-func (d *Device) ExecutionCapabilities() ExecCapability {
-	var execCap C.cl_device_exec_capabilities
-	if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_EXECUTION_CAPABILITIES, C.size_t(unsafe.Sizeof(execCap)), unsafe.Pointer(&execCap), nil); err != C.CL_SUCCESS {
-		panic("Failed to get execution capabilities")
-	}
-	return ExecCapability(execCap)
-}
-
-func (d *Device) GlobalMemCacheType() MemCacheType {
-	var memType C.cl_device_mem_cache_type
-	if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, C.size_t(unsafe.Sizeof(memType)), unsafe.Pointer(&memType), nil); err != C.CL_SUCCESS {
-		return MemCacheType(C.CL_NONE)
-	}
-	return MemCacheType(memType)
-}
-
-// Maximum number of work-items that can be specified in each dimension of the work-group to clEnqueueNDRangeKernel.
-//
-// Returns n size_t entries, where n is the value returned by the query for CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS.
-//
-// The minimum value is (1, 1, 1) for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
-func (d *Device) MaxWorkItemSizes() []int {
-	dims := d.MaxWorkItemDimensions()
-	sizes := make([]C.size_t, dims)
-	if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_MAX_WORK_ITEM_SIZES, C.size_t(int(unsafe.Sizeof(sizes[0]))*dims), unsafe.Pointer(&sizes[0]), nil); err != C.CL_SUCCESS {
-		panic("Failed to get max work item sizes")
-	}
-	intSizes := make([]int, dims)
-	for i, s := range sizes {
-		intSizes[i] = int(s)
-	}
-	return intSizes
-}

+ 0 - 51
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/device12.go

@@ -1,51 +0,0 @@
-// +build cl12
-
-package cl
-
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-import "unsafe"
-
-const FPConfigCorrectlyRoundedDivideSqrt FPConfig = C.CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT
-
-func init() {
-	fpConfigNameMap[FPConfigCorrectlyRoundedDivideSqrt] = "CorrectlyRoundedDivideSqrt"
-}
-
-func (d *Device) BuiltInKernels() string {
-	str, _ := d.getInfoString(C.CL_DEVICE_BUILT_IN_KERNELS, true)
-	return str
-}
-
-// Is CL_FALSE if the implementation does not have a linker available. Is CL_TRUE if the linker is available. This can be CL_FALSE for the embedded platform profile only. This must be CL_TRUE if CL_DEVICE_COMPILER_AVAILABLE is CL_TRUE
-func (d *Device) LinkerAvailable() bool {
-	val, _ := d.getInfoBool(C.CL_DEVICE_LINKER_AVAILABLE, true)
-	return val
-}
-
-func (d *Device) ParentDevice() *Device {
-	var deviceId C.cl_device_id
-	if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_PARENT_DEVICE, C.size_t(unsafe.Sizeof(deviceId)), unsafe.Pointer(&deviceId), nil); err != C.CL_SUCCESS {
-		panic("ParentDevice failed")
-	}
-	if deviceId == nil {
-		return nil
-	}
-	return &Device{id: deviceId}
-}
-
-// Max number of pixels for a 1D image created from a buffer object. The minimum value is 65536 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
-func (d *Device) ImageMaxBufferSize() int {
-	val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE_MAX_BUFFER_SIZE, true)
-	return int(val)
-}
-
-// Max number of images in a 1D or 2D image array. The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE
-func (d *Device) ImageMaxArraySize() int {
-	val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE_MAX_ARRAY_SIZE, true)
-	return int(val)
-}

+ 0 - 1210
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/cl.h

@@ -1,1210 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 - 2012 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Materials.
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
- ******************************************************************************/
-
-#ifndef __OPENCL_CL_H
-#define __OPENCL_CL_H
-
-#include <cl_platform.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/******************************************************************************/
-
-typedef struct _cl_platform_id *    cl_platform_id;
-typedef struct _cl_device_id *      cl_device_id;
-typedef struct _cl_context *        cl_context;
-typedef struct _cl_command_queue *  cl_command_queue;
-typedef struct _cl_mem *            cl_mem;
-typedef struct _cl_program *        cl_program;
-typedef struct _cl_kernel *         cl_kernel;
-typedef struct _cl_event *          cl_event;
-typedef struct _cl_sampler *        cl_sampler;
-
-typedef cl_uint             cl_bool;                     /* WARNING!  Unlike cl_ types in cl_platform.h, cl_bool is not guaranteed to be the same size as the bool in kernels. */ 
-typedef cl_ulong            cl_bitfield;
-typedef cl_bitfield         cl_device_type;
-typedef cl_uint             cl_platform_info;
-typedef cl_uint             cl_device_info;
-typedef cl_bitfield         cl_device_fp_config;
-typedef cl_uint             cl_device_mem_cache_type;
-typedef cl_uint             cl_device_local_mem_type;
-typedef cl_bitfield         cl_device_exec_capabilities;
-typedef cl_bitfield         cl_command_queue_properties;
-typedef intptr_t            cl_device_partition_property;
-typedef cl_bitfield         cl_device_affinity_domain;
-
-typedef intptr_t            cl_context_properties;
-typedef cl_uint             cl_context_info;
-typedef cl_uint             cl_command_queue_info;
-typedef cl_uint             cl_channel_order;
-typedef cl_uint             cl_channel_type;
-typedef cl_bitfield         cl_mem_flags;
-typedef cl_uint             cl_mem_object_type;
-typedef cl_uint             cl_mem_info;
-typedef cl_bitfield         cl_mem_migration_flags;
-typedef cl_uint             cl_image_info;
-typedef cl_uint             cl_buffer_create_type;
-typedef cl_uint             cl_addressing_mode;
-typedef cl_uint             cl_filter_mode;
-typedef cl_uint             cl_sampler_info;
-typedef cl_bitfield         cl_map_flags;
-typedef cl_uint             cl_program_info;
-typedef cl_uint             cl_program_build_info;
-typedef cl_uint             cl_program_binary_type;
-typedef cl_int              cl_build_status;
-typedef cl_uint             cl_kernel_info;
-typedef cl_uint             cl_kernel_arg_info;
-typedef cl_uint             cl_kernel_arg_address_qualifier;
-typedef cl_uint             cl_kernel_arg_access_qualifier;
-typedef cl_bitfield         cl_kernel_arg_type_qualifier;
-typedef cl_uint             cl_kernel_work_group_info;
-typedef cl_uint             cl_event_info;
-typedef cl_uint             cl_command_type;
-typedef cl_uint             cl_profiling_info;
-
-
-typedef struct _cl_image_format {
-    cl_channel_order        image_channel_order;
-    cl_channel_type         image_channel_data_type;
-} cl_image_format;
-
-typedef struct _cl_image_desc {
-    cl_mem_object_type      image_type;
-    size_t                  image_width;
-    size_t                  image_height;
-    size_t                  image_depth;
-    size_t                  image_array_size;
-    size_t                  image_row_pitch;
-    size_t                  image_slice_pitch;
-    cl_uint                 num_mip_levels;
-    cl_uint                 num_samples;
-    cl_mem                  buffer;
-} cl_image_desc;
-
-typedef struct _cl_buffer_region {
-    size_t                  origin;
-    size_t                  size;
-} cl_buffer_region;
-
-
-/******************************************************************************/
-
-/* Error Codes */
-#define CL_SUCCESS                                  0
-#define CL_DEVICE_NOT_FOUND                         -1
-#define CL_DEVICE_NOT_AVAILABLE                     -2
-#define CL_COMPILER_NOT_AVAILABLE                   -3
-#define CL_MEM_OBJECT_ALLOCATION_FAILURE            -4
-#define CL_OUT_OF_RESOURCES                         -5
-#define CL_OUT_OF_HOST_MEMORY                       -6
-#define CL_PROFILING_INFO_NOT_AVAILABLE             -7
-#define CL_MEM_COPY_OVERLAP                         -8
-#define CL_IMAGE_FORMAT_MISMATCH                    -9
-#define CL_IMAGE_FORMAT_NOT_SUPPORTED               -10
-#define CL_BUILD_PROGRAM_FAILURE                    -11
-#define CL_MAP_FAILURE                              -12
-#define CL_MISALIGNED_SUB_BUFFER_OFFSET             -13
-#define CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST -14
-#define CL_COMPILE_PROGRAM_FAILURE                  -15
-#define CL_LINKER_NOT_AVAILABLE                     -16
-#define CL_LINK_PROGRAM_FAILURE                     -17
-#define CL_DEVICE_PARTITION_FAILED                  -18
-#define CL_KERNEL_ARG_INFO_NOT_AVAILABLE            -19
-
-#define CL_INVALID_VALUE                            -30
-#define CL_INVALID_DEVICE_TYPE                      -31
-#define CL_INVALID_PLATFORM                         -32
-#define CL_INVALID_DEVICE                           -33
-#define CL_INVALID_CONTEXT                          -34
-#define CL_INVALID_QUEUE_PROPERTIES                 -35
-#define CL_INVALID_COMMAND_QUEUE                    -36
-#define CL_INVALID_HOST_PTR                         -37
-#define CL_INVALID_MEM_OBJECT                       -38
-#define CL_INVALID_IMAGE_FORMAT_DESCRIPTOR          -39
-#define CL_INVALID_IMAGE_SIZE                       -40
-#define CL_INVALID_SAMPLER                          -41
-#define CL_INVALID_BINARY                           -42
-#define CL_INVALID_BUILD_OPTIONS                    -43
-#define CL_INVALID_PROGRAM                          -44
-#define CL_INVALID_PROGRAM_EXECUTABLE               -45
-#define CL_INVALID_KERNEL_NAME                      -46
-#define CL_INVALID_KERNEL_DEFINITION                -47
-#define CL_INVALID_KERNEL                           -48
-#define CL_INVALID_ARG_INDEX                        -49
-#define CL_INVALID_ARG_VALUE                        -50
-#define CL_INVALID_ARG_SIZE                         -51
-#define CL_INVALID_KERNEL_ARGS                      -52
-#define CL_INVALID_WORK_DIMENSION                   -53
-#define CL_INVALID_WORK_GROUP_SIZE                  -54
-#define CL_INVALID_WORK_ITEM_SIZE                   -55
-#define CL_INVALID_GLOBAL_OFFSET                    -56
-#define CL_INVALID_EVENT_WAIT_LIST                  -57
-#define CL_INVALID_EVENT                            -58
-#define CL_INVALID_OPERATION                        -59
-#define CL_INVALID_GL_OBJECT                        -60
-#define CL_INVALID_BUFFER_SIZE                      -61
-#define CL_INVALID_MIP_LEVEL                        -62
-#define CL_INVALID_GLOBAL_WORK_SIZE                 -63
-#define CL_INVALID_PROPERTY                         -64
-#define CL_INVALID_IMAGE_DESCRIPTOR                 -65
-#define CL_INVALID_COMPILER_OPTIONS                 -66
-#define CL_INVALID_LINKER_OPTIONS                   -67
-#define CL_INVALID_DEVICE_PARTITION_COUNT           -68
-
-/* OpenCL Version */
-#define CL_VERSION_1_0                              1
-#define CL_VERSION_1_1                              1
-#define CL_VERSION_1_2                              1
-
-/* cl_bool */
-#define CL_FALSE                                    0
-#define CL_TRUE                                     1
-#define CL_BLOCKING                                 CL_TRUE
-#define CL_NON_BLOCKING                             CL_FALSE
-
-/* cl_platform_info */
-#define CL_PLATFORM_PROFILE                         0x0900
-#define CL_PLATFORM_VERSION                         0x0901
-#define CL_PLATFORM_NAME                            0x0902
-#define CL_PLATFORM_VENDOR                          0x0903
-#define CL_PLATFORM_EXTENSIONS                      0x0904
-
-/* cl_device_type - bitfield */
-#define CL_DEVICE_TYPE_DEFAULT                      (1 << 0)
-#define CL_DEVICE_TYPE_CPU                          (1 << 1)
-#define CL_DEVICE_TYPE_GPU                          (1 << 2)
-#define CL_DEVICE_TYPE_ACCELERATOR                  (1 << 3)
-#define CL_DEVICE_TYPE_CUSTOM                       (1 << 4)
-#define CL_DEVICE_TYPE_ALL                          0xFFFFFFFF
-
-/* cl_device_info */
-#define CL_DEVICE_TYPE                              0x1000
-#define CL_DEVICE_VENDOR_ID                         0x1001
-#define CL_DEVICE_MAX_COMPUTE_UNITS                 0x1002
-#define CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS          0x1003
-#define CL_DEVICE_MAX_WORK_GROUP_SIZE               0x1004
-#define CL_DEVICE_MAX_WORK_ITEM_SIZES               0x1005
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR       0x1006
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT      0x1007
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT        0x1008
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG       0x1009
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT      0x100A
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE     0x100B
-#define CL_DEVICE_MAX_CLOCK_FREQUENCY               0x100C
-#define CL_DEVICE_ADDRESS_BITS                      0x100D
-#define CL_DEVICE_MAX_READ_IMAGE_ARGS               0x100E
-#define CL_DEVICE_MAX_WRITE_IMAGE_ARGS              0x100F
-#define CL_DEVICE_MAX_MEM_ALLOC_SIZE                0x1010
-#define CL_DEVICE_IMAGE2D_MAX_WIDTH                 0x1011
-#define CL_DEVICE_IMAGE2D_MAX_HEIGHT                0x1012
-#define CL_DEVICE_IMAGE3D_MAX_WIDTH                 0x1013
-#define CL_DEVICE_IMAGE3D_MAX_HEIGHT                0x1014
-#define CL_DEVICE_IMAGE3D_MAX_DEPTH                 0x1015
-#define CL_DEVICE_IMAGE_SUPPORT                     0x1016
-#define CL_DEVICE_MAX_PARAMETER_SIZE                0x1017
-#define CL_DEVICE_MAX_SAMPLERS                      0x1018
-#define CL_DEVICE_MEM_BASE_ADDR_ALIGN               0x1019
-#define CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE          0x101A
-#define CL_DEVICE_SINGLE_FP_CONFIG                  0x101B
-#define CL_DEVICE_GLOBAL_MEM_CACHE_TYPE             0x101C
-#define CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE         0x101D
-#define CL_DEVICE_GLOBAL_MEM_CACHE_SIZE             0x101E
-#define CL_DEVICE_GLOBAL_MEM_SIZE                   0x101F
-#define CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE          0x1020
-#define CL_DEVICE_MAX_CONSTANT_ARGS                 0x1021
-#define CL_DEVICE_LOCAL_MEM_TYPE                    0x1022
-#define CL_DEVICE_LOCAL_MEM_SIZE                    0x1023
-#define CL_DEVICE_ERROR_CORRECTION_SUPPORT          0x1024
-#define CL_DEVICE_PROFILING_TIMER_RESOLUTION        0x1025
-#define CL_DEVICE_ENDIAN_LITTLE                     0x1026
-#define CL_DEVICE_AVAILABLE                         0x1027
-#define CL_DEVICE_COMPILER_AVAILABLE                0x1028
-#define CL_DEVICE_EXECUTION_CAPABILITIES            0x1029
-#define CL_DEVICE_QUEUE_PROPERTIES                  0x102A
-#define CL_DEVICE_NAME                              0x102B
-#define CL_DEVICE_VENDOR                            0x102C
-#define CL_DRIVER_VERSION                           0x102D
-#define CL_DEVICE_PROFILE                           0x102E
-#define CL_DEVICE_VERSION                           0x102F
-#define CL_DEVICE_EXTENSIONS                        0x1030
-#define CL_DEVICE_PLATFORM                          0x1031
-#define CL_DEVICE_DOUBLE_FP_CONFIG                  0x1032
-/* 0x1033 reserved for CL_DEVICE_HALF_FP_CONFIG */
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF       0x1034
-#define CL_DEVICE_HOST_UNIFIED_MEMORY               0x1035
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR          0x1036
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT         0x1037
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_INT           0x1038
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG          0x1039
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT         0x103A
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE        0x103B
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF          0x103C
-#define CL_DEVICE_OPENCL_C_VERSION                  0x103D
-#define CL_DEVICE_LINKER_AVAILABLE                  0x103E
-#define CL_DEVICE_BUILT_IN_KERNELS                  0x103F
-#define CL_DEVICE_IMAGE_MAX_BUFFER_SIZE             0x1040
-#define CL_DEVICE_IMAGE_MAX_ARRAY_SIZE              0x1041
-#define CL_DEVICE_PARENT_DEVICE                     0x1042
-#define CL_DEVICE_PARTITION_MAX_SUB_DEVICES         0x1043
-#define CL_DEVICE_PARTITION_PROPERTIES              0x1044
-#define CL_DEVICE_PARTITION_AFFINITY_DOMAIN         0x1045
-#define CL_DEVICE_PARTITION_TYPE                    0x1046
-#define CL_DEVICE_REFERENCE_COUNT                   0x1047
-#define CL_DEVICE_PREFERRED_INTEROP_USER_SYNC       0x1048
-#define CL_DEVICE_PRINTF_BUFFER_SIZE                0x1049
-#define CL_DEVICE_IMAGE_PITCH_ALIGNMENT             0x104A
-#define CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT      0x104B
-
-/* cl_device_fp_config - bitfield */
-#define CL_FP_DENORM                                (1 << 0)
-#define CL_FP_INF_NAN                               (1 << 1)
-#define CL_FP_ROUND_TO_NEAREST                      (1 << 2)
-#define CL_FP_ROUND_TO_ZERO                         (1 << 3)
-#define CL_FP_ROUND_TO_INF                          (1 << 4)
-#define CL_FP_FMA                                   (1 << 5)
-#define CL_FP_SOFT_FLOAT                            (1 << 6)
-#define CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT         (1 << 7)
-
-/* cl_device_mem_cache_type */
-#define CL_NONE                                     0x0
-#define CL_READ_ONLY_CACHE                          0x1
-#define CL_READ_WRITE_CACHE                         0x2
-
-/* cl_device_local_mem_type */
-#define CL_LOCAL                                    0x1
-#define CL_GLOBAL                                   0x2
-
-/* cl_device_exec_capabilities - bitfield */
-#define CL_EXEC_KERNEL                              (1 << 0)
-#define CL_EXEC_NATIVE_KERNEL                       (1 << 1)
-
-/* cl_command_queue_properties - bitfield */
-#define CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE      (1 << 0)
-#define CL_QUEUE_PROFILING_ENABLE                   (1 << 1)
-
-/* cl_context_info  */
-#define CL_CONTEXT_REFERENCE_COUNT                  0x1080
-#define CL_CONTEXT_DEVICES                          0x1081
-#define CL_CONTEXT_PROPERTIES                       0x1082
-#define CL_CONTEXT_NUM_DEVICES                      0x1083
-
-/* cl_context_properties */
-#define CL_CONTEXT_PLATFORM                         0x1084
-#define CL_CONTEXT_INTEROP_USER_SYNC                0x1085
-    
-/* cl_device_partition_property */
-#define CL_DEVICE_PARTITION_EQUALLY                 0x1086
-#define CL_DEVICE_PARTITION_BY_COUNTS               0x1087
-#define CL_DEVICE_PARTITION_BY_COUNTS_LIST_END      0x0
-#define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN      0x1088
-    
-/* cl_device_affinity_domain */
-#define CL_DEVICE_AFFINITY_DOMAIN_NUMA                     (1 << 0)
-#define CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE                 (1 << 1)
-#define CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE                 (1 << 2)
-#define CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE                 (1 << 3)
-#define CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE                 (1 << 4)
-#define CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE       (1 << 5)
-
-/* cl_command_queue_info */
-#define CL_QUEUE_CONTEXT                            0x1090
-#define CL_QUEUE_DEVICE                             0x1091
-#define CL_QUEUE_REFERENCE_COUNT                    0x1092
-#define CL_QUEUE_PROPERTIES                         0x1093
-
-/* cl_mem_flags - bitfield */
-#define CL_MEM_READ_WRITE                           (1 << 0)
-#define CL_MEM_WRITE_ONLY                           (1 << 1)
-#define CL_MEM_READ_ONLY                            (1 << 2)
-#define CL_MEM_USE_HOST_PTR                         (1 << 3)
-#define CL_MEM_ALLOC_HOST_PTR                       (1 << 4)
-#define CL_MEM_COPY_HOST_PTR                        (1 << 5)
-/* reserved                                         (1 << 6)    */
-#define CL_MEM_HOST_WRITE_ONLY                      (1 << 7)
-#define CL_MEM_HOST_READ_ONLY                       (1 << 8)
-#define CL_MEM_HOST_NO_ACCESS                       (1 << 9)
-
-/* cl_mem_migration_flags - bitfield */
-#define CL_MIGRATE_MEM_OBJECT_HOST                  (1 << 0)
-#define CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED     (1 << 1)
-
-/* cl_channel_order */
-#define CL_R                                        0x10B0
-#define CL_A                                        0x10B1
-#define CL_RG                                       0x10B2
-#define CL_RA                                       0x10B3
-#define CL_RGB                                      0x10B4
-#define CL_RGBA                                     0x10B5
-#define CL_BGRA                                     0x10B6
-#define CL_ARGB                                     0x10B7
-#define CL_INTENSITY                                0x10B8
-#define CL_LUMINANCE                                0x10B9
-#define CL_Rx                                       0x10BA
-#define CL_RGx                                      0x10BB
-#define CL_RGBx                                     0x10BC
-#define CL_DEPTH                                    0x10BD
-#define CL_DEPTH_STENCIL                            0x10BE
-
-/* cl_channel_type */
-#define CL_SNORM_INT8                               0x10D0
-#define CL_SNORM_INT16                              0x10D1
-#define CL_UNORM_INT8                               0x10D2
-#define CL_UNORM_INT16                              0x10D3
-#define CL_UNORM_SHORT_565                          0x10D4
-#define CL_UNORM_SHORT_555                          0x10D5
-#define CL_UNORM_INT_101010                         0x10D6
-#define CL_SIGNED_INT8                              0x10D7
-#define CL_SIGNED_INT16                             0x10D8
-#define CL_SIGNED_INT32                             0x10D9
-#define CL_UNSIGNED_INT8                            0x10DA
-#define CL_UNSIGNED_INT16                           0x10DB
-#define CL_UNSIGNED_INT32                           0x10DC
-#define CL_HALF_FLOAT                               0x10DD
-#define CL_FLOAT                                    0x10DE
-#define CL_UNORM_INT24                              0x10DF
-
-/* cl_mem_object_type */
-#define CL_MEM_OBJECT_BUFFER                        0x10F0
-#define CL_MEM_OBJECT_IMAGE2D                       0x10F1
-#define CL_MEM_OBJECT_IMAGE3D                       0x10F2
-#define CL_MEM_OBJECT_IMAGE2D_ARRAY                 0x10F3
-#define CL_MEM_OBJECT_IMAGE1D                       0x10F4
-#define CL_MEM_OBJECT_IMAGE1D_ARRAY                 0x10F5
-#define CL_MEM_OBJECT_IMAGE1D_BUFFER                0x10F6
-
-/* cl_mem_info */
-#define CL_MEM_TYPE                                 0x1100
-#define CL_MEM_FLAGS                                0x1101
-#define CL_MEM_SIZE                                 0x1102
-#define CL_MEM_HOST_PTR                             0x1103
-#define CL_MEM_MAP_COUNT                            0x1104
-#define CL_MEM_REFERENCE_COUNT                      0x1105
-#define CL_MEM_CONTEXT                              0x1106
-#define CL_MEM_ASSOCIATED_MEMOBJECT                 0x1107
-#define CL_MEM_OFFSET                               0x1108
-
-/* cl_image_info */
-#define CL_IMAGE_FORMAT                             0x1110
-#define CL_IMAGE_ELEMENT_SIZE                       0x1111
-#define CL_IMAGE_ROW_PITCH                          0x1112
-#define CL_IMAGE_SLICE_PITCH                        0x1113
-#define CL_IMAGE_WIDTH                              0x1114
-#define CL_IMAGE_HEIGHT                             0x1115
-#define CL_IMAGE_DEPTH                              0x1116
-#define CL_IMAGE_ARRAY_SIZE                         0x1117
-#define CL_IMAGE_BUFFER                             0x1118
-#define CL_IMAGE_NUM_MIP_LEVELS                     0x1119
-#define CL_IMAGE_NUM_SAMPLES                        0x111A
-
-/* cl_addressing_mode */
-#define CL_ADDRESS_NONE                             0x1130
-#define CL_ADDRESS_CLAMP_TO_EDGE                    0x1131
-#define CL_ADDRESS_CLAMP                            0x1132
-#define CL_ADDRESS_REPEAT                           0x1133
-#define CL_ADDRESS_MIRRORED_REPEAT                  0x1134
-
-/* cl_filter_mode */
-#define CL_FILTER_NEAREST                           0x1140
-#define CL_FILTER_LINEAR                            0x1141
-
-/* cl_sampler_info */
-#define CL_SAMPLER_REFERENCE_COUNT                  0x1150
-#define CL_SAMPLER_CONTEXT                          0x1151
-#define CL_SAMPLER_NORMALIZED_COORDS                0x1152
-#define CL_SAMPLER_ADDRESSING_MODE                  0x1153
-#define CL_SAMPLER_FILTER_MODE                      0x1154
-
-/* cl_map_flags - bitfield */
-#define CL_MAP_READ                                 (1 << 0)
-#define CL_MAP_WRITE                                (1 << 1)
-#define CL_MAP_WRITE_INVALIDATE_REGION              (1 << 2)
-
-/* cl_program_info */
-#define CL_PROGRAM_REFERENCE_COUNT                  0x1160
-#define CL_PROGRAM_CONTEXT                          0x1161
-#define CL_PROGRAM_NUM_DEVICES                      0x1162
-#define CL_PROGRAM_DEVICES                          0x1163
-#define CL_PROGRAM_SOURCE                           0x1164
-#define CL_PROGRAM_BINARY_SIZES                     0x1165
-#define CL_PROGRAM_BINARIES                         0x1166
-#define CL_PROGRAM_NUM_KERNELS                      0x1167
-#define CL_PROGRAM_KERNEL_NAMES                     0x1168
-
-/* cl_program_build_info */
-#define CL_PROGRAM_BUILD_STATUS                     0x1181
-#define CL_PROGRAM_BUILD_OPTIONS                    0x1182
-#define CL_PROGRAM_BUILD_LOG                        0x1183
-#define CL_PROGRAM_BINARY_TYPE                      0x1184
-    
-/* cl_program_binary_type */
-#define CL_PROGRAM_BINARY_TYPE_NONE                 0x0
-#define CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT      0x1
-#define CL_PROGRAM_BINARY_TYPE_LIBRARY              0x2
-#define CL_PROGRAM_BINARY_TYPE_EXECUTABLE           0x4
-
-/* cl_build_status */
-#define CL_BUILD_SUCCESS                            0
-#define CL_BUILD_NONE                               -1
-#define CL_BUILD_ERROR                              -2
-#define CL_BUILD_IN_PROGRESS                        -3
-
-/* cl_kernel_info */
-#define CL_KERNEL_FUNCTION_NAME                     0x1190
-#define CL_KERNEL_NUM_ARGS                          0x1191
-#define CL_KERNEL_REFERENCE_COUNT                   0x1192
-#define CL_KERNEL_CONTEXT                           0x1193
-#define CL_KERNEL_PROGRAM                           0x1194
-#define CL_KERNEL_ATTRIBUTES                        0x1195
-
-/* cl_kernel_arg_info */
-#define CL_KERNEL_ARG_ADDRESS_QUALIFIER             0x1196
-#define CL_KERNEL_ARG_ACCESS_QUALIFIER              0x1197
-#define CL_KERNEL_ARG_TYPE_NAME                     0x1198
-#define CL_KERNEL_ARG_TYPE_QUALIFIER                0x1199
-#define CL_KERNEL_ARG_NAME                          0x119A
-
-/* cl_kernel_arg_address_qualifier */
-#define CL_KERNEL_ARG_ADDRESS_GLOBAL                0x119B
-#define CL_KERNEL_ARG_ADDRESS_LOCAL                 0x119C
-#define CL_KERNEL_ARG_ADDRESS_CONSTANT              0x119D
-#define CL_KERNEL_ARG_ADDRESS_PRIVATE               0x119E
-
-/* cl_kernel_arg_access_qualifier */
-#define CL_KERNEL_ARG_ACCESS_READ_ONLY              0x11A0
-#define CL_KERNEL_ARG_ACCESS_WRITE_ONLY             0x11A1
-#define CL_KERNEL_ARG_ACCESS_READ_WRITE             0x11A2
-#define CL_KERNEL_ARG_ACCESS_NONE                   0x11A3
-    
-/* cl_kernel_arg_type_qualifer */
-#define CL_KERNEL_ARG_TYPE_NONE                     0
-#define CL_KERNEL_ARG_TYPE_CONST                    (1 << 0)
-#define CL_KERNEL_ARG_TYPE_RESTRICT                 (1 << 1)
-#define CL_KERNEL_ARG_TYPE_VOLATILE                 (1 << 2)
-
-/* cl_kernel_work_group_info */
-#define CL_KERNEL_WORK_GROUP_SIZE                   0x11B0
-#define CL_KERNEL_COMPILE_WORK_GROUP_SIZE           0x11B1
-#define CL_KERNEL_LOCAL_MEM_SIZE                    0x11B2
-#define CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE 0x11B3
-#define CL_KERNEL_PRIVATE_MEM_SIZE                  0x11B4
-#define CL_KERNEL_GLOBAL_WORK_SIZE                  0x11B5
-
-/* cl_event_info  */
-#define CL_EVENT_COMMAND_QUEUE                      0x11D0
-#define CL_EVENT_COMMAND_TYPE                       0x11D1
-#define CL_EVENT_REFERENCE_COUNT                    0x11D2
-#define CL_EVENT_COMMAND_EXECUTION_STATUS           0x11D3
-#define CL_EVENT_CONTEXT                            0x11D4
-
-/* cl_command_type */
-#define CL_COMMAND_NDRANGE_KERNEL                   0x11F0
-#define CL_COMMAND_TASK                             0x11F1
-#define CL_COMMAND_NATIVE_KERNEL                    0x11F2
-#define CL_COMMAND_READ_BUFFER                      0x11F3
-#define CL_COMMAND_WRITE_BUFFER                     0x11F4
-#define CL_COMMAND_COPY_BUFFER                      0x11F5
-#define CL_COMMAND_READ_IMAGE                       0x11F6
-#define CL_COMMAND_WRITE_IMAGE                      0x11F7
-#define CL_COMMAND_COPY_IMAGE                       0x11F8
-#define CL_COMMAND_COPY_IMAGE_TO_BUFFER             0x11F9
-#define CL_COMMAND_COPY_BUFFER_TO_IMAGE             0x11FA
-#define CL_COMMAND_MAP_BUFFER                       0x11FB
-#define CL_COMMAND_MAP_IMAGE                        0x11FC
-#define CL_COMMAND_UNMAP_MEM_OBJECT                 0x11FD
-#define CL_COMMAND_MARKER                           0x11FE
-#define CL_COMMAND_ACQUIRE_GL_OBJECTS               0x11FF
-#define CL_COMMAND_RELEASE_GL_OBJECTS               0x1200
-#define CL_COMMAND_READ_BUFFER_RECT                 0x1201
-#define CL_COMMAND_WRITE_BUFFER_RECT                0x1202
-#define CL_COMMAND_COPY_BUFFER_RECT                 0x1203
-#define CL_COMMAND_USER                             0x1204
-#define CL_COMMAND_BARRIER                          0x1205
-#define CL_COMMAND_MIGRATE_MEM_OBJECTS              0x1206
-#define CL_COMMAND_FILL_BUFFER                      0x1207
-#define CL_COMMAND_FILL_IMAGE                       0x1208
-
-/* command execution status */
-#define CL_COMPLETE                                 0x0
-#define CL_RUNNING                                  0x1
-#define CL_SUBMITTED                                0x2
-#define CL_QUEUED                                   0x3
-
-/* cl_buffer_create_type  */
-#define CL_BUFFER_CREATE_TYPE_REGION                0x1220
-
-/* cl_profiling_info  */
-#define CL_PROFILING_COMMAND_QUEUED                 0x1280
-#define CL_PROFILING_COMMAND_SUBMIT                 0x1281
-#define CL_PROFILING_COMMAND_START                  0x1282
-#define CL_PROFILING_COMMAND_END                    0x1283
-
-/********************************************************************************************************/
-
-/* Platform API */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetPlatformIDs(cl_uint          /* num_entries */,
-                 cl_platform_id * /* platforms */,
-                 cl_uint *        /* num_platforms */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL 
-clGetPlatformInfo(cl_platform_id   /* platform */, 
-                  cl_platform_info /* param_name */,
-                  size_t           /* param_value_size */, 
-                  void *           /* param_value */,
-                  size_t *         /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-/* Device APIs */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceIDs(cl_platform_id   /* platform */,
-               cl_device_type   /* device_type */, 
-               cl_uint          /* num_entries */, 
-               cl_device_id *   /* devices */, 
-               cl_uint *        /* num_devices */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceInfo(cl_device_id    /* device */,
-                cl_device_info  /* param_name */, 
-                size_t          /* param_value_size */, 
-                void *          /* param_value */,
-                size_t *        /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-    
-extern CL_API_ENTRY cl_int CL_API_CALL
-clCreateSubDevices(cl_device_id                         /* in_device */,
-                   const cl_device_partition_property * /* properties */,
-                   cl_uint                              /* num_devices */,
-                   cl_device_id *                       /* out_devices */,
-                   cl_uint *                            /* num_devices_ret */) CL_API_SUFFIX__VERSION_1_2;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clRetainDevice(cl_device_id /* device */) CL_API_SUFFIX__VERSION_1_2;
-    
-extern CL_API_ENTRY cl_int CL_API_CALL
-clReleaseDevice(cl_device_id /* device */) CL_API_SUFFIX__VERSION_1_2;
-    
-/* Context APIs  */
-extern CL_API_ENTRY cl_context CL_API_CALL
-clCreateContext(const cl_context_properties * /* properties */,
-                cl_uint                 /* num_devices */,
-                const cl_device_id *    /* devices */,
-                void (CL_CALLBACK * /* pfn_notify */)(const char *, const void *, size_t, void *),
-                void *                  /* user_data */,
-                cl_int *                /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_context CL_API_CALL
-clCreateContextFromType(const cl_context_properties * /* properties */,
-                        cl_device_type          /* device_type */,
-                        void (CL_CALLBACK *     /* pfn_notify*/ )(const char *, const void *, size_t, void *),
-                        void *                  /* user_data */,
-                        cl_int *                /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clRetainContext(cl_context /* context */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clReleaseContext(cl_context /* context */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetContextInfo(cl_context         /* context */, 
-                 cl_context_info    /* param_name */, 
-                 size_t             /* param_value_size */, 
-                 void *             /* param_value */, 
-                 size_t *           /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-/* Command Queue APIs */
-extern CL_API_ENTRY cl_command_queue CL_API_CALL
-clCreateCommandQueue(cl_context                     /* context */, 
-                     cl_device_id                   /* device */, 
-                     cl_command_queue_properties    /* properties */,
-                     cl_int *                       /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clRetainCommandQueue(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clReleaseCommandQueue(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetCommandQueueInfo(cl_command_queue      /* command_queue */,
-                      cl_command_queue_info /* param_name */,
-                      size_t                /* param_value_size */,
-                      void *                /* param_value */,
-                      size_t *              /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-/* Memory Object APIs */
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateBuffer(cl_context   /* context */,
-               cl_mem_flags /* flags */,
-               size_t       /* size */,
-               void *       /* host_ptr */,
-               cl_int *     /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateSubBuffer(cl_mem                   /* buffer */,
-                  cl_mem_flags             /* flags */,
-                  cl_buffer_create_type    /* buffer_create_type */,
-                  const void *             /* buffer_create_info */,
-                  cl_int *                 /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateImage(cl_context              /* context */,
-              cl_mem_flags            /* flags */,
-              const cl_image_format * /* image_format */,
-              const cl_image_desc *   /* image_desc */, 
-              void *                  /* host_ptr */,
-              cl_int *                /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;
-                        
-extern CL_API_ENTRY cl_int CL_API_CALL
-clRetainMemObject(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clReleaseMemObject(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetSupportedImageFormats(cl_context           /* context */,
-                           cl_mem_flags         /* flags */,
-                           cl_mem_object_type   /* image_type */,
-                           cl_uint              /* num_entries */,
-                           cl_image_format *    /* image_formats */,
-                           cl_uint *            /* num_image_formats */) CL_API_SUFFIX__VERSION_1_0;
-                                    
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetMemObjectInfo(cl_mem           /* memobj */,
-                   cl_mem_info      /* param_name */, 
-                   size_t           /* param_value_size */,
-                   void *           /* param_value */,
-                   size_t *         /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetImageInfo(cl_mem           /* image */,
-               cl_image_info    /* param_name */, 
-               size_t           /* param_value_size */,
-               void *           /* param_value */,
-               size_t *         /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clSetMemObjectDestructorCallback(  cl_mem /* memobj */, 
-                                    void (CL_CALLBACK * /*pfn_notify*/)( cl_mem /* memobj */, void* /*user_data*/), 
-                                    void * /*user_data */ )             CL_API_SUFFIX__VERSION_1_1;  
-
-/* Sampler APIs */
-extern CL_API_ENTRY cl_sampler CL_API_CALL
-clCreateSampler(cl_context          /* context */,
-                cl_bool             /* normalized_coords */, 
-                cl_addressing_mode  /* addressing_mode */, 
-                cl_filter_mode      /* filter_mode */,
-                cl_int *            /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clRetainSampler(cl_sampler /* sampler */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clReleaseSampler(cl_sampler /* sampler */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetSamplerInfo(cl_sampler         /* sampler */,
-                 cl_sampler_info    /* param_name */,
-                 size_t             /* param_value_size */,
-                 void *             /* param_value */,
-                 size_t *           /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-                            
-/* Program Object APIs  */
-extern CL_API_ENTRY cl_program CL_API_CALL
-clCreateProgramWithSource(cl_context        /* context */,
-                          cl_uint           /* count */,
-                          const char **     /* strings */,
-                          const size_t *    /* lengths */,
-                          cl_int *          /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_program CL_API_CALL
-clCreateProgramWithBinary(cl_context                     /* context */,
-                          cl_uint                        /* num_devices */,
-                          const cl_device_id *           /* device_list */,
-                          const size_t *                 /* lengths */,
-                          const unsigned char **         /* binaries */,
-                          cl_int *                       /* binary_status */,
-                          cl_int *                       /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_program CL_API_CALL
-clCreateProgramWithBuiltInKernels(cl_context            /* context */,
-                                  cl_uint               /* num_devices */,
-                                  const cl_device_id *  /* device_list */,
-                                  const char *          /* kernel_names */,
-                                  cl_int *              /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clRetainProgram(cl_program /* program */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clReleaseProgram(cl_program /* program */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clBuildProgram(cl_program           /* program */,
-               cl_uint              /* num_devices */,
-               const cl_device_id * /* device_list */,
-               const char *         /* options */, 
-               void (CL_CALLBACK *  /* pfn_notify */)(cl_program /* program */, void * /* user_data */),
-               void *               /* user_data */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clCompileProgram(cl_program           /* program */,
-                 cl_uint              /* num_devices */,
-                 const cl_device_id * /* device_list */,
-                 const char *         /* options */, 
-                 cl_uint              /* num_input_headers */,
-                 const cl_program *   /* input_headers */,
-                 const char **        /* header_include_names */,
-                 void (CL_CALLBACK *  /* pfn_notify */)(cl_program /* program */, void * /* user_data */),
-                 void *               /* user_data */) CL_API_SUFFIX__VERSION_1_2;
-
-extern CL_API_ENTRY cl_program CL_API_CALL
-clLinkProgram(cl_context           /* context */,
-              cl_uint              /* num_devices */,
-              const cl_device_id * /* device_list */,
-              const char *         /* options */, 
-              cl_uint              /* num_input_programs */,
-              const cl_program *   /* input_programs */,
-              void (CL_CALLBACK *  /* pfn_notify */)(cl_program /* program */, void * /* user_data */),
-              void *               /* user_data */,
-              cl_int *             /* errcode_ret */ ) CL_API_SUFFIX__VERSION_1_2;
-
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clUnloadPlatformCompiler(cl_platform_id /* platform */) CL_API_SUFFIX__VERSION_1_2;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetProgramInfo(cl_program         /* program */,
-                 cl_program_info    /* param_name */,
-                 size_t             /* param_value_size */,
-                 void *             /* param_value */,
-                 size_t *           /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetProgramBuildInfo(cl_program            /* program */,
-                      cl_device_id          /* device */,
-                      cl_program_build_info /* param_name */,
-                      size_t                /* param_value_size */,
-                      void *                /* param_value */,
-                      size_t *              /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-                            
-/* Kernel Object APIs */
-extern CL_API_ENTRY cl_kernel CL_API_CALL
-clCreateKernel(cl_program      /* program */,
-               const char *    /* kernel_name */,
-               cl_int *        /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clCreateKernelsInProgram(cl_program     /* program */,
-                         cl_uint        /* num_kernels */,
-                         cl_kernel *    /* kernels */,
-                         cl_uint *      /* num_kernels_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clRetainKernel(cl_kernel    /* kernel */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clReleaseKernel(cl_kernel   /* kernel */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clSetKernelArg(cl_kernel    /* kernel */,
-               cl_uint      /* arg_index */,
-               size_t       /* arg_size */,
-               const void * /* arg_value */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetKernelInfo(cl_kernel       /* kernel */,
-                cl_kernel_info  /* param_name */,
-                size_t          /* param_value_size */,
-                void *          /* param_value */,
-                size_t *        /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetKernelArgInfo(cl_kernel       /* kernel */,
-                   cl_uint         /* arg_indx */,
-                   cl_kernel_arg_info  /* param_name */,
-                   size_t          /* param_value_size */,
-                   void *          /* param_value */,
-                   size_t *        /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_2;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetKernelWorkGroupInfo(cl_kernel                  /* kernel */,
-                         cl_device_id               /* device */,
-                         cl_kernel_work_group_info  /* param_name */,
-                         size_t                     /* param_value_size */,
-                         void *                     /* param_value */,
-                         size_t *                   /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-/* Event Object APIs */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clWaitForEvents(cl_uint             /* num_events */,
-                const cl_event *    /* event_list */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetEventInfo(cl_event         /* event */,
-               cl_event_info    /* param_name */,
-               size_t           /* param_value_size */,
-               void *           /* param_value */,
-               size_t *         /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-                            
-extern CL_API_ENTRY cl_event CL_API_CALL
-clCreateUserEvent(cl_context    /* context */,
-                  cl_int *      /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;               
-                            
-extern CL_API_ENTRY cl_int CL_API_CALL
-clRetainEvent(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clReleaseEvent(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clSetUserEventStatus(cl_event   /* event */,
-                     cl_int     /* execution_status */) CL_API_SUFFIX__VERSION_1_1;
-                     
-extern CL_API_ENTRY cl_int CL_API_CALL
-clSetEventCallback( cl_event    /* event */,
-                    cl_int      /* command_exec_callback_type */,
-                    void (CL_CALLBACK * /* pfn_notify */)(cl_event, cl_int, void *),
-                    void *      /* user_data */) CL_API_SUFFIX__VERSION_1_1;
-
-/* Profiling APIs */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetEventProfilingInfo(cl_event            /* event */,
-                        cl_profiling_info   /* param_name */,
-                        size_t              /* param_value_size */,
-                        void *              /* param_value */,
-                        size_t *            /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-                                
-/* Flush and Finish APIs */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clFlush(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clFinish(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
-
-/* Enqueued Commands APIs */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReadBuffer(cl_command_queue    /* command_queue */,
-                    cl_mem              /* buffer */,
-                    cl_bool             /* blocking_read */,
-                    size_t              /* offset */,
-                    size_t              /* size */, 
-                    void *              /* ptr */,
-                    cl_uint             /* num_events_in_wait_list */,
-                    const cl_event *    /* event_wait_list */,
-                    cl_event *          /* event */) CL_API_SUFFIX__VERSION_1_0;
-                            
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReadBufferRect(cl_command_queue    /* command_queue */,
-                        cl_mem              /* buffer */,
-                        cl_bool             /* blocking_read */,
-                        const size_t *      /* buffer_offset */,
-                        const size_t *      /* host_offset */, 
-                        const size_t *      /* region */,
-                        size_t              /* buffer_row_pitch */,
-                        size_t              /* buffer_slice_pitch */,
-                        size_t              /* host_row_pitch */,
-                        size_t              /* host_slice_pitch */,                        
-                        void *              /* ptr */,
-                        cl_uint             /* num_events_in_wait_list */,
-                        const cl_event *    /* event_wait_list */,
-                        cl_event *          /* event */) CL_API_SUFFIX__VERSION_1_1;
-                            
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueWriteBuffer(cl_command_queue   /* command_queue */, 
-                     cl_mem             /* buffer */, 
-                     cl_bool            /* blocking_write */, 
-                     size_t             /* offset */, 
-                     size_t             /* size */, 
-                     const void *       /* ptr */, 
-                     cl_uint            /* num_events_in_wait_list */, 
-                     const cl_event *   /* event_wait_list */, 
-                     cl_event *         /* event */) CL_API_SUFFIX__VERSION_1_0;
-                            
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueWriteBufferRect(cl_command_queue    /* command_queue */,
-                         cl_mem              /* buffer */,
-                         cl_bool             /* blocking_write */,
-                         const size_t *      /* buffer_offset */,
-                         const size_t *      /* host_offset */, 
-                         const size_t *      /* region */,
-                         size_t              /* buffer_row_pitch */,
-                         size_t              /* buffer_slice_pitch */,
-                         size_t              /* host_row_pitch */,
-                         size_t              /* host_slice_pitch */,                        
-                         const void *        /* ptr */,
-                         cl_uint             /* num_events_in_wait_list */,
-                         const cl_event *    /* event_wait_list */,
-                         cl_event *          /* event */) CL_API_SUFFIX__VERSION_1_1;
-                            
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueFillBuffer(cl_command_queue   /* command_queue */,
-                    cl_mem             /* buffer */, 
-                    const void *       /* pattern */, 
-                    size_t             /* pattern_size */, 
-                    size_t             /* offset */, 
-                    size_t             /* size */, 
-                    cl_uint            /* num_events_in_wait_list */, 
-                    const cl_event *   /* event_wait_list */, 
-                    cl_event *         /* event */) CL_API_SUFFIX__VERSION_1_2;
-                            
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueCopyBuffer(cl_command_queue    /* command_queue */, 
-                    cl_mem              /* src_buffer */,
-                    cl_mem              /* dst_buffer */, 
-                    size_t              /* src_offset */,
-                    size_t              /* dst_offset */,
-                    size_t              /* size */, 
-                    cl_uint             /* num_events_in_wait_list */,
-                    const cl_event *    /* event_wait_list */,
-                    cl_event *          /* event */) CL_API_SUFFIX__VERSION_1_0;
-                            
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueCopyBufferRect(cl_command_queue    /* command_queue */, 
-                        cl_mem              /* src_buffer */,
-                        cl_mem              /* dst_buffer */, 
-                        const size_t *      /* src_origin */,
-                        const size_t *      /* dst_origin */,
-                        const size_t *      /* region */, 
-                        size_t              /* src_row_pitch */,
-                        size_t              /* src_slice_pitch */,
-                        size_t              /* dst_row_pitch */,
-                        size_t              /* dst_slice_pitch */,
-                        cl_uint             /* num_events_in_wait_list */,
-                        const cl_event *    /* event_wait_list */,
-                        cl_event *          /* event */) CL_API_SUFFIX__VERSION_1_1;
-                            
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReadImage(cl_command_queue     /* command_queue */,
-                   cl_mem               /* image */,
-                   cl_bool              /* blocking_read */, 
-                   const size_t *       /* origin[3] */,
-                   const size_t *       /* region[3] */,
-                   size_t               /* row_pitch */,
-                   size_t               /* slice_pitch */, 
-                   void *               /* ptr */,
-                   cl_uint              /* num_events_in_wait_list */,
-                   const cl_event *     /* event_wait_list */,
-                   cl_event *           /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueWriteImage(cl_command_queue    /* command_queue */,
-                    cl_mem              /* image */,
-                    cl_bool             /* blocking_write */, 
-                    const size_t *      /* origin[3] */,
-                    const size_t *      /* region[3] */,
-                    size_t              /* input_row_pitch */,
-                    size_t              /* input_slice_pitch */, 
-                    const void *        /* ptr */,
-                    cl_uint             /* num_events_in_wait_list */,
-                    const cl_event *    /* event_wait_list */,
-                    cl_event *          /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueFillImage(cl_command_queue   /* command_queue */,
-                   cl_mem             /* image */, 
-                   const void *       /* fill_color */, 
-                   const size_t *     /* origin[3] */, 
-                   const size_t *     /* region[3] */, 
-                   cl_uint            /* num_events_in_wait_list */, 
-                   const cl_event *   /* event_wait_list */, 
-                   cl_event *         /* event */) CL_API_SUFFIX__VERSION_1_2;
-                            
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueCopyImage(cl_command_queue     /* command_queue */,
-                   cl_mem               /* src_image */,
-                   cl_mem               /* dst_image */, 
-                   const size_t *       /* src_origin[3] */,
-                   const size_t *       /* dst_origin[3] */,
-                   const size_t *       /* region[3] */, 
-                   cl_uint              /* num_events_in_wait_list */,
-                   const cl_event *     /* event_wait_list */,
-                   cl_event *           /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueCopyImageToBuffer(cl_command_queue /* command_queue */,
-                           cl_mem           /* src_image */,
-                           cl_mem           /* dst_buffer */, 
-                           const size_t *   /* src_origin[3] */,
-                           const size_t *   /* region[3] */, 
-                           size_t           /* dst_offset */,
-                           cl_uint          /* num_events_in_wait_list */,
-                           const cl_event * /* event_wait_list */,
-                           cl_event *       /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueCopyBufferToImage(cl_command_queue /* command_queue */,
-                           cl_mem           /* src_buffer */,
-                           cl_mem           /* dst_image */, 
-                           size_t           /* src_offset */,
-                           const size_t *   /* dst_origin[3] */,
-                           const size_t *   /* region[3] */, 
-                           cl_uint          /* num_events_in_wait_list */,
-                           const cl_event * /* event_wait_list */,
-                           cl_event *       /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY void * CL_API_CALL
-clEnqueueMapBuffer(cl_command_queue /* command_queue */,
-                   cl_mem           /* buffer */,
-                   cl_bool          /* blocking_map */, 
-                   cl_map_flags     /* map_flags */,
-                   size_t           /* offset */,
-                   size_t           /* size */,
-                   cl_uint          /* num_events_in_wait_list */,
-                   const cl_event * /* event_wait_list */,
-                   cl_event *       /* event */,
-                   cl_int *         /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY void * CL_API_CALL
-clEnqueueMapImage(cl_command_queue  /* command_queue */,
-                  cl_mem            /* image */, 
-                  cl_bool           /* blocking_map */, 
-                  cl_map_flags      /* map_flags */, 
-                  const size_t *    /* origin[3] */,
-                  const size_t *    /* region[3] */,
-                  size_t *          /* image_row_pitch */,
-                  size_t *          /* image_slice_pitch */,
-                  cl_uint           /* num_events_in_wait_list */,
-                  const cl_event *  /* event_wait_list */,
-                  cl_event *        /* event */,
-                  cl_int *          /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueUnmapMemObject(cl_command_queue /* command_queue */,
-                        cl_mem           /* memobj */,
-                        void *           /* mapped_ptr */,
-                        cl_uint          /* num_events_in_wait_list */,
-                        const cl_event *  /* event_wait_list */,
-                        cl_event *        /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueMigrateMemObjects(cl_command_queue       /* command_queue */,
-                           cl_uint                /* num_mem_objects */,
-                           const cl_mem *         /* mem_objects */,
-                           cl_mem_migration_flags /* flags */,
-                           cl_uint                /* num_events_in_wait_list */,
-                           const cl_event *       /* event_wait_list */,
-                           cl_event *             /* event */) CL_API_SUFFIX__VERSION_1_2;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueNDRangeKernel(cl_command_queue /* command_queue */,
-                       cl_kernel        /* kernel */,
-                       cl_uint          /* work_dim */,
-                       const size_t *   /* global_work_offset */,
-                       const size_t *   /* global_work_size */,
-                       const size_t *   /* local_work_size */,
-                       cl_uint          /* num_events_in_wait_list */,
-                       const cl_event * /* event_wait_list */,
-                       cl_event *       /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueTask(cl_command_queue  /* command_queue */,
-              cl_kernel         /* kernel */,
-              cl_uint           /* num_events_in_wait_list */,
-              const cl_event *  /* event_wait_list */,
-              cl_event *        /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueNativeKernel(cl_command_queue  /* command_queue */,
-					  void (CL_CALLBACK * /*user_func*/)(void *), 
-                      void *            /* args */,
-                      size_t            /* cb_args */, 
-                      cl_uint           /* num_mem_objects */,
-                      const cl_mem *    /* mem_list */,
-                      const void **     /* args_mem_loc */,
-                      cl_uint           /* num_events_in_wait_list */,
-                      const cl_event *  /* event_wait_list */,
-                      cl_event *        /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueMarkerWithWaitList(cl_command_queue /* command_queue */,
-                            cl_uint           /* num_events_in_wait_list */,
-                            const cl_event *  /* event_wait_list */,
-                            cl_event *        /* event */) CL_API_SUFFIX__VERSION_1_2;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueBarrierWithWaitList(cl_command_queue /* command_queue */,
-                             cl_uint           /* num_events_in_wait_list */,
-                             const cl_event *  /* event_wait_list */,
-                             cl_event *        /* event */) CL_API_SUFFIX__VERSION_1_2;
-
-
-/* Extension function access
- *
- * Returns the extension function address for the given function name,
- * or NULL if a valid function can not be found.  The client must
- * check to make sure the address is not NULL, before using or 
- * calling the returned function address.
- */
-extern CL_API_ENTRY void * CL_API_CALL 
-clGetExtensionFunctionAddressForPlatform(cl_platform_id /* platform */,
-                                         const char *   /* func_name */) CL_API_SUFFIX__VERSION_1_2;
-    
-
-/* Deprecated OpenCL 1.1 APIs */
-extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
-clCreateImage2D(cl_context              /* context */,
-                cl_mem_flags            /* flags */,
-                const cl_image_format * /* image_format */,
-                size_t                  /* image_width */,
-                size_t                  /* image_height */,
-                size_t                  /* image_row_pitch */, 
-                void *                  /* host_ptr */,
-                cl_int *                /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-    
-extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
-clCreateImage3D(cl_context              /* context */,
-                cl_mem_flags            /* flags */,
-                const cl_image_format * /* image_format */,
-                size_t                  /* image_width */, 
-                size_t                  /* image_height */,
-                size_t                  /* image_depth */, 
-                size_t                  /* image_row_pitch */, 
-                size_t                  /* image_slice_pitch */, 
-                void *                  /* host_ptr */,
-                cl_int *                /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-    
-extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL
-clEnqueueMarker(cl_command_queue    /* command_queue */,
-                cl_event *          /* event */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-    
-extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL
-clEnqueueWaitForEvents(cl_command_queue /* command_queue */,
-                        cl_uint          /* num_events */,
-                        const cl_event * /* event_list */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-    
-extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL
-clEnqueueBarrier(cl_command_queue /* command_queue */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-
-extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL
-clUnloadCompiler(void) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-    
-extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED void * CL_API_CALL
-clGetExtensionFunctionAddress(const char * /* func_name */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* __OPENCL_CL_H */
-

+ 0 - 315
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/cl_ext.h

@@ -1,315 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008-2013 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Materials.
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
- ******************************************************************************/
-
-/* $Revision: 11928 $ on $Date: 2010-07-13 09:04:56 -0700 (Tue, 13 Jul 2010) $ */
-
-/* cl_ext.h contains OpenCL extensions which don't have external */
-/* (OpenGL, D3D) dependencies.                                   */
-
-#ifndef __CL_EXT_H
-#define __CL_EXT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __APPLE__
-#include <AvailabilityMacros.h>
-#endif
-
-#include <cl.h>
-
-/* cl_khr_fp16 extension - no extension #define since it has no functions  */
-#define CL_DEVICE_HALF_FP_CONFIG                    0x1033
-
-/* Memory object destruction
- *
- * Apple extension for use to manage externally allocated buffers used with cl_mem objects with CL_MEM_USE_HOST_PTR
- *
- * Registers a user callback function that will be called when the memory object is deleted and its resources 
- * freed. Each call to clSetMemObjectCallbackFn registers the specified user callback function on a callback 
- * stack associated with memobj. The registered user callback functions are called in the reverse order in 
- * which they were registered. The user callback functions are called and then the memory object is deleted 
- * and its resources freed. This provides a mechanism for the application (and libraries) using memobj to be 
- * notified when the memory referenced by host_ptr, specified when the memory object is created and used as 
- * the storage bits for the memory object, can be reused or freed.
- *
- * The application may not call CL api's with the cl_mem object passed to the pfn_notify.
- *
- * Please check for the "cl_APPLE_SetMemObjectDestructor" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS)
- * before using.
- */
-#define cl_APPLE_SetMemObjectDestructor 1
-cl_int  CL_API_ENTRY clSetMemObjectDestructorAPPLE(  cl_mem /* memobj */, 
-                                        void (* /*pfn_notify*/)( cl_mem /* memobj */, void* /*user_data*/), 
-                                        void * /*user_data */ )             CL_EXT_SUFFIX__VERSION_1_0;  
-
-
-/* Context Logging Functions
- *
- * The next three convenience functions are intended to be used as the pfn_notify parameter to clCreateContext().
- * Please check for the "cl_APPLE_ContextLoggingFunctions" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS)
- * before using.
- *
- * clLogMessagesToSystemLog fowards on all log messages to the Apple System Logger 
- */
-#define cl_APPLE_ContextLoggingFunctions 1
-extern void CL_API_ENTRY clLogMessagesToSystemLogAPPLE(  const char * /* errstr */, 
-                                            const void * /* private_info */, 
-                                            size_t       /* cb */, 
-                                            void *       /* user_data */ )  CL_EXT_SUFFIX__VERSION_1_0;
-
-/* clLogMessagesToStdout sends all log messages to the file descriptor stdout */
-extern void CL_API_ENTRY clLogMessagesToStdoutAPPLE(   const char * /* errstr */, 
-                                          const void * /* private_info */, 
-                                          size_t       /* cb */, 
-                                          void *       /* user_data */ )    CL_EXT_SUFFIX__VERSION_1_0;
-
-/* clLogMessagesToStderr sends all log messages to the file descriptor stderr */
-extern void CL_API_ENTRY clLogMessagesToStderrAPPLE(   const char * /* errstr */, 
-                                          const void * /* private_info */, 
-                                          size_t       /* cb */, 
-                                          void *       /* user_data */ )    CL_EXT_SUFFIX__VERSION_1_0;
-
-
-/************************ 
-* cl_khr_icd extension *                                                  
-************************/
-#define cl_khr_icd 1
-
-/* cl_platform_info                                                        */
-#define CL_PLATFORM_ICD_SUFFIX_KHR                  0x0920
-
-/* Additional Error Codes                                                  */
-#define CL_PLATFORM_NOT_FOUND_KHR                   -1001
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clIcdGetPlatformIDsKHR(cl_uint          /* num_entries */,
-                       cl_platform_id * /* platforms */,
-                       cl_uint *        /* num_platforms */);
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *clIcdGetPlatformIDsKHR_fn)(
-    cl_uint          /* num_entries */,
-    cl_platform_id * /* platforms */,
-    cl_uint *        /* num_platforms */);
-
-
-/* Extension: cl_khr_image2D_buffer
- *
- * This extension allows a 2D image to be created from a cl_mem buffer without a copy.
- * The type associated with a 2D image created from a buffer in an OpenCL program is image2d_t.
- * Both the sampler and sampler-less read_image built-in functions are supported for 2D images
- * and 2D images created from a buffer.  Similarly, the write_image built-ins are also supported
- * for 2D images created from a buffer.
- *
- * When the 2D image from buffer is created, the client must specify the width,
- * height, image format (i.e. channel order and channel data type) and optionally the row pitch
- *
- * The pitch specified must be a multiple of CL_DEVICE_IMAGE_PITCH_ALIGNMENT pixels.
- * The base address of the buffer must be aligned to CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT pixels.
- */
-    
-/*************************************
- * cl_khr_initalize_memory extension *
- *************************************/
-    
-#define CL_CONTEXT_MEMORY_INITIALIZE_KHR            0x200E
-    
-    
-/**************************************
- * cl_khr_terminate_context extension *
- **************************************/
-    
-#define CL_DEVICE_TERMINATE_CAPABILITY_KHR          0x200F
-#define CL_CONTEXT_TERMINATE_KHR                    0x2010
-
-#define cl_khr_terminate_context 1
-extern CL_API_ENTRY cl_int CL_API_CALL clTerminateContextKHR(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *clTerminateContextKHR_fn)(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2;
-    
-    
-/*
- * Extension: cl_khr_spir
- *
- * This extension adds support to create an OpenCL program object from a 
- * Standard Portable Intermediate Representation (SPIR) instance
- */
-
-#define CL_DEVICE_SPIR_VERSIONS                     0x40E0
-#define CL_PROGRAM_BINARY_TYPE_INTERMEDIATE         0x40E1
-
-
-/******************************************
-* cl_nv_device_attribute_query extension *
-******************************************/
-/* cl_nv_device_attribute_query extension - no extension #define since it has no functions */
-#define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV       0x4000
-#define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV       0x4001
-#define CL_DEVICE_REGISTERS_PER_BLOCK_NV            0x4002
-#define CL_DEVICE_WARP_SIZE_NV                      0x4003
-#define CL_DEVICE_GPU_OVERLAP_NV                    0x4004
-#define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV            0x4005
-#define CL_DEVICE_INTEGRATED_MEMORY_NV              0x4006
-
-/*********************************
-* cl_amd_device_attribute_query *
-*********************************/
-#define CL_DEVICE_PROFILING_TIMER_OFFSET_AMD        0x4036
-
-/*********************************
-* cl_arm_printf extension
-*********************************/
-#define CL_PRINTF_CALLBACK_ARM                      0x40B0
-#define CL_PRINTF_BUFFERSIZE_ARM                    0x40B1
-
-#ifdef CL_VERSION_1_1
-   /***********************************
-    * cl_ext_device_fission extension *
-    ***********************************/
-    #define cl_ext_device_fission   1
-    
-    extern CL_API_ENTRY cl_int CL_API_CALL
-    clReleaseDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 
-    
-    typedef CL_API_ENTRY cl_int 
-    (CL_API_CALL *clReleaseDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1;
-
-    extern CL_API_ENTRY cl_int CL_API_CALL
-    clRetainDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1; 
-    
-    typedef CL_API_ENTRY cl_int 
-    (CL_API_CALL *clRetainDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1;
-
-    typedef cl_ulong  cl_device_partition_property_ext;
-    extern CL_API_ENTRY cl_int CL_API_CALL
-    clCreateSubDevicesEXT(  cl_device_id /*in_device*/,
-                            const cl_device_partition_property_ext * /* properties */,
-                            cl_uint /*num_entries*/,
-                            cl_device_id * /*out_devices*/,
-                            cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1;
-
-    typedef CL_API_ENTRY cl_int 
-    ( CL_API_CALL * clCreateSubDevicesEXT_fn)(  cl_device_id /*in_device*/,
-                                                const cl_device_partition_property_ext * /* properties */,
-                                                cl_uint /*num_entries*/,
-                                                cl_device_id * /*out_devices*/,
-                                                cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1;
-
-    /* cl_device_partition_property_ext */
-    #define CL_DEVICE_PARTITION_EQUALLY_EXT             0x4050
-    #define CL_DEVICE_PARTITION_BY_COUNTS_EXT           0x4051
-    #define CL_DEVICE_PARTITION_BY_NAMES_EXT            0x4052
-    #define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT  0x4053
-    
-    /* clDeviceGetInfo selectors */
-    #define CL_DEVICE_PARENT_DEVICE_EXT                 0x4054
-    #define CL_DEVICE_PARTITION_TYPES_EXT               0x4055
-    #define CL_DEVICE_AFFINITY_DOMAINS_EXT              0x4056
-    #define CL_DEVICE_REFERENCE_COUNT_EXT               0x4057
-    #define CL_DEVICE_PARTITION_STYLE_EXT               0x4058
-    
-    /* error codes */
-    #define CL_DEVICE_PARTITION_FAILED_EXT              -1057
-    #define CL_INVALID_PARTITION_COUNT_EXT              -1058
-    #define CL_INVALID_PARTITION_NAME_EXT               -1059
-    
-    /* CL_AFFINITY_DOMAINs */
-    #define CL_AFFINITY_DOMAIN_L1_CACHE_EXT             0x1
-    #define CL_AFFINITY_DOMAIN_L2_CACHE_EXT             0x2
-    #define CL_AFFINITY_DOMAIN_L3_CACHE_EXT             0x3
-    #define CL_AFFINITY_DOMAIN_L4_CACHE_EXT             0x4
-    #define CL_AFFINITY_DOMAIN_NUMA_EXT                 0x10
-    #define CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT     0x100
-    
-    /* cl_device_partition_property_ext list terminators */
-    #define CL_PROPERTIES_LIST_END_EXT                  ((cl_device_partition_property_ext) 0)
-    #define CL_PARTITION_BY_COUNTS_LIST_END_EXT         ((cl_device_partition_property_ext) 0)
-    #define CL_PARTITION_BY_NAMES_LIST_END_EXT          ((cl_device_partition_property_ext) 0 - 1)
-
-/*********************************
-* cl_qcom_ext_host_ptr extension
-*********************************/
-
-#define CL_MEM_EXT_HOST_PTR_QCOM                  (1 << 29)
-
-#define CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM   0x40A0      
-#define CL_DEVICE_PAGE_SIZE_QCOM                  0x40A1
-#define CL_IMAGE_ROW_ALIGNMENT_QCOM               0x40A2
-#define CL_IMAGE_SLICE_ALIGNMENT_QCOM             0x40A3
-#define CL_MEM_HOST_UNCACHED_QCOM                 0x40A4
-#define CL_MEM_HOST_WRITEBACK_QCOM                0x40A5
-#define CL_MEM_HOST_WRITETHROUGH_QCOM             0x40A6
-#define CL_MEM_HOST_WRITE_COMBINING_QCOM          0x40A7
-
-typedef cl_uint                                   cl_image_pitch_info_qcom;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceImageInfoQCOM(cl_device_id             device,
-                         size_t                   image_width,
-                         size_t                   image_height,
-                         const cl_image_format   *image_format,
-                         cl_image_pitch_info_qcom param_name,
-                         size_t                   param_value_size,
-                         void                    *param_value,
-                         size_t                  *param_value_size_ret);
-
-typedef struct _cl_mem_ext_host_ptr
-{
-    /* Type of external memory allocation. */
-    /* Legal values will be defined in layered extensions. */
-    cl_uint  allocation_type;
-            
-	/* Host cache policy for this external memory allocation. */
-    cl_uint  host_cache_policy;
-
-} cl_mem_ext_host_ptr;
-
-/*********************************
-* cl_qcom_ion_host_ptr extension
-*********************************/
-
-#define CL_MEM_ION_HOST_PTR_QCOM                  0x40A8
-
-typedef struct _cl_mem_ion_host_ptr
-{
-    /* Type of external memory allocation. */
-    /* Must be CL_MEM_ION_HOST_PTR_QCOM for ION allocations. */
-    cl_mem_ext_host_ptr  ext_host_ptr;
-
-    /* ION file descriptor */
-    int                  ion_filedesc;
-            
-    /* Host pointer to the ION allocated memory */
-    void*                ion_hostptr;
-
-} cl_mem_ion_host_ptr;
-
-#endif /* CL_VERSION_1_1 */
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __CL_EXT_H */

+ 0 - 158
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/cl_gl.h

@@ -1,158 +0,0 @@
-/**********************************************************************************
- * Copyright (c) 2008 - 2012 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Materials.
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
- **********************************************************************************/
-
-#ifndef __OPENCL_CL_GL_H
-#define __OPENCL_CL_GL_H
-
-#include <cl.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef cl_uint     cl_gl_object_type;
-typedef cl_uint     cl_gl_texture_info;
-typedef cl_uint     cl_gl_platform_info;
-typedef struct __GLsync *cl_GLsync;
-
-/* cl_gl_object_type = 0x2000 - 0x200F enum values are currently taken           */
-#define CL_GL_OBJECT_BUFFER                     0x2000
-#define CL_GL_OBJECT_TEXTURE2D                  0x2001
-#define CL_GL_OBJECT_TEXTURE3D                  0x2002
-#define CL_GL_OBJECT_RENDERBUFFER               0x2003
-#define CL_GL_OBJECT_TEXTURE2D_ARRAY            0x200E
-#define CL_GL_OBJECT_TEXTURE1D                  0x200F
-#define CL_GL_OBJECT_TEXTURE1D_ARRAY            0x2010
-#define CL_GL_OBJECT_TEXTURE_BUFFER             0x2011
-
-/* cl_gl_texture_info           */
-#define CL_GL_TEXTURE_TARGET                    0x2004
-#define CL_GL_MIPMAP_LEVEL                      0x2005
-#define CL_GL_NUM_SAMPLES                       0x2012
-
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromGLBuffer(cl_context     /* context */,
-                     cl_mem_flags   /* flags */,
-                     cl_GLuint      /* bufobj */,
-                     int *          /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromGLTexture(cl_context      /* context */,
-                      cl_mem_flags    /* flags */,
-                      cl_GLenum       /* target */,
-                      cl_GLint        /* miplevel */,
-                      cl_GLuint       /* texture */,
-                      cl_int *        /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;
-    
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromGLRenderbuffer(cl_context   /* context */,
-                           cl_mem_flags /* flags */,
-                           cl_GLuint    /* renderbuffer */,
-                           cl_int *     /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetGLObjectInfo(cl_mem                /* memobj */,
-                  cl_gl_object_type *   /* gl_object_type */,
-                  cl_GLuint *           /* gl_object_name */) CL_API_SUFFIX__VERSION_1_0;
-                  
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetGLTextureInfo(cl_mem               /* memobj */,
-                   cl_gl_texture_info   /* param_name */,
-                   size_t               /* param_value_size */,
-                   void *               /* param_value */,
-                   size_t *             /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueAcquireGLObjects(cl_command_queue      /* command_queue */,
-                          cl_uint               /* num_objects */,
-                          const cl_mem *        /* mem_objects */,
-                          cl_uint               /* num_events_in_wait_list */,
-                          const cl_event *      /* event_wait_list */,
-                          cl_event *            /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReleaseGLObjects(cl_command_queue      /* command_queue */,
-                          cl_uint               /* num_objects */,
-                          const cl_mem *        /* mem_objects */,
-                          cl_uint               /* num_events_in_wait_list */,
-                          const cl_event *      /* event_wait_list */,
-                          cl_event *            /* event */) CL_API_SUFFIX__VERSION_1_0;
-
-
-/* Deprecated OpenCL 1.1 APIs */
-extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
-clCreateFromGLTexture2D(cl_context      /* context */,
-                        cl_mem_flags    /* flags */,
-                        cl_GLenum       /* target */,
-                        cl_GLint        /* miplevel */,
-                        cl_GLuint       /* texture */,
-                        cl_int *        /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-    
-extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
-clCreateFromGLTexture3D(cl_context      /* context */,
-                        cl_mem_flags    /* flags */,
-                        cl_GLenum       /* target */,
-                        cl_GLint        /* miplevel */,
-                        cl_GLuint       /* texture */,
-                        cl_int *        /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-    
-/* cl_khr_gl_sharing extension  */
-    
-#define cl_khr_gl_sharing 1
-    
-typedef cl_uint     cl_gl_context_info;
-    
-/* Additional Error Codes  */
-#define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR  -1000
-    
-/* cl_gl_context_info  */
-#define CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR    0x2006
-#define CL_DEVICES_FOR_GL_CONTEXT_KHR           0x2007
-    
-/* Additional cl_context_properties  */
-#define CL_GL_CONTEXT_KHR                       0x2008
-#define CL_EGL_DISPLAY_KHR                      0x2009
-#define CL_GLX_DISPLAY_KHR                      0x200A
-#define CL_WGL_HDC_KHR                          0x200B
-#define CL_CGL_SHAREGROUP_KHR                   0x200C
-    
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetGLContextInfoKHR(const cl_context_properties * /* properties */,
-                      cl_gl_context_info            /* param_name */,
-                      size_t                        /* param_value_size */,
-                      void *                        /* param_value */,
-                      size_t *                      /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-    
-typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetGLContextInfoKHR_fn)(
-    const cl_context_properties * properties,
-    cl_gl_context_info            param_name,
-    size_t                        param_value_size,
-    void *                        param_value,
-    size_t *                      param_value_size_ret);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* __OPENCL_CL_GL_H */

+ 0 - 65
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/cl_gl_ext.h

@@ -1,65 +0,0 @@
-/**********************************************************************************
- * Copyright (c) 2008-2012 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Materials.
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
- **********************************************************************************/
-
-/* $Revision: 11708 $ on $Date: 2010-06-13 23:36:24 -0700 (Sun, 13 Jun 2010) $ */
-
-/* cl_gl_ext.h contains vendor (non-KHR) OpenCL extensions which have           */
-/* OpenGL dependencies.                                                         */
-
-#ifndef __OPENCL_CL_GL_EXT_H
-#define __OPENCL_CL_GL_EXT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <cl_gl.h>
-
-/*
- * For each extension, follow this template
- *  cl_VEN_extname extension  */
-/* #define cl_VEN_extname 1
- * ... define new types, if any
- * ... define new tokens, if any
- * ... define new APIs, if any
- *
- *  If you need GLtypes here, mirror them with a cl_GLtype, rather than including a GL header
- *  This allows us to avoid having to decide whether to include GL headers or GLES here.
- */
-
-/* 
- *  cl_khr_gl_event  extension
- *  See section 9.9 in the OpenCL 1.1 spec for more information
- */
-#define CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR     0x200D
-
-extern CL_API_ENTRY cl_event CL_API_CALL
-clCreateEventFromGLsyncKHR(cl_context           /* context */,
-                           cl_GLsync            /* cl_GLsync */,
-                           cl_int *             /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* __OPENCL_CL_GL_EXT_H  */

+ 0 - 1278
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/cl_platform.h

@@ -1,1278 +0,0 @@
-/**********************************************************************************
- * Copyright (c) 2008-2012 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Materials.
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
- **********************************************************************************/
-
-/* $Revision: 11803 $ on $Date: 2010-06-25 10:02:12 -0700 (Fri, 25 Jun 2010) $ */
-
-#ifndef __CL_PLATFORM_H
-#define __CL_PLATFORM_H
-
-#ifdef __APPLE__
-    /* Contains #defines for AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER below */
-    #include <AvailabilityMacros.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(_WIN32)
-    #define CL_API_ENTRY
-    #define CL_API_CALL     __stdcall
-    #define CL_CALLBACK     __stdcall
-#else
-    #define CL_API_ENTRY
-    #define CL_API_CALL
-    #define CL_CALLBACK
-#endif
-
-#ifdef __APPLE__
-    #define CL_EXTENSION_WEAK_LINK       __attribute__((weak_import))
-    #define CL_API_SUFFIX__VERSION_1_0                  AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
-    #define CL_EXT_SUFFIX__VERSION_1_0                  CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
-    #define CL_API_SUFFIX__VERSION_1_1                  AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
-    #define GCL_API_SUFFIX__VERSION_1_1                 AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
-    #define CL_EXT_SUFFIX__VERSION_1_1                  CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
-    #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED       CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_7
-    
-    #ifdef AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER
-        #define CL_API_SUFFIX__VERSION_1_2              AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER
-        #define GCL_API_SUFFIX__VERSION_1_2             AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER
-        #define CL_EXT_SUFFIX__VERSION_1_2              CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER
-        #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
-        #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED   CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_8
-    #else
-        #warning  This path should never happen outside of internal operating system development.  AvailabilityMacros do not function correctly here!
-        #define CL_API_SUFFIX__VERSION_1_2              AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
-        #define GCL_API_SUFFIX__VERSION_1_2             AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
-        #define CL_EXT_SUFFIX__VERSION_1_2              CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
-        #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED   CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
-    #endif
-#else
-    #define CL_EXTENSION_WEAK_LINK  
-    #define CL_API_SUFFIX__VERSION_1_0
-    #define CL_EXT_SUFFIX__VERSION_1_0
-    #define CL_API_SUFFIX__VERSION_1_1
-    #define CL_EXT_SUFFIX__VERSION_1_1
-    #define CL_API_SUFFIX__VERSION_1_2
-    #define CL_EXT_SUFFIX__VERSION_1_2
-    
-    #ifdef __GNUC__
-        #ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
-            #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
-            #define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED    
-        #else
-            #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED __attribute__((deprecated))
-            #define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED    
-        #endif
-    
-        #ifdef CL_USE_DEPRECATED_OPENCL_1_1_APIS
-            #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED    
-            #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED    
-        #else
-            #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED __attribute__((deprecated))
-            #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED    
-        #endif
-    #elif _WIN32
-        #ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
-            #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED    
-            #define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED    
-        #else
-            #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED 
-            #define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED __declspec(deprecated)     
-        #endif
-    
-        #ifdef CL_USE_DEPRECATED_OPENCL_1_1_APIS
-            #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-            #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED    
-        #else
-            #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED 
-            #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED __declspec(deprecated)     
-        #endif
-    #else
-        #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
-        #define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED
-    
-        #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-        #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
-    #endif
-#endif
-
-#if (defined (_WIN32) && defined(_MSC_VER))
-
-/* scalar types  */
-typedef signed   __int8         cl_char;
-typedef unsigned __int8         cl_uchar;
-typedef signed   __int16        cl_short;
-typedef unsigned __int16        cl_ushort;
-typedef signed   __int32        cl_int;
-typedef unsigned __int32        cl_uint;
-typedef signed   __int64        cl_long;
-typedef unsigned __int64        cl_ulong;
-
-typedef unsigned __int16        cl_half;
-typedef float                   cl_float;
-typedef double                  cl_double;
-
-/* Macro names and corresponding values defined by OpenCL */
-#define CL_CHAR_BIT         8
-#define CL_SCHAR_MAX        127
-#define CL_SCHAR_MIN        (-127-1)
-#define CL_CHAR_MAX         CL_SCHAR_MAX
-#define CL_CHAR_MIN         CL_SCHAR_MIN
-#define CL_UCHAR_MAX        255
-#define CL_SHRT_MAX         32767
-#define CL_SHRT_MIN         (-32767-1)
-#define CL_USHRT_MAX        65535
-#define CL_INT_MAX          2147483647
-#define CL_INT_MIN          (-2147483647-1)
-#define CL_UINT_MAX         0xffffffffU
-#define CL_LONG_MAX         ((cl_long) 0x7FFFFFFFFFFFFFFFLL)
-#define CL_LONG_MIN         ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL)
-#define CL_ULONG_MAX        ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL)
-
-#define CL_FLT_DIG          6
-#define CL_FLT_MANT_DIG     24
-#define CL_FLT_MAX_10_EXP   +38
-#define CL_FLT_MAX_EXP      +128
-#define CL_FLT_MIN_10_EXP   -37
-#define CL_FLT_MIN_EXP      -125
-#define CL_FLT_RADIX        2
-#define CL_FLT_MAX          340282346638528859811704183484516925440.0f
-#define CL_FLT_MIN          1.175494350822287507969e-38f
-#define CL_FLT_EPSILON      0x1.0p-23f
-
-#define CL_DBL_DIG          15
-#define CL_DBL_MANT_DIG     53
-#define CL_DBL_MAX_10_EXP   +308
-#define CL_DBL_MAX_EXP      +1024
-#define CL_DBL_MIN_10_EXP   -307
-#define CL_DBL_MIN_EXP      -1021
-#define CL_DBL_RADIX        2
-#define CL_DBL_MAX          179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0
-#define CL_DBL_MIN          2.225073858507201383090e-308
-#define CL_DBL_EPSILON      2.220446049250313080847e-16
-
-#define  CL_M_E             2.718281828459045090796
-#define  CL_M_LOG2E         1.442695040888963387005
-#define  CL_M_LOG10E        0.434294481903251816668
-#define  CL_M_LN2           0.693147180559945286227
-#define  CL_M_LN10          2.302585092994045901094
-#define  CL_M_PI            3.141592653589793115998
-#define  CL_M_PI_2          1.570796326794896557999
-#define  CL_M_PI_4          0.785398163397448278999
-#define  CL_M_1_PI          0.318309886183790691216
-#define  CL_M_2_PI          0.636619772367581382433
-#define  CL_M_2_SQRTPI      1.128379167095512558561
-#define  CL_M_SQRT2         1.414213562373095145475
-#define  CL_M_SQRT1_2       0.707106781186547572737
-
-#define  CL_M_E_F           2.71828174591064f
-#define  CL_M_LOG2E_F       1.44269502162933f
-#define  CL_M_LOG10E_F      0.43429449200630f
-#define  CL_M_LN2_F         0.69314718246460f
-#define  CL_M_LN10_F        2.30258512496948f
-#define  CL_M_PI_F          3.14159274101257f
-#define  CL_M_PI_2_F        1.57079637050629f
-#define  CL_M_PI_4_F        0.78539818525314f
-#define  CL_M_1_PI_F        0.31830987334251f
-#define  CL_M_2_PI_F        0.63661974668503f
-#define  CL_M_2_SQRTPI_F    1.12837922573090f
-#define  CL_M_SQRT2_F       1.41421353816986f
-#define  CL_M_SQRT1_2_F     0.70710676908493f
-
-#define CL_NAN              (CL_INFINITY - CL_INFINITY)
-#define CL_HUGE_VALF        ((cl_float) 1e50)
-#define CL_HUGE_VAL         ((cl_double) 1e500)
-#define CL_MAXFLOAT         CL_FLT_MAX
-#define CL_INFINITY         CL_HUGE_VALF
-
-#else
-
-#include <stdint.h>
-
-/* scalar types  */
-typedef int8_t          cl_char;
-typedef uint8_t         cl_uchar;
-typedef int16_t         cl_short    __attribute__((aligned(2)));
-typedef uint16_t        cl_ushort   __attribute__((aligned(2)));
-typedef int32_t         cl_int      __attribute__((aligned(4)));
-typedef uint32_t        cl_uint     __attribute__((aligned(4)));
-typedef int64_t         cl_long     __attribute__((aligned(8)));
-typedef uint64_t        cl_ulong    __attribute__((aligned(8)));
-
-typedef uint16_t        cl_half     __attribute__((aligned(2)));
-typedef float           cl_float    __attribute__((aligned(4)));
-typedef double          cl_double   __attribute__((aligned(8)));
-
-/* Macro names and corresponding values defined by OpenCL */
-#define CL_CHAR_BIT         8
-#define CL_SCHAR_MAX        127
-#define CL_SCHAR_MIN        (-127-1)
-#define CL_CHAR_MAX         CL_SCHAR_MAX
-#define CL_CHAR_MIN         CL_SCHAR_MIN
-#define CL_UCHAR_MAX        255
-#define CL_SHRT_MAX         32767
-#define CL_SHRT_MIN         (-32767-1)
-#define CL_USHRT_MAX        65535
-#define CL_INT_MAX          2147483647
-#define CL_INT_MIN          (-2147483647-1)
-#define CL_UINT_MAX         0xffffffffU
-#define CL_LONG_MAX         ((cl_long) 0x7FFFFFFFFFFFFFFFLL)
-#define CL_LONG_MIN         ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL)
-#define CL_ULONG_MAX        ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL)
-
-#define CL_FLT_DIG          6
-#define CL_FLT_MANT_DIG     24
-#define CL_FLT_MAX_10_EXP   +38
-#define CL_FLT_MAX_EXP      +128
-#define CL_FLT_MIN_10_EXP   -37
-#define CL_FLT_MIN_EXP      -125
-#define CL_FLT_RADIX        2
-#define CL_FLT_MAX          0x1.fffffep127f
-#define CL_FLT_MIN          0x1.0p-126f
-#define CL_FLT_EPSILON      0x1.0p-23f
-
-#define CL_DBL_DIG          15
-#define CL_DBL_MANT_DIG     53
-#define CL_DBL_MAX_10_EXP   +308
-#define CL_DBL_MAX_EXP      +1024
-#define CL_DBL_MIN_10_EXP   -307
-#define CL_DBL_MIN_EXP      -1021
-#define CL_DBL_RADIX        2
-#define CL_DBL_MAX          0x1.fffffffffffffp1023
-#define CL_DBL_MIN          0x1.0p-1022
-#define CL_DBL_EPSILON      0x1.0p-52
-
-#define  CL_M_E             2.718281828459045090796
-#define  CL_M_LOG2E         1.442695040888963387005
-#define  CL_M_LOG10E        0.434294481903251816668
-#define  CL_M_LN2           0.693147180559945286227
-#define  CL_M_LN10          2.302585092994045901094
-#define  CL_M_PI            3.141592653589793115998
-#define  CL_M_PI_2          1.570796326794896557999
-#define  CL_M_PI_4          0.785398163397448278999
-#define  CL_M_1_PI          0.318309886183790691216
-#define  CL_M_2_PI          0.636619772367581382433
-#define  CL_M_2_SQRTPI      1.128379167095512558561
-#define  CL_M_SQRT2         1.414213562373095145475
-#define  CL_M_SQRT1_2       0.707106781186547572737
-
-#define  CL_M_E_F           2.71828174591064f
-#define  CL_M_LOG2E_F       1.44269502162933f
-#define  CL_M_LOG10E_F      0.43429449200630f
-#define  CL_M_LN2_F         0.69314718246460f
-#define  CL_M_LN10_F        2.30258512496948f
-#define  CL_M_PI_F          3.14159274101257f
-#define  CL_M_PI_2_F        1.57079637050629f
-#define  CL_M_PI_4_F        0.78539818525314f
-#define  CL_M_1_PI_F        0.31830987334251f
-#define  CL_M_2_PI_F        0.63661974668503f
-#define  CL_M_2_SQRTPI_F    1.12837922573090f
-#define  CL_M_SQRT2_F       1.41421353816986f
-#define  CL_M_SQRT1_2_F     0.70710676908493f
-
-#if defined( __GNUC__ )
-   #define CL_HUGE_VALF     __builtin_huge_valf()
-   #define CL_HUGE_VAL      __builtin_huge_val()
-   #define CL_NAN           __builtin_nanf( "" )
-#else
-   #define CL_HUGE_VALF     ((cl_float) 1e50)
-   #define CL_HUGE_VAL      ((cl_double) 1e500)
-   float nanf( const char * );
-   #define CL_NAN           nanf( "" )  
-#endif
-#define CL_MAXFLOAT         CL_FLT_MAX
-#define CL_INFINITY         CL_HUGE_VALF
-
-#endif
-
-#include <stddef.h>
-
-/* Mirror types to GL types. Mirror types allow us to avoid deciding which 87s to load based on whether we are using GL or GLES here. */
-typedef unsigned int cl_GLuint;
-typedef int          cl_GLint;
-typedef unsigned int cl_GLenum;
-
-/*
- * Vector types 
- *
- *  Note:   OpenCL requires that all types be naturally aligned. 
- *          This means that vector types must be naturally aligned.
- *          For example, a vector of four floats must be aligned to
- *          a 16 byte boundary (calculated as 4 * the natural 4-byte 
- *          alignment of the float).  The alignment qualifiers here
- *          will only function properly if your compiler supports them
- *          and if you don't actively work to defeat them.  For example,
- *          in order for a cl_float4 to be 16 byte aligned in a struct,
- *          the start of the struct must itself be 16-byte aligned. 
- *
- *          Maintaining proper alignment is the user's responsibility.
- */
-
-/* Define basic vector types */
-#if defined( __VEC__ )
-   #include <altivec.h>   /* may be omitted depending on compiler. AltiVec spec provides no way to detect whether the header is required. */
-   typedef vector unsigned char     __cl_uchar16;
-   typedef vector signed char       __cl_char16;
-   typedef vector unsigned short    __cl_ushort8;
-   typedef vector signed short      __cl_short8;
-   typedef vector unsigned int      __cl_uint4;
-   typedef vector signed int        __cl_int4;
-   typedef vector float             __cl_float4;
-   #define  __CL_UCHAR16__  1
-   #define  __CL_CHAR16__   1
-   #define  __CL_USHORT8__  1
-   #define  __CL_SHORT8__   1
-   #define  __CL_UINT4__    1
-   #define  __CL_INT4__     1
-   #define  __CL_FLOAT4__   1
-#endif
-
-#if defined( __SSE__ )
-    #if defined( __MINGW64__ )
-        #include <intrin.h>
-    #else
-        #include <xmmintrin.h>
-    #endif
-    #if defined( __GNUC__ )
-        typedef float __cl_float4   __attribute__((vector_size(16)));
-    #else
-        typedef __m128 __cl_float4;
-    #endif
-    #define __CL_FLOAT4__   1
-#endif
-
-#if defined( __SSE2__ )
-    #if defined( __MINGW64__ )
-        #include <intrin.h>
-    #else
-        #include <emmintrin.h>
-    #endif
-    #if defined( __GNUC__ )
-        typedef cl_uchar    __cl_uchar16    __attribute__((vector_size(16)));
-        typedef cl_char     __cl_char16     __attribute__((vector_size(16)));
-        typedef cl_ushort   __cl_ushort8    __attribute__((vector_size(16)));
-        typedef cl_short    __cl_short8     __attribute__((vector_size(16)));
-        typedef cl_uint     __cl_uint4      __attribute__((vector_size(16)));
-        typedef cl_int      __cl_int4       __attribute__((vector_size(16)));
-        typedef cl_ulong    __cl_ulong2     __attribute__((vector_size(16)));
-        typedef cl_long     __cl_long2      __attribute__((vector_size(16)));
-        typedef cl_double   __cl_double2    __attribute__((vector_size(16)));
-    #else
-        typedef __m128i __cl_uchar16;
-        typedef __m128i __cl_char16;
-        typedef __m128i __cl_ushort8;
-        typedef __m128i __cl_short8;
-        typedef __m128i __cl_uint4;
-        typedef __m128i __cl_int4;
-        typedef __m128i __cl_ulong2;
-        typedef __m128i __cl_long2;
-        typedef __m128d __cl_double2;
-    #endif
-    #define __CL_UCHAR16__  1
-    #define __CL_CHAR16__   1
-    #define __CL_USHORT8__  1
-    #define __CL_SHORT8__   1
-    #define __CL_INT4__     1
-    #define __CL_UINT4__    1
-    #define __CL_ULONG2__   1
-    #define __CL_LONG2__    1
-    #define __CL_DOUBLE2__  1
-#endif
-
-#if defined( __MMX__ )
-    #include <mmintrin.h>
-    #if defined( __GNUC__ )
-        typedef cl_uchar    __cl_uchar8     __attribute__((vector_size(8)));
-        typedef cl_char     __cl_char8      __attribute__((vector_size(8)));
-        typedef cl_ushort   __cl_ushort4    __attribute__((vector_size(8)));
-        typedef cl_short    __cl_short4     __attribute__((vector_size(8)));
-        typedef cl_uint     __cl_uint2      __attribute__((vector_size(8)));
-        typedef cl_int      __cl_int2       __attribute__((vector_size(8)));
-        typedef cl_ulong    __cl_ulong1     __attribute__((vector_size(8)));
-        typedef cl_long     __cl_long1      __attribute__((vector_size(8)));
-        typedef cl_float    __cl_float2     __attribute__((vector_size(8)));
-    #else
-        typedef __m64       __cl_uchar8;
-        typedef __m64       __cl_char8;
-        typedef __m64       __cl_ushort4;
-        typedef __m64       __cl_short4;
-        typedef __m64       __cl_uint2;
-        typedef __m64       __cl_int2;
-        typedef __m64       __cl_ulong1;
-        typedef __m64       __cl_long1;
-        typedef __m64       __cl_float2;
-    #endif
-    #define __CL_UCHAR8__   1
-    #define __CL_CHAR8__    1
-    #define __CL_USHORT4__  1
-    #define __CL_SHORT4__   1
-    #define __CL_INT2__     1
-    #define __CL_UINT2__    1
-    #define __CL_ULONG1__   1
-    #define __CL_LONG1__    1
-    #define __CL_FLOAT2__   1
-#endif
-
-#if defined( __AVX__ )
-    #if defined( __MINGW64__ )
-        #include <intrin.h>
-    #else
-        #include <immintrin.h> 
-    #endif
-    #if defined( __GNUC__ )
-        typedef cl_float    __cl_float8     __attribute__((vector_size(32)));
-        typedef cl_double   __cl_double4    __attribute__((vector_size(32)));
-    #else
-        typedef __m256      __cl_float8;
-        typedef __m256d     __cl_double4;
-    #endif
-    #define __CL_FLOAT8__   1
-    #define __CL_DOUBLE4__  1
-#endif
-
-/* Define capabilities for anonymous struct members. */
-#if defined( __GNUC__) && ! defined( __STRICT_ANSI__ )
-#define  __CL_HAS_ANON_STRUCT__ 1
-#define  __CL_ANON_STRUCT__ __extension__
-#elif defined( _WIN32) && (_MSC_VER >= 1500)
-   /* Microsoft Developer Studio 2008 supports anonymous structs, but
-    * complains by default. */
-#define  __CL_HAS_ANON_STRUCT__ 1
-#define  __CL_ANON_STRUCT__
-   /* Disable warning C4201: nonstandard extension used : nameless
-    * struct/union */
-#pragma warning( push )
-#pragma warning( disable : 4201 )
-#else
-#define  __CL_HAS_ANON_STRUCT__ 0
-#define  __CL_ANON_STRUCT__
-#endif
-
-/* Define alignment keys */
-#if defined( __GNUC__ )
-    #define CL_ALIGNED(_x)          __attribute__ ((aligned(_x)))
-#elif defined( _WIN32) && (_MSC_VER)
-    /* Alignment keys neutered on windows because MSVC can't swallow function arguments with alignment requirements     */
-    /* http://msdn.microsoft.com/en-us/library/373ak2y1%28VS.71%29.aspx                                                 */
-    /* #include <crtdefs.h>                                                                                             */
-    /* #define CL_ALIGNED(_x)          _CRT_ALIGN(_x)                                                                   */
-    #define CL_ALIGNED(_x)
-#else
-   #warning  Need to implement some method to align data here
-   #define  CL_ALIGNED(_x)
-#endif
-
-/* Indicate whether .xyzw, .s0123 and .hi.lo are supported */
-#if __CL_HAS_ANON_STRUCT__
-    /* .xyzw and .s0123...{f|F} are supported */
-    #define CL_HAS_NAMED_VECTOR_FIELDS 1
-    /* .hi and .lo are supported */
-    #define CL_HAS_HI_LO_VECTOR_FIELDS 1
-#endif
-
-/* Define cl_vector types */
-
-/* ---- cl_charn ---- */
-typedef union
-{
-    cl_char  CL_ALIGNED(2) s[2];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_char  x, y; };
-   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1; };
-   __CL_ANON_STRUCT__ struct{ cl_char  lo, hi; };
-#endif
-#if defined( __CL_CHAR2__) 
-    __cl_char2     v2;
-#endif
-}cl_char2;
-
-typedef union
-{
-    cl_char  CL_ALIGNED(4) s[4];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_char  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1, s2, s3; };
-   __CL_ANON_STRUCT__ struct{ cl_char2 lo, hi; };
-#endif
-#if defined( __CL_CHAR2__) 
-    __cl_char2     v2[2];
-#endif
-#if defined( __CL_CHAR4__) 
-    __cl_char4     v4;
-#endif
-}cl_char4;
-
-/* cl_char3 is identical in size, alignment and behavior to cl_char4. See section 6.1.5. */
-typedef  cl_char4  cl_char3;
-
-typedef union
-{
-    cl_char   CL_ALIGNED(8) s[8];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_char  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1, s2, s3, s4, s5, s6, s7; };
-   __CL_ANON_STRUCT__ struct{ cl_char4 lo, hi; };
-#endif
-#if defined( __CL_CHAR2__) 
-    __cl_char2     v2[4];
-#endif
-#if defined( __CL_CHAR4__) 
-    __cl_char4     v4[2];
-#endif
-#if defined( __CL_CHAR8__ )
-    __cl_char8     v8;
-#endif
-}cl_char8;
-
-typedef union
-{
-    cl_char  CL_ALIGNED(16) s[16];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_char  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
-   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
-   __CL_ANON_STRUCT__ struct{ cl_char8 lo, hi; };
-#endif
-#if defined( __CL_CHAR2__) 
-    __cl_char2     v2[8];
-#endif
-#if defined( __CL_CHAR4__) 
-    __cl_char4     v4[4];
-#endif
-#if defined( __CL_CHAR8__ )
-    __cl_char8     v8[2];
-#endif
-#if defined( __CL_CHAR16__ )
-    __cl_char16    v16;
-#endif
-}cl_char16;
-
-
-/* ---- cl_ucharn ---- */
-typedef union
-{
-    cl_uchar  CL_ALIGNED(2) s[2];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y; };
-   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1; };
-   __CL_ANON_STRUCT__ struct{ cl_uchar  lo, hi; };
-#endif
-#if defined( __cl_uchar2__) 
-    __cl_uchar2     v2;
-#endif
-}cl_uchar2;
-
-typedef union
-{
-    cl_uchar  CL_ALIGNED(4) s[4];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1, s2, s3; };
-   __CL_ANON_STRUCT__ struct{ cl_uchar2 lo, hi; };
-#endif
-#if defined( __CL_UCHAR2__) 
-    __cl_uchar2     v2[2];
-#endif
-#if defined( __CL_UCHAR4__) 
-    __cl_uchar4     v4;
-#endif
-}cl_uchar4;
-
-/* cl_uchar3 is identical in size, alignment and behavior to cl_uchar4. See section 6.1.5. */
-typedef  cl_uchar4  cl_uchar3;
-
-typedef union
-{
-    cl_uchar   CL_ALIGNED(8) s[8];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1, s2, s3, s4, s5, s6, s7; };
-   __CL_ANON_STRUCT__ struct{ cl_uchar4 lo, hi; };
-#endif
-#if defined( __CL_UCHAR2__) 
-    __cl_uchar2     v2[4];
-#endif
-#if defined( __CL_UCHAR4__) 
-    __cl_uchar4     v4[2];
-#endif
-#if defined( __CL_UCHAR8__ )
-    __cl_uchar8     v8;
-#endif
-}cl_uchar8;
-
-typedef union
-{
-    cl_uchar  CL_ALIGNED(16) s[16];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
-   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
-   __CL_ANON_STRUCT__ struct{ cl_uchar8 lo, hi; };
-#endif
-#if defined( __CL_UCHAR2__) 
-    __cl_uchar2     v2[8];
-#endif
-#if defined( __CL_UCHAR4__) 
-    __cl_uchar4     v4[4];
-#endif
-#if defined( __CL_UCHAR8__ )
-    __cl_uchar8     v8[2];
-#endif
-#if defined( __CL_UCHAR16__ )
-    __cl_uchar16    v16;
-#endif
-}cl_uchar16;
-
-
-/* ---- cl_shortn ---- */
-typedef union
-{
-    cl_short  CL_ALIGNED(4) s[2];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_short  x, y; };
-   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1; };
-   __CL_ANON_STRUCT__ struct{ cl_short  lo, hi; };
-#endif
-#if defined( __CL_SHORT2__) 
-    __cl_short2     v2;
-#endif
-}cl_short2;
-
-typedef union
-{
-    cl_short  CL_ALIGNED(8) s[4];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_short  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1, s2, s3; };
-   __CL_ANON_STRUCT__ struct{ cl_short2 lo, hi; };
-#endif
-#if defined( __CL_SHORT2__) 
-    __cl_short2     v2[2];
-#endif
-#if defined( __CL_SHORT4__) 
-    __cl_short4     v4;
-#endif
-}cl_short4;
-
-/* cl_short3 is identical in size, alignment and behavior to cl_short4. See section 6.1.5. */
-typedef  cl_short4  cl_short3;
-
-typedef union
-{
-    cl_short   CL_ALIGNED(16) s[8];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_short  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1, s2, s3, s4, s5, s6, s7; };
-   __CL_ANON_STRUCT__ struct{ cl_short4 lo, hi; };
-#endif
-#if defined( __CL_SHORT2__) 
-    __cl_short2     v2[4];
-#endif
-#if defined( __CL_SHORT4__) 
-    __cl_short4     v4[2];
-#endif
-#if defined( __CL_SHORT8__ )
-    __cl_short8     v8;
-#endif
-}cl_short8;
-
-typedef union
-{
-    cl_short  CL_ALIGNED(32) s[16];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_short  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
-   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
-   __CL_ANON_STRUCT__ struct{ cl_short8 lo, hi; };
-#endif
-#if defined( __CL_SHORT2__) 
-    __cl_short2     v2[8];
-#endif
-#if defined( __CL_SHORT4__) 
-    __cl_short4     v4[4];
-#endif
-#if defined( __CL_SHORT8__ )
-    __cl_short8     v8[2];
-#endif
-#if defined( __CL_SHORT16__ )
-    __cl_short16    v16;
-#endif
-}cl_short16;
-
-
-/* ---- cl_ushortn ---- */
-typedef union
-{
-    cl_ushort  CL_ALIGNED(4) s[2];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y; };
-   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1; };
-   __CL_ANON_STRUCT__ struct{ cl_ushort  lo, hi; };
-#endif
-#if defined( __CL_USHORT2__) 
-    __cl_ushort2     v2;
-#endif
-}cl_ushort2;
-
-typedef union
-{
-    cl_ushort  CL_ALIGNED(8) s[4];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1, s2, s3; };
-   __CL_ANON_STRUCT__ struct{ cl_ushort2 lo, hi; };
-#endif
-#if defined( __CL_USHORT2__) 
-    __cl_ushort2     v2[2];
-#endif
-#if defined( __CL_USHORT4__) 
-    __cl_ushort4     v4;
-#endif
-}cl_ushort4;
-
-/* cl_ushort3 is identical in size, alignment and behavior to cl_ushort4. See section 6.1.5. */
-typedef  cl_ushort4  cl_ushort3;
-
-typedef union
-{
-    cl_ushort   CL_ALIGNED(16) s[8];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1, s2, s3, s4, s5, s6, s7; };
-   __CL_ANON_STRUCT__ struct{ cl_ushort4 lo, hi; };
-#endif
-#if defined( __CL_USHORT2__) 
-    __cl_ushort2     v2[4];
-#endif
-#if defined( __CL_USHORT4__) 
-    __cl_ushort4     v4[2];
-#endif
-#if defined( __CL_USHORT8__ )
-    __cl_ushort8     v8;
-#endif
-}cl_ushort8;
-
-typedef union
-{
-    cl_ushort  CL_ALIGNED(32) s[16];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
-   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
-   __CL_ANON_STRUCT__ struct{ cl_ushort8 lo, hi; };
-#endif
-#if defined( __CL_USHORT2__) 
-    __cl_ushort2     v2[8];
-#endif
-#if defined( __CL_USHORT4__) 
-    __cl_ushort4     v4[4];
-#endif
-#if defined( __CL_USHORT8__ )
-    __cl_ushort8     v8[2];
-#endif
-#if defined( __CL_USHORT16__ )
-    __cl_ushort16    v16;
-#endif
-}cl_ushort16;
-
-/* ---- cl_intn ---- */
-typedef union
-{
-    cl_int  CL_ALIGNED(8) s[2];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_int  x, y; };
-   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1; };
-   __CL_ANON_STRUCT__ struct{ cl_int  lo, hi; };
-#endif
-#if defined( __CL_INT2__) 
-    __cl_int2     v2;
-#endif
-}cl_int2;
-
-typedef union
-{
-    cl_int  CL_ALIGNED(16) s[4];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_int  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1, s2, s3; };
-   __CL_ANON_STRUCT__ struct{ cl_int2 lo, hi; };
-#endif
-#if defined( __CL_INT2__) 
-    __cl_int2     v2[2];
-#endif
-#if defined( __CL_INT4__) 
-    __cl_int4     v4;
-#endif
-}cl_int4;
-
-/* cl_int3 is identical in size, alignment and behavior to cl_int4. See section 6.1.5. */
-typedef  cl_int4  cl_int3;
-
-typedef union
-{
-    cl_int   CL_ALIGNED(32) s[8];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_int  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1, s2, s3, s4, s5, s6, s7; };
-   __CL_ANON_STRUCT__ struct{ cl_int4 lo, hi; };
-#endif
-#if defined( __CL_INT2__) 
-    __cl_int2     v2[4];
-#endif
-#if defined( __CL_INT4__) 
-    __cl_int4     v4[2];
-#endif
-#if defined( __CL_INT8__ )
-    __cl_int8     v8;
-#endif
-}cl_int8;
-
-typedef union
-{
-    cl_int  CL_ALIGNED(64) s[16];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_int  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
-   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
-   __CL_ANON_STRUCT__ struct{ cl_int8 lo, hi; };
-#endif
-#if defined( __CL_INT2__) 
-    __cl_int2     v2[8];
-#endif
-#if defined( __CL_INT4__) 
-    __cl_int4     v4[4];
-#endif
-#if defined( __CL_INT8__ )
-    __cl_int8     v8[2];
-#endif
-#if defined( __CL_INT16__ )
-    __cl_int16    v16;
-#endif
-}cl_int16;
-
-
-/* ---- cl_uintn ---- */
-typedef union
-{
-    cl_uint  CL_ALIGNED(8) s[2];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_uint  x, y; };
-   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1; };
-   __CL_ANON_STRUCT__ struct{ cl_uint  lo, hi; };
-#endif
-#if defined( __CL_UINT2__) 
-    __cl_uint2     v2;
-#endif
-}cl_uint2;
-
-typedef union
-{
-    cl_uint  CL_ALIGNED(16) s[4];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_uint  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1, s2, s3; };
-   __CL_ANON_STRUCT__ struct{ cl_uint2 lo, hi; };
-#endif
-#if defined( __CL_UINT2__) 
-    __cl_uint2     v2[2];
-#endif
-#if defined( __CL_UINT4__) 
-    __cl_uint4     v4;
-#endif
-}cl_uint4;
-
-/* cl_uint3 is identical in size, alignment and behavior to cl_uint4. See section 6.1.5. */
-typedef  cl_uint4  cl_uint3;
-
-typedef union
-{
-    cl_uint   CL_ALIGNED(32) s[8];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_uint  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1, s2, s3, s4, s5, s6, s7; };
-   __CL_ANON_STRUCT__ struct{ cl_uint4 lo, hi; };
-#endif
-#if defined( __CL_UINT2__) 
-    __cl_uint2     v2[4];
-#endif
-#if defined( __CL_UINT4__) 
-    __cl_uint4     v4[2];
-#endif
-#if defined( __CL_UINT8__ )
-    __cl_uint8     v8;
-#endif
-}cl_uint8;
-
-typedef union
-{
-    cl_uint  CL_ALIGNED(64) s[16];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_uint  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
-   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
-   __CL_ANON_STRUCT__ struct{ cl_uint8 lo, hi; };
-#endif
-#if defined( __CL_UINT2__) 
-    __cl_uint2     v2[8];
-#endif
-#if defined( __CL_UINT4__) 
-    __cl_uint4     v4[4];
-#endif
-#if defined( __CL_UINT8__ )
-    __cl_uint8     v8[2];
-#endif
-#if defined( __CL_UINT16__ )
-    __cl_uint16    v16;
-#endif
-}cl_uint16;
-
-/* ---- cl_longn ---- */
-typedef union
-{
-    cl_long  CL_ALIGNED(16) s[2];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_long  x, y; };
-   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1; };
-   __CL_ANON_STRUCT__ struct{ cl_long  lo, hi; };
-#endif
-#if defined( __CL_LONG2__) 
-    __cl_long2     v2;
-#endif
-}cl_long2;
-
-typedef union
-{
-    cl_long  CL_ALIGNED(32) s[4];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_long  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1, s2, s3; };
-   __CL_ANON_STRUCT__ struct{ cl_long2 lo, hi; };
-#endif
-#if defined( __CL_LONG2__) 
-    __cl_long2     v2[2];
-#endif
-#if defined( __CL_LONG4__) 
-    __cl_long4     v4;
-#endif
-}cl_long4;
-
-/* cl_long3 is identical in size, alignment and behavior to cl_long4. See section 6.1.5. */
-typedef  cl_long4  cl_long3;
-
-typedef union
-{
-    cl_long   CL_ALIGNED(64) s[8];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_long  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1, s2, s3, s4, s5, s6, s7; };
-   __CL_ANON_STRUCT__ struct{ cl_long4 lo, hi; };
-#endif
-#if defined( __CL_LONG2__) 
-    __cl_long2     v2[4];
-#endif
-#if defined( __CL_LONG4__) 
-    __cl_long4     v4[2];
-#endif
-#if defined( __CL_LONG8__ )
-    __cl_long8     v8;
-#endif
-}cl_long8;
-
-typedef union
-{
-    cl_long  CL_ALIGNED(128) s[16];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_long  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
-   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
-   __CL_ANON_STRUCT__ struct{ cl_long8 lo, hi; };
-#endif
-#if defined( __CL_LONG2__) 
-    __cl_long2     v2[8];
-#endif
-#if defined( __CL_LONG4__) 
-    __cl_long4     v4[4];
-#endif
-#if defined( __CL_LONG8__ )
-    __cl_long8     v8[2];
-#endif
-#if defined( __CL_LONG16__ )
-    __cl_long16    v16;
-#endif
-}cl_long16;
-
-
-/* ---- cl_ulongn ---- */
-typedef union
-{
-    cl_ulong  CL_ALIGNED(16) s[2];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y; };
-   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1; };
-   __CL_ANON_STRUCT__ struct{ cl_ulong  lo, hi; };
-#endif
-#if defined( __CL_ULONG2__) 
-    __cl_ulong2     v2;
-#endif
-}cl_ulong2;
-
-typedef union
-{
-    cl_ulong  CL_ALIGNED(32) s[4];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1, s2, s3; };
-   __CL_ANON_STRUCT__ struct{ cl_ulong2 lo, hi; };
-#endif
-#if defined( __CL_ULONG2__) 
-    __cl_ulong2     v2[2];
-#endif
-#if defined( __CL_ULONG4__) 
-    __cl_ulong4     v4;
-#endif
-}cl_ulong4;
-
-/* cl_ulong3 is identical in size, alignment and behavior to cl_ulong4. See section 6.1.5. */
-typedef  cl_ulong4  cl_ulong3;
-
-typedef union
-{
-    cl_ulong   CL_ALIGNED(64) s[8];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1, s2, s3, s4, s5, s6, s7; };
-   __CL_ANON_STRUCT__ struct{ cl_ulong4 lo, hi; };
-#endif
-#if defined( __CL_ULONG2__) 
-    __cl_ulong2     v2[4];
-#endif
-#if defined( __CL_ULONG4__) 
-    __cl_ulong4     v4[2];
-#endif
-#if defined( __CL_ULONG8__ )
-    __cl_ulong8     v8;
-#endif
-}cl_ulong8;
-
-typedef union
-{
-    cl_ulong  CL_ALIGNED(128) s[16];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
-   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
-   __CL_ANON_STRUCT__ struct{ cl_ulong8 lo, hi; };
-#endif
-#if defined( __CL_ULONG2__) 
-    __cl_ulong2     v2[8];
-#endif
-#if defined( __CL_ULONG4__) 
-    __cl_ulong4     v4[4];
-#endif
-#if defined( __CL_ULONG8__ )
-    __cl_ulong8     v8[2];
-#endif
-#if defined( __CL_ULONG16__ )
-    __cl_ulong16    v16;
-#endif
-}cl_ulong16;
-
-
-/* --- cl_floatn ---- */
-
-typedef union
-{
-    cl_float  CL_ALIGNED(8) s[2];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_float  x, y; };
-   __CL_ANON_STRUCT__ struct{ cl_float  s0, s1; };
-   __CL_ANON_STRUCT__ struct{ cl_float  lo, hi; };
-#endif
-#if defined( __CL_FLOAT2__) 
-    __cl_float2     v2;
-#endif
-}cl_float2;
-
-typedef union
-{
-    cl_float  CL_ALIGNED(16) s[4];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_float   x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_float   s0, s1, s2, s3; };
-   __CL_ANON_STRUCT__ struct{ cl_float2  lo, hi; };
-#endif
-#if defined( __CL_FLOAT2__) 
-    __cl_float2     v2[2];
-#endif
-#if defined( __CL_FLOAT4__) 
-    __cl_float4     v4;
-#endif
-}cl_float4;
-
-/* cl_float3 is identical in size, alignment and behavior to cl_float4. See section 6.1.5. */
-typedef  cl_float4  cl_float3;
-
-typedef union
-{
-    cl_float   CL_ALIGNED(32) s[8];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_float   x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_float   s0, s1, s2, s3, s4, s5, s6, s7; };
-   __CL_ANON_STRUCT__ struct{ cl_float4  lo, hi; };
-#endif
-#if defined( __CL_FLOAT2__) 
-    __cl_float2     v2[4];
-#endif
-#if defined( __CL_FLOAT4__) 
-    __cl_float4     v4[2];
-#endif
-#if defined( __CL_FLOAT8__ )
-    __cl_float8     v8;
-#endif
-}cl_float8;
-
-typedef union
-{
-    cl_float  CL_ALIGNED(64) s[16];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_float  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
-   __CL_ANON_STRUCT__ struct{ cl_float  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
-   __CL_ANON_STRUCT__ struct{ cl_float8 lo, hi; };
-#endif
-#if defined( __CL_FLOAT2__) 
-    __cl_float2     v2[8];
-#endif
-#if defined( __CL_FLOAT4__) 
-    __cl_float4     v4[4];
-#endif
-#if defined( __CL_FLOAT8__ )
-    __cl_float8     v8[2];
-#endif
-#if defined( __CL_FLOAT16__ )
-    __cl_float16    v16;
-#endif
-}cl_float16;
-
-/* --- cl_doublen ---- */
-
-typedef union
-{
-    cl_double  CL_ALIGNED(16) s[2];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_double  x, y; };
-   __CL_ANON_STRUCT__ struct{ cl_double s0, s1; };
-   __CL_ANON_STRUCT__ struct{ cl_double lo, hi; };
-#endif
-#if defined( __CL_DOUBLE2__) 
-    __cl_double2     v2;
-#endif
-}cl_double2;
-
-typedef union
-{
-    cl_double  CL_ALIGNED(32) s[4];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_double  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_double  s0, s1, s2, s3; };
-   __CL_ANON_STRUCT__ struct{ cl_double2 lo, hi; };
-#endif
-#if defined( __CL_DOUBLE2__) 
-    __cl_double2     v2[2];
-#endif
-#if defined( __CL_DOUBLE4__) 
-    __cl_double4     v4;
-#endif
-}cl_double4;
-
-/* cl_double3 is identical in size, alignment and behavior to cl_double4. See section 6.1.5. */
-typedef  cl_double4  cl_double3;
-
-typedef union
-{
-    cl_double   CL_ALIGNED(64) s[8];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_double  x, y, z, w; };
-   __CL_ANON_STRUCT__ struct{ cl_double  s0, s1, s2, s3, s4, s5, s6, s7; };
-   __CL_ANON_STRUCT__ struct{ cl_double4 lo, hi; };
-#endif
-#if defined( __CL_DOUBLE2__) 
-    __cl_double2     v2[4];
-#endif
-#if defined( __CL_DOUBLE4__) 
-    __cl_double4     v4[2];
-#endif
-#if defined( __CL_DOUBLE8__ )
-    __cl_double8     v8;
-#endif
-}cl_double8;
-
-typedef union
-{
-    cl_double  CL_ALIGNED(128) s[16];
-#if __CL_HAS_ANON_STRUCT__
-   __CL_ANON_STRUCT__ struct{ cl_double  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
-   __CL_ANON_STRUCT__ struct{ cl_double  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
-   __CL_ANON_STRUCT__ struct{ cl_double8 lo, hi; };
-#endif
-#if defined( __CL_DOUBLE2__) 
-    __cl_double2     v2[8];
-#endif
-#if defined( __CL_DOUBLE4__) 
-    __cl_double4     v4[4];
-#endif
-#if defined( __CL_DOUBLE8__ )
-    __cl_double8     v8[2];
-#endif
-#if defined( __CL_DOUBLE16__ )
-    __cl_double16    v16;
-#endif
-}cl_double16;
-
-/* Macro to facilitate debugging 
- * Usage:
- *   Place CL_PROGRAM_STRING_DEBUG_INFO on the line before the first line of your source. 
- *   The first line ends with:   CL_PROGRAM_STRING_DEBUG_INFO \"
- *   Each line thereafter of OpenCL C source must end with: \n\
- *   The last line ends in ";
- *
- *   Example:
- *
- *   const char *my_program = CL_PROGRAM_STRING_DEBUG_INFO "\
- *   kernel void foo( int a, float * b )             \n\
- *   {                                               \n\
- *      // my comment                                \n\
- *      *b[ get_global_id(0)] = a;                   \n\
- *   }                                               \n\
- *   ";
- *
- * This should correctly set up the line, (column) and file information for your source 
- * string so you can do source level debugging.
- */
-#define  __CL_STRINGIFY( _x )               # _x
-#define  _CL_STRINGIFY( _x )                __CL_STRINGIFY( _x )
-#define  CL_PROGRAM_STRING_DEBUG_INFO       "#line "  _CL_STRINGIFY(__LINE__) " \"" __FILE__ "\" \n\n" 
-  
-#ifdef __cplusplus
-}
-#endif
-
-#undef __CL_HAS_ANON_STRUCT__
-#undef __CL_ANON_STRUCT__
-#if defined( _WIN32) && (_MSC_VER >= 1500)
-#pragma warning( pop )
-#endif
-
-#endif  /* __CL_PLATFORM_H  */

+ 0 - 43
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/headers/1.2/opencl.h

@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008-2012 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Materials.
- *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
- ******************************************************************************/
-
-/* $Revision: 11708 $ on $Date: 2010-06-13 23:36:24 -0700 (Sun, 13 Jun 2010) $ */
-
-#ifndef __OPENCL_H
-#define __OPENCL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <cl.h>
-#include <cl_gl.h>
-#include <cl_gl_ext.h>
-#include <cl_ext.h>
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* __OPENCL_H   */
-

+ 0 - 83
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/image.go

@@ -1,83 +0,0 @@
-// +build cl12
-
-package cl
-
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-import (
-	"image"
-	"unsafe"
-)
-
-func (ctx *Context) CreateImage(flags MemFlag, imageFormat ImageFormat, imageDesc ImageDescription, data []byte) (*MemObject, error) {
-	format := imageFormat.toCl()
-	desc := imageDesc.toCl()
-	var dataPtr unsafe.Pointer
-	if data != nil {
-		dataPtr = unsafe.Pointer(&data[0])
-	}
-	var err C.cl_int
-	clBuffer := C.clCreateImage(ctx.clContext, C.cl_mem_flags(flags), &format, &desc, dataPtr, &err)
-	if err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	if clBuffer == nil {
-		return nil, ErrUnknown
-	}
-	return newMemObject(clBuffer, len(data)), nil
-}
-
-func (ctx *Context) CreateImageSimple(flags MemFlag, width, height int, channelOrder ChannelOrder, channelDataType ChannelDataType, data []byte) (*MemObject, error) {
-	format := ImageFormat{channelOrder, channelDataType}
-	desc := ImageDescription{
-		Type:   MemObjectTypeImage2D,
-		Width:  width,
-		Height: height,
-	}
-	return ctx.CreateImage(flags, format, desc, data)
-}
-
-func (ctx *Context) CreateImageFromImage(flags MemFlag, img image.Image) (*MemObject, error) {
-	switch m := img.(type) {
-	case *image.Gray:
-		format := ImageFormat{ChannelOrderIntensity, ChannelDataTypeUNormInt8}
-		desc := ImageDescription{
-			Type:     MemObjectTypeImage2D,
-			Width:    m.Bounds().Dx(),
-			Height:   m.Bounds().Dy(),
-			RowPitch: m.Stride,
-		}
-		return ctx.CreateImage(flags, format, desc, m.Pix)
-	case *image.RGBA:
-		format := ImageFormat{ChannelOrderRGBA, ChannelDataTypeUNormInt8}
-		desc := ImageDescription{
-			Type:     MemObjectTypeImage2D,
-			Width:    m.Bounds().Dx(),
-			Height:   m.Bounds().Dy(),
-			RowPitch: m.Stride,
-		}
-		return ctx.CreateImage(flags, format, desc, m.Pix)
-	}
-
-	b := img.Bounds()
-	w := b.Dx()
-	h := b.Dy()
-	data := make([]byte, w*h*4)
-	dataOffset := 0
-	for y := 0; y < h; y++ {
-		for x := 0; x < w; x++ {
-			c := img.At(x+b.Min.X, y+b.Min.Y)
-			r, g, b, a := c.RGBA()
-			data[dataOffset] = uint8(r >> 8)
-			data[dataOffset+1] = uint8(g >> 8)
-			data[dataOffset+2] = uint8(b >> 8)
-			data[dataOffset+3] = uint8(a >> 8)
-			dataOffset += 4
-		}
-	}
-	return ctx.CreateImageSimple(flags, w, h, ChannelOrderRGBA, ChannelDataTypeUNormInt8, data)
-}

+ 0 - 127
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/kernel.go

@@ -1,127 +0,0 @@
-package cl
-
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-
-import (
-	"fmt"
-	"unsafe"
-)
-
-type ErrUnsupportedArgumentType struct {
-	Index int
-	Value interface{}
-}
-
-func (e ErrUnsupportedArgumentType) Error() string {
-	return fmt.Sprintf("cl: unsupported argument type for index %d: %+v", e.Index, e.Value)
-}
-
-type Kernel struct {
-	clKernel C.cl_kernel
-	name     string
-}
-
-type LocalBuffer int
-
-func releaseKernel(k *Kernel) {
-	if k.clKernel != nil {
-		C.clReleaseKernel(k.clKernel)
-		k.clKernel = nil
-	}
-}
-
-func (k *Kernel) Release() {
-	releaseKernel(k)
-}
-
-func (k *Kernel) SetArgs(args ...interface{}) error {
-	for index, arg := range args {
-		if err := k.SetArg(index, arg); err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-func (k *Kernel) SetArg(index int, arg interface{}) error {
-	switch val := arg.(type) {
-	case uint8:
-		return k.SetArgUint8(index, val)
-	case int8:
-		return k.SetArgInt8(index, val)
-	case uint32:
-		return k.SetArgUint32(index, val)
-	case uint64:
-		return k.SetArgUint64(index, val)
-	case int32:
-		return k.SetArgInt32(index, val)
-	case float32:
-		return k.SetArgFloat32(index, val)
-	case *MemObject:
-		return k.SetArgBuffer(index, val)
-	case LocalBuffer:
-		return k.SetArgLocal(index, int(val))
-	default:
-		return ErrUnsupportedArgumentType{Index: index, Value: arg}
-	}
-}
-
-func (k *Kernel) SetArgBuffer(index int, buffer *MemObject) error {
-	return k.SetArgUnsafe(index, int(unsafe.Sizeof(buffer.clMem)), unsafe.Pointer(&buffer.clMem))
-}
-
-func (k *Kernel) SetArgFloat32(index int, val float32) error {
-	return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
-}
-
-func (k *Kernel) SetArgInt8(index int, val int8) error {
-	return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
-}
-
-func (k *Kernel) SetArgUint8(index int, val uint8) error {
-	return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
-}
-
-func (k *Kernel) SetArgInt32(index int, val int32) error {
-	return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
-}
-
-func (k *Kernel) SetArgUint32(index int, val uint32) error {
-	return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
-}
-
-func (k *Kernel) SetArgUint64(index int, val uint64) error {
-	return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
-}
-
-func (k *Kernel) SetArgLocal(index int, size int) error {
-	return k.SetArgUnsafe(index, size, nil)
-}
-
-func (k *Kernel) SetArgUnsafe(index, argSize int, arg unsafe.Pointer) error {
-	//fmt.Println("FUNKY: ", index, argSize)
-	return toError(C.clSetKernelArg(k.clKernel, C.cl_uint(index), C.size_t(argSize), arg))
-}
-
-func (k *Kernel) PreferredWorkGroupSizeMultiple(device *Device) (int, error) {
-	var size C.size_t
-	err := C.clGetKernelWorkGroupInfo(k.clKernel, device.nullableId(), C.CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, C.size_t(unsafe.Sizeof(size)), unsafe.Pointer(&size), nil)
-	return int(size), toError(err)
-}
-
-func (k *Kernel) WorkGroupSize(device *Device) (int, error) {
-	var size C.size_t
-	err := C.clGetKernelWorkGroupInfo(k.clKernel, device.nullableId(), C.CL_KERNEL_WORK_GROUP_SIZE, C.size_t(unsafe.Sizeof(size)), unsafe.Pointer(&size), nil)
-	return int(size), toError(err)
-}
-
-func (k *Kernel) NumArgs() (int, error) {
-	var num C.cl_uint
-	err := C.clGetKernelInfo(k.clKernel, C.CL_KERNEL_NUM_ARGS, C.size_t(unsafe.Sizeof(num)), unsafe.Pointer(&num), nil)
-	return int(num), toError(err)
-}

+ 0 - 7
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/kernel10.go

@@ -1,7 +0,0 @@
-// +build !cl12
-
-package cl
-
-func (k *Kernel) ArgName(index int) (string, error) {
-	return "", ErrUnsupported
-}

+ 0 - 20
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/kernel12.go

@@ -1,20 +0,0 @@
-// +build cl12
-
-package cl
-
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-import "unsafe"
-
-func (k *Kernel) ArgName(index int) (string, error) {
-	var strC [1024]byte
-	var strN C.size_t
-	if err := C.clGetKernelArgInfo(k.clKernel, C.cl_uint(index), C.CL_KERNEL_ARG_NAME, 1024, unsafe.Pointer(&strC[0]), &strN); err != C.CL_SUCCESS {
-		return "", toError(err)
-	}
-	return string(strC[:strN]), nil
-}

+ 0 - 83
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/platform.go

@@ -1,83 +0,0 @@
-package cl
-
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-
-import "unsafe"
-
-const maxPlatforms = 32
-
-type Platform struct {
-	id C.cl_platform_id
-}
-
-// Obtain the list of platforms available.
-func GetPlatforms() ([]*Platform, error) {
-	var platformIds [maxPlatforms]C.cl_platform_id
-	var nPlatforms C.cl_uint
-	if err := C.clGetPlatformIDs(C.cl_uint(maxPlatforms), &platformIds[0], &nPlatforms); err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	platforms := make([]*Platform, nPlatforms)
-	for i := 0; i < int(nPlatforms); i++ {
-		platforms[i] = &Platform{id: platformIds[i]}
-	}
-	return platforms, nil
-}
-
-func (p *Platform) GetDevices(deviceType DeviceType) ([]*Device, error) {
-	return GetDevices(p, deviceType)
-}
-
-func (p *Platform) getInfoString(param C.cl_platform_info) (string, error) {
-	var strC [2048]byte
-	var strN C.size_t
-	if err := C.clGetPlatformInfo(p.id, param, 2048, unsafe.Pointer(&strC[0]), &strN); err != C.CL_SUCCESS {
-		return "", toError(err)
-	}
-	return string(strC[:(strN - 1)]), nil
-}
-
-func (p *Platform) Name() string {
-	if str, err := p.getInfoString(C.CL_PLATFORM_NAME); err != nil {
-		panic("Platform.Name() should never fail")
-	} else {
-		return str
-	}
-}
-
-func (p *Platform) Vendor() string {
-	if str, err := p.getInfoString(C.CL_PLATFORM_VENDOR); err != nil {
-		panic("Platform.Vendor() should never fail")
-	} else {
-		return str
-	}
-}
-
-func (p *Platform) Profile() string {
-	if str, err := p.getInfoString(C.CL_PLATFORM_PROFILE); err != nil {
-		panic("Platform.Profile() should never fail")
-	} else {
-		return str
-	}
-}
-
-func (p *Platform) Version() string {
-	if str, err := p.getInfoString(C.CL_PLATFORM_VERSION); err != nil {
-		panic("Platform.Version() should never fail")
-	} else {
-		return str
-	}
-}
-
-func (p *Platform) Extensions() string {
-	if str, err := p.getInfoString(C.CL_PLATFORM_EXTENSIONS); err != nil {
-		panic("Platform.Extensions() should never fail")
-	} else {
-		return str
-	}
-}

+ 0 - 105
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/program.go

@@ -1,105 +0,0 @@
-package cl
-
-// #include <stdlib.h>
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-
-import (
-	"fmt"
-	"runtime"
-	"unsafe"
-)
-
-type BuildError struct {
-	Message string
-	Device  *Device
-}
-
-func (e BuildError) Error() string {
-	if e.Device != nil {
-		return fmt.Sprintf("cl: build error on %q: %s", e.Device.Name(), e.Message)
-	} else {
-		return fmt.Sprintf("cl: build error: %s", e.Message)
-	}
-}
-
-type Program struct {
-	clProgram C.cl_program
-	devices   []*Device
-}
-
-func releaseProgram(p *Program) {
-	if p.clProgram != nil {
-		C.clReleaseProgram(p.clProgram)
-		p.clProgram = nil
-	}
-}
-
-func (p *Program) Release() {
-	releaseProgram(p)
-}
-
-func (p *Program) BuildProgram(devices []*Device, options string) error {
-	var cOptions *C.char
-	if options != "" {
-		cOptions = C.CString(options)
-		defer C.free(unsafe.Pointer(cOptions))
-	}
-	var deviceList []C.cl_device_id
-	var deviceListPtr *C.cl_device_id
-	numDevices := C.cl_uint(len(devices))
-	if devices != nil && len(devices) > 0 {
-		deviceList = buildDeviceIdList(devices)
-		deviceListPtr = &deviceList[0]
-	}
-	if err := C.clBuildProgram(p.clProgram, numDevices, deviceListPtr, cOptions, nil, nil); err != C.CL_SUCCESS {
-		buffer := make([]byte, 4096)
-		var bLen C.size_t
-		var err C.cl_int
-
-		for _, dev := range p.devices {
-			for i := 2; i >= 0; i-- {
-				err = C.clGetProgramBuildInfo(p.clProgram, dev.id, C.CL_PROGRAM_BUILD_LOG, C.size_t(len(buffer)), unsafe.Pointer(&buffer[0]), &bLen)
-				if err == C.CL_INVALID_VALUE && i > 0 && bLen < 1024*1024 {
-					// INVALID_VALUE probably means our buffer isn't large enough
-					buffer = make([]byte, bLen)
-				} else {
-					break
-				}
-			}
-			if err != C.CL_SUCCESS {
-				return toError(err)
-			}
-
-			if bLen > 1 {
-				return BuildError{
-					Device:  dev,
-					Message: string(buffer[:bLen-1]),
-				}
-			}
-		}
-
-		return BuildError{
-			Device:  nil,
-			Message: "build failed and produced no log entries",
-		}
-	}
-	return nil
-}
-
-func (p *Program) CreateKernel(name string) (*Kernel, error) {
-	cName := C.CString(name)
-	defer C.free(unsafe.Pointer(cName))
-	var err C.cl_int
-	clKernel := C.clCreateKernel(p.clProgram, cName, &err)
-	if err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	kernel := &Kernel{clKernel: clKernel, name: name}
-	runtime.SetFinalizer(kernel, releaseKernel)
-	return kernel, nil
-}

+ 0 - 193
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/queue.go

@@ -1,193 +0,0 @@
-package cl
-
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-
-import "unsafe"
-
-type CommandQueueProperty int
-
-const (
-	CommandQueueOutOfOrderExecModeEnable CommandQueueProperty = C.CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
-	CommandQueueProfilingEnable          CommandQueueProperty = C.CL_QUEUE_PROFILING_ENABLE
-)
-
-type CommandQueue struct {
-	clQueue C.cl_command_queue
-	device  *Device
-}
-
-func releaseCommandQueue(q *CommandQueue) {
-	if q.clQueue != nil {
-		C.clReleaseCommandQueue(q.clQueue)
-		q.clQueue = nil
-	}
-}
-
-// Call clReleaseCommandQueue on the CommandQueue. Using the CommandQueue after Release will cause a panick.
-func (q *CommandQueue) Release() {
-	releaseCommandQueue(q)
-}
-
-// Blocks until all previously queued OpenCL commands in a command-queue are issued to the associated device and have completed.
-func (q *CommandQueue) Finish() error {
-	return toError(C.clFinish(q.clQueue))
-}
-
-// Issues all previously queued OpenCL commands in a command-queue to the device associated with the command-queue.
-func (q *CommandQueue) Flush() error {
-	return toError(C.clFlush(q.clQueue))
-}
-
-// Enqueues a command to map a region of the buffer object given by buffer into the host address space and returns a pointer to this mapped region.
-func (q *CommandQueue) EnqueueMapBuffer(buffer *MemObject, blocking bool, flags MapFlag, offset, size int, eventWaitList []*Event) (*MappedMemObject, *Event, error) {
-	var event C.cl_event
-	var err C.cl_int
-	ptr := C.clEnqueueMapBuffer(q.clQueue, buffer.clMem, clBool(blocking), flags.toCl(), C.size_t(offset), C.size_t(size), C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event, &err)
-	if err != C.CL_SUCCESS {
-		return nil, nil, toError(err)
-	}
-	ev := newEvent(event)
-	if ptr == nil {
-		return nil, ev, ErrUnknown
-	}
-	return &MappedMemObject{ptr: ptr, size: size}, ev, nil
-}
-
-// Enqueues a command to map a region of an image object into the host address space and returns a pointer to this mapped region.
-func (q *CommandQueue) EnqueueMapImage(buffer *MemObject, blocking bool, flags MapFlag, origin, region [3]int, eventWaitList []*Event) (*MappedMemObject, *Event, error) {
-	cOrigin := sizeT3(origin)
-	cRegion := sizeT3(region)
-	var event C.cl_event
-	var err C.cl_int
-	var rowPitch, slicePitch C.size_t
-	ptr := C.clEnqueueMapImage(q.clQueue, buffer.clMem, clBool(blocking), flags.toCl(), &cOrigin[0], &cRegion[0], &rowPitch, &slicePitch, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event, &err)
-	if err != C.CL_SUCCESS {
-		return nil, nil, toError(err)
-	}
-	ev := newEvent(event)
-	if ptr == nil {
-		return nil, ev, ErrUnknown
-	}
-	size := 0 // TODO: could calculate this
-	return &MappedMemObject{ptr: ptr, size: size, rowPitch: int(rowPitch), slicePitch: int(slicePitch)}, ev, nil
-}
-
-// Enqueues a command to unmap a previously mapped region of a memory object.
-func (q *CommandQueue) EnqueueUnmapMemObject(buffer *MemObject, mappedObj *MappedMemObject, eventWaitList []*Event) (*Event, error) {
-	var event C.cl_event
-	if err := C.clEnqueueUnmapMemObject(q.clQueue, buffer.clMem, mappedObj.ptr, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event); err != C.CL_SUCCESS {
-		return nil, toError(err)
-	}
-	return newEvent(event), nil
-}
-
-// Enqueues a command to copy a buffer object to another buffer object.
-func (q *CommandQueue) EnqueueCopyBuffer(srcBuffer, dstBuffer *MemObject, srcOffset, dstOffset, byteCount int, eventWaitList []*Event) (*Event, error) {
-	var event C.cl_event
-	err := toError(C.clEnqueueCopyBuffer(q.clQueue, srcBuffer.clMem, dstBuffer.clMem, C.size_t(srcOffset), C.size_t(dstOffset), C.size_t(byteCount), C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
-	return newEvent(event), err
-}
-
-// Enqueue commands to write to a buffer object from host memory.
-func (q *CommandQueue) EnqueueWriteBuffer(buffer *MemObject, blocking bool, offset, dataSize int, dataPtr unsafe.Pointer, eventWaitList []*Event) (*Event, error) {
-	var event C.cl_event
-	err := toError(C.clEnqueueWriteBuffer(q.clQueue, buffer.clMem, clBool(blocking), C.size_t(offset), C.size_t(dataSize), dataPtr, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
-	return newEvent(event), err
-}
-
-func (q *CommandQueue) EnqueueWriteBufferFloat32(buffer *MemObject, blocking bool, offset int, data []float32, eventWaitList []*Event) (*Event, error) {
-	dataPtr := unsafe.Pointer(&data[0])
-	dataSize := int(unsafe.Sizeof(data[0])) * len(data)
-	return q.EnqueueWriteBuffer(buffer, blocking, offset, dataSize, dataPtr, eventWaitList)
-}
-
-// Enqueue commands to read from a buffer object to host memory.
-func (q *CommandQueue) EnqueueReadBuffer(buffer *MemObject, blocking bool, offset, dataSize int, dataPtr unsafe.Pointer, eventWaitList []*Event) (*Event, error) {
-	var event C.cl_event
-	err := toError(C.clEnqueueReadBuffer(q.clQueue, buffer.clMem, clBool(blocking), C.size_t(offset), C.size_t(dataSize), dataPtr, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
-	return newEvent(event), err
-}
-
-func (q *CommandQueue) EnqueueReadBufferFloat32(buffer *MemObject, blocking bool, offset int, data []float32, eventWaitList []*Event) (*Event, error) {
-	dataPtr := unsafe.Pointer(&data[0])
-	dataSize := int(unsafe.Sizeof(data[0])) * len(data)
-	return q.EnqueueReadBuffer(buffer, blocking, offset, dataSize, dataPtr, eventWaitList)
-}
-
-// Enqueues a command to execute a kernel on a device.
-func (q *CommandQueue) EnqueueNDRangeKernel(kernel *Kernel, globalWorkOffset, globalWorkSize, localWorkSize []int, eventWaitList []*Event) (*Event, error) {
-	workDim := len(globalWorkSize)
-	var globalWorkOffsetList []C.size_t
-	var globalWorkOffsetPtr *C.size_t
-	if globalWorkOffset != nil {
-		globalWorkOffsetList = make([]C.size_t, len(globalWorkOffset))
-		for i, off := range globalWorkOffset {
-			globalWorkOffsetList[i] = C.size_t(off)
-		}
-		globalWorkOffsetPtr = &globalWorkOffsetList[0]
-	}
-	var globalWorkSizeList []C.size_t
-	var globalWorkSizePtr *C.size_t
-	if globalWorkSize != nil {
-		globalWorkSizeList = make([]C.size_t, len(globalWorkSize))
-		for i, off := range globalWorkSize {
-			globalWorkSizeList[i] = C.size_t(off)
-		}
-		globalWorkSizePtr = &globalWorkSizeList[0]
-	}
-	var localWorkSizeList []C.size_t
-	var localWorkSizePtr *C.size_t
-	if localWorkSize != nil {
-		localWorkSizeList = make([]C.size_t, len(localWorkSize))
-		for i, off := range localWorkSize {
-			localWorkSizeList[i] = C.size_t(off)
-		}
-		localWorkSizePtr = &localWorkSizeList[0]
-	}
-	var event C.cl_event
-	err := toError(C.clEnqueueNDRangeKernel(q.clQueue, kernel.clKernel, C.cl_uint(workDim), globalWorkOffsetPtr, globalWorkSizePtr, localWorkSizePtr, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
-	return newEvent(event), err
-}
-
-// Enqueues a command to read from a 2D or 3D image object to host memory.
-func (q *CommandQueue) EnqueueReadImage(image *MemObject, blocking bool, origin, region [3]int, rowPitch, slicePitch int, data []byte, eventWaitList []*Event) (*Event, error) {
-	cOrigin := sizeT3(origin)
-	cRegion := sizeT3(region)
-	var event C.cl_event
-	err := toError(C.clEnqueueReadImage(q.clQueue, image.clMem, clBool(blocking), &cOrigin[0], &cRegion[0], C.size_t(rowPitch), C.size_t(slicePitch), unsafe.Pointer(&data[0]), C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
-	return newEvent(event), err
-}
-
-// Enqueues a command to write from a 2D or 3D image object to host memory.
-func (q *CommandQueue) EnqueueWriteImage(image *MemObject, blocking bool, origin, region [3]int, rowPitch, slicePitch int, data []byte, eventWaitList []*Event) (*Event, error) {
-	cOrigin := sizeT3(origin)
-	cRegion := sizeT3(region)
-	var event C.cl_event
-	err := toError(C.clEnqueueWriteImage(q.clQueue, image.clMem, clBool(blocking), &cOrigin[0], &cRegion[0], C.size_t(rowPitch), C.size_t(slicePitch), unsafe.Pointer(&data[0]), C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
-	return newEvent(event), err
-}
-
-func (q *CommandQueue) EnqueueFillBuffer(buffer *MemObject, pattern unsafe.Pointer, patternSize, offset, size int, eventWaitList []*Event) (*Event, error) {
-	var event C.cl_event
-	err := toError(C.clEnqueueFillBuffer(q.clQueue, buffer.clMem, pattern, C.size_t(patternSize), C.size_t(offset), C.size_t(size), C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
-	return newEvent(event), err
-}
-
-// A synchronization point that enqueues a barrier operation.
-func (q *CommandQueue) EnqueueBarrierWithWaitList(eventWaitList []*Event) (*Event, error) {
-	var event C.cl_event
-	err := toError(C.clEnqueueBarrierWithWaitList(q.clQueue, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
-	return newEvent(event), err
-}
-
-// Enqueues a marker command which waits for either a list of events to complete, or all previously enqueued commands to complete.
-func (q *CommandQueue) EnqueueMarkerWithWaitList(eventWaitList []*Event) (*Event, error) {
-	var event C.cl_event
-	err := toError(C.clEnqueueMarkerWithWaitList(q.clQueue, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
-	return newEvent(event), err
-}

+ 0 - 487
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/types.go

@@ -1,487 +0,0 @@
-package cl
-
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-
-import (
-	"errors"
-	"fmt"
-	"reflect"
-	"runtime"
-	"strings"
-	"unsafe"
-)
-
-var (
-	ErrUnknown = errors.New("cl: unknown error") // Generally an unexpected result from an OpenCL function (e.g. CL_SUCCESS but null pointer)
-)
-
-type ErrOther int
-
-func (e ErrOther) Error() string {
-	return fmt.Sprintf("cl: error %d", int(e))
-}
-
-var (
-	ErrDeviceNotFound                     = errors.New("cl: Device Not Found")
-	ErrDeviceNotAvailable                 = errors.New("cl: Device Not Available")
-	ErrCompilerNotAvailable               = errors.New("cl: Compiler Not Available")
-	ErrMemObjectAllocationFailure         = errors.New("cl: Mem Object Allocation Failure")
-	ErrOutOfResources                     = errors.New("cl: Out Of Resources")
-	ErrOutOfHostMemory                    = errors.New("cl: Out Of Host Memory")
-	ErrProfilingInfoNotAvailable          = errors.New("cl: Profiling Info Not Available")
-	ErrMemCopyOverlap                     = errors.New("cl: Mem Copy Overlap")
-	ErrImageFormatMismatch                = errors.New("cl: Image Format Mismatch")
-	ErrImageFormatNotSupported            = errors.New("cl: Image Format Not Supported")
-	ErrBuildProgramFailure                = errors.New("cl: Build Program Failure")
-	ErrMapFailure                         = errors.New("cl: Map Failure")
-	ErrMisalignedSubBufferOffset          = errors.New("cl: Misaligned Sub Buffer Offset")
-	ErrExecStatusErrorForEventsInWaitList = errors.New("cl: Exec Status Error For Events In Wait List")
-	ErrCompileProgramFailure              = errors.New("cl: Compile Program Failure")
-	ErrLinkerNotAvailable                 = errors.New("cl: Linker Not Available")
-	ErrLinkProgramFailure                 = errors.New("cl: Link Program Failure")
-	ErrDevicePartitionFailed              = errors.New("cl: Device Partition Failed")
-	ErrKernelArgInfoNotAvailable          = errors.New("cl: Kernel Arg Info Not Available")
-	ErrInvalidValue                       = errors.New("cl: Invalid Value")
-	ErrInvalidDeviceType                  = errors.New("cl: Invalid Device Type")
-	ErrInvalidPlatform                    = errors.New("cl: Invalid Platform")
-	ErrInvalidDevice                      = errors.New("cl: Invalid Device")
-	ErrInvalidContext                     = errors.New("cl: Invalid Context")
-	ErrInvalidQueueProperties             = errors.New("cl: Invalid Queue Properties")
-	ErrInvalidCommandQueue                = errors.New("cl: Invalid Command Queue")
-	ErrInvalidHostPtr                     = errors.New("cl: Invalid Host Ptr")
-	ErrInvalidMemObject                   = errors.New("cl: Invalid Mem Object")
-	ErrInvalidImageFormatDescriptor       = errors.New("cl: Invalid Image Format Descriptor")
-	ErrInvalidImageSize                   = errors.New("cl: Invalid Image Size")
-	ErrInvalidSampler                     = errors.New("cl: Invalid Sampler")
-	ErrInvalidBinary                      = errors.New("cl: Invalid Binary")
-	ErrInvalidBuildOptions                = errors.New("cl: Invalid Build Options")
-	ErrInvalidProgram                     = errors.New("cl: Invalid Program")
-	ErrInvalidProgramExecutable           = errors.New("cl: Invalid Program Executable")
-	ErrInvalidKernelName                  = errors.New("cl: Invalid Kernel Name")
-	ErrInvalidKernelDefinition            = errors.New("cl: Invalid Kernel Definition")
-	ErrInvalidKernel                      = errors.New("cl: Invalid Kernel")
-	ErrInvalidArgIndex                    = errors.New("cl: Invalid Arg Index")
-	ErrInvalidArgValue                    = errors.New("cl: Invalid Arg Value")
-	ErrInvalidArgSize                     = errors.New("cl: Invalid Arg Size")
-	ErrInvalidKernelArgs                  = errors.New("cl: Invalid Kernel Args")
-	ErrInvalidWorkDimension               = errors.New("cl: Invalid Work Dimension")
-	ErrInvalidWorkGroupSize               = errors.New("cl: Invalid Work Group Size")
-	ErrInvalidWorkItemSize                = errors.New("cl: Invalid Work Item Size")
-	ErrInvalidGlobalOffset                = errors.New("cl: Invalid Global Offset")
-	ErrInvalidEventWaitList               = errors.New("cl: Invalid Event Wait List")
-	ErrInvalidEvent                       = errors.New("cl: Invalid Event")
-	ErrInvalidOperation                   = errors.New("cl: Invalid Operation")
-	ErrInvalidGlObject                    = errors.New("cl: Invalid Gl Object")
-	ErrInvalidBufferSize                  = errors.New("cl: Invalid Buffer Size")
-	ErrInvalidMipLevel                    = errors.New("cl: Invalid Mip Level")
-	ErrInvalidGlobalWorkSize              = errors.New("cl: Invalid Global Work Size")
-	ErrInvalidProperty                    = errors.New("cl: Invalid Property")
-	ErrInvalidImageDescriptor             = errors.New("cl: Invalid Image Descriptor")
-	ErrInvalidCompilerOptions             = errors.New("cl: Invalid Compiler Options")
-	ErrInvalidLinkerOptions               = errors.New("cl: Invalid Linker Options")
-	ErrInvalidDevicePartitionCount        = errors.New("cl: Invalid Device Partition Count")
-)
-var errorMap = map[C.cl_int]error{
-	C.CL_SUCCESS:                                   nil,
-	C.CL_DEVICE_NOT_FOUND:                          ErrDeviceNotFound,
-	C.CL_DEVICE_NOT_AVAILABLE:                      ErrDeviceNotAvailable,
-	C.CL_COMPILER_NOT_AVAILABLE:                    ErrCompilerNotAvailable,
-	C.CL_MEM_OBJECT_ALLOCATION_FAILURE:             ErrMemObjectAllocationFailure,
-	C.CL_OUT_OF_RESOURCES:                          ErrOutOfResources,
-	C.CL_OUT_OF_HOST_MEMORY:                        ErrOutOfHostMemory,
-	C.CL_PROFILING_INFO_NOT_AVAILABLE:              ErrProfilingInfoNotAvailable,
-	C.CL_MEM_COPY_OVERLAP:                          ErrMemCopyOverlap,
-	C.CL_IMAGE_FORMAT_MISMATCH:                     ErrImageFormatMismatch,
-	C.CL_IMAGE_FORMAT_NOT_SUPPORTED:                ErrImageFormatNotSupported,
-	C.CL_BUILD_PROGRAM_FAILURE:                     ErrBuildProgramFailure,
-	C.CL_MAP_FAILURE:                               ErrMapFailure,
-	C.CL_MISALIGNED_SUB_BUFFER_OFFSET:              ErrMisalignedSubBufferOffset,
-	C.CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST: ErrExecStatusErrorForEventsInWaitList,
-	C.CL_INVALID_VALUE:                             ErrInvalidValue,
-	C.CL_INVALID_DEVICE_TYPE:                       ErrInvalidDeviceType,
-	C.CL_INVALID_PLATFORM:                          ErrInvalidPlatform,
-	C.CL_INVALID_DEVICE:                            ErrInvalidDevice,
-	C.CL_INVALID_CONTEXT:                           ErrInvalidContext,
-	C.CL_INVALID_QUEUE_PROPERTIES:                  ErrInvalidQueueProperties,
-	C.CL_INVALID_COMMAND_QUEUE:                     ErrInvalidCommandQueue,
-	C.CL_INVALID_HOST_PTR:                          ErrInvalidHostPtr,
-	C.CL_INVALID_MEM_OBJECT:                        ErrInvalidMemObject,
-	C.CL_INVALID_IMAGE_FORMAT_DESCRIPTOR:           ErrInvalidImageFormatDescriptor,
-	C.CL_INVALID_IMAGE_SIZE:                        ErrInvalidImageSize,
-	C.CL_INVALID_SAMPLER:                           ErrInvalidSampler,
-	C.CL_INVALID_BINARY:                            ErrInvalidBinary,
-	C.CL_INVALID_BUILD_OPTIONS:                     ErrInvalidBuildOptions,
-	C.CL_INVALID_PROGRAM:                           ErrInvalidProgram,
-	C.CL_INVALID_PROGRAM_EXECUTABLE:                ErrInvalidProgramExecutable,
-	C.CL_INVALID_KERNEL_NAME:                       ErrInvalidKernelName,
-	C.CL_INVALID_KERNEL_DEFINITION:                 ErrInvalidKernelDefinition,
-	C.CL_INVALID_KERNEL:                            ErrInvalidKernel,
-	C.CL_INVALID_ARG_INDEX:                         ErrInvalidArgIndex,
-	C.CL_INVALID_ARG_VALUE:                         ErrInvalidArgValue,
-	C.CL_INVALID_ARG_SIZE:                          ErrInvalidArgSize,
-	C.CL_INVALID_KERNEL_ARGS:                       ErrInvalidKernelArgs,
-	C.CL_INVALID_WORK_DIMENSION:                    ErrInvalidWorkDimension,
-	C.CL_INVALID_WORK_GROUP_SIZE:                   ErrInvalidWorkGroupSize,
-	C.CL_INVALID_WORK_ITEM_SIZE:                    ErrInvalidWorkItemSize,
-	C.CL_INVALID_GLOBAL_OFFSET:                     ErrInvalidGlobalOffset,
-	C.CL_INVALID_EVENT_WAIT_LIST:                   ErrInvalidEventWaitList,
-	C.CL_INVALID_EVENT:                             ErrInvalidEvent,
-	C.CL_INVALID_OPERATION:                         ErrInvalidOperation,
-	C.CL_INVALID_GL_OBJECT:                         ErrInvalidGlObject,
-	C.CL_INVALID_BUFFER_SIZE:                       ErrInvalidBufferSize,
-	C.CL_INVALID_MIP_LEVEL:                         ErrInvalidMipLevel,
-	C.CL_INVALID_GLOBAL_WORK_SIZE:                  ErrInvalidGlobalWorkSize,
-	C.CL_INVALID_PROPERTY:                          ErrInvalidProperty,
-}
-
-func toError(code C.cl_int) error {
-	if err, ok := errorMap[code]; ok {
-		return err
-	}
-	return ErrOther(code)
-}
-
-type LocalMemType int
-
-const (
-	LocalMemTypeNone   LocalMemType = C.CL_NONE
-	LocalMemTypeGlobal LocalMemType = C.CL_GLOBAL
-	LocalMemTypeLocal  LocalMemType = C.CL_LOCAL
-)
-
-var localMemTypeMap = map[LocalMemType]string{
-	LocalMemTypeNone:   "None",
-	LocalMemTypeGlobal: "Global",
-	LocalMemTypeLocal:  "Local",
-}
-
-func (t LocalMemType) String() string {
-	name := localMemTypeMap[t]
-	if name == "" {
-		name = "Unknown"
-	}
-	return name
-}
-
-type ExecCapability int
-
-const (
-	ExecCapabilityKernel       ExecCapability = C.CL_EXEC_KERNEL        // The OpenCL device can execute OpenCL kernels.
-	ExecCapabilityNativeKernel ExecCapability = C.CL_EXEC_NATIVE_KERNEL // The OpenCL device can execute native kernels.
-)
-
-func (ec ExecCapability) String() string {
-	var parts []string
-	if ec&ExecCapabilityKernel != 0 {
-		parts = append(parts, "Kernel")
-	}
-	if ec&ExecCapabilityNativeKernel != 0 {
-		parts = append(parts, "NativeKernel")
-	}
-	if parts == nil {
-		return ""
-	}
-	return strings.Join(parts, "|")
-}
-
-type MemCacheType int
-
-const (
-	MemCacheTypeNone           MemCacheType = C.CL_NONE
-	MemCacheTypeReadOnlyCache  MemCacheType = C.CL_READ_ONLY_CACHE
-	MemCacheTypeReadWriteCache MemCacheType = C.CL_READ_WRITE_CACHE
-)
-
-func (ct MemCacheType) String() string {
-	switch ct {
-	case MemCacheTypeNone:
-		return "None"
-	case MemCacheTypeReadOnlyCache:
-		return "ReadOnly"
-	case MemCacheTypeReadWriteCache:
-		return "ReadWrite"
-	}
-	return fmt.Sprintf("Unknown(%x)", int(ct))
-}
-
-type MemFlag int
-
-const (
-	MemReadWrite    MemFlag = C.CL_MEM_READ_WRITE
-	MemWriteOnly    MemFlag = C.CL_MEM_WRITE_ONLY
-	MemReadOnly     MemFlag = C.CL_MEM_READ_ONLY
-	MemUseHostPtr   MemFlag = C.CL_MEM_USE_HOST_PTR
-	MemAllocHostPtr MemFlag = C.CL_MEM_ALLOC_HOST_PTR
-	MemCopyHostPtr  MemFlag = C.CL_MEM_COPY_HOST_PTR
-
-	MemWriteOnlyHost MemFlag = C.CL_MEM_HOST_WRITE_ONLY
-	MemReadOnlyHost  MemFlag = C.CL_MEM_HOST_READ_ONLY
-	MemNoAccessHost  MemFlag = C.CL_MEM_HOST_NO_ACCESS
-)
-
-type MemObjectType int
-
-const (
-	MemObjectTypeBuffer  MemObjectType = C.CL_MEM_OBJECT_BUFFER
-	MemObjectTypeImage2D MemObjectType = C.CL_MEM_OBJECT_IMAGE2D
-	MemObjectTypeImage3D MemObjectType = C.CL_MEM_OBJECT_IMAGE3D
-)
-
-type MapFlag int
-
-const (
-	// This flag specifies that the region being mapped in the memory object is being mapped for reading.
-	MapFlagRead                  MapFlag = C.CL_MAP_READ
-	MapFlagWrite                 MapFlag = C.CL_MAP_WRITE
-	MapFlagWriteInvalidateRegion MapFlag = C.CL_MAP_WRITE_INVALIDATE_REGION
-)
-
-func (mf MapFlag) toCl() C.cl_map_flags {
-	return C.cl_map_flags(mf)
-}
-
-type ChannelOrder int
-
-const (
-	ChannelOrderR         ChannelOrder = C.CL_R
-	ChannelOrderA         ChannelOrder = C.CL_A
-	ChannelOrderRG        ChannelOrder = C.CL_RG
-	ChannelOrderRA        ChannelOrder = C.CL_RA
-	ChannelOrderRGB       ChannelOrder = C.CL_RGB
-	ChannelOrderRGBA      ChannelOrder = C.CL_RGBA
-	ChannelOrderBGRA      ChannelOrder = C.CL_BGRA
-	ChannelOrderARGB      ChannelOrder = C.CL_ARGB
-	ChannelOrderIntensity ChannelOrder = C.CL_INTENSITY
-	ChannelOrderLuminance ChannelOrder = C.CL_LUMINANCE
-	ChannelOrderRx        ChannelOrder = C.CL_Rx
-	ChannelOrderRGx       ChannelOrder = C.CL_RGx
-	ChannelOrderRGBx      ChannelOrder = C.CL_RGBx
-)
-
-var channelOrderNameMap = map[ChannelOrder]string{
-	ChannelOrderR:         "R",
-	ChannelOrderA:         "A",
-	ChannelOrderRG:        "RG",
-	ChannelOrderRA:        "RA",
-	ChannelOrderRGB:       "RGB",
-	ChannelOrderRGBA:      "RGBA",
-	ChannelOrderBGRA:      "BGRA",
-	ChannelOrderARGB:      "ARGB",
-	ChannelOrderIntensity: "Intensity",
-	ChannelOrderLuminance: "Luminance",
-	ChannelOrderRx:        "Rx",
-	ChannelOrderRGx:       "RGx",
-	ChannelOrderRGBx:      "RGBx",
-}
-
-func (co ChannelOrder) String() string {
-	name := channelOrderNameMap[co]
-	if name == "" {
-		name = fmt.Sprintf("Unknown(%x)", int(co))
-	}
-	return name
-}
-
-type ChannelDataType int
-
-const (
-	ChannelDataTypeSNormInt8      ChannelDataType = C.CL_SNORM_INT8
-	ChannelDataTypeSNormInt16     ChannelDataType = C.CL_SNORM_INT16
-	ChannelDataTypeUNormInt8      ChannelDataType = C.CL_UNORM_INT8
-	ChannelDataTypeUNormInt16     ChannelDataType = C.CL_UNORM_INT16
-	ChannelDataTypeUNormShort565  ChannelDataType = C.CL_UNORM_SHORT_565
-	ChannelDataTypeUNormShort555  ChannelDataType = C.CL_UNORM_SHORT_555
-	ChannelDataTypeUNormInt101010 ChannelDataType = C.CL_UNORM_INT_101010
-	ChannelDataTypeSignedInt8     ChannelDataType = C.CL_SIGNED_INT8
-	ChannelDataTypeSignedInt16    ChannelDataType = C.CL_SIGNED_INT16
-	ChannelDataTypeSignedInt32    ChannelDataType = C.CL_SIGNED_INT32
-	ChannelDataTypeUnsignedInt8   ChannelDataType = C.CL_UNSIGNED_INT8
-	ChannelDataTypeUnsignedInt16  ChannelDataType = C.CL_UNSIGNED_INT16
-	ChannelDataTypeUnsignedInt32  ChannelDataType = C.CL_UNSIGNED_INT32
-	ChannelDataTypeHalfFloat      ChannelDataType = C.CL_HALF_FLOAT
-	ChannelDataTypeFloat          ChannelDataType = C.CL_FLOAT
-)
-
-var channelDataTypeNameMap = map[ChannelDataType]string{
-	ChannelDataTypeSNormInt8:      "SNormInt8",
-	ChannelDataTypeSNormInt16:     "SNormInt16",
-	ChannelDataTypeUNormInt8:      "UNormInt8",
-	ChannelDataTypeUNormInt16:     "UNormInt16",
-	ChannelDataTypeUNormShort565:  "UNormShort565",
-	ChannelDataTypeUNormShort555:  "UNormShort555",
-	ChannelDataTypeUNormInt101010: "UNormInt101010",
-	ChannelDataTypeSignedInt8:     "SignedInt8",
-	ChannelDataTypeSignedInt16:    "SignedInt16",
-	ChannelDataTypeSignedInt32:    "SignedInt32",
-	ChannelDataTypeUnsignedInt8:   "UnsignedInt8",
-	ChannelDataTypeUnsignedInt16:  "UnsignedInt16",
-	ChannelDataTypeUnsignedInt32:  "UnsignedInt32",
-	ChannelDataTypeHalfFloat:      "HalfFloat",
-	ChannelDataTypeFloat:          "Float",
-}
-
-func (ct ChannelDataType) String() string {
-	name := channelDataTypeNameMap[ct]
-	if name == "" {
-		name = fmt.Sprintf("Unknown(%x)", int(ct))
-	}
-	return name
-}
-
-type ImageFormat struct {
-	ChannelOrder    ChannelOrder
-	ChannelDataType ChannelDataType
-}
-
-func (f ImageFormat) toCl() C.cl_image_format {
-	var format C.cl_image_format
-	format.image_channel_order = C.cl_channel_order(f.ChannelOrder)
-	format.image_channel_data_type = C.cl_channel_type(f.ChannelDataType)
-	return format
-}
-
-type ProfilingInfo int
-
-const (
-	// A 64-bit value that describes the current device time counter in
-	// nanoseconds when the command identified by event is enqueued in
-	// a command-queue by the host.
-	ProfilingInfoCommandQueued ProfilingInfo = C.CL_PROFILING_COMMAND_QUEUED
-	// A 64-bit value that describes the current device time counter in
-	// nanoseconds when the command identified by event that has been
-	// enqueued is submitted by the host to the device associated with the command-queue.
-	ProfilingInfoCommandSubmit ProfilingInfo = C.CL_PROFILING_COMMAND_SUBMIT
-	// A 64-bit value that describes the current device time counter in
-	// nanoseconds when the command identified by event starts execution on the device.
-	ProfilingInfoCommandStart ProfilingInfo = C.CL_PROFILING_COMMAND_START
-	// A 64-bit value that describes the current device time counter in
-	// nanoseconds when the command identified by event has finished
-	// execution on the device.
-	ProfilingInfoCommandEnd ProfilingInfo = C.CL_PROFILING_COMMAND_END
-)
-
-type CommmandExecStatus int
-
-const (
-	CommmandExecStatusComplete  CommmandExecStatus = C.CL_COMPLETE
-	CommmandExecStatusRunning   CommmandExecStatus = C.CL_RUNNING
-	CommmandExecStatusSubmitted CommmandExecStatus = C.CL_SUBMITTED
-	CommmandExecStatusQueued    CommmandExecStatus = C.CL_QUEUED
-)
-
-type Event struct {
-	clEvent C.cl_event
-}
-
-func releaseEvent(ev *Event) {
-	if ev.clEvent != nil {
-		C.clReleaseEvent(ev.clEvent)
-		ev.clEvent = nil
-	}
-}
-
-func (e *Event) Release() {
-	releaseEvent(e)
-}
-
-func (e *Event) GetEventProfilingInfo(paramName ProfilingInfo) (int64, error) {
-	var paramValue C.cl_ulong
-	if err := C.clGetEventProfilingInfo(e.clEvent, C.cl_profiling_info(paramName), C.size_t(unsafe.Sizeof(paramValue)), unsafe.Pointer(&paramValue), nil); err != C.CL_SUCCESS {
-		return 0, toError(err)
-	}
-	return int64(paramValue), nil
-}
-
-// Sets the execution status of a user event object.
-//
-// `status` specifies the new execution status to be set and
-// can be CL_COMPLETE or a negative integer value to indicate
-// an error. A negative integer value causes all enqueued commands
-// that wait on this user event to be terminated. clSetUserEventStatus
-// can only be called once to change the execution status of event.
-func (e *Event) SetUserEventStatus(status int) error {
-	return toError(C.clSetUserEventStatus(e.clEvent, C.cl_int(status)))
-}
-
-// Waits on the host thread for commands identified by event objects in
-// events to complete. A command is considered complete if its execution
-// status is CL_COMPLETE or a negative value. The events specified in
-// event_list act as synchronization points.
-//
-// If the cl_khr_gl_event extension is enabled, event objects can also be
-// used to reflect the status of an OpenGL sync object. The sync object
-// in turn refers to a fence command executing in an OpenGL command
-// stream. This provides another method of coordinating sharing of buffers
-// and images between OpenGL and OpenCL.
-func WaitForEvents(events []*Event) error {
-	return toError(C.clWaitForEvents(C.cl_uint(len(events)), eventListPtr(events)))
-}
-
-func newEvent(clEvent C.cl_event) *Event {
-	ev := &Event{clEvent: clEvent}
-	runtime.SetFinalizer(ev, releaseEvent)
-	return ev
-}
-
-func eventListPtr(el []*Event) *C.cl_event {
-	if el == nil {
-		return nil
-	}
-	elist := make([]C.cl_event, len(el))
-	for i, e := range el {
-		elist[i] = e.clEvent
-	}
-	return (*C.cl_event)(&elist[0])
-}
-
-func clBool(b bool) C.cl_bool {
-	if b {
-		return C.CL_TRUE
-	}
-	return C.CL_FALSE
-}
-
-func sizeT3(i3 [3]int) [3]C.size_t {
-	var val [3]C.size_t
-	val[0] = C.size_t(i3[0])
-	val[1] = C.size_t(i3[1])
-	val[2] = C.size_t(i3[2])
-	return val
-}
-
-type MappedMemObject struct {
-	ptr        unsafe.Pointer
-	size       int
-	rowPitch   int
-	slicePitch int
-}
-
-func (mb *MappedMemObject) ByteSlice() []byte {
-	var byteSlice []byte
-	sliceHeader := (*reflect.SliceHeader)(unsafe.Pointer(&byteSlice))
-	sliceHeader.Cap = mb.size
-	sliceHeader.Len = mb.size
-	sliceHeader.Data = uintptr(mb.ptr)
-	return byteSlice
-}
-
-func (mb *MappedMemObject) Ptr() unsafe.Pointer {
-	return mb.ptr
-}
-
-func (mb *MappedMemObject) Size() int {
-	return mb.size
-}
-
-func (mb *MappedMemObject) RowPitch() int {
-	return mb.rowPitch
-}
-
-func (mb *MappedMemObject) SlicePitch() int {
-	return mb.slicePitch
-}

+ 0 - 71
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/types12.go

@@ -1,71 +0,0 @@
-// +build cl12
-
-package cl
-
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-
-const (
-	ChannelDataTypeUNormInt24  ChannelDataType = C.CL_UNORM_INT24
-	ChannelOrderDepth          ChannelOrder    = C.CL_DEPTH
-	ChannelOrderDepthStencil   ChannelOrder    = C.CL_DEPTH_STENCIL
-	MemHostNoAccess            MemFlag         = C.CL_MEM_HOST_NO_ACCESS  // OpenCL 1.2
-	MemHostReadOnly            MemFlag         = C.CL_MEM_HOST_READ_ONLY  // OpenCL 1.2
-	MemHostWriteOnly           MemFlag         = C.CL_MEM_HOST_WRITE_ONLY // OpenCL 1.2
-	MemObjectTypeImage1D       MemObjectType   = C.CL_MEM_OBJECT_IMAGE1D
-	MemObjectTypeImage1DArray  MemObjectType   = C.CL_MEM_OBJECT_IMAGE1D_ARRAY
-	MemObjectTypeImage1DBuffer MemObjectType   = C.CL_MEM_OBJECT_IMAGE1D_BUFFER
-	MemObjectTypeImage2DArray  MemObjectType   = C.CL_MEM_OBJECT_IMAGE2D_ARRAY
-	// This flag specifies that the region being mapped in the memory object is being mapped for writing.
-	//
-	// The contents of the region being mapped are to be discarded. This is typically the case when the
-	// region being mapped is overwritten by the host. This flag allows the implementation to no longer
-	// guarantee that the pointer returned by clEnqueueMapBuffer or clEnqueueMapImage contains the
-	// latest bits in the region being mapped which can be a significant performance enhancement.
-	MapFlagWriteInvalidateRegion MapFlag = C.CL_MAP_WRITE_INVALIDATE_REGION
-)
-
-func init() {
-	errorMap[C.CL_COMPILE_PROGRAM_FAILURE] = ErrCompileProgramFailure
-	errorMap[C.CL_DEVICE_PARTITION_FAILED] = ErrDevicePartitionFailed
-	errorMap[C.CL_INVALID_COMPILER_OPTIONS] = ErrInvalidCompilerOptions
-	errorMap[C.CL_INVALID_DEVICE_PARTITION_COUNT] = ErrInvalidDevicePartitionCount
-	errorMap[C.CL_INVALID_IMAGE_DESCRIPTOR] = ErrInvalidImageDescriptor
-	errorMap[C.CL_INVALID_LINKER_OPTIONS] = ErrInvalidLinkerOptions
-	errorMap[C.CL_KERNEL_ARG_INFO_NOT_AVAILABLE] = ErrKernelArgInfoNotAvailable
-	errorMap[C.CL_LINK_PROGRAM_FAILURE] = ErrLinkProgramFailure
-	errorMap[C.CL_LINKER_NOT_AVAILABLE] = ErrLinkerNotAvailable
-	channelOrderNameMap[ChannelOrderDepth] = "Depth"
-	channelOrderNameMap[ChannelOrderDepthStencil] = "DepthStencil"
-	channelDataTypeNameMap[ChannelDataTypeUNormInt24] = "UNormInt24"
-}
-
-type ImageDescription struct {
-	Type                            MemObjectType
-	Width, Height, Depth            int
-	ArraySize, RowPitch, SlicePitch int
-	NumMipLevels, NumSamples        int
-	Buffer                          *MemObject
-}
-
-func (d ImageDescription) toCl() C.cl_image_desc {
-	var desc C.cl_image_desc
-	desc.image_type = C.cl_mem_object_type(d.Type)
-	desc.image_width = C.size_t(d.Width)
-	desc.image_height = C.size_t(d.Height)
-	desc.image_depth = C.size_t(d.Depth)
-	desc.image_array_size = C.size_t(d.ArraySize)
-	desc.image_row_pitch = C.size_t(d.RowPitch)
-	desc.image_slice_pitch = C.size_t(d.SlicePitch)
-	desc.num_mip_levels = C.cl_uint(d.NumMipLevels)
-	desc.num_samples = C.cl_uint(d.NumSamples)
-	desc.buffer = nil
-	if d.Buffer != nil {
-		desc.buffer = d.Buffer.clMem
-	}
-	return desc
-}

+ 0 - 45
Godeps/_workspace/src/github.com/Gustav-Simonsson/go-opencl/cl/types_darwin.go

@@ -1,45 +0,0 @@
-package cl
-
-// #ifdef __APPLE__
-// #include "OpenCL/opencl.h"
-// #else
-// #include "cl.h"
-// #endif
-import "C"
-
-// Extension: cl_APPLE_fixed_alpha_channel_orders
-//
-// These selectors may be passed to clCreateImage2D() in the cl_image_format.image_channel_order field.
-// They are like CL_BGRA and CL_ARGB except that the alpha channel to be ignored.  On calls to read_imagef,
-// the alpha will be 0xff (1.0f) if the sample falls in the image and 0 if it does not fall in the image.
-// On calls to write_imagef, the alpha value is ignored and 0xff (1.0f) is written. These formats are
-// currently only available for the CL_UNORM_INT8 cl_channel_type. They are intended to support legacy
-// image formats.
-const (
-	ChannelOrder1RGBApple ChannelOrder = C.CL_1RGB_APPLE // Introduced in MacOS X.7.
-	ChannelOrderBGR1Apple ChannelOrder = C.CL_BGR1_APPLE // Introduced in MacOS X.7.
-)
-
-// Extension: cl_APPLE_biased_fixed_point_image_formats
-//
-// This selector may be passed to clCreateImage2D() in the cl_image_format.image_channel_data_type field.
-// It defines a biased signed 1.14 fixed point storage format, with range [-1, 3). The conversion from
-// float to this fixed point format is defined as follows:
-//
-//      ushort float_to_sfixed14( float x ){
-//          int i = convert_int_sat_rte( x * 0x1.0p14f );         // scale [-1, 3.0) to [-16384, 3*16384), round to nearest integer
-//          i = add_sat( i, 0x4000 );                             // apply bias, to convert to [0, 65535) range
-//          return convert_ushort_sat(i);                         // clamp to destination size
-//      }
-//
-// The inverse conversion is the reverse process. The formats are currently only available on the CPU with
-// the CL_RGBA channel layout.
-const (
-	ChannelDataTypeSFixed14Apple ChannelDataType = C.CL_SFIXED14_APPLE // Introduced in MacOS X.7.
-)
-
-func init() {
-	channelOrderNameMap[ChannelOrder1RGBApple] = "1RGBApple"
-	channelOrderNameMap[ChannelOrderBGR1Apple] = "RGB1Apple"
-	channelDataTypeNameMap[ChannelDataTypeSFixed14Apple] = "SFixed14Apple"
-}

+ 0 - 628
Godeps/_workspace/src/github.com/ethereum/ethash/ethash_opencl.go

@@ -1,628 +0,0 @@
-// Copyright 2014 The go-ethereum Authors
-// This file is part of the go-ethereum library.
-//
-// The go-ethereum library is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The go-ethereum library 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 Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
-
-// +build opencl
-
-package ethash
-
-//#cgo LDFLAGS: -w
-//#include <stdint.h>
-//#include <string.h>
-//#include "src/libethash/internal.h"
-import "C"
-
-import (
-	crand "crypto/rand"
-	"encoding/binary"
-	"fmt"
-	"math"
-	"math/big"
-	mrand "math/rand"
-	"strconv"
-	"strings"
-	"sync"
-	"sync/atomic"
-	"time"
-	"unsafe"
-
-	"github.com/Gustav-Simonsson/go-opencl/cl"
-	"github.com/ethereum/go-ethereum/common"
-	"github.com/ethereum/go-ethereum/pow"
-)
-
-/*
-
-  This code have two main entry points:
-
-  1. The initCL(...)  function configures one or more OpenCL device
-     (for now only GPU) and loads the Ethash DAG onto device memory
-
-  2. The Search(...) function loads a Ethash nonce into device(s) memory and
-     executes the Ethash OpenCL kernel.
-
-  Throughout the code, we refer to "host memory" and "device memory".
-  For most systems (e.g. regular PC GPU miner) the host memory is RAM and
-  device memory is the GPU global memory (e.g. GDDR5).
-
-  References mentioned in code comments:
-
-  1. https://github.com/ethereum/wiki/wiki/Ethash
-  2. https://github.com/ethereum/cpp-ethereum/blob/develop/libethash-cl/ethash_cl_miner.cpp
-  3. https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/
-  4. http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013/12/AMD_OpenCL_Programming_User_Guide.pdf
-
-*/
-
-type OpenCLDevice struct {
-	deviceId int
-	device   *cl.Device
-	openCL11 bool // OpenCL version 1.1 and 1.2 are handled a bit different
-	openCL12 bool
-
-	dagBuf        *cl.MemObject // Ethash full DAG in device mem
-	headerBuf     *cl.MemObject // Hash of block-to-mine in device mem
-	searchBuffers []*cl.MemObject
-
-	searchKernel *cl.Kernel
-	hashKernel   *cl.Kernel
-
-	queue         *cl.CommandQueue
-	ctx           *cl.Context
-	workGroupSize int
-
-	nonceRand *mrand.Rand // seeded by crypto/rand, see comments where it's initialised
-	result    common.Hash
-}
-
-type OpenCLMiner struct {
-	mu sync.Mutex
-
-	ethash *Ethash // Ethash full DAG & cache in host mem
-
-	deviceIds []int
-	devices   []*OpenCLDevice
-
-	dagSize uint64
-
-	hashRate int32 // Go atomics & uint64 have some issues; int32 is supported on all platforms
-}
-
-type pendingSearch struct {
-	bufIndex   uint32
-	startNonce uint64
-}
-
-const (
-	SIZEOF_UINT32 = 4
-
-	// See [1]
-	ethashMixBytesLen = 128
-	ethashAccesses    = 64
-
-	// See [4]
-	workGroupSize    = 32 // must be multiple of 8
-	maxSearchResults = 63
-	searchBufSize    = 2
-	globalWorkSize   = 1024 * 256
-)
-
-func NewCL(deviceIds []int) *OpenCLMiner {
-	ids := make([]int, len(deviceIds))
-	copy(ids, deviceIds)
-	return &OpenCLMiner{
-		ethash:    New(),
-		dagSize:   0, // to see if we need to update DAG.
-		deviceIds: ids,
-	}
-}
-
-func PrintDevices() {
-	fmt.Println("=============================================")
-	fmt.Println("============ OpenCL Device Info =============")
-	fmt.Println("=============================================")
-
-	var found []*cl.Device
-
-	platforms, err := cl.GetPlatforms()
-	if err != nil {
-		fmt.Println("Plaform error (check your OpenCL installation):", err)
-		return
-	}
-
-	for i, p := range platforms {
-		fmt.Println("Platform id             ", i)
-		fmt.Println("Platform Name           ", p.Name())
-		fmt.Println("Platform Vendor         ", p.Vendor())
-		fmt.Println("Platform Version        ", p.Version())
-		fmt.Println("Platform Extensions     ", p.Extensions())
-		fmt.Println("Platform Profile        ", p.Profile())
-		fmt.Println("")
-
-		devices, err := cl.GetDevices(p, cl.DeviceTypeGPU)
-		if err != nil {
-			fmt.Println("Device error (check your GPU drivers) :", err)
-			return
-		}
-
-		for _, d := range devices {
-			fmt.Println("Device OpenCL id        ", i)
-			fmt.Println("Device id for mining    ", len(found))
-			fmt.Println("Device Name             ", d.Name())
-			fmt.Println("Vendor                  ", d.Vendor())
-			fmt.Println("Version                 ", d.Version())
-			fmt.Println("Driver version          ", d.DriverVersion())
-			fmt.Println("Address bits            ", d.AddressBits())
-			fmt.Println("Max clock freq          ", d.MaxClockFrequency())
-			fmt.Println("Global mem size         ", d.GlobalMemSize())
-			fmt.Println("Max constant buffer size", d.MaxConstantBufferSize())
-			fmt.Println("Max mem alloc size      ", d.MaxMemAllocSize())
-			fmt.Println("Max compute units       ", d.MaxComputeUnits())
-			fmt.Println("Max work group size     ", d.MaxWorkGroupSize())
-			fmt.Println("Max work item sizes     ", d.MaxWorkItemSizes())
-			fmt.Println("=============================================")
-
-			found = append(found, d)
-		}
-	}
-	if len(found) == 0 {
-		fmt.Println("Found no GPU(s). Check that your OS can see the GPU(s)")
-	} else {
-		var idsFormat string
-		for i := 0; i < len(found); i++ {
-			idsFormat += strconv.Itoa(i)
-			if i != len(found)-1 {
-				idsFormat += ","
-			}
-		}
-		fmt.Printf("Found %v devices. Benchmark first GPU:       geth gpubench 0\n", len(found))
-		fmt.Printf("Mine using all GPUs:                        geth --minegpu %v\n", idsFormat)
-	}
-}
-
-// See [2]. We basically do the same here, but the Go OpenCL bindings
-// are at a slightly higher abtraction level.
-func InitCL(blockNum uint64, c *OpenCLMiner) error {
-	platforms, err := cl.GetPlatforms()
-	if err != nil {
-		return fmt.Errorf("Plaform error: %v\nCheck your OpenCL installation and then run geth gpuinfo", err)
-	}
-
-	var devices []*cl.Device
-	for _, p := range platforms {
-		ds, err := cl.GetDevices(p, cl.DeviceTypeGPU)
-		if err != nil {
-			return fmt.Errorf("Devices error: %v\nCheck your GPU drivers and then run geth gpuinfo", err)
-		}
-		for _, d := range ds {
-			devices = append(devices, d)
-		}
-	}
-
-	pow := New()
-	_ = pow.getDAG(blockNum)     // generates DAG if we don't have it
-	pow.Light.getCache(blockNum) // and cache
-
-	c.ethash = pow
-	dagSize := uint64(C.ethash_get_datasize(C.uint64_t(blockNum)))
-	c.dagSize = dagSize
-
-	for _, id := range c.deviceIds {
-		if id > len(devices)-1 {
-			return fmt.Errorf("Device id not found. See available device ids with: geth gpuinfo")
-		} else {
-			err := initCLDevice(id, devices[id], c)
-			if err != nil {
-				return err
-			}
-		}
-	}
-	if len(c.devices) == 0 {
-		return fmt.Errorf("No GPU devices found")
-	}
-	return nil
-}
-
-func initCLDevice(deviceId int, device *cl.Device, c *OpenCLMiner) error {
-	devMaxAlloc := uint64(device.MaxMemAllocSize())
-	devGlobalMem := uint64(device.GlobalMemSize())
-
-	// TODO: more fine grained version logic
-	if device.Version() == "OpenCL 1.0" {
-		fmt.Println("Device OpenCL version not supported: ", device.Version())
-		return fmt.Errorf("opencl version not supported")
-	}
-
-	var cl11, cl12 bool
-	if device.Version() == "OpenCL 1.1" {
-		cl11 = true
-	}
-	if device.Version() == "OpenCL 1.2" {
-		cl12 = true
-	}
-
-	// log warnings but carry on; some device drivers report inaccurate values
-	if c.dagSize > devGlobalMem {
-		fmt.Printf("WARNING: device memory may be insufficient: %v. DAG size: %v.\n", devGlobalMem, c.dagSize)
-	}
-
-	if c.dagSize > devMaxAlloc {
-		fmt.Printf("WARNING: DAG size (%v) larger than device max memory allocation size (%v).\n", c.dagSize, devMaxAlloc)
-		fmt.Printf("You probably have to export GPU_MAX_ALLOC_PERCENT=95\n")
-	}
-
-	fmt.Printf("Initialising device %v: %v\n", deviceId, device.Name())
-
-	context, err := cl.CreateContext([]*cl.Device{device})
-	if err != nil {
-		return fmt.Errorf("failed creating context: %v", err)
-	}
-
-	// TODO: test running with CL_QUEUE_PROFILING_ENABLE for profiling?
-	queue, err := context.CreateCommandQueue(device, 0)
-	if err != nil {
-		return fmt.Errorf("command queue err: %v", err)
-	}
-
-	// See [4] section 3.2 and [3] "clBuildProgram".
-	// The OpenCL kernel code is compiled at run-time.
-	kvs := make(map[string]string, 4)
-	kvs["GROUP_SIZE"] = strconv.FormatUint(workGroupSize, 10)
-	kvs["DAG_SIZE"] = strconv.FormatUint(c.dagSize/ethashMixBytesLen, 10)
-	kvs["ACCESSES"] = strconv.FormatUint(ethashAccesses, 10)
-	kvs["MAX_OUTPUTS"] = strconv.FormatUint(maxSearchResults, 10)
-	kernelCode := replaceWords(kernel, kvs)
-
-	program, err := context.CreateProgramWithSource([]string{kernelCode})
-	if err != nil {
-		return fmt.Errorf("program err: %v", err)
-	}
-
-	/* if using AMD OpenCL impl, you can set this to debug on x86 CPU device.
-	   see AMD OpenCL programming guide section 4.2
-
-	   export in shell before running:
-	   export AMD_OCL_BUILD_OPTIONS_APPEND="-g -O0"
-	   export CPU_MAX_COMPUTE_UNITS=1
-
-	buildOpts := "-g -cl-opt-disable"
-
-	*/
-	buildOpts := ""
-	err = program.BuildProgram([]*cl.Device{device}, buildOpts)
-	if err != nil {
-		return fmt.Errorf("program build err: %v", err)
-	}
-
-	var searchKernelName, hashKernelName string
-	searchKernelName = "ethash_search"
-	hashKernelName = "ethash_hash"
-
-	searchKernel, err := program.CreateKernel(searchKernelName)
-	hashKernel, err := program.CreateKernel(hashKernelName)
-	if err != nil {
-		return fmt.Errorf("kernel err: %v", err)
-	}
-
-	// TODO: when this DAG size appears, patch the Go bindings
-	// (context.go) to work with uint64 as size_t
-	if c.dagSize > math.MaxInt32 {
-		fmt.Println("DAG too large for allocation.")
-		return fmt.Errorf("DAG too large for alloc")
-	}
-
-	// TODO: patch up Go bindings to work with size_t, will overflow if > maxint32
-	// TODO: fuck. shit's gonna overflow around 2017-06-09 12:17:02
-	dagBuf := *(new(*cl.MemObject))
-	dagBuf, err = context.CreateEmptyBuffer(cl.MemReadOnly, int(c.dagSize))
-	if err != nil {
-		return fmt.Errorf("allocating dag buf failed: %v", err)
-	}
-
-	// write DAG to device mem
-	dagPtr := unsafe.Pointer(c.ethash.Full.current.ptr.data)
-	_, err = queue.EnqueueWriteBuffer(dagBuf, true, 0, int(c.dagSize), dagPtr, nil)
-	if err != nil {
-		return fmt.Errorf("writing to dag buf failed: %v", err)
-	}
-
-	searchBuffers := make([]*cl.MemObject, searchBufSize)
-	for i := 0; i < searchBufSize; i++ {
-		searchBuff, err := context.CreateEmptyBuffer(cl.MemWriteOnly, (1+maxSearchResults)*SIZEOF_UINT32)
-		if err != nil {
-			return fmt.Errorf("search buffer err: %v", err)
-		}
-		searchBuffers[i] = searchBuff
-	}
-
-	headerBuf, err := context.CreateEmptyBuffer(cl.MemReadOnly, 32)
-	if err != nil {
-		return fmt.Errorf("header buffer err: %v", err)
-	}
-
-	// Unique, random nonces are crucial for mining efficieny.
-	// While we do not need cryptographically secure PRNG for nonces,
-	// we want to have uniform distribution and minimal repetition of nonces.
-	// We could guarantee strict uniqueness of nonces by generating unique ranges,
-	// but a int64 seed from crypto/rand should be good enough.
-	// we then use math/rand for speed and to avoid draining OS entropy pool
-	seed, err := crand.Int(crand.Reader, big.NewInt(math.MaxInt64))
-	if err != nil {
-		return err
-	}
-	nonceRand := mrand.New(mrand.NewSource(seed.Int64()))
-
-	deviceStruct := &OpenCLDevice{
-		deviceId: deviceId,
-		device:   device,
-		openCL11: cl11,
-		openCL12: cl12,
-
-		dagBuf:        dagBuf,
-		headerBuf:     headerBuf,
-		searchBuffers: searchBuffers,
-
-		searchKernel: searchKernel,
-		hashKernel:   hashKernel,
-
-		queue: queue,
-		ctx:   context,
-
-		workGroupSize: workGroupSize,
-
-		nonceRand: nonceRand,
-	}
-	c.devices = append(c.devices, deviceStruct)
-
-	return nil
-}
-
-func (c *OpenCLMiner) Search(block pow.Block, stop <-chan struct{}, index int) (uint64, []byte) {
-	c.mu.Lock()
-	newDagSize := uint64(C.ethash_get_datasize(C.uint64_t(block.NumberU64())))
-	if newDagSize > c.dagSize {
-		// TODO: clean up buffers from previous DAG?
-		err := InitCL(block.NumberU64(), c)
-		if err != nil {
-			fmt.Println("OpenCL init error: ", err)
-			return 0, []byte{0}
-		}
-	}
-	defer c.mu.Unlock()
-
-	// Avoid unneeded OpenCL initialisation if we received stop while running InitCL
-	select {
-	case <-stop:
-		return 0, []byte{0}
-	default:
-	}
-
-	headerHash := block.HashNoNonce()
-	diff := block.Difficulty()
-	target256 := new(big.Int).Div(maxUint256, diff)
-	target64 := new(big.Int).Rsh(target256, 192).Uint64()
-	var zero uint32 = 0
-
-	d := c.devices[index]
-
-	_, err := d.queue.EnqueueWriteBuffer(d.headerBuf, false, 0, 32, unsafe.Pointer(&headerHash[0]), nil)
-	if err != nil {
-		fmt.Println("Error in Search clEnqueueWriterBuffer : ", err)
-		return 0, []byte{0}
-	}
-
-	for i := 0; i < searchBufSize; i++ {
-		_, err := d.queue.EnqueueWriteBuffer(d.searchBuffers[i], false, 0, 4, unsafe.Pointer(&zero), nil)
-		if err != nil {
-			fmt.Println("Error in Search clEnqueueWriterBuffer : ", err)
-			return 0, []byte{0}
-		}
-	}
-
-	// wait for all search buffers to complete
-	err = d.queue.Finish()
-	if err != nil {
-		fmt.Println("Error in Search clFinish : ", err)
-		return 0, []byte{0}
-	}
-
-	err = d.searchKernel.SetArg(1, d.headerBuf)
-	if err != nil {
-		fmt.Println("Error in Search clSetKernelArg : ", err)
-		return 0, []byte{0}
-	}
-
-	err = d.searchKernel.SetArg(2, d.dagBuf)
-	if err != nil {
-		fmt.Println("Error in Search clSetKernelArg : ", err)
-		return 0, []byte{0}
-	}
-
-	err = d.searchKernel.SetArg(4, target64)
-	if err != nil {
-		fmt.Println("Error in Search clSetKernelArg : ", err)
-		return 0, []byte{0}
-	}
-	err = d.searchKernel.SetArg(5, uint32(math.MaxUint32))
-	if err != nil {
-		fmt.Println("Error in Search clSetKernelArg : ", err)
-		return 0, []byte{0}
-	}
-
-	// wait on this before returning
-	var preReturnEvent *cl.Event
-	if d.openCL12 {
-		preReturnEvent, err = d.ctx.CreateUserEvent()
-		if err != nil {
-			fmt.Println("Error in Search create CL user event : ", err)
-			return 0, []byte{0}
-		}
-	}
-
-	pending := make([]pendingSearch, 0, searchBufSize)
-	var p *pendingSearch
-	searchBufIndex := uint32(0)
-	var checkNonce uint64
-	loops := int64(0)
-	prevHashRate := int32(0)
-	start := time.Now().UnixNano()
-	// we grab a single random nonce and sets this as argument to the kernel search function
-	// the device will then add each local threads gid to the nonce, creating a unique nonce
-	// for each device computing unit executing in parallel
-	initNonce := uint64(d.nonceRand.Int63())
-	for nonce := initNonce; ; nonce += uint64(globalWorkSize) {
-		select {
-		case <-stop:
-
-			/*
-				if d.openCL12 {
-					err = cl.WaitForEvents([]*cl.Event{preReturnEvent})
-					if err != nil {
-						fmt.Println("Error in Search WaitForEvents: ", err)
-					}
-				}
-			*/
-
-			atomic.AddInt32(&c.hashRate, -prevHashRate)
-			return 0, []byte{0}
-		default:
-		}
-
-		if (loops % (1 << 7)) == 0 {
-			elapsed := time.Now().UnixNano() - start
-			// TODO: verify if this is correct hash rate calculation
-			hashes := (float64(1e9) / float64(elapsed)) * float64(loops*1024*256)
-			hashrateDiff := int32(hashes) - prevHashRate
-			prevHashRate = int32(hashes)
-			atomic.AddInt32(&c.hashRate, hashrateDiff)
-		}
-		loops++
-
-		err = d.searchKernel.SetArg(0, d.searchBuffers[searchBufIndex])
-		if err != nil {
-			fmt.Println("Error in Search clSetKernelArg : ", err)
-			return 0, []byte{0}
-		}
-		err = d.searchKernel.SetArg(3, nonce)
-		if err != nil {
-			fmt.Println("Error in Search clSetKernelArg : ", err)
-			return 0, []byte{0}
-		}
-
-		// execute kernel
-		_, err := d.queue.EnqueueNDRangeKernel(
-			d.searchKernel,
-			[]int{0},
-			[]int{globalWorkSize},
-			[]int{d.workGroupSize},
-			nil)
-		if err != nil {
-			fmt.Println("Error in Search clEnqueueNDRangeKernel : ", err)
-			return 0, []byte{0}
-		}
-
-		pending = append(pending, pendingSearch{bufIndex: searchBufIndex, startNonce: nonce})
-		searchBufIndex = (searchBufIndex + 1) % searchBufSize
-
-		if len(pending) == searchBufSize {
-			p = &(pending[searchBufIndex])
-			cres, _, err := d.queue.EnqueueMapBuffer(d.searchBuffers[p.bufIndex], true,
-				cl.MapFlagRead, 0, (1+maxSearchResults)*SIZEOF_UINT32,
-				nil)
-			if err != nil {
-				fmt.Println("Error in Search clEnqueueMapBuffer: ", err)
-				return 0, []byte{0}
-			}
-
-			results := cres.ByteSlice()
-			nfound := binary.LittleEndian.Uint32(results)
-			nfound = uint32(math.Min(float64(nfound), float64(maxSearchResults)))
-			// OpenCL returns the offsets from the start nonce
-			for i := uint32(0); i < nfound; i++ {
-				lo := (i + 1) * SIZEOF_UINT32
-				hi := (i + 2) * SIZEOF_UINT32
-				upperNonce := uint64(binary.LittleEndian.Uint32(results[lo:hi]))
-				checkNonce = p.startNonce + upperNonce
-				if checkNonce != 0 {
-					// We verify that the nonce is indeed a solution by
-					// executing the Ethash verification function (on the CPU).
-					cache := c.ethash.Light.getCache(block.NumberU64())
-					ok, mixDigest, result := cache.compute(c.dagSize, headerHash, checkNonce)
-
-					// TODO: return result first
-					if ok && result.Big().Cmp(target256) <= 0 {
-						_, err = d.queue.EnqueueUnmapMemObject(d.searchBuffers[p.bufIndex], cres, nil)
-						if err != nil {
-							fmt.Println("Error in Search clEnqueueUnmapMemObject: ", err)
-						}
-						if d.openCL12 {
-							err = cl.WaitForEvents([]*cl.Event{preReturnEvent})
-							if err != nil {
-								fmt.Println("Error in Search WaitForEvents: ", err)
-							}
-						}
-						return checkNonce, mixDigest.Bytes()
-					}
-					_, err := d.queue.EnqueueWriteBuffer(d.searchBuffers[p.bufIndex], false, 0, 4, unsafe.Pointer(&zero), nil)
-					if err != nil {
-						fmt.Println("Error in Search cl: EnqueueWriteBuffer", err)
-						return 0, []byte{0}
-					}
-				}
-			}
-			_, err = d.queue.EnqueueUnmapMemObject(d.searchBuffers[p.bufIndex], cres, nil)
-			if err != nil {
-				fmt.Println("Error in Search clEnqueueUnMapMemObject: ", err)
-				return 0, []byte{0}
-			}
-			pending = append(pending[:searchBufIndex], pending[searchBufIndex+1:]...)
-		}
-	}
-	if d.openCL12 {
-		err := cl.WaitForEvents([]*cl.Event{preReturnEvent})
-		if err != nil {
-			fmt.Println("Error in Search clWaitForEvents: ", err)
-			return 0, []byte{0}
-		}
-	}
-	return 0, []byte{0}
-}
-
-func (c *OpenCLMiner) Verify(block pow.Block) bool {
-	return c.ethash.Light.Verify(block)
-}
-func (c *OpenCLMiner) GetHashrate() int64 {
-	return int64(atomic.LoadInt32(&c.hashRate))
-}
-func (c *OpenCLMiner) Turbo(on bool) {
-	// This is GPU mining. Always be turbo.
-}
-
-func replaceWords(text string, kvs map[string]string) string {
-	for k, v := range kvs {
-		text = strings.Replace(text, k, v, -1)
-	}
-	return text
-}
-
-func logErr(err error) {
-	if err != nil {
-		fmt.Println("Error in OpenCL call:", err)
-	}
-}
-
-func argErr(err error) error {
-	return fmt.Errorf("arg err: %v", err)
-}

+ 0 - 600
Godeps/_workspace/src/github.com/ethereum/ethash/ethash_opencl_kernel_go_str.go

@@ -1,600 +0,0 @@
-package ethash
-
-/*  DO NOT EDIT!!!
-
-    This code is version controlled at
-    https://github.com/ethereum/cpp-ethereum/blob/develop/libethash-cl/ethash_cl_miner_kernel.cl
-
-    If needed change it there first, then copy over here.
-*/
-
-const kernel = `
-// author Tim Hughes <tim@twistedfury.com>
-// Tested on Radeon HD 7850
-// Hashrate: 15940347 hashes/s
-// Bandwidth: 124533 MB/s
-// search kernel should fit in <= 84 VGPRS (3 wavefronts)
-
-#define THREADS_PER_HASH (128 / 16)
-#define HASHES_PER_LOOP (GROUP_SIZE / THREADS_PER_HASH)
-
-#define FNV_PRIME	0x01000193
-
-__constant uint2 const Keccak_f1600_RC[24] = {
-	(uint2)(0x00000001, 0x00000000),
-	(uint2)(0x00008082, 0x00000000),
-	(uint2)(0x0000808a, 0x80000000),
-	(uint2)(0x80008000, 0x80000000),
-	(uint2)(0x0000808b, 0x00000000),
-	(uint2)(0x80000001, 0x00000000),
-	(uint2)(0x80008081, 0x80000000),
-	(uint2)(0x00008009, 0x80000000),
-	(uint2)(0x0000008a, 0x00000000),
-	(uint2)(0x00000088, 0x00000000),
-	(uint2)(0x80008009, 0x00000000),
-	(uint2)(0x8000000a, 0x00000000),
-	(uint2)(0x8000808b, 0x00000000),
-	(uint2)(0x0000008b, 0x80000000),
-	(uint2)(0x00008089, 0x80000000),
-	(uint2)(0x00008003, 0x80000000),
-	(uint2)(0x00008002, 0x80000000),
-	(uint2)(0x00000080, 0x80000000),
-	(uint2)(0x0000800a, 0x00000000),
-	(uint2)(0x8000000a, 0x80000000),
-	(uint2)(0x80008081, 0x80000000),
-	(uint2)(0x00008080, 0x80000000),
-	(uint2)(0x80000001, 0x00000000),
-	(uint2)(0x80008008, 0x80000000),
-};
-
-void keccak_f1600_round(uint2* a, uint r, uint out_size)
-{
-   #if !__ENDIAN_LITTLE__
-	for (uint i = 0; i != 25; ++i)
-		a[i] = a[i].yx;
-   #endif
-
-	uint2 b[25];
-	uint2 t;
-
-	// Theta
-	b[0] = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20];
-	b[1] = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21];
-	b[2] = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22];
-	b[3] = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23];
-	b[4] = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24];
-	t = b[4] ^ (uint2)(b[1].x << 1 | b[1].y >> 31, b[1].y << 1 | b[1].x >> 31);
-	a[0] ^= t;
-	a[5] ^= t;
-	a[10] ^= t;
-	a[15] ^= t;
-	a[20] ^= t;
-	t = b[0] ^ (uint2)(b[2].x << 1 | b[2].y >> 31, b[2].y << 1 | b[2].x >> 31);
-	a[1] ^= t;
-	a[6] ^= t;
-	a[11] ^= t;
-	a[16] ^= t;
-	a[21] ^= t;
-	t = b[1] ^ (uint2)(b[3].x << 1 | b[3].y >> 31, b[3].y << 1 | b[3].x >> 31);
-	a[2] ^= t;
-	a[7] ^= t;
-	a[12] ^= t;
-	a[17] ^= t;
-	a[22] ^= t;
-	t = b[2] ^ (uint2)(b[4].x << 1 | b[4].y >> 31, b[4].y << 1 | b[4].x >> 31);
-	a[3] ^= t;
-	a[8] ^= t;
-	a[13] ^= t;
-	a[18] ^= t;
-	a[23] ^= t;
-	t = b[3] ^ (uint2)(b[0].x << 1 | b[0].y >> 31, b[0].y << 1 | b[0].x >> 31);
-	a[4] ^= t;
-	a[9] ^= t;
-	a[14] ^= t;
-	a[19] ^= t;
-	a[24] ^= t;
-
-	// Rho Pi
-	b[0] = a[0];
-	b[10] = (uint2)(a[1].x << 1 | a[1].y >> 31, a[1].y << 1 | a[1].x >> 31);
-	b[7] = (uint2)(a[10].x << 3 | a[10].y >> 29, a[10].y << 3 | a[10].x >> 29);
-	b[11] = (uint2)(a[7].x << 6 | a[7].y >> 26, a[7].y << 6 | a[7].x >> 26);
-	b[17] = (uint2)(a[11].x << 10 | a[11].y >> 22, a[11].y << 10 | a[11].x >> 22);
-	b[18] = (uint2)(a[17].x << 15 | a[17].y >> 17, a[17].y << 15 | a[17].x >> 17);
-	b[3] = (uint2)(a[18].x << 21 | a[18].y >> 11, a[18].y << 21 | a[18].x >> 11);
-	b[5] = (uint2)(a[3].x << 28 | a[3].y >> 4, a[3].y << 28 | a[3].x >> 4);
-	b[16] = (uint2)(a[5].y << 4 | a[5].x >> 28, a[5].x << 4 | a[5].y >> 28);
-	b[8] = (uint2)(a[16].y << 13 | a[16].x >> 19, a[16].x << 13 | a[16].y >> 19);
-	b[21] = (uint2)(a[8].y << 23 | a[8].x >> 9, a[8].x << 23 | a[8].y >> 9);
-	b[24] = (uint2)(a[21].x << 2 | a[21].y >> 30, a[21].y << 2 | a[21].x >> 30);
-	b[4] = (uint2)(a[24].x << 14 | a[24].y >> 18, a[24].y << 14 | a[24].x >> 18);
-	b[15] = (uint2)(a[4].x << 27 | a[4].y >> 5, a[4].y << 27 | a[4].x >> 5);
-	b[23] = (uint2)(a[15].y << 9 | a[15].x >> 23, a[15].x << 9 | a[15].y >> 23);
-	b[19] = (uint2)(a[23].y << 24 | a[23].x >> 8, a[23].x << 24 | a[23].y >> 8);
-	b[13] = (uint2)(a[19].x << 8 | a[19].y >> 24, a[19].y << 8 | a[19].x >> 24);
-	b[12] = (uint2)(a[13].x << 25 | a[13].y >> 7, a[13].y << 25 | a[13].x >> 7);
-	b[2] = (uint2)(a[12].y << 11 | a[12].x >> 21, a[12].x << 11 | a[12].y >> 21);
-	b[20] = (uint2)(a[2].y << 30 | a[2].x >> 2, a[2].x << 30 | a[2].y >> 2);
-	b[14] = (uint2)(a[20].x << 18 | a[20].y >> 14, a[20].y << 18 | a[20].x >> 14);
-	b[22] = (uint2)(a[14].y << 7 | a[14].x >> 25, a[14].x << 7 | a[14].y >> 25);
-	b[9] = (uint2)(a[22].y << 29 | a[22].x >> 3, a[22].x << 29 | a[22].y >> 3);
-	b[6] = (uint2)(a[9].x << 20 | a[9].y >> 12, a[9].y << 20 | a[9].x >> 12);
-	b[1] = (uint2)(a[6].y << 12 | a[6].x >> 20, a[6].x << 12 | a[6].y >> 20);
-
-	// Chi
-	a[0] = bitselect(b[0] ^ b[2], b[0], b[1]);
-	a[1] = bitselect(b[1] ^ b[3], b[1], b[2]);
-	a[2] = bitselect(b[2] ^ b[4], b[2], b[3]);
-	a[3] = bitselect(b[3] ^ b[0], b[3], b[4]);
-	if (out_size >= 4)
-	{
-		a[4] = bitselect(b[4] ^ b[1], b[4], b[0]);
-		a[5] = bitselect(b[5] ^ b[7], b[5], b[6]);
-		a[6] = bitselect(b[6] ^ b[8], b[6], b[7]);
-		a[7] = bitselect(b[7] ^ b[9], b[7], b[8]);
-		a[8] = bitselect(b[8] ^ b[5], b[8], b[9]);
-		if (out_size >= 8)
-		{
-			a[9] = bitselect(b[9] ^ b[6], b[9], b[5]);
-			a[10] = bitselect(b[10] ^ b[12], b[10], b[11]);
-			a[11] = bitselect(b[11] ^ b[13], b[11], b[12]);
-			a[12] = bitselect(b[12] ^ b[14], b[12], b[13]);
-			a[13] = bitselect(b[13] ^ b[10], b[13], b[14]);
-			a[14] = bitselect(b[14] ^ b[11], b[14], b[10]);
-			a[15] = bitselect(b[15] ^ b[17], b[15], b[16]);
-			a[16] = bitselect(b[16] ^ b[18], b[16], b[17]);
-			a[17] = bitselect(b[17] ^ b[19], b[17], b[18]);
-			a[18] = bitselect(b[18] ^ b[15], b[18], b[19]);
-			a[19] = bitselect(b[19] ^ b[16], b[19], b[15]);
-			a[20] = bitselect(b[20] ^ b[22], b[20], b[21]);
-			a[21] = bitselect(b[21] ^ b[23], b[21], b[22]);
-			a[22] = bitselect(b[22] ^ b[24], b[22], b[23]);
-			a[23] = bitselect(b[23] ^ b[20], b[23], b[24]);
-			a[24] = bitselect(b[24] ^ b[21], b[24], b[20]);
-		}
-	}
-
-	// Iota
-	a[0] ^= Keccak_f1600_RC[r];
-
-   #if !__ENDIAN_LITTLE__
-	for (uint i = 0; i != 25; ++i)
-		a[i] = a[i].yx;
-   #endif
-}
-
-void keccak_f1600_no_absorb(ulong* a, uint in_size, uint out_size, uint isolate)
-{
-	for (uint i = in_size; i != 25; ++i)
-	{
-		a[i] = 0;
-	}
-#if __ENDIAN_LITTLE__
-	a[in_size] ^= 0x0000000000000001;
-	a[24-out_size*2] ^= 0x8000000000000000;
-#else
-	a[in_size] ^= 0x0100000000000000;
-	a[24-out_size*2] ^= 0x0000000000000080;
-#endif
-
-	// Originally I unrolled the first and last rounds to interface
-	// better with surrounding code, however I haven't done this
-	// without causing the AMD compiler to blow up the VGPR usage.
-	uint r = 0;
-	do
-	{
-		// This dynamic branch stops the AMD compiler unrolling the loop
-		// and additionally saves about 33% of the VGPRs, enough to gain another
-		// wavefront. Ideally we'd get 4 in flight, but 3 is the best I can
-		// massage out of the compiler. It doesn't really seem to matter how
-		// much we try and help the compiler save VGPRs because it seems to throw
-		// that information away, hence the implementation of keccak here
-		// doesn't bother.
-		if (isolate)
-		{
-			keccak_f1600_round((uint2*)a, r++, 25);
-		}
-	}
-	while (r < 23);
-
-	// final round optimised for digest size
-	keccak_f1600_round((uint2*)a, r++, out_size);
-}
-
-#define copy(dst, src, count) for (uint i = 0; i != count; ++i) { (dst)[i] = (src)[i]; }
-
-#define countof(x) (sizeof(x) / sizeof(x[0]))
-
-uint fnv(uint x, uint y)
-{
-	return x * FNV_PRIME ^ y;
-}
-
-uint4 fnv4(uint4 x, uint4 y)
-{
-	return x * FNV_PRIME ^ y;
-}
-
-uint fnv_reduce(uint4 v)
-{
-	return fnv(fnv(fnv(v.x, v.y), v.z), v.w);
-}
-
-typedef union
-{
-	ulong ulongs[32 / sizeof(ulong)];
-	uint uints[32 / sizeof(uint)];
-} hash32_t;
-
-typedef union
-{
-	ulong ulongs[64 / sizeof(ulong)];
-	uint4 uint4s[64 / sizeof(uint4)];
-} hash64_t;
-
-typedef union
-{
-	uint uints[128 / sizeof(uint)];
-	uint4 uint4s[128 / sizeof(uint4)];
-} hash128_t;
-
-hash64_t init_hash(__constant hash32_t const* header, ulong nonce, uint isolate)
-{
-	hash64_t init;
-	uint const init_size = countof(init.ulongs);
-	uint const hash_size = countof(header->ulongs);
-
-	// sha3_512(header .. nonce)
-	ulong state[25];
-	copy(state, header->ulongs, hash_size);
-	state[hash_size] = nonce;
-	keccak_f1600_no_absorb(state, hash_size + 1, init_size, isolate);
-
-	copy(init.ulongs, state, init_size);
-	return init;
-}
-
-uint inner_loop_chunks(uint4 init, uint thread_id, __local uint* share, __global hash128_t const* g_dag, __global hash128_t const* g_dag1, __global hash128_t const* g_dag2, __global hash128_t const* g_dag3, uint isolate)
-{
-	uint4 mix = init;
-
-	// share init0
-	if (thread_id == 0)
-		*share = mix.x;
-	barrier(CLK_LOCAL_MEM_FENCE);
-	uint init0 = *share;
-
-	uint a = 0;
-	do
-	{
-		bool update_share = thread_id == (a/4) % THREADS_PER_HASH;
-
-		#pragma unroll
-		for (uint i = 0; i != 4; ++i)
-		{
-			if (update_share)
-			{
-				uint m[4] = { mix.x, mix.y, mix.z, mix.w };
-				*share = fnv(init0 ^ (a+i), m[i]) % DAG_SIZE;
-			}
-			barrier(CLK_LOCAL_MEM_FENCE);
-
-			mix = fnv4(mix, *share>=3 * DAG_SIZE / 4 ? g_dag3[*share - 3 * DAG_SIZE / 4].uint4s[thread_id] : *share>=DAG_SIZE / 2 ? g_dag2[*share - DAG_SIZE / 2].uint4s[thread_id] : *share>=DAG_SIZE / 4 ? g_dag1[*share - DAG_SIZE / 4].uint4s[thread_id]:g_dag[*share].uint4s[thread_id]);
-		}
-	} while ((a += 4) != (ACCESSES & isolate));
-
-	return fnv_reduce(mix);
-}
-
-
-
-uint inner_loop(uint4 init, uint thread_id, __local uint* share, __global hash128_t const* g_dag, uint isolate)
-{
-	uint4 mix = init;
-
-	// share init0
-	if (thread_id == 0)
-		*share = mix.x;
-	barrier(CLK_LOCAL_MEM_FENCE);
-	uint init0 = *share;
-
-	uint a = 0;
-	do
-	{
-		bool update_share = thread_id == (a/4) % THREADS_PER_HASH;
-
-		#pragma unroll
-		for (uint i = 0; i != 4; ++i)
-		{
-			if (update_share)
-			{
-				uint m[4] = { mix.x, mix.y, mix.z, mix.w };
-				*share = fnv(init0 ^ (a+i), m[i]) % DAG_SIZE;
-			}
-			barrier(CLK_LOCAL_MEM_FENCE);
-
-			mix = fnv4(mix, g_dag[*share].uint4s[thread_id]);
-		}
-	}
-	while ((a += 4) != (ACCESSES & isolate));
-
-	return fnv_reduce(mix);
-}
-
-
-hash32_t final_hash(hash64_t const* init, hash32_t const* mix, uint isolate)
-{
-	ulong state[25];
-
-	hash32_t hash;
-	uint const hash_size = countof(hash.ulongs);
-	uint const init_size = countof(init->ulongs);
-	uint const mix_size = countof(mix->ulongs);
-
-	// keccak_256(keccak_512(header..nonce) .. mix);
-	copy(state, init->ulongs, init_size);
-	copy(state + init_size, mix->ulongs, mix_size);
-	keccak_f1600_no_absorb(state, init_size+mix_size, hash_size, isolate);
-
-	// copy out
-	copy(hash.ulongs, state, hash_size);
-	return hash;
-}
-
-hash32_t compute_hash_simple(
-	__constant hash32_t const* g_header,
-	__global hash128_t const* g_dag,
-	ulong nonce,
-	uint isolate
-	)
-{
-	hash64_t init = init_hash(g_header, nonce, isolate);
-
-	hash128_t mix;
-	for (uint i = 0; i != countof(mix.uint4s); ++i)
-	{
-		mix.uint4s[i] = init.uint4s[i % countof(init.uint4s)];
-	}
-
-	uint mix_val = mix.uints[0];
-	uint init0 = mix.uints[0];
-	uint a = 0;
-	do
-	{
-		uint pi = fnv(init0 ^ a, mix_val) % DAG_SIZE;
-		uint n = (a+1) % countof(mix.uints);
-
-		#pragma unroll
-		for (uint i = 0; i != countof(mix.uints); ++i)
-		{
-			mix.uints[i] = fnv(mix.uints[i], g_dag[pi].uints[i]);
-			mix_val = i == n ? mix.uints[i] : mix_val;
-		}
-	}
-	while (++a != (ACCESSES & isolate));
-
-	// reduce to output
-	hash32_t fnv_mix;
-	for (uint i = 0; i != countof(fnv_mix.uints); ++i)
-	{
-		fnv_mix.uints[i] = fnv_reduce(mix.uint4s[i]);
-	}
-
-	return final_hash(&init, &fnv_mix, isolate);
-}
-
-typedef union
-{
-	struct
-	{
-		hash64_t init;
-		uint pad; // avoid lds bank conflicts
-	};
-	hash32_t mix;
-} compute_hash_share;
-
-
-hash32_t compute_hash(
-	__local compute_hash_share* share,
-	__constant hash32_t const* g_header,
-	__global hash128_t const* g_dag,
-	ulong nonce,
-	uint isolate
-	)
-{
-	uint const gid = get_global_id(0);
-
-	// Compute one init hash per work item.
-	hash64_t init = init_hash(g_header, nonce, isolate);
-
-	// Threads work together in this phase in groups of 8.
-	uint const thread_id = gid % THREADS_PER_HASH;
-	uint const hash_id = (gid % GROUP_SIZE) / THREADS_PER_HASH;
-
-	hash32_t mix;
-	uint i = 0;
-	do
-	{
-		// share init with other threads
-		if (i == thread_id)
-			share[hash_id].init = init;
-		barrier(CLK_LOCAL_MEM_FENCE);
-
-		uint4 thread_init = share[hash_id].init.uint4s[thread_id % (64 / sizeof(uint4))];
-		barrier(CLK_LOCAL_MEM_FENCE);
-
-		uint thread_mix = inner_loop(thread_init, thread_id, share[hash_id].mix.uints, g_dag, isolate);
-
-		share[hash_id].mix.uints[thread_id] = thread_mix;
-		barrier(CLK_LOCAL_MEM_FENCE);
-
-		if (i == thread_id)
-			mix = share[hash_id].mix;
-		barrier(CLK_LOCAL_MEM_FENCE);
-	}
-	while (++i != (THREADS_PER_HASH & isolate));
-
-	return final_hash(&init, &mix, isolate);
-}
-
-
-hash32_t compute_hash_chunks(
-	__local compute_hash_share* share,
-	__constant hash32_t const* g_header,
-	__global hash128_t const* g_dag,
-	__global hash128_t const* g_dag1,
-	__global hash128_t const* g_dag2,
-	__global hash128_t const* g_dag3,
-	ulong nonce,
-	uint isolate
-	)
-{
-	uint const gid = get_global_id(0);
-
-	// Compute one init hash per work item.
-	hash64_t init = init_hash(g_header, nonce, isolate);
-
-	// Threads work together in this phase in groups of 8.
-	uint const thread_id = gid % THREADS_PER_HASH;
-	uint const hash_id = (gid % GROUP_SIZE) / THREADS_PER_HASH;
-
-	hash32_t mix;
-	uint i = 0;
-	do
-	{
-		// share init with other threads
-		if (i == thread_id)
-			share[hash_id].init = init;
-		barrier(CLK_LOCAL_MEM_FENCE);
-
-		uint4 thread_init = share[hash_id].init.uint4s[thread_id % (64 / sizeof(uint4))];
-		barrier(CLK_LOCAL_MEM_FENCE);
-
-		uint thread_mix = inner_loop_chunks(thread_init, thread_id, share[hash_id].mix.uints, g_dag, g_dag1, g_dag2, g_dag3, isolate);
-
-		share[hash_id].mix.uints[thread_id] = thread_mix;
-		barrier(CLK_LOCAL_MEM_FENCE);
-
-		if (i == thread_id)
-			mix = share[hash_id].mix;
-		barrier(CLK_LOCAL_MEM_FENCE);
-	}
-	while (++i != (THREADS_PER_HASH & isolate));
-
-	return final_hash(&init, &mix, isolate);
-}
-
-__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
-__kernel void ethash_hash_simple(
-	__global hash32_t* g_hashes,
-	__constant hash32_t const* g_header,
-	__global hash128_t const* g_dag,
-	ulong start_nonce,
-	uint isolate
-	)
-{
-	uint const gid = get_global_id(0);
-	g_hashes[gid] = compute_hash_simple(g_header, g_dag, start_nonce + gid, isolate);
-}
-
-__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
-__kernel void ethash_search_simple(
-	__global volatile uint* restrict g_output,
-	__constant hash32_t const* g_header,
-	__global hash128_t const* g_dag,
-	ulong start_nonce,
-	ulong target,
-	uint isolate
-	)
-{
-	uint const gid = get_global_id(0);
-	hash32_t hash = compute_hash_simple(g_header, g_dag, start_nonce + gid, isolate);
-
-	if (hash.ulongs[countof(hash.ulongs)-1] < target)
-	{
-		uint slot = min(convert_uint(MAX_OUTPUTS), convert_uint(atomic_inc(&g_output[0]) + 1));
-		g_output[slot] = gid;
-	}
-}
-
-
-__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
-__kernel void ethash_hash(
-	__global hash32_t* g_hashes,
-	__constant hash32_t const* g_header,
-	__global hash128_t const* g_dag,
-	ulong start_nonce,
-	uint isolate
-	)
-{
-	__local compute_hash_share share[HASHES_PER_LOOP];
-
-	uint const gid = get_global_id(0);
-	g_hashes[gid] = compute_hash(share, g_header, g_dag, start_nonce + gid, isolate);
-}
-
-__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
-__kernel void ethash_search(
-	__global volatile uint* restrict g_output,
-	__constant hash32_t const* g_header,
-	__global hash128_t const* g_dag,
-	ulong start_nonce,
-	ulong target,
-	uint isolate
-	)
-{
-	__local compute_hash_share share[HASHES_PER_LOOP];
-
-	uint const gid = get_global_id(0);
-	hash32_t hash = compute_hash(share, g_header, g_dag, start_nonce + gid, isolate);
-
-	if (as_ulong(as_uchar8(hash.ulongs[0]).s76543210) < target)
-	{
-		uint slot = min((uint)MAX_OUTPUTS, atomic_inc(&g_output[0]) + 1);
-		g_output[slot] = gid;
-	}
-}
-
-__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
-__kernel void ethash_hash_chunks(
-	__global hash32_t* g_hashes,
-	__constant hash32_t const* g_header,
-	__global hash128_t const* g_dag,
-	__global hash128_t const* g_dag1,
-	__global hash128_t const* g_dag2,
-	__global hash128_t const* g_dag3,
-	ulong start_nonce,
-	uint isolate
-	)
-{
-	__local compute_hash_share share[HASHES_PER_LOOP];
-
-	uint const gid = get_global_id(0);
-	g_hashes[gid] = compute_hash_chunks(share, g_header, g_dag, g_dag1, g_dag2, g_dag3,start_nonce + gid, isolate);
-}
-
-__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
-__kernel void ethash_search_chunks(
-	__global volatile uint* restrict g_output,
-	__constant hash32_t const* g_header,
-	__global hash128_t const* g_dag,
-	__global hash128_t const* g_dag1,
-	__global hash128_t const* g_dag2,
-	__global hash128_t const* g_dag3,
-	ulong start_nonce,
-	ulong target,
-	uint isolate
-	)
-{
-	__local compute_hash_share share[HASHES_PER_LOOP];
-
-	uint const gid = get_global_id(0);
-	hash32_t hash = compute_hash_chunks(share, g_header, g_dag, g_dag1, g_dag2, g_dag3, start_nonce + gid, isolate);
-
-	if (as_ulong(as_uchar8(hash.ulongs[0]).s76543210) < target)
-	{
-		uint slot = min(convert_uint(MAX_OUTPUTS), convert_uint(atomic_inc(&g_output[0]) + 1));
-		g_output[slot] = gid;
-	}
-}
-`

+ 0 - 3
Godeps/_workspace/src/github.com/fatih/color/.travis.yml

@@ -1,3 +0,0 @@
-language: go
-go: 1.3
-

+ 0 - 117
Godeps/_workspace/src/github.com/gizak/termui/debug/debuger.go

@@ -1,117 +0,0 @@
-// Copyright 2016 Zack Guo <gizak@icloud.com>. All rights reserved.
-// Use of this source code is governed by a MIT license that can
-// be found in the LICENSE file.
-
-package debug
-
-import (
-	"fmt"
-	"net/http"
-
-	"golang.org/x/net/websocket"
-)
-
-type Server struct {
-	Port string
-	Addr string
-	Path string
-	Msg  chan string
-	chs  []chan string
-}
-
-type Client struct {
-	Port string
-	Addr string
-	Path string
-	ws   *websocket.Conn
-}
-
-var defaultPort = ":8080"
-
-func NewServer() *Server {
-	return &Server{
-		Port: defaultPort,
-		Addr: "localhost",
-		Path: "/echo",
-		Msg:  make(chan string),
-		chs:  make([]chan string, 0),
-	}
-}
-
-func NewClient() Client {
-	return Client{
-		Port: defaultPort,
-		Addr: "localhost",
-		Path: "/echo",
-	}
-}
-
-func (c Client) ConnectAndListen() error {
-	ws, err := websocket.Dial("ws://"+c.Addr+c.Port+c.Path, "", "http://"+c.Addr)
-	if err != nil {
-		return err
-	}
-	defer ws.Close()
-
-	var m string
-	for {
-		err := websocket.Message.Receive(ws, &m)
-		if err != nil {
-			fmt.Print(err)
-			return err
-		}
-		fmt.Print(m)
-	}
-}
-
-func (s *Server) ListenAndServe() error {
-	http.Handle(s.Path, websocket.Handler(func(ws *websocket.Conn) {
-		defer ws.Close()
-
-		mc := make(chan string)
-		s.chs = append(s.chs, mc)
-
-		for m := range mc {
-			websocket.Message.Send(ws, m)
-		}
-	}))
-
-	go func() {
-		for msg := range s.Msg {
-			for _, c := range s.chs {
-				go func(a chan string) {
-					a <- msg
-				}(c)
-			}
-		}
-	}()
-
-	return http.ListenAndServe(s.Port, nil)
-}
-
-func (s *Server) Log(msg string) {
-	go func() { s.Msg <- msg }()
-}
-
-func (s *Server) Logf(format string, a ...interface{}) {
-	s.Log(fmt.Sprintf(format, a...))
-}
-
-var DefaultServer = NewServer()
-var DefaultClient = NewClient()
-
-func ListenAndServe() error {
-	return DefaultServer.ListenAndServe()
-}
-
-func ConnectAndListen() error {
-	return DefaultClient.ConnectAndListen()
-}
-
-func Log(msg string) {
-	DefaultServer.Log(msg)
-}
-
-func Logf(format string, a ...interface{}) {
-	DefaultServer.Logf(format, a...)
-}

+ 0 - 66
Godeps/_workspace/src/github.com/gizak/termui/test/runtest.go

@@ -1,66 +0,0 @@
-// Copyright 2016 Zack Guo <gizak@icloud.com>. All rights reserved.
-// Use of this source code is governed by a MIT license that can
-// be found in the LICENSE file.
-
-package main
-
-import (
-	"fmt"
-	"os"
-
-	"github.com/gizak/termui"
-	"github.com/gizak/termui/debug"
-)
-
-func main() {
-	// run as client
-	if len(os.Args) > 1 {
-		fmt.Print(debug.ConnectAndListen())
-		return
-	}
-
-	// run as server
-	go func() { panic(debug.ListenAndServe()) }()
-
-	if err := termui.Init(); err != nil {
-		panic(err)
-	}
-	defer termui.Close()
-
-	//termui.UseTheme("helloworld")
-	b := termui.NewBlock()
-	b.Width = 20
-	b.Height = 20
-	b.Float = termui.AlignCenter
-	b.BorderLabel = "[HELLO](fg-red,bg-white) [WORLD](fg-blue,bg-green)"
-
-	termui.Render(b)
-
-	termui.Handle("/sys", func(e termui.Event) {
-		k, ok := e.Data.(termui.EvtKbd)
-		debug.Logf("->%v\n", e)
-		if ok && k.KeyStr == "q" {
-			termui.StopLoop()
-		}
-	})
-
-	termui.Handle(("/usr"), func(e termui.Event) {
-		debug.Logf("->%v\n", e)
-	})
-
-	termui.Handle("/timer/1s", func(e termui.Event) {
-		t := e.Data.(termui.EvtTimer)
-		termui.SendCustomEvt("/usr/t", t.Count)
-
-		if t.Count%2 == 0 {
-			b.BorderLabel = "[HELLO](fg-red,bg-green) [WORLD](fg-blue,bg-white)"
-		} else {
-			b.BorderLabel = "[HELLO](fg-blue,bg-white) [WORLD](fg-red,bg-green)"
-		}
-
-		termui.Render(b)
-
-	})
-
-	termui.Loop()
-}

+ 0 - 7
Godeps/_workspace/src/github.com/golang/snappy/README

@@ -1,7 +0,0 @@
-The Snappy compression format in the Go programming language.
-
-To download and install from source:
-$ go get github.com/golang/snappy
-
-Unless otherwise noted, the Snappy-Go source files are distributed
-under the BSD-style license found in the LICENSE file.

+ 0 - 20
Godeps/_workspace/src/github.com/huin/goupnp/cmd/example_httpu_serving/example_httpu_serving.go

@@ -1,20 +0,0 @@
-package main
-
-import (
-	"log"
-	"net/http"
-
-	"github.com/huin/goupnp/httpu"
-)
-
-func main() {
-	srv := httpu.Server{
-		Addr:      "239.255.255.250:1900",
-		Multicast: true,
-		Handler: httpu.HandlerFunc(func(r *http.Request) {
-			log.Printf("Got %s %s message from %v: %v", r.Method, r.URL.Path, r.RemoteAddr, r.Header)
-		}),
-	}
-	err := srv.ListenAndServe()
-	log.Printf("Serving failed with error: %v", err)
-}

+ 0 - 67
Godeps/_workspace/src/github.com/huin/goupnp/cmd/example_internetgateway1/example_internetgateway1.go

@@ -1,67 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"log"
-
-	"github.com/huin/goupnp/dcps/internetgateway1"
-)
-
-func main() {
-	clients, errors, err := internetgateway1.NewWANPPPConnection1Clients()
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	fmt.Printf("Got %d errors finding servers and %d successfully discovered.\n",
-		len(errors), len(clients))
-	for i, e := range errors {
-		fmt.Printf("Error finding server #%d: %v\n", i+1, e)
-	}
-
-	for _, c := range clients {
-		dev := &c.ServiceClient.RootDevice.Device
-		srv := c.ServiceClient.Service
-		fmt.Println(dev.FriendlyName, " :: ", srv.String())
-		scpd, err := srv.RequestSCDP()
-		if err != nil {
-			fmt.Printf("  Error requesting service SCPD: %v\n", err)
-		} else {
-			fmt.Println("  Available actions:")
-			for _, action := range scpd.Actions {
-				fmt.Printf("  * %s\n", action.Name)
-				for _, arg := range action.Arguments {
-					var varDesc string
-					if stateVar := scpd.GetStateVariable(arg.RelatedStateVariable); stateVar != nil {
-						varDesc = fmt.Sprintf(" (%s)", stateVar.DataType.Name)
-					}
-					fmt.Printf("    * [%s] %s%s\n", arg.Direction, arg.Name, varDesc)
-				}
-			}
-		}
-
-		if scpd == nil || scpd.GetAction("GetExternalIPAddress") != nil {
-			ip, err := c.GetExternalIPAddress()
-			fmt.Println("GetExternalIPAddress: ", ip, err)
-		}
-
-		if scpd == nil || scpd.GetAction("GetStatusInfo") != nil {
-			status, lastErr, uptime, err := c.GetStatusInfo()
-			fmt.Println("GetStatusInfo: ", status, lastErr, uptime, err)
-		}
-
-		if scpd == nil || scpd.GetAction("GetIdleDisconnectTime") != nil {
-			idleTime, err := c.GetIdleDisconnectTime()
-			fmt.Println("GetIdleDisconnectTime: ", idleTime, err)
-		}
-
-		if scpd == nil || scpd.GetAction("AddPortMapping") != nil {
-			err := c.AddPortMapping("", 5000, "TCP", 5001, "192.168.1.2", true, "Test port mapping", 0)
-			fmt.Println("AddPortMapping: ", err)
-		}
-		if scpd == nil || scpd.GetAction("DeletePortMapping") != nil {
-			err := c.DeletePortMapping("", 5000, "TCP")
-			fmt.Println("DeletePortMapping: ", err)
-		}
-	}
-}

+ 0 - 27
Godeps/_workspace/src/github.com/huin/goupnp/cmd/example_ssdp_registry/example_ssdp_registry.go

@@ -1,27 +0,0 @@
-package main
-
-import (
-	"log"
-
-	"github.com/huin/goupnp/ssdp"
-)
-
-func main() {
-	c := make(chan ssdp.Update)
-	srv, reg := ssdp.NewServerAndRegistry()
-	reg.AddListener(c)
-	go listener(c)
-	if err := srv.ListenAndServe(); err != nil {
-		log.Print("ListenAndServe failed: ", err)
-	}
-}
-
-func listener(c <-chan ssdp.Update) {
-	for u := range c {
-		if u.Entry != nil {
-			log.Printf("Event: %v USN: %s Entry: %#v", u.EventType, u.USN, *u.Entry)
-		} else {
-			log.Printf("Event: %v USN: %s Entry: <nil>", u.EventType, u.USN)
-		}
-	}
-}

+ 0 - 8452
Godeps/_workspace/src/github.com/huin/goupnp/dcps/av1/av1.go

@@ -1,8452 +0,0 @@
-// Client for UPnP Device Control Protocol MediaServer v1 and MediaRenderer v1.
-//
-// This DCP is documented in detail at: http://upnp.org/specs/av/av1/
-//
-// Typically, use one of the New* functions to create clients for services.
-package av1
-
-// Generated file - do not edit by hand. See README.md
-
-import (
-	"net/url"
-	"time"
-
-	"github.com/huin/goupnp"
-	"github.com/huin/goupnp/soap"
-)
-
-// Hack to avoid Go complaining if time isn't used.
-var _ time.Time
-
-// Device URNs:
-const ()
-
-// Service URNs:
-const (
-	URN_AVTransport_1        = "urn:schemas-upnp-org:service:AVTransport:1"
-	URN_AVTransport_2        = "urn:schemas-upnp-org:service:AVTransport:2"
-	URN_ConnectionManager_1  = "urn:schemas-upnp-org:service:ConnectionManager:1"
-	URN_ConnectionManager_2  = "urn:schemas-upnp-org:service:ConnectionManager:2"
-	URN_ContentDirectory_1   = "urn:schemas-upnp-org:service:ContentDirectory:1"
-	URN_ContentDirectory_2   = "urn:schemas-upnp-org:service:ContentDirectory:2"
-	URN_ContentDirectory_3   = "urn:schemas-upnp-org:service:ContentDirectory:3"
-	URN_RenderingControl_1   = "urn:schemas-upnp-org:service:RenderingControl:1"
-	URN_RenderingControl_2   = "urn:schemas-upnp-org:service:RenderingControl:2"
-	URN_ScheduledRecording_1 = "urn:schemas-upnp-org:service:ScheduledRecording:1"
-	URN_ScheduledRecording_2 = "urn:schemas-upnp-org:service:ScheduledRecording:2"
-)
-
-// AVTransport1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:AVTransport:1". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type AVTransport1 struct {
-	goupnp.ServiceClient
-}
-
-// NewAVTransport1Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewAVTransport1Clients() (clients []*AVTransport1, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_AVTransport_1); err != nil {
-		return
-	}
-	clients = newAVTransport1ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewAVTransport1ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewAVTransport1ClientsByURL(loc *url.URL) ([]*AVTransport1, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_AVTransport_1)
-	if err != nil {
-		return nil, err
-	}
-	return newAVTransport1ClientsFromGenericClients(genericClients), nil
-}
-
-// NewAVTransport1ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewAVTransport1ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*AVTransport1, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_AVTransport_1)
-	if err != nil {
-		return nil, err
-	}
-	return newAVTransport1ClientsFromGenericClients(genericClients), nil
-}
-
-func newAVTransport1ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*AVTransport1 {
-	clients := make([]*AVTransport1, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &AVTransport1{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *AVTransport1) SetAVTransportURI(InstanceID uint32, CurrentURI string, CurrentURIMetaData string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		CurrentURI string
-
-		CurrentURIMetaData string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.CurrentURI, err = soap.MarshalString(CurrentURI); err != nil {
-		return
-	}
-	if request.CurrentURIMetaData, err = soap.MarshalString(CurrentURIMetaData); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "SetAVTransportURI", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport1) SetNextAVTransportURI(InstanceID uint32, NextURI string, NextURIMetaData string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		NextURI string
-
-		NextURIMetaData string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.NextURI, err = soap.MarshalString(NextURI); err != nil {
-		return
-	}
-	if request.NextURIMetaData, err = soap.MarshalString(NextURIMetaData); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "SetNextAVTransportURI", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * NrTracks: allowed value range: minimum=0
-func (client *AVTransport1) GetMediaInfo(InstanceID uint32) (NrTracks uint32, MediaDuration string, CurrentURI string, CurrentURIMetaData string, NextURI string, NextURIMetaData string, PlayMedium string, RecordMedium string, WriteStatus string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		NrTracks string
-
-		MediaDuration string
-
-		CurrentURI string
-
-		CurrentURIMetaData string
-
-		NextURI string
-
-		NextURIMetaData string
-
-		PlayMedium string
-
-		RecordMedium string
-
-		WriteStatus string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "GetMediaInfo", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if NrTracks, err = soap.UnmarshalUi4(response.NrTracks); err != nil {
-		return
-	}
-	if MediaDuration, err = soap.UnmarshalString(response.MediaDuration); err != nil {
-		return
-	}
-	if CurrentURI, err = soap.UnmarshalString(response.CurrentURI); err != nil {
-		return
-	}
-	if CurrentURIMetaData, err = soap.UnmarshalString(response.CurrentURIMetaData); err != nil {
-		return
-	}
-	if NextURI, err = soap.UnmarshalString(response.NextURI); err != nil {
-		return
-	}
-	if NextURIMetaData, err = soap.UnmarshalString(response.NextURIMetaData); err != nil {
-		return
-	}
-	if PlayMedium, err = soap.UnmarshalString(response.PlayMedium); err != nil {
-		return
-	}
-	if RecordMedium, err = soap.UnmarshalString(response.RecordMedium); err != nil {
-		return
-	}
-	if WriteStatus, err = soap.UnmarshalString(response.WriteStatus); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentTransportState: allowed values: STOPPED, PLAYING
-//
-// * CurrentTransportStatus: allowed values: OK, ERROR_OCCURRED
-//
-// * CurrentSpeed: allowed values: 1
-func (client *AVTransport1) GetTransportInfo(InstanceID uint32) (CurrentTransportState string, CurrentTransportStatus string, CurrentSpeed string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentTransportState string
-
-		CurrentTransportStatus string
-
-		CurrentSpeed string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "GetTransportInfo", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentTransportState, err = soap.UnmarshalString(response.CurrentTransportState); err != nil {
-		return
-	}
-	if CurrentTransportStatus, err = soap.UnmarshalString(response.CurrentTransportStatus); err != nil {
-		return
-	}
-	if CurrentSpeed, err = soap.UnmarshalString(response.CurrentSpeed); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * Track: allowed value range: minimum=0, step=1
-func (client *AVTransport1) GetPositionInfo(InstanceID uint32) (Track uint32, TrackDuration string, TrackMetaData string, TrackURI string, RelTime string, AbsTime string, RelCount int32, AbsCount int32, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Track string
-
-		TrackDuration string
-
-		TrackMetaData string
-
-		TrackURI string
-
-		RelTime string
-
-		AbsTime string
-
-		RelCount string
-
-		AbsCount string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "GetPositionInfo", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Track, err = soap.UnmarshalUi4(response.Track); err != nil {
-		return
-	}
-	if TrackDuration, err = soap.UnmarshalString(response.TrackDuration); err != nil {
-		return
-	}
-	if TrackMetaData, err = soap.UnmarshalString(response.TrackMetaData); err != nil {
-		return
-	}
-	if TrackURI, err = soap.UnmarshalString(response.TrackURI); err != nil {
-		return
-	}
-	if RelTime, err = soap.UnmarshalString(response.RelTime); err != nil {
-		return
-	}
-	if AbsTime, err = soap.UnmarshalString(response.AbsTime); err != nil {
-		return
-	}
-	if RelCount, err = soap.UnmarshalI4(response.RelCount); err != nil {
-		return
-	}
-	if AbsCount, err = soap.UnmarshalI4(response.AbsCount); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport1) GetDeviceCapabilities(InstanceID uint32) (PlayMedia string, RecMedia string, RecQualityModes string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		PlayMedia string
-
-		RecMedia string
-
-		RecQualityModes string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "GetDeviceCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if PlayMedia, err = soap.UnmarshalString(response.PlayMedia); err != nil {
-		return
-	}
-	if RecMedia, err = soap.UnmarshalString(response.RecMedia); err != nil {
-		return
-	}
-	if RecQualityModes, err = soap.UnmarshalString(response.RecQualityModes); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * PlayMode: allowed values: NORMAL
-func (client *AVTransport1) GetTransportSettings(InstanceID uint32) (PlayMode string, RecQualityMode string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		PlayMode string
-
-		RecQualityMode string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "GetTransportSettings", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if PlayMode, err = soap.UnmarshalString(response.PlayMode); err != nil {
-		return
-	}
-	if RecQualityMode, err = soap.UnmarshalString(response.RecQualityMode); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport1) Stop(InstanceID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "Stop", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Speed: allowed values: 1
-
-func (client *AVTransport1) Play(InstanceID uint32, Speed string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Speed string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Speed, err = soap.MarshalString(Speed); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "Play", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport1) Pause(InstanceID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "Pause", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport1) Record(InstanceID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "Record", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Unit: allowed values: TRACK_NR
-
-func (client *AVTransport1) Seek(InstanceID uint32, Unit string, Target string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Unit string
-
-		Target string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Unit, err = soap.MarshalString(Unit); err != nil {
-		return
-	}
-	if request.Target, err = soap.MarshalString(Target); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "Seek", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport1) Next(InstanceID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "Next", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport1) Previous(InstanceID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "Previous", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * NewPlayMode: allowed values: NORMAL
-
-func (client *AVTransport1) SetPlayMode(InstanceID uint32, NewPlayMode string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		NewPlayMode string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.NewPlayMode, err = soap.MarshalString(NewPlayMode); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "SetPlayMode", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport1) SetRecordQualityMode(InstanceID uint32, NewRecordQualityMode string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		NewRecordQualityMode string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.NewRecordQualityMode, err = soap.MarshalString(NewRecordQualityMode); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "SetRecordQualityMode", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport1) GetCurrentTransportActions(InstanceID uint32) (Actions string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Actions string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_1, "GetCurrentTransportActions", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Actions, err = soap.UnmarshalString(response.Actions); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-// AVTransport2 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:AVTransport:2". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type AVTransport2 struct {
-	goupnp.ServiceClient
-}
-
-// NewAVTransport2Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewAVTransport2Clients() (clients []*AVTransport2, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_AVTransport_2); err != nil {
-		return
-	}
-	clients = newAVTransport2ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewAVTransport2ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewAVTransport2ClientsByURL(loc *url.URL) ([]*AVTransport2, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_AVTransport_2)
-	if err != nil {
-		return nil, err
-	}
-	return newAVTransport2ClientsFromGenericClients(genericClients), nil
-}
-
-// NewAVTransport2ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewAVTransport2ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*AVTransport2, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_AVTransport_2)
-	if err != nil {
-		return nil, err
-	}
-	return newAVTransport2ClientsFromGenericClients(genericClients), nil
-}
-
-func newAVTransport2ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*AVTransport2 {
-	clients := make([]*AVTransport2, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &AVTransport2{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *AVTransport2) SetAVTransportURI(InstanceID uint32, CurrentURI string, CurrentURIMetaData string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		CurrentURI string
-
-		CurrentURIMetaData string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.CurrentURI, err = soap.MarshalString(CurrentURI); err != nil {
-		return
-	}
-	if request.CurrentURIMetaData, err = soap.MarshalString(CurrentURIMetaData); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "SetAVTransportURI", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) SetNextAVTransportURI(InstanceID uint32, NextURI string, NextURIMetaData string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		NextURI string
-
-		NextURIMetaData string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.NextURI, err = soap.MarshalString(NextURI); err != nil {
-		return
-	}
-	if request.NextURIMetaData, err = soap.MarshalString(NextURIMetaData); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "SetNextAVTransportURI", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * NrTracks: allowed value range: minimum=0
-func (client *AVTransport2) GetMediaInfo(InstanceID uint32) (NrTracks uint32, MediaDuration string, CurrentURI string, CurrentURIMetaData string, NextURI string, NextURIMetaData string, PlayMedium string, RecordMedium string, WriteStatus string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		NrTracks string
-
-		MediaDuration string
-
-		CurrentURI string
-
-		CurrentURIMetaData string
-
-		NextURI string
-
-		NextURIMetaData string
-
-		PlayMedium string
-
-		RecordMedium string
-
-		WriteStatus string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "GetMediaInfo", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if NrTracks, err = soap.UnmarshalUi4(response.NrTracks); err != nil {
-		return
-	}
-	if MediaDuration, err = soap.UnmarshalString(response.MediaDuration); err != nil {
-		return
-	}
-	if CurrentURI, err = soap.UnmarshalString(response.CurrentURI); err != nil {
-		return
-	}
-	if CurrentURIMetaData, err = soap.UnmarshalString(response.CurrentURIMetaData); err != nil {
-		return
-	}
-	if NextURI, err = soap.UnmarshalString(response.NextURI); err != nil {
-		return
-	}
-	if NextURIMetaData, err = soap.UnmarshalString(response.NextURIMetaData); err != nil {
-		return
-	}
-	if PlayMedium, err = soap.UnmarshalString(response.PlayMedium); err != nil {
-		return
-	}
-	if RecordMedium, err = soap.UnmarshalString(response.RecordMedium); err != nil {
-		return
-	}
-	if WriteStatus, err = soap.UnmarshalString(response.WriteStatus); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentType: allowed values: NO_MEDIA, TRACK_AWARE, TRACK_UNAWARE
-//
-// * NrTracks: allowed value range: minimum=0
-func (client *AVTransport2) GetMediaInfo_Ext(InstanceID uint32) (CurrentType string, NrTracks uint32, MediaDuration string, CurrentURI string, CurrentURIMetaData string, NextURI string, NextURIMetaData string, PlayMedium string, RecordMedium string, WriteStatus string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentType string
-
-		NrTracks string
-
-		MediaDuration string
-
-		CurrentURI string
-
-		CurrentURIMetaData string
-
-		NextURI string
-
-		NextURIMetaData string
-
-		PlayMedium string
-
-		RecordMedium string
-
-		WriteStatus string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "GetMediaInfo_Ext", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentType, err = soap.UnmarshalString(response.CurrentType); err != nil {
-		return
-	}
-	if NrTracks, err = soap.UnmarshalUi4(response.NrTracks); err != nil {
-		return
-	}
-	if MediaDuration, err = soap.UnmarshalString(response.MediaDuration); err != nil {
-		return
-	}
-	if CurrentURI, err = soap.UnmarshalString(response.CurrentURI); err != nil {
-		return
-	}
-	if CurrentURIMetaData, err = soap.UnmarshalString(response.CurrentURIMetaData); err != nil {
-		return
-	}
-	if NextURI, err = soap.UnmarshalString(response.NextURI); err != nil {
-		return
-	}
-	if NextURIMetaData, err = soap.UnmarshalString(response.NextURIMetaData); err != nil {
-		return
-	}
-	if PlayMedium, err = soap.UnmarshalString(response.PlayMedium); err != nil {
-		return
-	}
-	if RecordMedium, err = soap.UnmarshalString(response.RecordMedium); err != nil {
-		return
-	}
-	if WriteStatus, err = soap.UnmarshalString(response.WriteStatus); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentTransportState: allowed values: STOPPED, PLAYING
-//
-// * CurrentTransportStatus: allowed values: OK, ERROR_OCCURRED
-//
-// * CurrentSpeed: allowed values: 1
-func (client *AVTransport2) GetTransportInfo(InstanceID uint32) (CurrentTransportState string, CurrentTransportStatus string, CurrentSpeed string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentTransportState string
-
-		CurrentTransportStatus string
-
-		CurrentSpeed string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "GetTransportInfo", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentTransportState, err = soap.UnmarshalString(response.CurrentTransportState); err != nil {
-		return
-	}
-	if CurrentTransportStatus, err = soap.UnmarshalString(response.CurrentTransportStatus); err != nil {
-		return
-	}
-	if CurrentSpeed, err = soap.UnmarshalString(response.CurrentSpeed); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * Track: allowed value range: minimum=0, step=1
-func (client *AVTransport2) GetPositionInfo(InstanceID uint32) (Track uint32, TrackDuration string, TrackMetaData string, TrackURI string, RelTime string, AbsTime string, RelCount int32, AbsCount int32, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Track string
-
-		TrackDuration string
-
-		TrackMetaData string
-
-		TrackURI string
-
-		RelTime string
-
-		AbsTime string
-
-		RelCount string
-
-		AbsCount string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "GetPositionInfo", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Track, err = soap.UnmarshalUi4(response.Track); err != nil {
-		return
-	}
-	if TrackDuration, err = soap.UnmarshalString(response.TrackDuration); err != nil {
-		return
-	}
-	if TrackMetaData, err = soap.UnmarshalString(response.TrackMetaData); err != nil {
-		return
-	}
-	if TrackURI, err = soap.UnmarshalString(response.TrackURI); err != nil {
-		return
-	}
-	if RelTime, err = soap.UnmarshalString(response.RelTime); err != nil {
-		return
-	}
-	if AbsTime, err = soap.UnmarshalString(response.AbsTime); err != nil {
-		return
-	}
-	if RelCount, err = soap.UnmarshalI4(response.RelCount); err != nil {
-		return
-	}
-	if AbsCount, err = soap.UnmarshalI4(response.AbsCount); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) GetDeviceCapabilities(InstanceID uint32) (PlayMedia string, RecMedia string, RecQualityModes string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		PlayMedia string
-
-		RecMedia string
-
-		RecQualityModes string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "GetDeviceCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if PlayMedia, err = soap.UnmarshalString(response.PlayMedia); err != nil {
-		return
-	}
-	if RecMedia, err = soap.UnmarshalString(response.RecMedia); err != nil {
-		return
-	}
-	if RecQualityModes, err = soap.UnmarshalString(response.RecQualityModes); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * PlayMode: allowed values: NORMAL
-func (client *AVTransport2) GetTransportSettings(InstanceID uint32) (PlayMode string, RecQualityMode string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		PlayMode string
-
-		RecQualityMode string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "GetTransportSettings", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if PlayMode, err = soap.UnmarshalString(response.PlayMode); err != nil {
-		return
-	}
-	if RecQualityMode, err = soap.UnmarshalString(response.RecQualityMode); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) Stop(InstanceID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "Stop", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Speed: allowed values: 1
-
-func (client *AVTransport2) Play(InstanceID uint32, Speed string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Speed string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Speed, err = soap.MarshalString(Speed); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "Play", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) Pause(InstanceID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "Pause", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) Record(InstanceID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "Record", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Unit: allowed values: TRACK_NR
-
-func (client *AVTransport2) Seek(InstanceID uint32, Unit string, Target string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Unit string
-
-		Target string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Unit, err = soap.MarshalString(Unit); err != nil {
-		return
-	}
-	if request.Target, err = soap.MarshalString(Target); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "Seek", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) Next(InstanceID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "Next", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) Previous(InstanceID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "Previous", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * NewPlayMode: allowed values: NORMAL
-
-func (client *AVTransport2) SetPlayMode(InstanceID uint32, NewPlayMode string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		NewPlayMode string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.NewPlayMode, err = soap.MarshalString(NewPlayMode); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "SetPlayMode", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) SetRecordQualityMode(InstanceID uint32, NewRecordQualityMode string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		NewRecordQualityMode string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.NewRecordQualityMode, err = soap.MarshalString(NewRecordQualityMode); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "SetRecordQualityMode", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) GetCurrentTransportActions(InstanceID uint32) (Actions string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Actions string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "GetCurrentTransportActions", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Actions, err = soap.UnmarshalString(response.Actions); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentDRMState: allowed values: OK
-func (client *AVTransport2) GetDRMState(InstanceID uint32) (CurrentDRMState string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentDRMState string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "GetDRMState", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentDRMState, err = soap.UnmarshalString(response.CurrentDRMState); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) GetStateVariables(InstanceID uint32, StateVariableList string) (StateVariableValuePairs string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		StateVariableList string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.StateVariableList, err = soap.MarshalString(StateVariableList); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		StateVariableValuePairs string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "GetStateVariables", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if StateVariableValuePairs, err = soap.UnmarshalString(response.StateVariableValuePairs); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *AVTransport2) SetStateVariables(InstanceID uint32, AVTransportUDN string, ServiceType string, ServiceId string, StateVariableValuePairs string) (StateVariableList string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		AVTransportUDN string
-
-		ServiceType string
-
-		ServiceId string
-
-		StateVariableValuePairs string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.AVTransportUDN, err = soap.MarshalString(AVTransportUDN); err != nil {
-		return
-	}
-	if request.ServiceType, err = soap.MarshalString(ServiceType); err != nil {
-		return
-	}
-	if request.ServiceId, err = soap.MarshalString(ServiceId); err != nil {
-		return
-	}
-	if request.StateVariableValuePairs, err = soap.MarshalString(StateVariableValuePairs); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		StateVariableList string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_AVTransport_2, "SetStateVariables", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if StateVariableList, err = soap.UnmarshalString(response.StateVariableList); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-// ConnectionManager1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:ConnectionManager:1". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type ConnectionManager1 struct {
-	goupnp.ServiceClient
-}
-
-// NewConnectionManager1Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewConnectionManager1Clients() (clients []*ConnectionManager1, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_ConnectionManager_1); err != nil {
-		return
-	}
-	clients = newConnectionManager1ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewConnectionManager1ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewConnectionManager1ClientsByURL(loc *url.URL) ([]*ConnectionManager1, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_ConnectionManager_1)
-	if err != nil {
-		return nil, err
-	}
-	return newConnectionManager1ClientsFromGenericClients(genericClients), nil
-}
-
-// NewConnectionManager1ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewConnectionManager1ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*ConnectionManager1, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_ConnectionManager_1)
-	if err != nil {
-		return nil, err
-	}
-	return newConnectionManager1ClientsFromGenericClients(genericClients), nil
-}
-
-func newConnectionManager1ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*ConnectionManager1 {
-	clients := make([]*ConnectionManager1, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &ConnectionManager1{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *ConnectionManager1) GetProtocolInfo() (Source string, Sink string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Source string
-
-		Sink string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ConnectionManager_1, "GetProtocolInfo", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Source, err = soap.UnmarshalString(response.Source); err != nil {
-		return
-	}
-	if Sink, err = soap.UnmarshalString(response.Sink); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Direction: allowed values: Input, Output
-
-func (client *ConnectionManager1) PrepareForConnection(RemoteProtocolInfo string, PeerConnectionManager string, PeerConnectionID int32, Direction string) (ConnectionID int32, AVTransportID int32, RcsID int32, err error) {
-	// Request structure.
-	request := &struct {
-		RemoteProtocolInfo string
-
-		PeerConnectionManager string
-
-		PeerConnectionID string
-
-		Direction string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RemoteProtocolInfo, err = soap.MarshalString(RemoteProtocolInfo); err != nil {
-		return
-	}
-	if request.PeerConnectionManager, err = soap.MarshalString(PeerConnectionManager); err != nil {
-		return
-	}
-	if request.PeerConnectionID, err = soap.MarshalI4(PeerConnectionID); err != nil {
-		return
-	}
-	if request.Direction, err = soap.MarshalString(Direction); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		ConnectionID string
-
-		AVTransportID string
-
-		RcsID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ConnectionManager_1, "PrepareForConnection", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if ConnectionID, err = soap.UnmarshalI4(response.ConnectionID); err != nil {
-		return
-	}
-	if AVTransportID, err = soap.UnmarshalI4(response.AVTransportID); err != nil {
-		return
-	}
-	if RcsID, err = soap.UnmarshalI4(response.RcsID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ConnectionManager1) ConnectionComplete(ConnectionID int32) (err error) {
-	// Request structure.
-	request := &struct {
-		ConnectionID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ConnectionID, err = soap.MarshalI4(ConnectionID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ConnectionManager_1, "ConnectionComplete", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ConnectionManager1) GetCurrentConnectionIDs() (ConnectionIDs string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		ConnectionIDs string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ConnectionManager_1, "GetCurrentConnectionIDs", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if ConnectionIDs, err = soap.UnmarshalString(response.ConnectionIDs); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * Direction: allowed values: Input, Output
-//
-// * Status: allowed values: OK, ContentFormatMismatch, InsufficientBandwidth, UnreliableChannel, Unknown
-func (client *ConnectionManager1) GetCurrentConnectionInfo(ConnectionID int32) (RcsID int32, AVTransportID int32, ProtocolInfo string, PeerConnectionManager string, PeerConnectionID int32, Direction string, Status string, err error) {
-	// Request structure.
-	request := &struct {
-		ConnectionID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ConnectionID, err = soap.MarshalI4(ConnectionID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		RcsID string
-
-		AVTransportID string
-
-		ProtocolInfo string
-
-		PeerConnectionManager string
-
-		PeerConnectionID string
-
-		Direction string
-
-		Status string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ConnectionManager_1, "GetCurrentConnectionInfo", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if RcsID, err = soap.UnmarshalI4(response.RcsID); err != nil {
-		return
-	}
-	if AVTransportID, err = soap.UnmarshalI4(response.AVTransportID); err != nil {
-		return
-	}
-	if ProtocolInfo, err = soap.UnmarshalString(response.ProtocolInfo); err != nil {
-		return
-	}
-	if PeerConnectionManager, err = soap.UnmarshalString(response.PeerConnectionManager); err != nil {
-		return
-	}
-	if PeerConnectionID, err = soap.UnmarshalI4(response.PeerConnectionID); err != nil {
-		return
-	}
-	if Direction, err = soap.UnmarshalString(response.Direction); err != nil {
-		return
-	}
-	if Status, err = soap.UnmarshalString(response.Status); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-// ConnectionManager2 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:ConnectionManager:2". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type ConnectionManager2 struct {
-	goupnp.ServiceClient
-}
-
-// NewConnectionManager2Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewConnectionManager2Clients() (clients []*ConnectionManager2, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_ConnectionManager_2); err != nil {
-		return
-	}
-	clients = newConnectionManager2ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewConnectionManager2ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewConnectionManager2ClientsByURL(loc *url.URL) ([]*ConnectionManager2, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_ConnectionManager_2)
-	if err != nil {
-		return nil, err
-	}
-	return newConnectionManager2ClientsFromGenericClients(genericClients), nil
-}
-
-// NewConnectionManager2ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewConnectionManager2ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*ConnectionManager2, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_ConnectionManager_2)
-	if err != nil {
-		return nil, err
-	}
-	return newConnectionManager2ClientsFromGenericClients(genericClients), nil
-}
-
-func newConnectionManager2ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*ConnectionManager2 {
-	clients := make([]*ConnectionManager2, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &ConnectionManager2{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *ConnectionManager2) GetProtocolInfo() (Source string, Sink string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Source string
-
-		Sink string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ConnectionManager_2, "GetProtocolInfo", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Source, err = soap.UnmarshalString(response.Source); err != nil {
-		return
-	}
-	if Sink, err = soap.UnmarshalString(response.Sink); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Direction: allowed values: Input, Output
-
-func (client *ConnectionManager2) PrepareForConnection(RemoteProtocolInfo string, PeerConnectionManager string, PeerConnectionID int32, Direction string) (ConnectionID int32, AVTransportID int32, RcsID int32, err error) {
-	// Request structure.
-	request := &struct {
-		RemoteProtocolInfo string
-
-		PeerConnectionManager string
-
-		PeerConnectionID string
-
-		Direction string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RemoteProtocolInfo, err = soap.MarshalString(RemoteProtocolInfo); err != nil {
-		return
-	}
-	if request.PeerConnectionManager, err = soap.MarshalString(PeerConnectionManager); err != nil {
-		return
-	}
-	if request.PeerConnectionID, err = soap.MarshalI4(PeerConnectionID); err != nil {
-		return
-	}
-	if request.Direction, err = soap.MarshalString(Direction); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		ConnectionID string
-
-		AVTransportID string
-
-		RcsID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ConnectionManager_2, "PrepareForConnection", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if ConnectionID, err = soap.UnmarshalI4(response.ConnectionID); err != nil {
-		return
-	}
-	if AVTransportID, err = soap.UnmarshalI4(response.AVTransportID); err != nil {
-		return
-	}
-	if RcsID, err = soap.UnmarshalI4(response.RcsID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ConnectionManager2) ConnectionComplete(ConnectionID int32) (err error) {
-	// Request structure.
-	request := &struct {
-		ConnectionID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ConnectionID, err = soap.MarshalI4(ConnectionID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ConnectionManager_2, "ConnectionComplete", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ConnectionManager2) GetCurrentConnectionIDs() (ConnectionIDs string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		ConnectionIDs string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ConnectionManager_2, "GetCurrentConnectionIDs", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if ConnectionIDs, err = soap.UnmarshalString(response.ConnectionIDs); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * Direction: allowed values: Input, Output
-//
-// * Status: allowed values: OK, ContentFormatMismatch, InsufficientBandwidth, UnreliableChannel, Unknown
-func (client *ConnectionManager2) GetCurrentConnectionInfo(ConnectionID int32) (RcsID int32, AVTransportID int32, ProtocolInfo string, PeerConnectionManager string, PeerConnectionID int32, Direction string, Status string, err error) {
-	// Request structure.
-	request := &struct {
-		ConnectionID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ConnectionID, err = soap.MarshalI4(ConnectionID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		RcsID string
-
-		AVTransportID string
-
-		ProtocolInfo string
-
-		PeerConnectionManager string
-
-		PeerConnectionID string
-
-		Direction string
-
-		Status string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ConnectionManager_2, "GetCurrentConnectionInfo", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if RcsID, err = soap.UnmarshalI4(response.RcsID); err != nil {
-		return
-	}
-	if AVTransportID, err = soap.UnmarshalI4(response.AVTransportID); err != nil {
-		return
-	}
-	if ProtocolInfo, err = soap.UnmarshalString(response.ProtocolInfo); err != nil {
-		return
-	}
-	if PeerConnectionManager, err = soap.UnmarshalString(response.PeerConnectionManager); err != nil {
-		return
-	}
-	if PeerConnectionID, err = soap.UnmarshalI4(response.PeerConnectionID); err != nil {
-		return
-	}
-	if Direction, err = soap.UnmarshalString(response.Direction); err != nil {
-		return
-	}
-	if Status, err = soap.UnmarshalString(response.Status); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-// ContentDirectory1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:ContentDirectory:1". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type ContentDirectory1 struct {
-	goupnp.ServiceClient
-}
-
-// NewContentDirectory1Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewContentDirectory1Clients() (clients []*ContentDirectory1, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_ContentDirectory_1); err != nil {
-		return
-	}
-	clients = newContentDirectory1ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewContentDirectory1ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewContentDirectory1ClientsByURL(loc *url.URL) ([]*ContentDirectory1, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_ContentDirectory_1)
-	if err != nil {
-		return nil, err
-	}
-	return newContentDirectory1ClientsFromGenericClients(genericClients), nil
-}
-
-// NewContentDirectory1ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewContentDirectory1ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*ContentDirectory1, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_ContentDirectory_1)
-	if err != nil {
-		return nil, err
-	}
-	return newContentDirectory1ClientsFromGenericClients(genericClients), nil
-}
-
-func newContentDirectory1ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*ContentDirectory1 {
-	clients := make([]*ContentDirectory1, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &ContentDirectory1{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *ContentDirectory1) GetSearchCapabilities() (SearchCaps string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		SearchCaps string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "GetSearchCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if SearchCaps, err = soap.UnmarshalString(response.SearchCaps); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) GetSortCapabilities() (SortCaps string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		SortCaps string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "GetSortCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if SortCaps, err = soap.UnmarshalString(response.SortCaps); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) GetSystemUpdateID() (Id uint32, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Id string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "GetSystemUpdateID", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Id, err = soap.UnmarshalUi4(response.Id); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * BrowseFlag: allowed values: BrowseMetadata, BrowseDirectChildren
-
-func (client *ContentDirectory1) Browse(ObjectID string, BrowseFlag string, Filter string, StartingIndex uint32, RequestedCount uint32, SortCriteria string) (Result string, NumberReturned uint32, TotalMatches uint32, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-
-		BrowseFlag string
-
-		Filter string
-
-		StartingIndex string
-
-		RequestedCount string
-
-		SortCriteria string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	if request.BrowseFlag, err = soap.MarshalString(BrowseFlag); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	if request.StartingIndex, err = soap.MarshalUi4(StartingIndex); err != nil {
-		return
-	}
-	if request.RequestedCount, err = soap.MarshalUi4(RequestedCount); err != nil {
-		return
-	}
-	if request.SortCriteria, err = soap.MarshalString(SortCriteria); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		NumberReturned string
-
-		TotalMatches string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "Browse", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if NumberReturned, err = soap.UnmarshalUi4(response.NumberReturned); err != nil {
-		return
-	}
-	if TotalMatches, err = soap.UnmarshalUi4(response.TotalMatches); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) Search(ContainerID string, SearchCriteria string, Filter string, StartingIndex uint32, RequestedCount uint32, SortCriteria string) (Result string, NumberReturned uint32, TotalMatches uint32, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		ContainerID string
-
-		SearchCriteria string
-
-		Filter string
-
-		StartingIndex string
-
-		RequestedCount string
-
-		SortCriteria string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ContainerID, err = soap.MarshalString(ContainerID); err != nil {
-		return
-	}
-	if request.SearchCriteria, err = soap.MarshalString(SearchCriteria); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	if request.StartingIndex, err = soap.MarshalUi4(StartingIndex); err != nil {
-		return
-	}
-	if request.RequestedCount, err = soap.MarshalUi4(RequestedCount); err != nil {
-		return
-	}
-	if request.SortCriteria, err = soap.MarshalString(SortCriteria); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		NumberReturned string
-
-		TotalMatches string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "Search", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if NumberReturned, err = soap.UnmarshalUi4(response.NumberReturned); err != nil {
-		return
-	}
-	if TotalMatches, err = soap.UnmarshalUi4(response.TotalMatches); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) CreateObject(ContainerID string, Elements string) (ObjectID string, Result string, err error) {
-	// Request structure.
-	request := &struct {
-		ContainerID string
-
-		Elements string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ContainerID, err = soap.MarshalString(ContainerID); err != nil {
-		return
-	}
-	if request.Elements, err = soap.MarshalString(Elements); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		ObjectID string
-
-		Result string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "CreateObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if ObjectID, err = soap.UnmarshalString(response.ObjectID); err != nil {
-		return
-	}
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) DestroyObject(ObjectID string) (err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "DestroyObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) UpdateObject(ObjectID string, CurrentTagValue string, NewTagValue string) (err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-
-		CurrentTagValue string
-
-		NewTagValue string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	if request.CurrentTagValue, err = soap.MarshalString(CurrentTagValue); err != nil {
-		return
-	}
-	if request.NewTagValue, err = soap.MarshalString(NewTagValue); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "UpdateObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) ImportResource(SourceURI *url.URL, DestinationURI *url.URL) (TransferID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		SourceURI string
-
-		DestinationURI string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.SourceURI, err = soap.MarshalURI(SourceURI); err != nil {
-		return
-	}
-	if request.DestinationURI, err = soap.MarshalURI(DestinationURI); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		TransferID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "ImportResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if TransferID, err = soap.UnmarshalUi4(response.TransferID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) ExportResource(SourceURI *url.URL, DestinationURI *url.URL) (TransferID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		SourceURI string
-
-		DestinationURI string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.SourceURI, err = soap.MarshalURI(SourceURI); err != nil {
-		return
-	}
-	if request.DestinationURI, err = soap.MarshalURI(DestinationURI); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		TransferID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "ExportResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if TransferID, err = soap.UnmarshalUi4(response.TransferID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) StopTransferResource(TransferID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		TransferID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.TransferID, err = soap.MarshalUi4(TransferID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "StopTransferResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * TransferStatus: allowed values: COMPLETED, ERROR, IN_PROGRESS, STOPPED
-func (client *ContentDirectory1) GetTransferProgress(TransferID uint32) (TransferStatus string, TransferLength string, TransferTotal string, err error) {
-	// Request structure.
-	request := &struct {
-		TransferID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.TransferID, err = soap.MarshalUi4(TransferID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		TransferStatus string
-
-		TransferLength string
-
-		TransferTotal string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "GetTransferProgress", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if TransferStatus, err = soap.UnmarshalString(response.TransferStatus); err != nil {
-		return
-	}
-	if TransferLength, err = soap.UnmarshalString(response.TransferLength); err != nil {
-		return
-	}
-	if TransferTotal, err = soap.UnmarshalString(response.TransferTotal); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) DeleteResource(ResourceURI *url.URL) (err error) {
-	// Request structure.
-	request := &struct {
-		ResourceURI string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ResourceURI, err = soap.MarshalURI(ResourceURI); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "DeleteResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory1) CreateReference(ContainerID string, ObjectID string) (NewID string, err error) {
-	// Request structure.
-	request := &struct {
-		ContainerID string
-
-		ObjectID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ContainerID, err = soap.MarshalString(ContainerID); err != nil {
-		return
-	}
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		NewID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_1, "CreateReference", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if NewID, err = soap.UnmarshalString(response.NewID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-// ContentDirectory2 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:ContentDirectory:2". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type ContentDirectory2 struct {
-	goupnp.ServiceClient
-}
-
-// NewContentDirectory2Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewContentDirectory2Clients() (clients []*ContentDirectory2, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_ContentDirectory_2); err != nil {
-		return
-	}
-	clients = newContentDirectory2ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewContentDirectory2ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewContentDirectory2ClientsByURL(loc *url.URL) ([]*ContentDirectory2, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_ContentDirectory_2)
-	if err != nil {
-		return nil, err
-	}
-	return newContentDirectory2ClientsFromGenericClients(genericClients), nil
-}
-
-// NewContentDirectory2ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewContentDirectory2ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*ContentDirectory2, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_ContentDirectory_2)
-	if err != nil {
-		return nil, err
-	}
-	return newContentDirectory2ClientsFromGenericClients(genericClients), nil
-}
-
-func newContentDirectory2ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*ContentDirectory2 {
-	clients := make([]*ContentDirectory2, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &ContentDirectory2{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *ContentDirectory2) GetSearchCapabilities() (SearchCaps string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		SearchCaps string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "GetSearchCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if SearchCaps, err = soap.UnmarshalString(response.SearchCaps); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) GetSortCapabilities() (SortCaps string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		SortCaps string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "GetSortCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if SortCaps, err = soap.UnmarshalString(response.SortCaps); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) GetSortExtensionCapabilities() (SortExtensionCaps string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		SortExtensionCaps string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "GetSortExtensionCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if SortExtensionCaps, err = soap.UnmarshalString(response.SortExtensionCaps); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) GetFeatureList() (FeatureList string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		FeatureList string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "GetFeatureList", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if FeatureList, err = soap.UnmarshalString(response.FeatureList); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) GetSystemUpdateID() (Id uint32, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Id string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "GetSystemUpdateID", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Id, err = soap.UnmarshalUi4(response.Id); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * BrowseFlag: allowed values: BrowseMetadata, BrowseDirectChildren
-
-func (client *ContentDirectory2) Browse(ObjectID string, BrowseFlag string, Filter string, StartingIndex uint32, RequestedCount uint32, SortCriteria string) (Result string, NumberReturned uint32, TotalMatches uint32, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-
-		BrowseFlag string
-
-		Filter string
-
-		StartingIndex string
-
-		RequestedCount string
-
-		SortCriteria string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	if request.BrowseFlag, err = soap.MarshalString(BrowseFlag); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	if request.StartingIndex, err = soap.MarshalUi4(StartingIndex); err != nil {
-		return
-	}
-	if request.RequestedCount, err = soap.MarshalUi4(RequestedCount); err != nil {
-		return
-	}
-	if request.SortCriteria, err = soap.MarshalString(SortCriteria); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		NumberReturned string
-
-		TotalMatches string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "Browse", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if NumberReturned, err = soap.UnmarshalUi4(response.NumberReturned); err != nil {
-		return
-	}
-	if TotalMatches, err = soap.UnmarshalUi4(response.TotalMatches); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) Search(ContainerID string, SearchCriteria string, Filter string, StartingIndex uint32, RequestedCount uint32, SortCriteria string) (Result string, NumberReturned uint32, TotalMatches uint32, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		ContainerID string
-
-		SearchCriteria string
-
-		Filter string
-
-		StartingIndex string
-
-		RequestedCount string
-
-		SortCriteria string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ContainerID, err = soap.MarshalString(ContainerID); err != nil {
-		return
-	}
-	if request.SearchCriteria, err = soap.MarshalString(SearchCriteria); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	if request.StartingIndex, err = soap.MarshalUi4(StartingIndex); err != nil {
-		return
-	}
-	if request.RequestedCount, err = soap.MarshalUi4(RequestedCount); err != nil {
-		return
-	}
-	if request.SortCriteria, err = soap.MarshalString(SortCriteria); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		NumberReturned string
-
-		TotalMatches string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "Search", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if NumberReturned, err = soap.UnmarshalUi4(response.NumberReturned); err != nil {
-		return
-	}
-	if TotalMatches, err = soap.UnmarshalUi4(response.TotalMatches); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) CreateObject(ContainerID string, Elements string) (ObjectID string, Result string, err error) {
-	// Request structure.
-	request := &struct {
-		ContainerID string
-
-		Elements string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ContainerID, err = soap.MarshalString(ContainerID); err != nil {
-		return
-	}
-	if request.Elements, err = soap.MarshalString(Elements); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		ObjectID string
-
-		Result string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "CreateObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if ObjectID, err = soap.UnmarshalString(response.ObjectID); err != nil {
-		return
-	}
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) DestroyObject(ObjectID string) (err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "DestroyObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) UpdateObject(ObjectID string, CurrentTagValue string, NewTagValue string) (err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-
-		CurrentTagValue string
-
-		NewTagValue string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	if request.CurrentTagValue, err = soap.MarshalString(CurrentTagValue); err != nil {
-		return
-	}
-	if request.NewTagValue, err = soap.MarshalString(NewTagValue); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "UpdateObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) MoveObject(ObjectID string, NewParentID string) (NewObjectID string, err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-
-		NewParentID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	if request.NewParentID, err = soap.MarshalString(NewParentID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		NewObjectID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "MoveObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if NewObjectID, err = soap.UnmarshalString(response.NewObjectID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) ImportResource(SourceURI *url.URL, DestinationURI *url.URL) (TransferID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		SourceURI string
-
-		DestinationURI string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.SourceURI, err = soap.MarshalURI(SourceURI); err != nil {
-		return
-	}
-	if request.DestinationURI, err = soap.MarshalURI(DestinationURI); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		TransferID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "ImportResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if TransferID, err = soap.UnmarshalUi4(response.TransferID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) ExportResource(SourceURI *url.URL, DestinationURI *url.URL) (TransferID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		SourceURI string
-
-		DestinationURI string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.SourceURI, err = soap.MarshalURI(SourceURI); err != nil {
-		return
-	}
-	if request.DestinationURI, err = soap.MarshalURI(DestinationURI); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		TransferID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "ExportResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if TransferID, err = soap.UnmarshalUi4(response.TransferID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) DeleteResource(ResourceURI *url.URL) (err error) {
-	// Request structure.
-	request := &struct {
-		ResourceURI string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ResourceURI, err = soap.MarshalURI(ResourceURI); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "DeleteResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) StopTransferResource(TransferID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		TransferID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.TransferID, err = soap.MarshalUi4(TransferID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "StopTransferResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * TransferStatus: allowed values: COMPLETED, ERROR, IN_PROGRESS, STOPPED
-func (client *ContentDirectory2) GetTransferProgress(TransferID uint32) (TransferStatus string, TransferLength string, TransferTotal string, err error) {
-	// Request structure.
-	request := &struct {
-		TransferID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.TransferID, err = soap.MarshalUi4(TransferID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		TransferStatus string
-
-		TransferLength string
-
-		TransferTotal string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "GetTransferProgress", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if TransferStatus, err = soap.UnmarshalString(response.TransferStatus); err != nil {
-		return
-	}
-	if TransferLength, err = soap.UnmarshalString(response.TransferLength); err != nil {
-		return
-	}
-	if TransferTotal, err = soap.UnmarshalString(response.TransferTotal); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory2) CreateReference(ContainerID string, ObjectID string) (NewID string, err error) {
-	// Request structure.
-	request := &struct {
-		ContainerID string
-
-		ObjectID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ContainerID, err = soap.MarshalString(ContainerID); err != nil {
-		return
-	}
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		NewID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_2, "CreateReference", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if NewID, err = soap.UnmarshalString(response.NewID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-// ContentDirectory3 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:ContentDirectory:3". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type ContentDirectory3 struct {
-	goupnp.ServiceClient
-}
-
-// NewContentDirectory3Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewContentDirectory3Clients() (clients []*ContentDirectory3, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_ContentDirectory_3); err != nil {
-		return
-	}
-	clients = newContentDirectory3ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewContentDirectory3ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewContentDirectory3ClientsByURL(loc *url.URL) ([]*ContentDirectory3, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_ContentDirectory_3)
-	if err != nil {
-		return nil, err
-	}
-	return newContentDirectory3ClientsFromGenericClients(genericClients), nil
-}
-
-// NewContentDirectory3ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewContentDirectory3ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*ContentDirectory3, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_ContentDirectory_3)
-	if err != nil {
-		return nil, err
-	}
-	return newContentDirectory3ClientsFromGenericClients(genericClients), nil
-}
-
-func newContentDirectory3ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*ContentDirectory3 {
-	clients := make([]*ContentDirectory3, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &ContentDirectory3{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *ContentDirectory3) GetSearchCapabilities() (SearchCaps string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		SearchCaps string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "GetSearchCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if SearchCaps, err = soap.UnmarshalString(response.SearchCaps); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) GetSortCapabilities() (SortCaps string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		SortCaps string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "GetSortCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if SortCaps, err = soap.UnmarshalString(response.SortCaps); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) GetSortExtensionCapabilities() (SortExtensionCaps string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		SortExtensionCaps string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "GetSortExtensionCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if SortExtensionCaps, err = soap.UnmarshalString(response.SortExtensionCaps); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) GetFeatureList() (FeatureList string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		FeatureList string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "GetFeatureList", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if FeatureList, err = soap.UnmarshalString(response.FeatureList); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) GetSystemUpdateID() (Id uint32, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Id string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "GetSystemUpdateID", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Id, err = soap.UnmarshalUi4(response.Id); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) GetServiceResetToken() (ResetToken string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		ResetToken string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "GetServiceResetToken", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if ResetToken, err = soap.UnmarshalString(response.ResetToken); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * BrowseFlag: allowed values: BrowseMetadata, BrowseDirectChildren
-
-func (client *ContentDirectory3) Browse(ObjectID string, BrowseFlag string, Filter string, StartingIndex uint32, RequestedCount uint32, SortCriteria string) (Result string, NumberReturned uint32, TotalMatches uint32, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-
-		BrowseFlag string
-
-		Filter string
-
-		StartingIndex string
-
-		RequestedCount string
-
-		SortCriteria string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	if request.BrowseFlag, err = soap.MarshalString(BrowseFlag); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	if request.StartingIndex, err = soap.MarshalUi4(StartingIndex); err != nil {
-		return
-	}
-	if request.RequestedCount, err = soap.MarshalUi4(RequestedCount); err != nil {
-		return
-	}
-	if request.SortCriteria, err = soap.MarshalString(SortCriteria); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		NumberReturned string
-
-		TotalMatches string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "Browse", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if NumberReturned, err = soap.UnmarshalUi4(response.NumberReturned); err != nil {
-		return
-	}
-	if TotalMatches, err = soap.UnmarshalUi4(response.TotalMatches); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) Search(ContainerID string, SearchCriteria string, Filter string, StartingIndex uint32, RequestedCount uint32, SortCriteria string) (Result string, NumberReturned uint32, TotalMatches uint32, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		ContainerID string
-
-		SearchCriteria string
-
-		Filter string
-
-		StartingIndex string
-
-		RequestedCount string
-
-		SortCriteria string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ContainerID, err = soap.MarshalString(ContainerID); err != nil {
-		return
-	}
-	if request.SearchCriteria, err = soap.MarshalString(SearchCriteria); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	if request.StartingIndex, err = soap.MarshalUi4(StartingIndex); err != nil {
-		return
-	}
-	if request.RequestedCount, err = soap.MarshalUi4(RequestedCount); err != nil {
-		return
-	}
-	if request.SortCriteria, err = soap.MarshalString(SortCriteria); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		NumberReturned string
-
-		TotalMatches string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "Search", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if NumberReturned, err = soap.UnmarshalUi4(response.NumberReturned); err != nil {
-		return
-	}
-	if TotalMatches, err = soap.UnmarshalUi4(response.TotalMatches); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) CreateObject(ContainerID string, Elements string) (ObjectID string, Result string, err error) {
-	// Request structure.
-	request := &struct {
-		ContainerID string
-
-		Elements string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ContainerID, err = soap.MarshalString(ContainerID); err != nil {
-		return
-	}
-	if request.Elements, err = soap.MarshalString(Elements); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		ObjectID string
-
-		Result string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "CreateObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if ObjectID, err = soap.UnmarshalString(response.ObjectID); err != nil {
-		return
-	}
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) DestroyObject(ObjectID string) (err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "DestroyObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) UpdateObject(ObjectID string, CurrentTagValue string, NewTagValue string) (err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-
-		CurrentTagValue string
-
-		NewTagValue string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	if request.CurrentTagValue, err = soap.MarshalString(CurrentTagValue); err != nil {
-		return
-	}
-	if request.NewTagValue, err = soap.MarshalString(NewTagValue); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "UpdateObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) MoveObject(ObjectID string, NewParentID string) (NewObjectID string, err error) {
-	// Request structure.
-	request := &struct {
-		ObjectID string
-
-		NewParentID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	if request.NewParentID, err = soap.MarshalString(NewParentID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		NewObjectID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "MoveObject", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if NewObjectID, err = soap.UnmarshalString(response.NewObjectID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) ImportResource(SourceURI *url.URL, DestinationURI *url.URL) (TransferID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		SourceURI string
-
-		DestinationURI string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.SourceURI, err = soap.MarshalURI(SourceURI); err != nil {
-		return
-	}
-	if request.DestinationURI, err = soap.MarshalURI(DestinationURI); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		TransferID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "ImportResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if TransferID, err = soap.UnmarshalUi4(response.TransferID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) ExportResource(SourceURI *url.URL, DestinationURI *url.URL) (TransferID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		SourceURI string
-
-		DestinationURI string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.SourceURI, err = soap.MarshalURI(SourceURI); err != nil {
-		return
-	}
-	if request.DestinationURI, err = soap.MarshalURI(DestinationURI); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		TransferID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "ExportResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if TransferID, err = soap.UnmarshalUi4(response.TransferID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) DeleteResource(ResourceURI *url.URL) (err error) {
-	// Request structure.
-	request := &struct {
-		ResourceURI string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ResourceURI, err = soap.MarshalURI(ResourceURI); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "DeleteResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) StopTransferResource(TransferID uint32) (err error) {
-	// Request structure.
-	request := &struct {
-		TransferID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.TransferID, err = soap.MarshalUi4(TransferID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "StopTransferResource", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * TransferStatus: allowed values: COMPLETED, ERROR, IN_PROGRESS, STOPPED
-func (client *ContentDirectory3) GetTransferProgress(TransferID uint32) (TransferStatus string, TransferLength string, TransferTotal string, err error) {
-	// Request structure.
-	request := &struct {
-		TransferID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.TransferID, err = soap.MarshalUi4(TransferID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		TransferStatus string
-
-		TransferLength string
-
-		TransferTotal string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "GetTransferProgress", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if TransferStatus, err = soap.UnmarshalString(response.TransferStatus); err != nil {
-		return
-	}
-	if TransferLength, err = soap.UnmarshalString(response.TransferLength); err != nil {
-		return
-	}
-	if TransferTotal, err = soap.UnmarshalString(response.TransferTotal); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) CreateReference(ContainerID string, ObjectID string) (NewID string, err error) {
-	// Request structure.
-	request := &struct {
-		ContainerID string
-
-		ObjectID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ContainerID, err = soap.MarshalString(ContainerID); err != nil {
-		return
-	}
-	if request.ObjectID, err = soap.MarshalString(ObjectID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		NewID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "CreateReference", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if NewID, err = soap.UnmarshalString(response.NewID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) FreeFormQuery(ContainerID string, CDSView uint32, QueryRequest string) (QueryResult string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		ContainerID string
-
-		CDSView string
-
-		QueryRequest string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.ContainerID, err = soap.MarshalString(ContainerID); err != nil {
-		return
-	}
-	if request.CDSView, err = soap.MarshalUi4(CDSView); err != nil {
-		return
-	}
-	if request.QueryRequest, err = soap.MarshalString(QueryRequest); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		QueryResult string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "FreeFormQuery", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if QueryResult, err = soap.UnmarshalString(response.QueryResult); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ContentDirectory3) GetFreeFormQueryCapabilities() (FFQCapabilities string, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		FFQCapabilities string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ContentDirectory_3, "GetFreeFormQueryCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if FFQCapabilities, err = soap.UnmarshalString(response.FFQCapabilities); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-// RenderingControl1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:RenderingControl:1". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type RenderingControl1 struct {
-	goupnp.ServiceClient
-}
-
-// NewRenderingControl1Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewRenderingControl1Clients() (clients []*RenderingControl1, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_RenderingControl_1); err != nil {
-		return
-	}
-	clients = newRenderingControl1ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewRenderingControl1ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewRenderingControl1ClientsByURL(loc *url.URL) ([]*RenderingControl1, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_RenderingControl_1)
-	if err != nil {
-		return nil, err
-	}
-	return newRenderingControl1ClientsFromGenericClients(genericClients), nil
-}
-
-// NewRenderingControl1ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewRenderingControl1ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*RenderingControl1, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_RenderingControl_1)
-	if err != nil {
-		return nil, err
-	}
-	return newRenderingControl1ClientsFromGenericClients(genericClients), nil
-}
-
-func newRenderingControl1ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*RenderingControl1 {
-	clients := make([]*RenderingControl1, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &RenderingControl1{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *RenderingControl1) ListPresets(InstanceID uint32) (CurrentPresetNameList string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentPresetNameList string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "ListPresets", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentPresetNameList, err = soap.UnmarshalString(response.CurrentPresetNameList); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * PresetName: allowed values: FactoryDefaults
-
-func (client *RenderingControl1) SelectPreset(InstanceID uint32, PresetName string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		PresetName string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.PresetName, err = soap.MarshalString(PresetName); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SelectPreset", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentBrightness: allowed value range: minimum=0, step=1
-func (client *RenderingControl1) GetBrightness(InstanceID uint32) (CurrentBrightness uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentBrightness string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetBrightness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentBrightness, err = soap.UnmarshalUi2(response.CurrentBrightness); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredBrightness: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl1) SetBrightness(InstanceID uint32, DesiredBrightness uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredBrightness string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredBrightness, err = soap.MarshalUi2(DesiredBrightness); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetBrightness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentContrast: allowed value range: minimum=0, step=1
-func (client *RenderingControl1) GetContrast(InstanceID uint32) (CurrentContrast uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentContrast string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetContrast", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentContrast, err = soap.UnmarshalUi2(response.CurrentContrast); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredContrast: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl1) SetContrast(InstanceID uint32, DesiredContrast uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredContrast string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredContrast, err = soap.MarshalUi2(DesiredContrast); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetContrast", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentSharpness: allowed value range: minimum=0, step=1
-func (client *RenderingControl1) GetSharpness(InstanceID uint32) (CurrentSharpness uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentSharpness string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetSharpness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentSharpness, err = soap.UnmarshalUi2(response.CurrentSharpness); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredSharpness: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl1) SetSharpness(InstanceID uint32, DesiredSharpness uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredSharpness string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredSharpness, err = soap.MarshalUi2(DesiredSharpness); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetSharpness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *RenderingControl1) GetRedVideoGain(InstanceID uint32) (CurrentRedVideoGain uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentRedVideoGain string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetRedVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentRedVideoGain, err = soap.UnmarshalUi2(response.CurrentRedVideoGain); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *RenderingControl1) SetRedVideoGain(InstanceID uint32, DesiredRedVideoGain uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredRedVideoGain string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredRedVideoGain, err = soap.MarshalUi2(DesiredRedVideoGain); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetRedVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentGreenVideoGain: allowed value range: minimum=0, step=1
-func (client *RenderingControl1) GetGreenVideoGain(InstanceID uint32) (CurrentGreenVideoGain uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentGreenVideoGain string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetGreenVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentGreenVideoGain, err = soap.UnmarshalUi2(response.CurrentGreenVideoGain); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredGreenVideoGain: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl1) SetGreenVideoGain(InstanceID uint32, DesiredGreenVideoGain uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredGreenVideoGain string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredGreenVideoGain, err = soap.MarshalUi2(DesiredGreenVideoGain); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetGreenVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentBlueVideoGain: allowed value range: minimum=0, step=1
-func (client *RenderingControl1) GetBlueVideoGain(InstanceID uint32) (CurrentBlueVideoGain uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentBlueVideoGain string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetBlueVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentBlueVideoGain, err = soap.UnmarshalUi2(response.CurrentBlueVideoGain); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredBlueVideoGain: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl1) SetBlueVideoGain(InstanceID uint32, DesiredBlueVideoGain uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredBlueVideoGain string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredBlueVideoGain, err = soap.MarshalUi2(DesiredBlueVideoGain); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetBlueVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentRedVideoBlackLevel: allowed value range: minimum=0, step=1
-func (client *RenderingControl1) GetRedVideoBlackLevel(InstanceID uint32) (CurrentRedVideoBlackLevel uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentRedVideoBlackLevel string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetRedVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentRedVideoBlackLevel, err = soap.UnmarshalUi2(response.CurrentRedVideoBlackLevel); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredRedVideoBlackLevel: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl1) SetRedVideoBlackLevel(InstanceID uint32, DesiredRedVideoBlackLevel uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredRedVideoBlackLevel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredRedVideoBlackLevel, err = soap.MarshalUi2(DesiredRedVideoBlackLevel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetRedVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentGreenVideoBlackLevel: allowed value range: minimum=0, step=1
-func (client *RenderingControl1) GetGreenVideoBlackLevel(InstanceID uint32) (CurrentGreenVideoBlackLevel uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentGreenVideoBlackLevel string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetGreenVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentGreenVideoBlackLevel, err = soap.UnmarshalUi2(response.CurrentGreenVideoBlackLevel); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredGreenVideoBlackLevel: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl1) SetGreenVideoBlackLevel(InstanceID uint32, DesiredGreenVideoBlackLevel uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredGreenVideoBlackLevel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredGreenVideoBlackLevel, err = soap.MarshalUi2(DesiredGreenVideoBlackLevel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetGreenVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentBlueVideoBlackLevel: allowed value range: minimum=0, step=1
-func (client *RenderingControl1) GetBlueVideoBlackLevel(InstanceID uint32) (CurrentBlueVideoBlackLevel uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentBlueVideoBlackLevel string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetBlueVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentBlueVideoBlackLevel, err = soap.UnmarshalUi2(response.CurrentBlueVideoBlackLevel); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredBlueVideoBlackLevel: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl1) SetBlueVideoBlackLevel(InstanceID uint32, DesiredBlueVideoBlackLevel uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredBlueVideoBlackLevel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredBlueVideoBlackLevel, err = soap.MarshalUi2(DesiredBlueVideoBlackLevel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetBlueVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentColorTemperature: allowed value range: minimum=0, step=1
-func (client *RenderingControl1) GetColorTemperature(InstanceID uint32) (CurrentColorTemperature uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentColorTemperature string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetColorTemperature", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentColorTemperature, err = soap.UnmarshalUi2(response.CurrentColorTemperature); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredColorTemperature: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl1) SetColorTemperature(InstanceID uint32, DesiredColorTemperature uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredColorTemperature string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredColorTemperature, err = soap.MarshalUi2(DesiredColorTemperature); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetColorTemperature", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentHorizontalKeystone: allowed value range: step=1
-func (client *RenderingControl1) GetHorizontalKeystone(InstanceID uint32) (CurrentHorizontalKeystone int16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentHorizontalKeystone string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetHorizontalKeystone", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentHorizontalKeystone, err = soap.UnmarshalI2(response.CurrentHorizontalKeystone); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredHorizontalKeystone: allowed value range: step=1
-
-func (client *RenderingControl1) SetHorizontalKeystone(InstanceID uint32, DesiredHorizontalKeystone int16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredHorizontalKeystone string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredHorizontalKeystone, err = soap.MarshalI2(DesiredHorizontalKeystone); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetHorizontalKeystone", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentVerticalKeystone: allowed value range: step=1
-func (client *RenderingControl1) GetVerticalKeystone(InstanceID uint32) (CurrentVerticalKeystone int16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentVerticalKeystone string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetVerticalKeystone", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentVerticalKeystone, err = soap.UnmarshalI2(response.CurrentVerticalKeystone); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredVerticalKeystone: allowed value range: step=1
-
-func (client *RenderingControl1) SetVerticalKeystone(InstanceID uint32, DesiredVerticalKeystone int16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredVerticalKeystone string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredVerticalKeystone, err = soap.MarshalI2(DesiredVerticalKeystone); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetVerticalKeystone", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl1) GetMute(InstanceID uint32, Channel string) (CurrentMute bool, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentMute string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetMute", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentMute, err = soap.UnmarshalBoolean(response.CurrentMute); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl1) SetMute(InstanceID uint32, Channel string, DesiredMute bool) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-
-		DesiredMute string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	if request.DesiredMute, err = soap.MarshalBoolean(DesiredMute); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetMute", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-//
-// Return values:
-//
-// * CurrentVolume: allowed value range: minimum=0, step=1
-func (client *RenderingControl1) GetVolume(InstanceID uint32, Channel string) (CurrentVolume uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentVolume string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetVolume", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentVolume, err = soap.UnmarshalUi2(response.CurrentVolume); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-//
-// * DesiredVolume: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl1) SetVolume(InstanceID uint32, Channel string, DesiredVolume uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-
-		DesiredVolume string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	if request.DesiredVolume, err = soap.MarshalUi2(DesiredVolume); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetVolume", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl1) GetVolumeDB(InstanceID uint32, Channel string) (CurrentVolume int16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentVolume string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetVolumeDB", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentVolume, err = soap.UnmarshalI2(response.CurrentVolume); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl1) SetVolumeDB(InstanceID uint32, Channel string, DesiredVolume int16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-
-		DesiredVolume string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	if request.DesiredVolume, err = soap.MarshalI2(DesiredVolume); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetVolumeDB", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl1) GetVolumeDBRange(InstanceID uint32, Channel string) (MinValue int16, MaxValue int16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		MinValue string
-
-		MaxValue string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetVolumeDBRange", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if MinValue, err = soap.UnmarshalI2(response.MinValue); err != nil {
-		return
-	}
-	if MaxValue, err = soap.UnmarshalI2(response.MaxValue); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl1) GetLoudness(InstanceID uint32, Channel string) (CurrentLoudness bool, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentLoudness string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "GetLoudness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentLoudness, err = soap.UnmarshalBoolean(response.CurrentLoudness); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl1) SetLoudness(InstanceID uint32, Channel string, DesiredLoudness bool) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-
-		DesiredLoudness string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	if request.DesiredLoudness, err = soap.MarshalBoolean(DesiredLoudness); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_1, "SetLoudness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-// RenderingControl2 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:RenderingControl:2". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type RenderingControl2 struct {
-	goupnp.ServiceClient
-}
-
-// NewRenderingControl2Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewRenderingControl2Clients() (clients []*RenderingControl2, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_RenderingControl_2); err != nil {
-		return
-	}
-	clients = newRenderingControl2ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewRenderingControl2ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewRenderingControl2ClientsByURL(loc *url.URL) ([]*RenderingControl2, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_RenderingControl_2)
-	if err != nil {
-		return nil, err
-	}
-	return newRenderingControl2ClientsFromGenericClients(genericClients), nil
-}
-
-// NewRenderingControl2ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewRenderingControl2ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*RenderingControl2, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_RenderingControl_2)
-	if err != nil {
-		return nil, err
-	}
-	return newRenderingControl2ClientsFromGenericClients(genericClients), nil
-}
-
-func newRenderingControl2ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*RenderingControl2 {
-	clients := make([]*RenderingControl2, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &RenderingControl2{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *RenderingControl2) ListPresets(InstanceID uint32) (CurrentPresetNameList string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentPresetNameList string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "ListPresets", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentPresetNameList, err = soap.UnmarshalString(response.CurrentPresetNameList); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * PresetName: allowed values: FactoryDefaults
-
-func (client *RenderingControl2) SelectPreset(InstanceID uint32, PresetName string) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		PresetName string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.PresetName, err = soap.MarshalString(PresetName); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SelectPreset", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentBrightness: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetBrightness(InstanceID uint32) (CurrentBrightness uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentBrightness string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetBrightness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentBrightness, err = soap.UnmarshalUi2(response.CurrentBrightness); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredBrightness: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetBrightness(InstanceID uint32, DesiredBrightness uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredBrightness string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredBrightness, err = soap.MarshalUi2(DesiredBrightness); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetBrightness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentContrast: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetContrast(InstanceID uint32) (CurrentContrast uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentContrast string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetContrast", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentContrast, err = soap.UnmarshalUi2(response.CurrentContrast); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredContrast: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetContrast(InstanceID uint32, DesiredContrast uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredContrast string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredContrast, err = soap.MarshalUi2(DesiredContrast); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetContrast", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentSharpness: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetSharpness(InstanceID uint32) (CurrentSharpness uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentSharpness string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetSharpness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentSharpness, err = soap.UnmarshalUi2(response.CurrentSharpness); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredSharpness: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetSharpness(InstanceID uint32, DesiredSharpness uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredSharpness string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredSharpness, err = soap.MarshalUi2(DesiredSharpness); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetSharpness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentRedVideoGain: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetRedVideoGain(InstanceID uint32) (CurrentRedVideoGain uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentRedVideoGain string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetRedVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentRedVideoGain, err = soap.UnmarshalUi2(response.CurrentRedVideoGain); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredRedVideoGain: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetRedVideoGain(InstanceID uint32, DesiredRedVideoGain uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredRedVideoGain string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredRedVideoGain, err = soap.MarshalUi2(DesiredRedVideoGain); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetRedVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentGreenVideoGain: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetGreenVideoGain(InstanceID uint32) (CurrentGreenVideoGain uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentGreenVideoGain string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetGreenVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentGreenVideoGain, err = soap.UnmarshalUi2(response.CurrentGreenVideoGain); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredGreenVideoGain: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetGreenVideoGain(InstanceID uint32, DesiredGreenVideoGain uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredGreenVideoGain string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredGreenVideoGain, err = soap.MarshalUi2(DesiredGreenVideoGain); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetGreenVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentBlueVideoGain: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetBlueVideoGain(InstanceID uint32) (CurrentBlueVideoGain uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentBlueVideoGain string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetBlueVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentBlueVideoGain, err = soap.UnmarshalUi2(response.CurrentBlueVideoGain); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredBlueVideoGain: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetBlueVideoGain(InstanceID uint32, DesiredBlueVideoGain uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredBlueVideoGain string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredBlueVideoGain, err = soap.MarshalUi2(DesiredBlueVideoGain); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetBlueVideoGain", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentRedVideoBlackLevel: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetRedVideoBlackLevel(InstanceID uint32) (CurrentRedVideoBlackLevel uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentRedVideoBlackLevel string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetRedVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentRedVideoBlackLevel, err = soap.UnmarshalUi2(response.CurrentRedVideoBlackLevel); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredRedVideoBlackLevel: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetRedVideoBlackLevel(InstanceID uint32, DesiredRedVideoBlackLevel uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredRedVideoBlackLevel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredRedVideoBlackLevel, err = soap.MarshalUi2(DesiredRedVideoBlackLevel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetRedVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentGreenVideoBlackLevel: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetGreenVideoBlackLevel(InstanceID uint32) (CurrentGreenVideoBlackLevel uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentGreenVideoBlackLevel string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetGreenVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentGreenVideoBlackLevel, err = soap.UnmarshalUi2(response.CurrentGreenVideoBlackLevel); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredGreenVideoBlackLevel: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetGreenVideoBlackLevel(InstanceID uint32, DesiredGreenVideoBlackLevel uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredGreenVideoBlackLevel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredGreenVideoBlackLevel, err = soap.MarshalUi2(DesiredGreenVideoBlackLevel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetGreenVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentBlueVideoBlackLevel: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetBlueVideoBlackLevel(InstanceID uint32) (CurrentBlueVideoBlackLevel uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentBlueVideoBlackLevel string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetBlueVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentBlueVideoBlackLevel, err = soap.UnmarshalUi2(response.CurrentBlueVideoBlackLevel); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredBlueVideoBlackLevel: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetBlueVideoBlackLevel(InstanceID uint32, DesiredBlueVideoBlackLevel uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredBlueVideoBlackLevel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredBlueVideoBlackLevel, err = soap.MarshalUi2(DesiredBlueVideoBlackLevel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetBlueVideoBlackLevel", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentColorTemperature: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetColorTemperature(InstanceID uint32) (CurrentColorTemperature uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentColorTemperature string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetColorTemperature", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentColorTemperature, err = soap.UnmarshalUi2(response.CurrentColorTemperature); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredColorTemperature: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetColorTemperature(InstanceID uint32, DesiredColorTemperature uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredColorTemperature string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredColorTemperature, err = soap.MarshalUi2(DesiredColorTemperature); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetColorTemperature", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentHorizontalKeystone: allowed value range: step=1
-func (client *RenderingControl2) GetHorizontalKeystone(InstanceID uint32) (CurrentHorizontalKeystone int16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentHorizontalKeystone string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetHorizontalKeystone", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentHorizontalKeystone, err = soap.UnmarshalI2(response.CurrentHorizontalKeystone); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredHorizontalKeystone: allowed value range: step=1
-
-func (client *RenderingControl2) SetHorizontalKeystone(InstanceID uint32, DesiredHorizontalKeystone int16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredHorizontalKeystone string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredHorizontalKeystone, err = soap.MarshalI2(DesiredHorizontalKeystone); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetHorizontalKeystone", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Return values:
-//
-// * CurrentVerticalKeystone: allowed value range: step=1
-func (client *RenderingControl2) GetVerticalKeystone(InstanceID uint32) (CurrentVerticalKeystone int16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentVerticalKeystone string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetVerticalKeystone", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentVerticalKeystone, err = soap.UnmarshalI2(response.CurrentVerticalKeystone); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DesiredVerticalKeystone: allowed value range: step=1
-
-func (client *RenderingControl2) SetVerticalKeystone(InstanceID uint32, DesiredVerticalKeystone int16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		DesiredVerticalKeystone string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.DesiredVerticalKeystone, err = soap.MarshalI2(DesiredVerticalKeystone); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetVerticalKeystone", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl2) GetMute(InstanceID uint32, Channel string) (CurrentMute bool, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentMute string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetMute", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentMute, err = soap.UnmarshalBoolean(response.CurrentMute); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl2) SetMute(InstanceID uint32, Channel string, DesiredMute bool) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-
-		DesiredMute string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	if request.DesiredMute, err = soap.MarshalBoolean(DesiredMute); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetMute", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-//
-// Return values:
-//
-// * CurrentVolume: allowed value range: minimum=0, step=1
-func (client *RenderingControl2) GetVolume(InstanceID uint32, Channel string) (CurrentVolume uint16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentVolume string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetVolume", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentVolume, err = soap.UnmarshalUi2(response.CurrentVolume); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-//
-// * DesiredVolume: allowed value range: minimum=0, step=1
-
-func (client *RenderingControl2) SetVolume(InstanceID uint32, Channel string, DesiredVolume uint16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-
-		DesiredVolume string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	if request.DesiredVolume, err = soap.MarshalUi2(DesiredVolume); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetVolume", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl2) GetVolumeDB(InstanceID uint32, Channel string) (CurrentVolume int16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentVolume string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetVolumeDB", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentVolume, err = soap.UnmarshalI2(response.CurrentVolume); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl2) SetVolumeDB(InstanceID uint32, Channel string, DesiredVolume int16) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-
-		DesiredVolume string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	if request.DesiredVolume, err = soap.MarshalI2(DesiredVolume); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetVolumeDB", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl2) GetVolumeDBRange(InstanceID uint32, Channel string) (MinValue int16, MaxValue int16, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		MinValue string
-
-		MaxValue string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetVolumeDBRange", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if MinValue, err = soap.UnmarshalI2(response.MinValue); err != nil {
-		return
-	}
-	if MaxValue, err = soap.UnmarshalI2(response.MaxValue); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl2) GetLoudness(InstanceID uint32, Channel string) (CurrentLoudness bool, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		CurrentLoudness string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetLoudness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if CurrentLoudness, err = soap.UnmarshalBoolean(response.CurrentLoudness); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * Channel: allowed values: Master
-
-func (client *RenderingControl2) SetLoudness(InstanceID uint32, Channel string, DesiredLoudness bool) (err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		Channel string
-
-		DesiredLoudness string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.Channel, err = soap.MarshalString(Channel); err != nil {
-		return
-	}
-	if request.DesiredLoudness, err = soap.MarshalBoolean(DesiredLoudness); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetLoudness", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *RenderingControl2) GetStateVariables(InstanceID uint32, StateVariableList string) (StateVariableValuePairs string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		StateVariableList string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.StateVariableList, err = soap.MarshalString(StateVariableList); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		StateVariableValuePairs string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "GetStateVariables", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if StateVariableValuePairs, err = soap.UnmarshalString(response.StateVariableValuePairs); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *RenderingControl2) SetStateVariables(InstanceID uint32, RenderingControlUDN string, ServiceType string, ServiceId string, StateVariableValuePairs string) (StateVariableList string, err error) {
-	// Request structure.
-	request := &struct {
-		InstanceID string
-
-		RenderingControlUDN string
-
-		ServiceType string
-
-		ServiceId string
-
-		StateVariableValuePairs string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.InstanceID, err = soap.MarshalUi4(InstanceID); err != nil {
-		return
-	}
-	if request.RenderingControlUDN, err = soap.MarshalString(RenderingControlUDN); err != nil {
-		return
-	}
-	if request.ServiceType, err = soap.MarshalString(ServiceType); err != nil {
-		return
-	}
-	if request.ServiceId, err = soap.MarshalString(ServiceId); err != nil {
-		return
-	}
-	if request.StateVariableValuePairs, err = soap.MarshalString(StateVariableValuePairs); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		StateVariableList string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_RenderingControl_2, "SetStateVariables", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if StateVariableList, err = soap.UnmarshalString(response.StateVariableList); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-// ScheduledRecording1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:ScheduledRecording:1". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type ScheduledRecording1 struct {
-	goupnp.ServiceClient
-}
-
-// NewScheduledRecording1Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewScheduledRecording1Clients() (clients []*ScheduledRecording1, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_ScheduledRecording_1); err != nil {
-		return
-	}
-	clients = newScheduledRecording1ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewScheduledRecording1ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewScheduledRecording1ClientsByURL(loc *url.URL) ([]*ScheduledRecording1, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_ScheduledRecording_1)
-	if err != nil {
-		return nil, err
-	}
-	return newScheduledRecording1ClientsFromGenericClients(genericClients), nil
-}
-
-// NewScheduledRecording1ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewScheduledRecording1ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*ScheduledRecording1, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_ScheduledRecording_1)
-	if err != nil {
-		return nil, err
-	}
-	return newScheduledRecording1ClientsFromGenericClients(genericClients), nil
-}
-
-func newScheduledRecording1ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*ScheduledRecording1 {
-	clients := make([]*ScheduledRecording1, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &ScheduledRecording1{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *ScheduledRecording1) GetSortCapabilities() (SortCaps string, SortLevelCap uint32, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		SortCaps string
-
-		SortLevelCap string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "GetSortCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if SortCaps, err = soap.UnmarshalString(response.SortCaps); err != nil {
-		return
-	}
-	if SortLevelCap, err = soap.UnmarshalUi4(response.SortLevelCap); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DataTypeID: allowed values: A_ARG_TYPE_RecordSchedule, A_ARG_TYPE_RecordTask, A_ARG_TYPE_RecordScheduleParts
-
-func (client *ScheduledRecording1) GetPropertyList(DataTypeID string) (PropertyList string, err error) {
-	// Request structure.
-	request := &struct {
-		DataTypeID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.DataTypeID, err = soap.MarshalString(DataTypeID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		PropertyList string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "GetPropertyList", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if PropertyList, err = soap.UnmarshalString(response.PropertyList); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DataTypeID: allowed values: A_ARG_TYPE_RecordSchedule, A_ARG_TYPE_RecordTask, A_ARG_TYPE_RecordScheduleParts
-
-func (client *ScheduledRecording1) GetAllowedValues(DataTypeID string, Filter string) (PropertyInfo string, err error) {
-	// Request structure.
-	request := &struct {
-		DataTypeID string
-
-		Filter string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.DataTypeID, err = soap.MarshalString(DataTypeID); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		PropertyInfo string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "GetAllowedValues", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if PropertyInfo, err = soap.UnmarshalString(response.PropertyInfo); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) GetStateUpdateID() (Id uint32, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Id string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "GetStateUpdateID", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Id, err = soap.UnmarshalUi4(response.Id); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) BrowseRecordSchedules(Filter string, StartingIndex uint32, RequestedCount uint32, SortCriteria string) (Result string, NumberReturned uint32, TotalMatches uint32, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		Filter string
-
-		StartingIndex string
-
-		RequestedCount string
-
-		SortCriteria string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	if request.StartingIndex, err = soap.MarshalUi4(StartingIndex); err != nil {
-		return
-	}
-	if request.RequestedCount, err = soap.MarshalUi4(RequestedCount); err != nil {
-		return
-	}
-	if request.SortCriteria, err = soap.MarshalString(SortCriteria); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		NumberReturned string
-
-		TotalMatches string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "BrowseRecordSchedules", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if NumberReturned, err = soap.UnmarshalUi4(response.NumberReturned); err != nil {
-		return
-	}
-	if TotalMatches, err = soap.UnmarshalUi4(response.TotalMatches); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) BrowseRecordTasks(RecordScheduleID string, Filter string, StartingIndex uint32, RequestedCount uint32, SortCriteria string) (Result string, NumberReturned uint32, TotalMatches uint32, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-
-		Filter string
-
-		StartingIndex string
-
-		RequestedCount string
-
-		SortCriteria string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	if request.StartingIndex, err = soap.MarshalUi4(StartingIndex); err != nil {
-		return
-	}
-	if request.RequestedCount, err = soap.MarshalUi4(RequestedCount); err != nil {
-		return
-	}
-	if request.SortCriteria, err = soap.MarshalString(SortCriteria); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		NumberReturned string
-
-		TotalMatches string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "BrowseRecordTasks", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if NumberReturned, err = soap.UnmarshalUi4(response.NumberReturned); err != nil {
-		return
-	}
-	if TotalMatches, err = soap.UnmarshalUi4(response.TotalMatches); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) CreateRecordSchedule(Elements string) (RecordScheduleID string, Result string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		Elements string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.Elements, err = soap.MarshalString(Elements); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		RecordScheduleID string
-
-		Result string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "CreateRecordSchedule", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if RecordScheduleID, err = soap.UnmarshalString(response.RecordScheduleID); err != nil {
-		return
-	}
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) DeleteRecordSchedule(RecordScheduleID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "DeleteRecordSchedule", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) GetRecordSchedule(RecordScheduleID string, Filter string) (Result string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-
-		Filter string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "GetRecordSchedule", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) EnableRecordSchedule(RecordScheduleID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "EnableRecordSchedule", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) DisableRecordSchedule(RecordScheduleID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "DisableRecordSchedule", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) DeleteRecordTask(RecordTaskID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "DeleteRecordTask", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) GetRecordTask(RecordTaskID string, Filter string) (Result string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-
-		Filter string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "GetRecordTask", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) EnableRecordTask(RecordTaskID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "EnableRecordTask", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) DisableRecordTask(RecordTaskID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "DisableRecordTask", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) ResetRecordTask(RecordTaskID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "ResetRecordTask", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) GetRecordScheduleConflicts(RecordScheduleID string) (RecordScheduleConflictIDList string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		RecordScheduleConflictIDList string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "GetRecordScheduleConflicts", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if RecordScheduleConflictIDList, err = soap.UnmarshalString(response.RecordScheduleConflictIDList); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording1) GetRecordTaskConflicts(RecordTaskID string) (RecordTaskConflictIDList string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		RecordTaskConflictIDList string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_1, "GetRecordTaskConflicts", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if RecordTaskConflictIDList, err = soap.UnmarshalString(response.RecordTaskConflictIDList); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-// ScheduledRecording2 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:ScheduledRecording:2". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type ScheduledRecording2 struct {
-	goupnp.ServiceClient
-}
-
-// NewScheduledRecording2Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func NewScheduledRecording2Clients() (clients []*ScheduledRecording2, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients(URN_ScheduledRecording_2); err != nil {
-		return
-	}
-	clients = newScheduledRecording2ClientsFromGenericClients(genericClients)
-	return
-}
-
-// NewScheduledRecording2ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func NewScheduledRecording2ClientsByURL(loc *url.URL) ([]*ScheduledRecording2, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_ScheduledRecording_2)
-	if err != nil {
-		return nil, err
-	}
-	return newScheduledRecording2ClientsFromGenericClients(genericClients), nil
-}
-
-// NewScheduledRecording2ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func NewScheduledRecording2ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*ScheduledRecording2, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_ScheduledRecording_2)
-	if err != nil {
-		return nil, err
-	}
-	return newScheduledRecording2ClientsFromGenericClients(genericClients), nil
-}
-
-func newScheduledRecording2ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*ScheduledRecording2 {
-	clients := make([]*ScheduledRecording2, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &ScheduledRecording2{genericClients[i]}
-	}
-	return clients
-}
-
-func (client *ScheduledRecording2) GetSortCapabilities() (SortCaps string, SortLevelCap uint32, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		SortCaps string
-
-		SortLevelCap string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "GetSortCapabilities", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if SortCaps, err = soap.UnmarshalString(response.SortCaps); err != nil {
-		return
-	}
-	if SortLevelCap, err = soap.UnmarshalUi4(response.SortLevelCap); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DataTypeID: allowed values: A_ARG_TYPE_RecordSchedule, A_ARG_TYPE_RecordTask, A_ARG_TYPE_RecordScheduleParts
-
-func (client *ScheduledRecording2) GetPropertyList(DataTypeID string) (PropertyList string, err error) {
-	// Request structure.
-	request := &struct {
-		DataTypeID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.DataTypeID, err = soap.MarshalString(DataTypeID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		PropertyList string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "GetPropertyList", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if PropertyList, err = soap.UnmarshalString(response.PropertyList); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-//
-// Arguments:
-//
-// * DataTypeID: allowed values: A_ARG_TYPE_RecordSchedule, A_ARG_TYPE_RecordTask, A_ARG_TYPE_RecordScheduleParts
-
-func (client *ScheduledRecording2) GetAllowedValues(DataTypeID string, Filter string) (PropertyInfo string, err error) {
-	// Request structure.
-	request := &struct {
-		DataTypeID string
-
-		Filter string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.DataTypeID, err = soap.MarshalString(DataTypeID); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		PropertyInfo string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "GetAllowedValues", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if PropertyInfo, err = soap.UnmarshalString(response.PropertyInfo); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) GetStateUpdateID() (Id uint32, err error) {
-	// Request structure.
-	request := interface{}(nil)
-	// BEGIN Marshal arguments into request.
-
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Id string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "GetStateUpdateID", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Id, err = soap.UnmarshalUi4(response.Id); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) BrowseRecordSchedules(Filter string, StartingIndex uint32, RequestedCount uint32, SortCriteria string) (Result string, NumberReturned uint32, TotalMatches uint32, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		Filter string
-
-		StartingIndex string
-
-		RequestedCount string
-
-		SortCriteria string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	if request.StartingIndex, err = soap.MarshalUi4(StartingIndex); err != nil {
-		return
-	}
-	if request.RequestedCount, err = soap.MarshalUi4(RequestedCount); err != nil {
-		return
-	}
-	if request.SortCriteria, err = soap.MarshalString(SortCriteria); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		NumberReturned string
-
-		TotalMatches string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "BrowseRecordSchedules", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if NumberReturned, err = soap.UnmarshalUi4(response.NumberReturned); err != nil {
-		return
-	}
-	if TotalMatches, err = soap.UnmarshalUi4(response.TotalMatches); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) BrowseRecordTasks(RecordScheduleID string, Filter string, StartingIndex uint32, RequestedCount uint32, SortCriteria string) (Result string, NumberReturned uint32, TotalMatches uint32, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-
-		Filter string
-
-		StartingIndex string
-
-		RequestedCount string
-
-		SortCriteria string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	if request.StartingIndex, err = soap.MarshalUi4(StartingIndex); err != nil {
-		return
-	}
-	if request.RequestedCount, err = soap.MarshalUi4(RequestedCount); err != nil {
-		return
-	}
-	if request.SortCriteria, err = soap.MarshalString(SortCriteria); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		NumberReturned string
-
-		TotalMatches string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "BrowseRecordTasks", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if NumberReturned, err = soap.UnmarshalUi4(response.NumberReturned); err != nil {
-		return
-	}
-	if TotalMatches, err = soap.UnmarshalUi4(response.TotalMatches); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) CreateRecordSchedule(Elements string) (RecordScheduleID string, Result string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		Elements string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.Elements, err = soap.MarshalString(Elements); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		RecordScheduleID string
-
-		Result string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "CreateRecordSchedule", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if RecordScheduleID, err = soap.UnmarshalString(response.RecordScheduleID); err != nil {
-		return
-	}
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) DeleteRecordSchedule(RecordScheduleID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "DeleteRecordSchedule", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) GetRecordSchedule(RecordScheduleID string, Filter string) (Result string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-
-		Filter string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "GetRecordSchedule", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) EnableRecordSchedule(RecordScheduleID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "EnableRecordSchedule", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) DisableRecordSchedule(RecordScheduleID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "DisableRecordSchedule", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) DeleteRecordTask(RecordTaskID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "DeleteRecordTask", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) GetRecordTask(RecordTaskID string, Filter string) (Result string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-
-		Filter string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	if request.Filter, err = soap.MarshalString(Filter); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		Result string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "GetRecordTask", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if Result, err = soap.UnmarshalString(response.Result); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) EnableRecordTask(RecordTaskID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "EnableRecordTask", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) DisableRecordTask(RecordTaskID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "DisableRecordTask", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) ResetRecordTask(RecordTaskID string) (err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := interface{}(nil)
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "ResetRecordTask", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) GetRecordScheduleConflicts(RecordScheduleID string) (RecordScheduleConflictIDList string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		RecordScheduleID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordScheduleID, err = soap.MarshalString(RecordScheduleID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		RecordScheduleConflictIDList string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "GetRecordScheduleConflicts", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if RecordScheduleConflictIDList, err = soap.UnmarshalString(response.RecordScheduleConflictIDList); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}
-
-func (client *ScheduledRecording2) GetRecordTaskConflicts(RecordTaskID string) (RecordTaskConflictIDList string, UpdateID uint32, err error) {
-	// Request structure.
-	request := &struct {
-		RecordTaskID string
-	}{}
-	// BEGIN Marshal arguments into request.
-
-	if request.RecordTaskID, err = soap.MarshalString(RecordTaskID); err != nil {
-		return
-	}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := &struct {
-		RecordTaskConflictIDList string
-
-		UpdateID string
-	}{}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction(URN_ScheduledRecording_2, "GetRecordTaskConflicts", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-
-	if RecordTaskConflictIDList, err = soap.UnmarshalString(response.RecordTaskConflictIDList); err != nil {
-		return
-	}
-	if UpdateID, err = soap.UnmarshalUi4(response.UpdateID); err != nil {
-		return
-	}
-	// END Unmarshal arguments from response.
-	return
-}

+ 0 - 6
Godeps/_workspace/src/github.com/huin/goupnp/example/example.go

@@ -1,6 +0,0 @@
-// Serves as examples of using the goupnp library.
-//
-// To run examples and see the output for your local network, run the following
-// command (specifically including the -v flag):
-//     go test -v github.com/huin/goupnp/example
-package example

+ 0 - 603
Godeps/_workspace/src/github.com/huin/goupnp/gotasks/specgen_task.go

@@ -1,603 +0,0 @@
-// +build gotask
-
-package gotasks
-
-import (
-	"archive/zip"
-	"encoding/xml"
-	"fmt"
-	"io"
-	"log"
-	"net/http"
-	"os"
-	"path"
-	"path/filepath"
-	"regexp"
-	"strings"
-	"text/template"
-
-	"github.com/huin/goupnp"
-	"github.com/huin/goupnp/scpd"
-	"github.com/huin/goutil/codegen"
-	"github.com/jingweno/gotask/tasking"
-)
-
-var (
-	deviceURNPrefix  = "urn:schemas-upnp-org:device:"
-	serviceURNPrefix = "urn:schemas-upnp-org:service:"
-)
-
-// DCP contains extra metadata to use when generating DCP source files.
-type DCPMetadata struct {
-	Name         string // What to name the Go DCP package.
-	OfficialName string // Official name for the DCP.
-	DocURL       string // Optional - URL for futher documentation about the DCP.
-	XMLSpecURL   string // Where to download the XML spec from.
-	// Any special-case functions to run against the DCP before writing it out.
-	Hacks []DCPHackFn
-}
-
-var dcpMetadata = []DCPMetadata{
-	{
-		Name:         "internetgateway1",
-		OfficialName: "Internet Gateway Device v1",
-		DocURL:       "http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v1-Device.pdf",
-		XMLSpecURL:   "http://upnp.org/specs/gw/UPnP-gw-IGD-TestFiles-20010921.zip",
-	},
-	{
-		Name:         "internetgateway2",
-		OfficialName: "Internet Gateway Device v2",
-		DocURL:       "http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v2-Device.pdf",
-		XMLSpecURL:   "http://upnp.org/specs/gw/UPnP-gw-IGD-Testfiles-20110224.zip",
-		Hacks: []DCPHackFn{
-			func(dcp *DCP) error {
-				missingURN := "urn:schemas-upnp-org:service:WANIPv6FirewallControl:1"
-				if _, ok := dcp.ServiceTypes[missingURN]; ok {
-					return nil
-				}
-				urnParts, err := extractURNParts(missingURN, serviceURNPrefix)
-				if err != nil {
-					return err
-				}
-				dcp.ServiceTypes[missingURN] = urnParts
-				return nil
-			},
-		},
-	},
-	{
-		Name:         "av1",
-		OfficialName: "MediaServer v1 and MediaRenderer v1",
-		DocURL:       "http://upnp.org/specs/av/av1/",
-		XMLSpecURL:   "http://upnp.org/specs/av/UPnP-av-TestFiles-20070927.zip",
-	},
-}
-
-type DCPHackFn func(*DCP) error
-
-// NAME
-//   specgen - generates Go code from the UPnP specification files.
-//
-// DESCRIPTION
-//   The specification is available for download from:
-//
-// OPTIONS
-//   -s, --specs_dir=<spec directory>
-//     Path to the specification storage directory. This is used to find (and download if not present) the specification ZIP files. Defaults to 'specs'
-//   -o, --out_dir=<output directory>
-//     Path to the output directory. This is is where the DCP source files will be placed. Should normally correspond to the directory for github.com/huin/goupnp/dcps. Defaults to '../dcps'
-//   --nogofmt
-//     Disable passing the output through gofmt. Do this if debugging code output problems and needing to see the generated code prior to being passed through gofmt.
-func TaskSpecgen(t *tasking.T) {
-	specsDir := fallbackStrValue("specs", t.Flags.String("specs_dir"), t.Flags.String("s"))
-	if err := os.MkdirAll(specsDir, os.ModePerm); err != nil {
-		t.Fatalf("Could not create specs-dir %q: %v\n", specsDir, err)
-	}
-	outDir := fallbackStrValue("../dcps", t.Flags.String("out_dir"), t.Flags.String("o"))
-	useGofmt := !t.Flags.Bool("nogofmt")
-
-NEXT_DCP:
-	for _, d := range dcpMetadata {
-		specFilename := filepath.Join(specsDir, d.Name+".zip")
-		err := acquireFile(specFilename, d.XMLSpecURL)
-		if err != nil {
-			t.Logf("Could not acquire spec for %s, skipping: %v\n", d.Name, err)
-			continue NEXT_DCP
-		}
-		dcp := newDCP(d)
-		if err := dcp.processZipFile(specFilename); err != nil {
-			log.Printf("Error processing spec for %s in file %q: %v", d.Name, specFilename, err)
-			continue NEXT_DCP
-		}
-		for i, hack := range d.Hacks {
-			if err := hack(dcp); err != nil {
-				log.Printf("Error with Hack[%d] for %s: %v", i, d.Name, err)
-				continue NEXT_DCP
-			}
-		}
-		dcp.writePackage(outDir, useGofmt)
-		if err := dcp.writePackage(outDir, useGofmt); err != nil {
-			log.Printf("Error writing package %q: %v", dcp.Metadata.Name, err)
-			continue NEXT_DCP
-		}
-	}
-}
-
-func fallbackStrValue(defaultValue string, values ...string) string {
-	for _, v := range values {
-		if v != "" {
-			return v
-		}
-	}
-	return defaultValue
-}
-
-func acquireFile(specFilename string, xmlSpecURL string) error {
-	if f, err := os.Open(specFilename); err != nil {
-		if !os.IsNotExist(err) {
-			return err
-		}
-	} else {
-		f.Close()
-		return nil
-	}
-
-	resp, err := http.Get(xmlSpecURL)
-	if err != nil {
-		return err
-	}
-	defer resp.Body.Close()
-
-	if resp.StatusCode != http.StatusOK {
-		return fmt.Errorf("could not download spec %q from %q: ",
-			specFilename, xmlSpecURL, resp.Status)
-	}
-
-	tmpFilename := specFilename + ".download"
-	w, err := os.Create(tmpFilename)
-	if err != nil {
-		return err
-	}
-	defer w.Close()
-
-	_, err = io.Copy(w, resp.Body)
-	if err != nil {
-		return err
-	}
-
-	return os.Rename(tmpFilename, specFilename)
-}
-
-// DCP collects together information about a UPnP Device Control Protocol.
-type DCP struct {
-	Metadata     DCPMetadata
-	DeviceTypes  map[string]*URNParts
-	ServiceTypes map[string]*URNParts
-	Services     []SCPDWithURN
-}
-
-func newDCP(metadata DCPMetadata) *DCP {
-	return &DCP{
-		Metadata:     metadata,
-		DeviceTypes:  make(map[string]*URNParts),
-		ServiceTypes: make(map[string]*URNParts),
-	}
-}
-
-func (dcp *DCP) processZipFile(filename string) error {
-	archive, err := zip.OpenReader(filename)
-	if err != nil {
-		return fmt.Errorf("error reading zip file %q: %v", filename, err)
-	}
-	defer archive.Close()
-	for _, deviceFile := range globFiles("*/device/*.xml", archive) {
-		if err := dcp.processDeviceFile(deviceFile); err != nil {
-			return err
-		}
-	}
-	for _, scpdFile := range globFiles("*/service/*.xml", archive) {
-		if err := dcp.processSCPDFile(scpdFile); err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-func (dcp *DCP) processDeviceFile(file *zip.File) error {
-	var device goupnp.Device
-	if err := unmarshalXmlFile(file, &device); err != nil {
-		return fmt.Errorf("error decoding device XML from file %q: %v", file.Name, err)
-	}
-	var mainErr error
-	device.VisitDevices(func(d *goupnp.Device) {
-		t := strings.TrimSpace(d.DeviceType)
-		if t != "" {
-			u, err := extractURNParts(t, deviceURNPrefix)
-			if err != nil {
-				mainErr = err
-			}
-			dcp.DeviceTypes[t] = u
-		}
-	})
-	device.VisitServices(func(s *goupnp.Service) {
-		u, err := extractURNParts(s.ServiceType, serviceURNPrefix)
-		if err != nil {
-			mainErr = err
-		}
-		dcp.ServiceTypes[s.ServiceType] = u
-	})
-	return mainErr
-}
-
-func (dcp *DCP) writePackage(outDir string, useGofmt bool) error {
-	packageDirname := filepath.Join(outDir, dcp.Metadata.Name)
-	err := os.MkdirAll(packageDirname, os.ModePerm)
-	if err != nil && !os.IsExist(err) {
-		return err
-	}
-	packageFilename := filepath.Join(packageDirname, dcp.Metadata.Name+".go")
-	packageFile, err := os.Create(packageFilename)
-	if err != nil {
-		return err
-	}
-	var output io.WriteCloser = packageFile
-	if useGofmt {
-		if output, err = codegen.NewGofmtWriteCloser(output); err != nil {
-			packageFile.Close()
-			return err
-		}
-	}
-	if err = packageTmpl.Execute(output, dcp); err != nil {
-		output.Close()
-		return err
-	}
-	return output.Close()
-}
-
-func (dcp *DCP) processSCPDFile(file *zip.File) error {
-	scpd := new(scpd.SCPD)
-	if err := unmarshalXmlFile(file, scpd); err != nil {
-		return fmt.Errorf("error decoding SCPD XML from file %q: %v", file.Name, err)
-	}
-	scpd.Clean()
-	urnParts, err := urnPartsFromSCPDFilename(file.Name)
-	if err != nil {
-		return fmt.Errorf("could not recognize SCPD filename %q: %v", file.Name, err)
-	}
-	dcp.Services = append(dcp.Services, SCPDWithURN{
-		URNParts: urnParts,
-		SCPD:     scpd,
-	})
-	return nil
-}
-
-type SCPDWithURN struct {
-	*URNParts
-	SCPD *scpd.SCPD
-}
-
-func (s *SCPDWithURN) WrapArguments(args []*scpd.Argument) (argumentWrapperList, error) {
-	wrappedArgs := make(argumentWrapperList, len(args))
-	for i, arg := range args {
-		wa, err := s.wrapArgument(arg)
-		if err != nil {
-			return nil, err
-		}
-		wrappedArgs[i] = wa
-	}
-	return wrappedArgs, nil
-}
-
-func (s *SCPDWithURN) wrapArgument(arg *scpd.Argument) (*argumentWrapper, error) {
-	relVar := s.SCPD.GetStateVariable(arg.RelatedStateVariable)
-	if relVar == nil {
-		return nil, fmt.Errorf("no such state variable: %q, for argument %q", arg.RelatedStateVariable, arg.Name)
-	}
-	cnv, ok := typeConvs[relVar.DataType.Name]
-	if !ok {
-		return nil, fmt.Errorf("unknown data type: %q, for state variable %q, for argument %q", relVar.DataType.Type, arg.RelatedStateVariable, arg.Name)
-	}
-	return &argumentWrapper{
-		Argument: *arg,
-		relVar:   relVar,
-		conv:     cnv,
-	}, nil
-}
-
-type argumentWrapper struct {
-	scpd.Argument
-	relVar *scpd.StateVariable
-	conv   conv
-}
-
-func (arg *argumentWrapper) AsParameter() string {
-	return fmt.Sprintf("%s %s", arg.Name, arg.conv.ExtType)
-}
-
-func (arg *argumentWrapper) HasDoc() bool {
-	rng := arg.relVar.AllowedValueRange
-	return ((rng != nil && (rng.Minimum != "" || rng.Maximum != "" || rng.Step != "")) ||
-		len(arg.relVar.AllowedValues) > 0)
-}
-
-func (arg *argumentWrapper) Document() string {
-	relVar := arg.relVar
-	if rng := relVar.AllowedValueRange; rng != nil {
-		var parts []string
-		if rng.Minimum != "" {
-			parts = append(parts, fmt.Sprintf("minimum=%s", rng.Minimum))
-		}
-		if rng.Maximum != "" {
-			parts = append(parts, fmt.Sprintf("maximum=%s", rng.Maximum))
-		}
-		if rng.Step != "" {
-			parts = append(parts, fmt.Sprintf("step=%s", rng.Step))
-		}
-		return "allowed value range: " + strings.Join(parts, ", ")
-	}
-	if len(relVar.AllowedValues) != 0 {
-		return "allowed values: " + strings.Join(relVar.AllowedValues, ", ")
-	}
-	return ""
-}
-
-func (arg *argumentWrapper) Marshal() string {
-	return fmt.Sprintf("soap.Marshal%s(%s)", arg.conv.FuncSuffix, arg.Name)
-}
-
-func (arg *argumentWrapper) Unmarshal(objVar string) string {
-	return fmt.Sprintf("soap.Unmarshal%s(%s.%s)", arg.conv.FuncSuffix, objVar, arg.Name)
-}
-
-type argumentWrapperList []*argumentWrapper
-
-func (args argumentWrapperList) HasDoc() bool {
-	for _, arg := range args {
-		if arg.HasDoc() {
-			return true
-		}
-	}
-	return false
-}
-
-type conv struct {
-	FuncSuffix string
-	ExtType    string
-}
-
-// typeConvs maps from a SOAP type (e.g "fixed.14.4") to the function name
-// suffix inside the soap module (e.g "Fixed14_4") and the Go type.
-var typeConvs = map[string]conv{
-	"ui1":         conv{"Ui1", "uint8"},
-	"ui2":         conv{"Ui2", "uint16"},
-	"ui4":         conv{"Ui4", "uint32"},
-	"i1":          conv{"I1", "int8"},
-	"i2":          conv{"I2", "int16"},
-	"i4":          conv{"I4", "int32"},
-	"int":         conv{"Int", "int64"},
-	"r4":          conv{"R4", "float32"},
-	"r8":          conv{"R8", "float64"},
-	"number":      conv{"R8", "float64"}, // Alias for r8.
-	"fixed.14.4":  conv{"Fixed14_4", "float64"},
-	"float":       conv{"R8", "float64"},
-	"char":        conv{"Char", "rune"},
-	"string":      conv{"String", "string"},
-	"date":        conv{"Date", "time.Time"},
-	"dateTime":    conv{"DateTime", "time.Time"},
-	"dateTime.tz": conv{"DateTimeTz", "time.Time"},
-	"time":        conv{"TimeOfDay", "soap.TimeOfDay"},
-	"time.tz":     conv{"TimeOfDayTz", "soap.TimeOfDay"},
-	"boolean":     conv{"Boolean", "bool"},
-	"bin.base64":  conv{"BinBase64", "[]byte"},
-	"bin.hex":     conv{"BinHex", "[]byte"},
-	"uri":         conv{"URI", "*url.URL"},
-}
-
-func globFiles(pattern string, archive *zip.ReadCloser) []*zip.File {
-	var files []*zip.File
-	for _, f := range archive.File {
-		if matched, err := path.Match(pattern, f.Name); err != nil {
-			// This shouldn't happen - all patterns are hard-coded, errors in them
-			// are a programming error.
-			panic(err)
-		} else if matched {
-			files = append(files, f)
-		}
-	}
-	return files
-}
-
-func unmarshalXmlFile(file *zip.File, data interface{}) error {
-	r, err := file.Open()
-	if err != nil {
-		return err
-	}
-	decoder := xml.NewDecoder(r)
-	r.Close()
-	return decoder.Decode(data)
-}
-
-type URNParts struct {
-	URN     string
-	Name    string
-	Version string
-}
-
-func (u *URNParts) Const() string {
-	return fmt.Sprintf("URN_%s_%s", u.Name, u.Version)
-}
-
-// extractURNParts extracts the name and version from a URN string.
-func extractURNParts(urn, expectedPrefix string) (*URNParts, error) {
-	if !strings.HasPrefix(urn, expectedPrefix) {
-		return nil, fmt.Errorf("%q does not have expected prefix %q", urn, expectedPrefix)
-	}
-	parts := strings.SplitN(strings.TrimPrefix(urn, expectedPrefix), ":", 2)
-	if len(parts) != 2 {
-		return nil, fmt.Errorf("%q does not have a name and version", urn)
-	}
-	name, version := parts[0], parts[1]
-	return &URNParts{urn, name, version}, nil
-}
-
-var scpdFilenameRe = regexp.MustCompile(
-	`.*/([a-zA-Z0-9]+)([0-9]+)\.xml`)
-
-func urnPartsFromSCPDFilename(filename string) (*URNParts, error) {
-	parts := scpdFilenameRe.FindStringSubmatch(filename)
-	if len(parts) != 3 {
-		return nil, fmt.Errorf("SCPD filename %q does not have expected number of parts", filename)
-	}
-	name, version := parts[1], parts[2]
-	return &URNParts{
-		URN:     serviceURNPrefix + name + ":" + version,
-		Name:    name,
-		Version: version,
-	}, nil
-}
-
-var packageTmpl = template.Must(template.New("package").Parse(`{{$name := .Metadata.Name}}
-// Client for UPnP Device Control Protocol {{.Metadata.OfficialName}}.
-// {{if .Metadata.DocURL}}
-// This DCP is documented in detail at: {{.Metadata.DocURL}}{{end}}
-//
-// Typically, use one of the New* functions to create clients for services.
-package {{$name}}
-
-// Generated file - do not edit by hand. See README.md
-
-
-import (
-	"net/url"
-	"time"
-
-	"github.com/huin/goupnp"
-	"github.com/huin/goupnp/soap"
-)
-
-// Hack to avoid Go complaining if time isn't used.
-var _ time.Time
-
-// Device URNs:
-const ({{range .DeviceTypes}}
-	{{.Const}} = "{{.URN}}"{{end}}
-)
-
-// Service URNs:
-const ({{range .ServiceTypes}}
-	{{.Const}} = "{{.URN}}"{{end}}
-)
-
-{{range .Services}}
-{{$srv := .}}
-{{$srvIdent := printf "%s%s" .Name .Version}}
-
-// {{$srvIdent}} is a client for UPnP SOAP service with URN "{{.URN}}". See
-// goupnp.ServiceClient, which contains RootDevice and Service attributes which
-// are provided for informational value.
-type {{$srvIdent}} struct {
-	goupnp.ServiceClient
-}
-
-// New{{$srvIdent}}Clients discovers instances of the service on the network,
-// and returns clients to any that are found. errors will contain an error for
-// any devices that replied but which could not be queried, and err will be set
-// if the discovery process failed outright.
-//
-// This is a typical entry calling point into this package.
-func New{{$srvIdent}}Clients() (clients []*{{$srvIdent}}, errors []error, err error) {
-	var genericClients []goupnp.ServiceClient
-	if genericClients, errors, err = goupnp.NewServiceClients({{$srv.Const}}); err != nil {
-		return
-	}
-	clients = new{{$srvIdent}}ClientsFromGenericClients(genericClients)
-	return
-}
-
-// New{{$srvIdent}}ClientsByURL discovers instances of the service at the given
-// URL, and returns clients to any that are found. An error is returned if
-// there was an error probing the service.
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered service URL.
-func New{{$srvIdent}}ClientsByURL(loc *url.URL) ([]*{{$srvIdent}}, error) {
-	genericClients, err := goupnp.NewServiceClientsByURL(loc, {{$srv.Const}})
-	if err != nil {
-		return nil, err
-	}
-	return new{{$srvIdent}}ClientsFromGenericClients(genericClients), nil
-}
-
-// New{{$srvIdent}}ClientsFromRootDevice discovers instances of the service in
-// a given root device, and returns clients to any that are found. An error is
-// returned if there was not at least one instance of the service within the
-// device. The location parameter is simply assigned to the Location attribute
-// of the wrapped ServiceClient(s).
-//
-// This is a typical entry calling point into this package when reusing an
-// previously discovered root device.
-func New{{$srvIdent}}ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*{{$srvIdent}}, error) {
-	genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, {{$srv.Const}})
-	if err != nil {
-		return nil, err
-	}
-	return new{{$srvIdent}}ClientsFromGenericClients(genericClients), nil
-}
-
-func new{{$srvIdent}}ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*{{$srvIdent}} {
-	clients := make([]*{{$srvIdent}}, len(genericClients))
-	for i := range genericClients {
-		clients[i] = &{{$srvIdent}}{genericClients[i]}
-	}
-	return clients
-}
-
-{{range .SCPD.Actions}}{{/* loops over *SCPDWithURN values */}}
-
-{{$winargs := $srv.WrapArguments .InputArguments}}
-{{$woutargs := $srv.WrapArguments .OutputArguments}}
-{{if $winargs.HasDoc}}
-//
-// Arguments:{{range $winargs}}{{if .HasDoc}}
-//
-// * {{.Name}}: {{.Document}}{{end}}{{end}}{{end}}
-{{if $woutargs.HasDoc}}
-//
-// Return values:{{range $woutargs}}{{if .HasDoc}}
-//
-// * {{.Name}}: {{.Document}}{{end}}{{end}}{{end}}
-func (client *{{$srvIdent}}) {{.Name}}({{range $winargs}}{{/*
-*/}}{{.AsParameter}}, {{end}}{{/*
-*/}}) ({{range $woutargs}}{{/*
-*/}}{{.AsParameter}}, {{end}} err error) {
-	// Request structure.
-	request := {{if $winargs}}&{{template "argstruct" $winargs}}{{"{}"}}{{else}}{{"interface{}(nil)"}}{{end}}
-	// BEGIN Marshal arguments into request.
-{{range $winargs}}
-	if request.{{.Name}}, err = {{.Marshal}}; err != nil {
-		return
-	}{{end}}
-	// END Marshal arguments into request.
-
-	// Response structure.
-	response := {{if $woutargs}}&{{template "argstruct" $woutargs}}{{"{}"}}{{else}}{{"interface{}(nil)"}}{{end}}
-
-	// Perform the SOAP call.
-	if err = client.SOAPClient.PerformAction({{$srv.URNParts.Const}}, "{{.Name}}", request, response); err != nil {
-		return
-	}
-
-	// BEGIN Unmarshal arguments from response.
-{{range $woutargs}}
-	if {{.Name}}, err = {{.Unmarshal "response"}}; err != nil {
-		return
-	}{{end}}
-	// END Unmarshal arguments from response.
-	return
-}
-{{end}}{{/* range .SCPD.Actions */}}
-{{end}}{{/* range .Services */}}
-
-{{define "argstruct"}}struct {{"{"}}{{range .}}
-{{.Name}} string
-{{end}}{{"}"}}{{end}}
-`))

+ 0 - 27
Godeps/_workspace/src/github.com/jackpal/gateway/LICENSE

@@ -1,27 +0,0 @@
-// Copyright (c) 2010 Jack Palevich. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//    * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//    * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//    * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ 0 - 7
Godeps/_workspace/src/github.com/jackpal/gateway/README.md

@@ -1,7 +0,0 @@
-# gateway
-
-A very simple library for discovering the IP address of the local LAN gateway.
-
-Provides implementations for Linux, OS X (Darwin) and Windows.
-
-Pull requests for other OSs happily considered!

+ 0 - 40
Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go

@@ -1,40 +0,0 @@
-package gateway
-
-import (
-	"bytes"
-	"io/ioutil"
-	"net"
-	"os/exec"
-)
-
-func DiscoverGateway() (ip net.IP, err error) {
-	routeCmd := exec.Command("route", "-n", "get", "0.0.0.0")
-	stdOut, err := routeCmd.StdoutPipe()
-	if err != nil {
-		return
-	}
-	if err = routeCmd.Start(); err != nil {
-		return
-	}
-	output, err := ioutil.ReadAll(stdOut)
-	if err != nil {
-		return
-	}
-
-	// Darwin route out format is always like this:
-	//    route to: default
-	// destination: default
-	//        mask: default
-	//     gateway: 192.168.1.1
-	outputLines := bytes.Split(output, []byte("\n"))
-	for _, line := range outputLines {
-		if bytes.Contains(line, []byte("gateway:")) {
-			gatewayFields := bytes.Fields(line)
-			ip = net.ParseIP(string(gatewayFields[1]))
-			break
-		}
-	}
-
-	err = routeCmd.Wait()
-	return
-}

+ 0 - 75
Godeps/_workspace/src/github.com/jackpal/gateway/gateway_linux.go

@@ -1,75 +0,0 @@
-package gateway
-
-import (
-	"bytes"
-	"io/ioutil"
-	"net"
-	"os/exec"
-)
-
-func discoverGatewayUsingIp() (ip net.IP, err error) {
-	routeCmd := exec.Command("ip", "route", "show")
-	stdOut, err := routeCmd.StdoutPipe()
-	if err != nil {
-		return
-	}
-	if err = routeCmd.Start(); err != nil {
-		return
-	}
-	output, err := ioutil.ReadAll(stdOut)
-	if err != nil {
-		return
-	}
-
-	// Linux 'ip route show' format looks like this:
-	// default via 192.168.178.1 dev wlp3s0  metric 303
-	// 192.168.178.0/24 dev wlp3s0  proto kernel  scope link  src 192.168.178.76  metric 303
-	outputLines := bytes.Split(output, []byte("\n"))
-	for _, line := range outputLines {
-		if bytes.Contains(line, []byte("default")) {
-			ipFields := bytes.Fields(line)
-			ip = net.ParseIP(string(ipFields[2]))
-			break
-		}
-	}
-	err = routeCmd.Wait()
-	return
-}
-
-func discoverGatewayUsingRoute() (ip net.IP, err error) {
-	routeCmd := exec.Command("route", "-n")
-	stdOut, err := routeCmd.StdoutPipe()
-	if err != nil {
-		return
-	}
-	if err = routeCmd.Start(); err != nil {
-		return
-	}
-	output, err := ioutil.ReadAll(stdOut)
-	if err != nil {
-		return
-	}
-
-	// Linux route out format is always like this:
-	// Kernel IP routing table
-	// Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
-	// 0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
-	outputLines := bytes.Split(output, []byte("\n"))
-	for _, line := range outputLines {
-		if bytes.Contains(line, []byte("0.0.0.0")) {
-			ipFields := bytes.Fields(line)
-			ip = net.ParseIP(string(ipFields[1]))
-			break
-		}
-	}
-	err = routeCmd.Wait()
-	return
-}
-
-func DiscoverGateway() (ip net.IP, err error) {
-	ip, err = discoverGatewayUsingRoute()
-	if err != nil {
-		ip, err = discoverGatewayUsingIp()
-	}
-	return
-}

+ 0 - 14
Godeps/_workspace/src/github.com/jackpal/gateway/gateway_unimplemented.go

@@ -1,14 +0,0 @@
-// +build !darwin,!linux,!windows
-
-package gateway
-
-import (
-	"fmt"
-	"net"
-	"runtime"
-)
-
-func DiscoverGateway() (ip net.IP, err error) {
-	err = fmt.Errorf("DiscoverGateway not implemented for OS %s", runtime.GOOS)
-	return
-}

+ 0 - 43
Godeps/_workspace/src/github.com/jackpal/gateway/gateway_windows.go

@@ -1,43 +0,0 @@
-package gateway
-
-import (
-	"bytes"
-	"io/ioutil"
-	"net"
-	"os/exec"
-)
-
-func DiscoverGateway() (ip net.IP, err error) {
-	routeCmd := exec.Command("route", "print", "0.0.0.0")
-	stdOut, err := routeCmd.StdoutPipe()
-	if err != nil {
-		return
-	}
-	if err = routeCmd.Start(); err != nil {
-		return
-	}
-	output, err := ioutil.ReadAll(stdOut)
-	if err != nil {
-		return
-	}
-
-	// Windows route output format is always like this:
-	// ===========================================================================
-	// Active Routes:
-	// Network Destination        Netmask          Gateway       Interface  Metric
-	//           0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.100     20
-	// ===========================================================================
-	// I'm trying to pick the active route,
-	// then jump 2 lines and pick the third IP
-	// Not using regex because output is quite standard from Windows XP to 8 (NEEDS TESTING)
-	outputLines := bytes.Split(output, []byte("\n"))
-	for idx, line := range outputLines {
-		if bytes.Contains(line, []byte("Active Routes:")) {
-			ipFields := bytes.Fields(outputLines[idx+2])
-			ip = net.ParseIP(string(ipFields[2]))
-			break
-		}
-	}
-	err = routeCmd.Wait()
-	return
-}

+ 0 - 20
Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go

@@ -1,20 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"github.com/rcrowley/go-metrics"
-	"time"
-)
-
-func main() {
-	r := metrics.NewRegistry()
-	for i := 0; i < 10000; i++ {
-		r.Register(fmt.Sprintf("counter-%d", i), metrics.NewCounter())
-		r.Register(fmt.Sprintf("gauge-%d", i), metrics.NewGauge())
-		r.Register(fmt.Sprintf("gaugefloat64-%d", i), metrics.NewGaugeFloat64())
-		r.Register(fmt.Sprintf("histogram-uniform-%d", i), metrics.NewHistogram(metrics.NewUniformSample(1028)))
-		r.Register(fmt.Sprintf("histogram-exp-%d", i), metrics.NewHistogram(metrics.NewExpDecaySample(1028, 0.015)))
-		r.Register(fmt.Sprintf("meter-%d", i), metrics.NewMeter())
-	}
-	time.Sleep(600e9)
-}

+ 0 - 154
Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/metrics-example/metrics-example.go

@@ -1,154 +0,0 @@
-package main
-
-import (
-	"errors"
-	"github.com/rcrowley/go-metrics"
-	// "github.com/rcrowley/go-metrics/stathat"
-	"log"
-	"math/rand"
-	"os"
-	// "syslog"
-	"time"
-)
-
-const fanout = 10
-
-func main() {
-
-	r := metrics.NewRegistry()
-
-	c := metrics.NewCounter()
-	r.Register("foo", c)
-	for i := 0; i < fanout; i++ {
-		go func() {
-			for {
-				c.Dec(19)
-				time.Sleep(300e6)
-			}
-		}()
-		go func() {
-			for {
-				c.Inc(47)
-				time.Sleep(400e6)
-			}
-		}()
-	}
-
-	g := metrics.NewGauge()
-	r.Register("bar", g)
-	for i := 0; i < fanout; i++ {
-		go func() {
-			for {
-				g.Update(19)
-				time.Sleep(300e6)
-			}
-		}()
-		go func() {
-			for {
-				g.Update(47)
-				time.Sleep(400e6)
-			}
-		}()
-	}
-
-	gf := metrics.NewGaugeFloat64()
-	r.Register("barfloat64", gf)
-	for i := 0; i < fanout; i++ {
-		go func() {
-			for {
-				g.Update(19.0)
-				time.Sleep(300e6)
-			}
-		}()
-		go func() {
-			for {
-				g.Update(47.0)
-				time.Sleep(400e6)
-			}
-		}()
-	}
-
-	hc := metrics.NewHealthcheck(func(h metrics.Healthcheck) {
-		if 0 < rand.Intn(2) {
-			h.Healthy()
-		} else {
-			h.Unhealthy(errors.New("baz"))
-		}
-	})
-	r.Register("baz", hc)
-
-	s := metrics.NewExpDecaySample(1028, 0.015)
-	//s := metrics.NewUniformSample(1028)
-	h := metrics.NewHistogram(s)
-	r.Register("bang", h)
-	for i := 0; i < fanout; i++ {
-		go func() {
-			for {
-				h.Update(19)
-				time.Sleep(300e6)
-			}
-		}()
-		go func() {
-			for {
-				h.Update(47)
-				time.Sleep(400e6)
-			}
-		}()
-	}
-
-	m := metrics.NewMeter()
-	r.Register("quux", m)
-	for i := 0; i < fanout; i++ {
-		go func() {
-			for {
-				m.Mark(19)
-				time.Sleep(300e6)
-			}
-		}()
-		go func() {
-			for {
-				m.Mark(47)
-				time.Sleep(400e6)
-			}
-		}()
-	}
-
-	t := metrics.NewTimer()
-	r.Register("hooah", t)
-	for i := 0; i < fanout; i++ {
-		go func() {
-			for {
-				t.Time(func() { time.Sleep(300e6) })
-			}
-		}()
-		go func() {
-			for {
-				t.Time(func() { time.Sleep(400e6) })
-			}
-		}()
-	}
-
-	metrics.RegisterDebugGCStats(r)
-	go metrics.CaptureDebugGCStats(r, 5e9)
-
-	metrics.RegisterRuntimeMemStats(r)
-	go metrics.CaptureRuntimeMemStats(r, 5e9)
-
-	metrics.Log(r, 60e9, log.New(os.Stderr, "metrics: ", log.Lmicroseconds))
-
-	/*
-		w, err := syslog.Dial("unixgram", "/dev/log", syslog.LOG_INFO, "metrics")
-		if nil != err { log.Fatalln(err) }
-		metrics.Syslog(r, 60e9, w)
-	*/
-
-	/*
-		addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:2003")
-		metrics.Graphite(r, 10e9, "metrics", addr)
-	*/
-
-	/*
-		stathat.Stathat(r, 10e9, "example@example.com")
-	*/
-
-}

+ 0 - 22
Godeps/_workspace/src/github.com/rcrowley/go-metrics/cmd/never-read/never-read.go

@@ -1,22 +0,0 @@
-package main
-
-import (
-	"log"
-	"net"
-)
-
-func main() {
-	addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:2003")
-	l, err := net.ListenTCP("tcp", addr)
-	if nil != err {
-		log.Fatalln(err)
-	}
-	log.Println("listening", l.Addr())
-	for {
-		c, err := l.AcceptTCP()
-		if nil != err {
-			log.Fatalln(err)
-		}
-		log.Println("accepted", c.RemoteAddr())
-	}
-}

+ 0 - 102
Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/client.go

@@ -1,102 +0,0 @@
-package librato
-
-import (
-	"bytes"
-	"encoding/json"
-	"fmt"
-	"io/ioutil"
-	"net/http"
-)
-
-const Operations = "operations"
-const OperationsShort = "ops"
-
-type LibratoClient struct {
-	Email, Token string
-}
-
-// property strings
-const (
-	// display attributes
-	Color             = "color"
-	DisplayMax        = "display_max"
-	DisplayMin        = "display_min"
-	DisplayUnitsLong  = "display_units_long"
-	DisplayUnitsShort = "display_units_short"
-	DisplayStacked    = "display_stacked"
-	DisplayTransform  = "display_transform"
-	// special gauge display attributes
-	SummarizeFunction = "summarize_function"
-	Aggregate         = "aggregate"
-
-	// metric keys
-	Name        = "name"
-	Period      = "period"
-	Description = "description"
-	DisplayName = "display_name"
-	Attributes  = "attributes"
-
-	// measurement keys
-	MeasureTime = "measure_time"
-	Source      = "source"
-	Value       = "value"
-
-	// special gauge keys
-	Count      = "count"
-	Sum        = "sum"
-	Max        = "max"
-	Min        = "min"
-	SumSquares = "sum_squares"
-
-	// batch keys
-	Counters = "counters"
-	Gauges   = "gauges"
-
-	MetricsPostUrl = "https://metrics-api.librato.com/v1/metrics"
-)
-
-type Measurement map[string]interface{}
-type Metric map[string]interface{}
-
-type Batch struct {
-	Gauges      []Measurement `json:"gauges,omitempty"`
-	Counters    []Measurement `json:"counters,omitempty"`
-	MeasureTime int64         `json:"measure_time"`
-	Source      string        `json:"source"`
-}
-
-func (self *LibratoClient) PostMetrics(batch Batch) (err error) {
-	var (
-		js   []byte
-		req  *http.Request
-		resp *http.Response
-	)
-
-	if len(batch.Counters) == 0 && len(batch.Gauges) == 0 {
-		return nil
-	}
-
-	if js, err = json.Marshal(batch); err != nil {
-		return
-	}
-
-	if req, err = http.NewRequest("POST", MetricsPostUrl, bytes.NewBuffer(js)); err != nil {
-		return
-	}
-
-	req.Header.Set("Content-Type", "application/json")
-	req.SetBasicAuth(self.Email, self.Token)
-
-	if resp, err = http.DefaultClient.Do(req); err != nil {
-		return
-	}
-
-	if resp.StatusCode != http.StatusOK {
-		var body []byte
-		if body, err = ioutil.ReadAll(resp.Body); err != nil {
-			body = []byte(fmt.Sprintf("(could not fetch response body for error: %s)", err))
-		}
-		err = fmt.Errorf("Unable to post to Librato: %d %s %s", resp.StatusCode, resp.Status, string(body))
-	}
-	return
-}

+ 0 - 235
Godeps/_workspace/src/github.com/rcrowley/go-metrics/librato/librato.go

@@ -1,235 +0,0 @@
-package librato
-
-import (
-	"fmt"
-	"log"
-	"math"
-	"regexp"
-	"time"
-
-	"github.com/rcrowley/go-metrics"
-)
-
-// a regexp for extracting the unit from time.Duration.String
-var unitRegexp = regexp.MustCompile("[^\\d]+$")
-
-// a helper that turns a time.Duration into librato display attributes for timer metrics
-func translateTimerAttributes(d time.Duration) (attrs map[string]interface{}) {
-	attrs = make(map[string]interface{})
-	attrs[DisplayTransform] = fmt.Sprintf("x/%d", int64(d))
-	attrs[DisplayUnitsShort] = string(unitRegexp.Find([]byte(d.String())))
-	return
-}
-
-type Reporter struct {
-	Email, Token    string
-	Namespace       string
-	Source          string
-	Interval        time.Duration
-	Registry        metrics.Registry
-	Percentiles     []float64              // percentiles to report on histogram metrics
-	TimerAttributes map[string]interface{} // units in which timers will be displayed
-	intervalSec     int64
-}
-
-func NewReporter(r metrics.Registry, d time.Duration, e string, t string, s string, p []float64, u time.Duration) *Reporter {
-	return &Reporter{e, t, "", s, d, r, p, translateTimerAttributes(u), int64(d / time.Second)}
-}
-
-func Librato(r metrics.Registry, d time.Duration, e string, t string, s string, p []float64, u time.Duration) {
-	NewReporter(r, d, e, t, s, p, u).Run()
-}
-
-func (self *Reporter) Run() {
-	log.Printf("WARNING: This client has been DEPRECATED! It has been moved to https://github.com/mihasya/go-metrics-librato and will be removed from rcrowley/go-metrics on August 5th 2015")
-	ticker := time.Tick(self.Interval)
-	metricsApi := &LibratoClient{self.Email, self.Token}
-	for now := range ticker {
-		var metrics Batch
-		var err error
-		if metrics, err = self.BuildRequest(now, self.Registry); err != nil {
-			log.Printf("ERROR constructing librato request body %s", err)
-			continue
-		}
-		if err := metricsApi.PostMetrics(metrics); err != nil {
-			log.Printf("ERROR sending metrics to librato %s", err)
-			continue
-		}
-	}
-}
-
-// calculate sum of squares from data provided by metrics.Histogram
-// see http://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods
-func sumSquares(s metrics.Sample) float64 {
-	count := float64(s.Count())
-	sumSquared := math.Pow(count*s.Mean(), 2)
-	sumSquares := math.Pow(count*s.StdDev(), 2) + sumSquared/count
-	if math.IsNaN(sumSquares) {
-		return 0.0
-	}
-	return sumSquares
-}
-func sumSquaresTimer(t metrics.Timer) float64 {
-	count := float64(t.Count())
-	sumSquared := math.Pow(count*t.Mean(), 2)
-	sumSquares := math.Pow(count*t.StdDev(), 2) + sumSquared/count
-	if math.IsNaN(sumSquares) {
-		return 0.0
-	}
-	return sumSquares
-}
-
-func (self *Reporter) BuildRequest(now time.Time, r metrics.Registry) (snapshot Batch, err error) {
-	snapshot = Batch{
-		// coerce timestamps to a stepping fn so that they line up in Librato graphs
-		MeasureTime: (now.Unix() / self.intervalSec) * self.intervalSec,
-		Source:      self.Source,
-	}
-	snapshot.Gauges = make([]Measurement, 0)
-	snapshot.Counters = make([]Measurement, 0)
-	histogramGaugeCount := 1 + len(self.Percentiles)
-	r.Each(func(name string, metric interface{}) {
-		if self.Namespace != "" {
-			name = fmt.Sprintf("%s.%s", self.Namespace, name)
-		}
-		measurement := Measurement{}
-		measurement[Period] = self.Interval.Seconds()
-		switch m := metric.(type) {
-		case metrics.Counter:
-			if m.Count() > 0 {
-				measurement[Name] = fmt.Sprintf("%s.%s", name, "count")
-				measurement[Value] = float64(m.Count())
-				measurement[Attributes] = map[string]interface{}{
-					DisplayUnitsLong:  Operations,
-					DisplayUnitsShort: OperationsShort,
-					DisplayMin:        "0",
-				}
-				snapshot.Counters = append(snapshot.Counters, measurement)
-			}
-		case metrics.Gauge:
-			measurement[Name] = name
-			measurement[Value] = float64(m.Value())
-			snapshot.Gauges = append(snapshot.Gauges, measurement)
-		case metrics.GaugeFloat64:
-			measurement[Name] = name
-			measurement[Value] = float64(m.Value())
-			snapshot.Gauges = append(snapshot.Gauges, measurement)
-		case metrics.Histogram:
-			if m.Count() > 0 {
-				gauges := make([]Measurement, histogramGaugeCount, histogramGaugeCount)
-				s := m.Sample()
-				measurement[Name] = fmt.Sprintf("%s.%s", name, "hist")
-				measurement[Count] = uint64(s.Count())
-				measurement[Max] = float64(s.Max())
-				measurement[Min] = float64(s.Min())
-				measurement[Sum] = float64(s.Sum())
-				measurement[SumSquares] = sumSquares(s)
-				gauges[0] = measurement
-				for i, p := range self.Percentiles {
-					gauges[i+1] = Measurement{
-						Name:   fmt.Sprintf("%s.%.2f", measurement[Name], p),
-						Value:  s.Percentile(p),
-						Period: measurement[Period],
-					}
-				}
-				snapshot.Gauges = append(snapshot.Gauges, gauges...)
-			}
-		case metrics.Meter:
-			measurement[Name] = name
-			measurement[Value] = float64(m.Count())
-			snapshot.Counters = append(snapshot.Counters, measurement)
-			snapshot.Gauges = append(snapshot.Gauges,
-				Measurement{
-					Name:   fmt.Sprintf("%s.%s", name, "1min"),
-					Value:  m.Rate1(),
-					Period: int64(self.Interval.Seconds()),
-					Attributes: map[string]interface{}{
-						DisplayUnitsLong:  Operations,
-						DisplayUnitsShort: OperationsShort,
-						DisplayMin:        "0",
-					},
-				},
-				Measurement{
-					Name:   fmt.Sprintf("%s.%s", name, "5min"),
-					Value:  m.Rate5(),
-					Period: int64(self.Interval.Seconds()),
-					Attributes: map[string]interface{}{
-						DisplayUnitsLong:  Operations,
-						DisplayUnitsShort: OperationsShort,
-						DisplayMin:        "0",
-					},
-				},
-				Measurement{
-					Name:   fmt.Sprintf("%s.%s", name, "15min"),
-					Value:  m.Rate15(),
-					Period: int64(self.Interval.Seconds()),
-					Attributes: map[string]interface{}{
-						DisplayUnitsLong:  Operations,
-						DisplayUnitsShort: OperationsShort,
-						DisplayMin:        "0",
-					},
-				},
-			)
-		case metrics.Timer:
-			measurement[Name] = name
-			measurement[Value] = float64(m.Count())
-			snapshot.Counters = append(snapshot.Counters, measurement)
-			if m.Count() > 0 {
-				libratoName := fmt.Sprintf("%s.%s", name, "timer.mean")
-				gauges := make([]Measurement, histogramGaugeCount, histogramGaugeCount)
-				gauges[0] = Measurement{
-					Name:       libratoName,
-					Count:      uint64(m.Count()),
-					Sum:        m.Mean() * float64(m.Count()),
-					Max:        float64(m.Max()),
-					Min:        float64(m.Min()),
-					SumSquares: sumSquaresTimer(m),
-					Period:     int64(self.Interval.Seconds()),
-					Attributes: self.TimerAttributes,
-				}
-				for i, p := range self.Percentiles {
-					gauges[i+1] = Measurement{
-						Name:       fmt.Sprintf("%s.timer.%2.0f", name, p*100),
-						Value:      m.Percentile(p),
-						Period:     int64(self.Interval.Seconds()),
-						Attributes: self.TimerAttributes,
-					}
-				}
-				snapshot.Gauges = append(snapshot.Gauges, gauges...)
-				snapshot.Gauges = append(snapshot.Gauges,
-					Measurement{
-						Name:   fmt.Sprintf("%s.%s", name, "rate.1min"),
-						Value:  m.Rate1(),
-						Period: int64(self.Interval.Seconds()),
-						Attributes: map[string]interface{}{
-							DisplayUnitsLong:  Operations,
-							DisplayUnitsShort: OperationsShort,
-							DisplayMin:        "0",
-						},
-					},
-					Measurement{
-						Name:   fmt.Sprintf("%s.%s", name, "rate.5min"),
-						Value:  m.Rate5(),
-						Period: int64(self.Interval.Seconds()),
-						Attributes: map[string]interface{}{
-							DisplayUnitsLong:  Operations,
-							DisplayUnitsShort: OperationsShort,
-							DisplayMin:        "0",
-						},
-					},
-					Measurement{
-						Name:   fmt.Sprintf("%s.%s", name, "rate.15min"),
-						Value:  m.Rate15(),
-						Period: int64(self.Interval.Seconds()),
-						Attributes: map[string]interface{}{
-							DisplayUnitsLong:  Operations,
-							DisplayUnitsShort: OperationsShort,
-							DisplayMin:        "0",
-						},
-					},
-				)
-			}
-		}
-	})
-	return
-}

+ 0 - 69
Godeps/_workspace/src/github.com/rcrowley/go-metrics/stathat/stathat.go

@@ -1,69 +0,0 @@
-// Metrics output to StatHat.
-package stathat
-
-import (
-	"github.com/rcrowley/go-metrics"
-	"github.com/stathat/go"
-	"log"
-	"time"
-)
-
-func Stathat(r metrics.Registry, d time.Duration, userkey string) {
-	for {
-		if err := sh(r, userkey); nil != err {
-			log.Println(err)
-		}
-		time.Sleep(d)
-	}
-}
-
-func sh(r metrics.Registry, userkey string) error {
-	r.Each(func(name string, i interface{}) {
-		switch metric := i.(type) {
-		case metrics.Counter:
-			stathat.PostEZCount(name, userkey, int(metric.Count()))
-		case metrics.Gauge:
-			stathat.PostEZValue(name, userkey, float64(metric.Value()))
-		case metrics.GaugeFloat64:
-			stathat.PostEZValue(name, userkey, float64(metric.Value()))
-		case metrics.Histogram:
-			h := metric.Snapshot()
-			ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
-			stathat.PostEZCount(name+".count", userkey, int(h.Count()))
-			stathat.PostEZValue(name+".min", userkey, float64(h.Min()))
-			stathat.PostEZValue(name+".max", userkey, float64(h.Max()))
-			stathat.PostEZValue(name+".mean", userkey, float64(h.Mean()))
-			stathat.PostEZValue(name+".std-dev", userkey, float64(h.StdDev()))
-			stathat.PostEZValue(name+".50-percentile", userkey, float64(ps[0]))
-			stathat.PostEZValue(name+".75-percentile", userkey, float64(ps[1]))
-			stathat.PostEZValue(name+".95-percentile", userkey, float64(ps[2]))
-			stathat.PostEZValue(name+".99-percentile", userkey, float64(ps[3]))
-			stathat.PostEZValue(name+".999-percentile", userkey, float64(ps[4]))
-		case metrics.Meter:
-			m := metric.Snapshot()
-			stathat.PostEZCount(name+".count", userkey, int(m.Count()))
-			stathat.PostEZValue(name+".one-minute", userkey, float64(m.Rate1()))
-			stathat.PostEZValue(name+".five-minute", userkey, float64(m.Rate5()))
-			stathat.PostEZValue(name+".fifteen-minute", userkey, float64(m.Rate15()))
-			stathat.PostEZValue(name+".mean", userkey, float64(m.RateMean()))
-		case metrics.Timer:
-			t := metric.Snapshot()
-			ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
-			stathat.PostEZCount(name+".count", userkey, int(t.Count()))
-			stathat.PostEZValue(name+".min", userkey, float64(t.Min()))
-			stathat.PostEZValue(name+".max", userkey, float64(t.Max()))
-			stathat.PostEZValue(name+".mean", userkey, float64(t.Mean()))
-			stathat.PostEZValue(name+".std-dev", userkey, float64(t.StdDev()))
-			stathat.PostEZValue(name+".50-percentile", userkey, float64(ps[0]))
-			stathat.PostEZValue(name+".75-percentile", userkey, float64(ps[1]))
-			stathat.PostEZValue(name+".95-percentile", userkey, float64(ps[2]))
-			stathat.PostEZValue(name+".99-percentile", userkey, float64(ps[3]))
-			stathat.PostEZValue(name+".999-percentile", userkey, float64(ps[4]))
-			stathat.PostEZValue(name+".one-minute", userkey, float64(t.Rate1()))
-			stathat.PostEZValue(name+".five-minute", userkey, float64(t.Rate5()))
-			stathat.PostEZValue(name+".fifteen-minute", userkey, float64(t.Rate15()))
-			stathat.PostEZValue(name+".mean-rate", userkey, float64(t.RateMean()))
-		}
-	})
-	return nil
-}

+ 0 - 92
Godeps/_workspace/src/github.com/robertkrimen/otto/ast/comments.go

@@ -1,92 +0,0 @@
-package ast
-
-import (
-	"fmt"
-	"github.com/robertkrimen/otto/file"
-)
-
-// CommentPosition determines where the comment is in a given context
-type CommentPosition int
-
-const (
-	_        CommentPosition = iota
-	LEADING                  // Before the pertinent expression
-	TRAILING                 // After the pertinent expression
-	KEY                      // After a key or keyword
-	COLON                    // After a colon in a field declaration
-	FINAL                    // Final comments in a block, not belonging to a specific expression or the comment after a trailing , in an array or object literal
-	TBD
-)
-
-// Comment contains the data of the comment
-type Comment struct {
-	Begin    file.Idx
-	Text     string
-	Position CommentPosition
-}
-
-// String returns a stringified version of the position
-func (cp CommentPosition) String() string {
-	switch cp {
-	case LEADING:
-		return "Leading"
-	case TRAILING:
-		return "Trailing"
-	case KEY:
-		return "Key"
-	case COLON:
-		return "Colon"
-	case FINAL:
-		return "Final"
-	default:
-		return "???"
-	}
-}
-
-// String returns a stringified version of the comment
-func (c Comment) String() string {
-	return fmt.Sprintf("Comment: %v", c.Text)
-}
-
-// CommentMap is the data structure where all found comments are stored
-type CommentMap map[Node][]*Comment
-
-// AddComment adds a single comment to the map
-func (cm CommentMap) AddComment(node Node, comment *Comment) {
-	list := cm[node]
-	list = append(list, comment)
-
-	cm[node] = list
-}
-
-// AddComments adds a slice of comments, given a node and an updated position
-func (cm CommentMap) AddComments(node Node, comments []*Comment, position CommentPosition) {
-	for _, comment := range comments {
-		comment.Position = position
-		cm.AddComment(node, comment)
-	}
-}
-
-// Size returns the size of the map
-func (cm CommentMap) Size() int {
-	size := 0
-	for _, comments := range cm {
-		size += len(comments)
-	}
-
-	return size
-}
-
-// MoveComments moves comments with a given position from a node to another
-func (cm CommentMap) MoveComments(from, to Node, position CommentPosition) {
-	for i, c := range cm[from] {
-		if c.Position == position {
-			cm.AddComment(to, c)
-
-			// Remove the comment from the "from" slice
-			cm[from][i] = cm[from][len(cm[from])-1]
-			cm[from][len(cm[from])-1] = nil
-			cm[from] = cm[from][:len(cm[from])-1]
-		}
-	}
-}

+ 0 - 5
Godeps/_workspace/src/github.com/robertkrimen/otto/otto/Makefile

@@ -1,5 +0,0 @@
-.PHONY: build
-
-build:
-	go build -a
-	-gxc build-darwin-386 -a

+ 0 - 48
Godeps/_workspace/src/github.com/robertkrimen/otto/otto/main.go

@@ -1,48 +0,0 @@
-package main
-
-import (
-	"flag"
-	"fmt"
-	"io/ioutil"
-	"os"
-
-	"github.com/robertkrimen/otto"
-	"github.com/robertkrimen/otto/underscore"
-)
-
-var flag_underscore *bool = flag.Bool("underscore", true, "Load underscore into the runtime environment")
-
-func readSource(filename string) ([]byte, error) {
-	if filename == "" || filename == "-" {
-		return ioutil.ReadAll(os.Stdin)
-	}
-	return ioutil.ReadFile(filename)
-}
-
-func main() {
-	flag.Parse()
-
-	if !*flag_underscore {
-		underscore.Disable()
-	}
-
-	err := func() error {
-		src, err := readSource(flag.Arg(0))
-		if err != nil {
-			return err
-		}
-
-		vm := otto.New()
-		_, err = vm.Run(src)
-		return err
-	}()
-	if err != nil {
-		switch err := err.(type) {
-		case *otto.Error:
-			fmt.Print(err.String())
-		default:
-			fmt.Println(err)
-		}
-		os.Exit(64)
-	}
-}

+ 0 - 115
Godeps/_workspace/src/github.com/robertkrimen/otto/repl/repl.go

@@ -1,115 +0,0 @@
-// Package repl implements a REPL (read-eval-print loop) for otto.
-package repl
-
-import (
-	"fmt"
-	"io"
-	"strings"
-	"sync/atomic"
-
-	"github.com/robertkrimen/otto"
-	"gopkg.in/readline.v1"
-)
-
-var counter uint32
-
-// DebuggerHandler implements otto's debugger handler signature, providing a
-// simple drop-in debugger implementation.
-func DebuggerHandler(vm *otto.Otto) {
-	i := atomic.AddUint32(&counter, 1)
-
-	// purposefully ignoring the error here - we can't do anything useful with
-	// it except panicking, and that'd be pretty rude. it'd be easy enough for a
-	// consumer to define an equivalent function that _does_ panic if desired.
-	_ = RunWithPrompt(vm, fmt.Sprintf("DEBUGGER[%d]>", i))
-}
-
-// Run creates a REPL with the default prompt and no prelude.
-func Run(vm *otto.Otto) error {
-	return RunWithPromptAndPrelude(vm, "", "")
-}
-
-// RunWithPrompt runs a REPL with the given prompt and no prelude.
-func RunWithPrompt(vm *otto.Otto, prompt string) error {
-	return RunWithPromptAndPrelude(vm, prompt, "")
-}
-
-// RunWithPrelude runs a REPL with the default prompt and the given prelude.
-func RunWithPrelude(vm *otto.Otto, prelude string) error {
-	return RunWithPromptAndPrelude(vm, "", prelude)
-}
-
-// RunWithPromptAndPrelude runs a REPL with the given prompt and prelude.
-func RunWithPromptAndPrelude(vm *otto.Otto, prompt, prelude string) error {
-	if prompt == "" {
-		prompt = ">"
-	}
-
-	prompt = strings.Trim(prompt, " ")
-	prompt += " "
-
-	rl, err := readline.New(prompt)
-	if err != nil {
-		return err
-	}
-
-	if prelude != "" {
-		if _, err := io.Copy(rl.Stderr(), strings.NewReader(prelude+"\n")); err != nil {
-			return err
-		}
-
-		rl.Refresh()
-	}
-
-	var d []string
-
-	for {
-		l, err := rl.Readline()
-		if err != nil {
-			if err == readline.ErrInterrupt {
-				if d != nil {
-					d = nil
-
-					rl.SetPrompt(prompt)
-					rl.Refresh()
-
-					continue
-				}
-
-				break
-			}
-
-			return err
-		}
-
-		if l == "" {
-			continue
-		}
-
-		d = append(d, l)
-
-		s, err := vm.Compile("repl", strings.Join(d, "\n"))
-		if err != nil {
-			rl.SetPrompt(strings.Repeat(" ", len(prompt)))
-		} else {
-			rl.SetPrompt(prompt)
-
-			d = nil
-
-			v, err := vm.Eval(s)
-			if err != nil {
-				if oerr, ok := err.(*otto.Error); ok {
-					io.Copy(rl.Stdout(), strings.NewReader(oerr.String()))
-				} else {
-					io.Copy(rl.Stdout(), strings.NewReader(err.Error()))
-				}
-			} else {
-				rl.Stdout().Write([]byte(v.String() + "\n"))
-			}
-		}
-
-		rl.Refresh()
-	}
-
-	return rl.Close()
-}

+ 0 - 669
Godeps/_workspace/src/github.com/robertkrimen/otto/terst/terst.go

@@ -1,669 +0,0 @@
-// This file was AUTOMATICALLY GENERATED by terst-import (smuggol) from github.com/robertkrimen/terst
-
-/*
-Package terst is a terse (terst = test + terse), easy-to-use testing library for Go.
-
-terst is compatible with (and works via) the standard testing package: http://golang.org/pkg/testing
-
-    var is = terst.Is
-
-    func Test(t *testing.T) {
-        terst.Terst(t, func() {
-            is("abc", "abc")
-
-            is(1, ">", 0)
-
-            var abc []int
-            is(abc, nil)
-        }
-    }
-
-Do not import terst directly, instead use `terst-import` to copy it into your testing environment:
-
-https://github.com/robertkrimen/terst/tree/master/terst-import
-
-    $ go get github.com/robertkrimen/terst/terst-import
-
-    $ terst-import
-
-*/
-package terst
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"math/big"
-	"reflect"
-	"regexp"
-	"runtime"
-	"strings"
-	"sync"
-	"testing"
-	"time"
-)
-
-// Is compares two values (got & expect) and returns true if the comparison is true,
-// false otherwise. In addition, if the comparison is false, Is will report the error
-// in a manner similar to testing.T.Error(...). Is also takes an optional argument,
-// a comparator, that changes how the comparison is made.  The following
-// comparators are available:
-//
-//      ==      # got == expect (default)
-//      !=      # got != expect
-//
-//      >       # got > expect (float32, uint, uint16, int, int64, ...)
-//      >=      # got >= expect
-//      <       # got < expect
-//      <=      # got <= expect
-//
-//      =~      # regexp.MustCompile(expect).Match{String}(got)
-//      !~      # !regexp.MustCompile(expect).Match{String}(got)
-//
-// Basic usage with the default comparator (==):
-//
-//      Is(<got>, <expect>)
-//
-// Specifying a different comparator:
-//
-//      Is(<got>, <comparator>, <expect>)
-//
-// A simple comparison:
-//
-//      Is(2 + 2, 4)
-//
-// A bit trickier:
-//
-//      Is(1, ">", 0)
-//      Is(2 + 2, "!=", 5)
-//      Is("Nothing happens.", "=~", `ing(\s+)happens\.$`)
-//
-// Is should only be called under a Terst(t, ...) call. For a standalone version,
-// use IsErr. If no scope is found and the comparison is false, then Is will panic the error.
-//
-func Is(arguments ...interface{}) bool {
-	err := IsErr(arguments...)
-	if err != nil {
-		call := Caller()
-		if call == nil {
-			panic(err)
-		}
-		call.Error(err)
-		return false
-	}
-	return true
-}
-
-type (
-	// ErrFail indicates a comparison failure (e.g. 0 > 1).
-	ErrFail error
-
-	// ErrInvalid indicates an invalid comparison (e.g. bool == string).
-	ErrInvalid error
-)
-
-var errInvalid = errors.New("invalid")
-
-var registry = struct {
-	table map[uintptr]*_scope
-	lock  sync.RWMutex
-}{
-	table: map[uintptr]*_scope{},
-}
-
-func registerScope(pc uintptr, scope *_scope) {
-	registry.lock.Lock()
-	defer registry.lock.Unlock()
-	registry.table[pc] = scope
-}
-
-func scope() *_scope {
-	scope, _ := findScope()
-	return scope
-}
-
-func floatCompare(a float64, b float64) int {
-	if a > b {
-		return 1
-	} else if a < b {
-		return -1
-	}
-	// NaN == NaN
-	return 0
-}
-
-func bigIntCompare(a *big.Int, b *big.Int) int {
-	return a.Cmp(b)
-}
-
-func bigInt(value int64) *big.Int {
-	return big.NewInt(value)
-}
-
-func bigUint(value uint64) *big.Int {
-	return big.NewInt(0).SetUint64(value)
-}
-
-type _toString interface {
-	String() string
-}
-
-func toString(value interface{}) (string, error) {
-	switch value := value.(type) {
-	case string:
-		return value, nil
-	case _toString:
-		return value.String(), nil
-	case error:
-		return value.Error(), nil
-	}
-	return "", errInvalid
-}
-
-func matchString(got string, expect *regexp.Regexp) (int, error) {
-	if expect.MatchString(got) {
-		return 0, nil
-	}
-	return -1, nil
-}
-
-func match(got []byte, expect *regexp.Regexp) (int, error) {
-	if expect.Match(got) {
-		return 0, nil
-	}
-	return -1, nil
-}
-
-func compareMatch(got, expect interface{}) (int, error) {
-	switch got := got.(type) {
-	case []byte:
-		switch expect := expect.(type) {
-		case string:
-			matcher, err := regexp.Compile(expect)
-			if err != nil {
-				return 0, err
-			}
-			return match(got, matcher)
-		case *regexp.Regexp:
-			return match(got, expect)
-		}
-	default:
-		if got, err := toString(got); err == nil {
-			switch expect := expect.(type) {
-			case string:
-				matcher, err := regexp.Compile(expect)
-				if err != nil {
-					return 0, err
-				}
-				return matchString(got, matcher)
-			case *regexp.Regexp:
-				return matchString(got, expect)
-			}
-		} else {
-			return 0, err
-		}
-	}
-	return 0, errInvalid
-}
-
-func floatPromote(value reflect.Value) (float64, error) {
-	kind := value.Kind()
-	if reflect.Int <= kind && kind <= reflect.Int64 {
-		return float64(value.Int()), nil
-	}
-	if reflect.Uint <= kind && kind <= reflect.Uint64 {
-		return float64(value.Uint()), nil
-	}
-	if reflect.Float32 <= kind && kind <= reflect.Float64 {
-		return value.Float(), nil
-	}
-	return 0, errInvalid
-}
-
-func bigIntPromote(value reflect.Value) (*big.Int, error) {
-	kind := value.Kind()
-	if reflect.Int <= kind && kind <= reflect.Int64 {
-		return bigInt(value.Int()), nil
-	}
-	if reflect.Uint <= kind && kind <= reflect.Uint64 {
-		return bigUint(value.Uint()), nil
-	}
-	return nil, errInvalid
-}
-
-func compareOther(got, expect interface{}) (int, error) {
-	{
-		switch expect.(type) {
-		case float32, float64:
-			return compareNumber(got, expect)
-		case uint, uint8, uint16, uint32, uint64:
-			return compareNumber(got, expect)
-		case int, int8, int16, int32, int64:
-			return compareNumber(got, expect)
-		case string:
-			var err error
-			got, err = toString(got)
-			if err != nil {
-				return 0, err
-			}
-		case nil:
-			got := reflect.ValueOf(got)
-			switch got.Kind() {
-			case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.Slice, reflect.Interface:
-				if got.IsNil() {
-					return 0, nil
-				}
-				return -1, nil
-			case reflect.Invalid: // reflect.Invalid: var abc interface{} = nil
-				return 0, nil
-			}
-			return 0, errInvalid
-		}
-	}
-
-	if reflect.ValueOf(got).Type() != reflect.ValueOf(expect).Type() {
-		return 0, errInvalid
-	}
-
-	if reflect.DeepEqual(got, expect) {
-		return 0, nil
-	}
-	return -1, nil
-}
-
-func compareNumber(got, expect interface{}) (int, error) {
-	{
-		got := reflect.ValueOf(got)
-		k0 := got.Kind()
-		expect := reflect.ValueOf(expect)
-		k1 := expect.Kind()
-		if reflect.Float32 <= k0 && k0 <= reflect.Float64 ||
-			reflect.Float32 <= k1 && k1 <= reflect.Float64 {
-			got, err := floatPromote(got)
-			if err != nil {
-				return 0, err
-			}
-			expect, err := floatPromote(expect)
-			if err != nil {
-				return 0, err
-			}
-			return floatCompare(got, expect), nil
-		} else {
-			got, err := bigIntPromote(got)
-			if err != nil {
-				return 0, err
-			}
-			expect, err := bigIntPromote(expect)
-			if err != nil {
-				return 0, err
-			}
-			return got.Cmp(expect), nil
-		}
-	}
-
-	return 0, errInvalid
-}
-
-// IsErr compares two values (got & expect) and returns nil if the comparison is true, an ErrFail if
-// the comparison is false, or an ErrInvalid if the comparison is invalid. IsErr also
-// takes an optional argument, a comparator, that changes how the comparison is made.
-//
-// Is & IsErr are similar but different:
-//
-//      Is(...)     // Should only be called within a Terst(...) call
-//      IsErr(...)  // A standalone comparator, the same as Is, just without the automatic reporting
-//
-func IsErr(arguments ...interface{}) error {
-	var got, expect interface{}
-	comparator := "=="
-	switch len(arguments) {
-	case 0, 1:
-		return fmt.Errorf("invalid number of arguments to IsErr: %d", len(arguments))
-	case 2:
-		got, expect = arguments[0], arguments[1]
-	default:
-		if value, ok := arguments[1].(string); ok {
-			comparator = value
-		} else {
-			return fmt.Errorf("invalid comparator: %v", arguments[1])
-		}
-		got, expect = arguments[0], arguments[2]
-	}
-
-	var result int
-	var err error
-
-	switch comparator {
-	case "<", "<=", ">", ">=":
-		result, err = compareNumber(got, expect)
-	case "=~", "!~":
-		result, err = compareMatch(got, expect)
-	case "==", "!=":
-		result, err = compareOther(got, expect)
-	default:
-		return fmt.Errorf("invalid comparator: %s", comparator)
-	}
-
-	if err == errInvalid {
-		return ErrInvalid(fmt.Errorf(
-			"\nINVALID (%s):\n        got: %v (%T)\n   expected: %v (%T)",
-			comparator,
-			got, got,
-			expect, expect,
-		))
-	} else if err != nil {
-		return err
-	}
-
-	equality, pass := false, false
-
-	switch comparator {
-	case "==", "=~":
-		equality = true
-		pass = result == 0
-	case "!=", "!~":
-		equality = true
-		pass = result != 0
-	case "<":
-		pass = result < 0
-	case "<=":
-		pass = result <= 0
-	case ">":
-		pass = result > 0
-	case ">=":
-		pass = result >= 0
-	}
-
-	if !pass {
-		if equality {
-			if comparator[1] == '~' {
-				if value, ok := got.([]byte); ok {
-					return ErrFail(fmt.Errorf(
-						"\nFAIL (%s)\n     got: %s %v%s\nexpected: %v%s",
-						comparator,
-						value, got, typeKindString(got),
-						expect, typeKindString(expect),
-					))
-				}
-			}
-			return ErrFail(fmt.Errorf(
-				"\nFAIL (%s)\n     got: %v%s\nexpected: %v%s",
-				comparator,
-				got, typeKindString(got),
-				expect, typeKindString(expect),
-			))
-		}
-		return ErrFail(fmt.Errorf(
-			"\nFAIL (%s)\n     got: %v%s\nexpected: %s %v%s",
-			comparator,
-			got, typeKindString(got),
-			comparator, expect, typeKindString(expect),
-		))
-	}
-
-	return nil
-}
-
-func typeKindString(value interface{}) string {
-	reflectValue := reflect.ValueOf(value)
-	kind := reflectValue.Kind().String()
-	result := fmt.Sprintf("%T", value)
-	if kind == result {
-		if kind == "string" {
-			return ""
-		}
-		return fmt.Sprintf(" (%T)", value)
-	}
-	return fmt.Sprintf(" (%T=%s)", value, kind)
-}
-
-func (scope *_scope) reset() {
-	scope.name = ""
-	scope.output = scope.output[:]
-	scope.start = time.Time{}
-	scope.duration = 0
-}
-
-// Terst creates a testing scope, where Is can be called and errors will be reported
-// according to the top-level location of the comparison, and not where the Is call
-// actually takes place. For example:
-//
-//      func test(value int) {
-//          Is(value, 5) // <--- This failure is reported below.
-//      }
-//
-//      Terst(t, func(){
-//
-//          Is(2, ">", 3) // <--- An error is reported here.
-//
-//          test(5) // <--- An error is reported here.
-//
-//      })
-//
-func Terst(t *testing.T, arguments ...func()) {
-	scope := &_scope{
-		t: t,
-	}
-
-	pc, _, _, ok := runtime.Caller(1) // TODO Associate with the Test... func
-	if !ok {
-		panic("Here be dragons.")
-	}
-
-	_, scope.testFunc = findTestFunc()
-
-	registerScope(pc, scope)
-
-	for _, fn := range arguments {
-		func() {
-			scope.reset()
-			name := scope.testFunc.Name()
-			index := strings.LastIndex(scope.testFunc.Name(), ".")
-			if index >= 0 {
-				name = name[index+1:] + "(Terst)"
-			} else {
-				name = "(Terst)"
-			}
-			name = "(Terst)"
-			scope.name = name
-			scope.start = time.Now()
-			defer func() {
-				scope.duration = time.Now().Sub(scope.start)
-				if err := recover(); err != nil {
-					scope.t.Fail()
-					scope.report()
-					panic(err)
-				}
-				scope.report()
-			}()
-			fn()
-		}()
-	}
-}
-
-// From "testing"
-func (scope *_scope) report() {
-	format := "~~~ %s: (Terst)\n%s"
-	if scope.t.Failed() {
-		fmt.Printf(format, "FAIL", scope.output)
-	} else if testing.Verbose() && len(scope.output) > 0 {
-		fmt.Printf(format, "PASS", scope.output)
-	}
-}
-
-func (scope *_scope) log(call _entry, str string) {
-	scope.mu.Lock()
-	defer scope.mu.Unlock()
-	scope.output = append(scope.output, decorate(call, str)...)
-}
-
-// decorate prefixes the string with the file and line of the call site
-// and inserts the final newline if needed and indentation tabs for formascing.
-func decorate(call _entry, s string) string {
-
-	file, line := call.File, call.Line
-	if call.PC > 0 {
-		// Truncate file name at last file name separator.
-		if index := strings.LastIndex(file, "/"); index >= 0 {
-			file = file[index+1:]
-		} else if index = strings.LastIndex(file, "\\"); index >= 0 {
-			file = file[index+1:]
-		}
-	} else {
-		file = "???"
-		line = 1
-	}
-	buf := new(bytes.Buffer)
-	// Every line is indented at least one tab.
-	buf.WriteByte('\t')
-	fmt.Fprintf(buf, "%s:%d: ", file, line)
-	lines := strings.Split(s, "\n")
-	if l := len(lines); l > 1 && lines[l-1] == "" {
-		lines = lines[:l-1]
-	}
-	for i, line := range lines {
-		if i > 0 {
-			// Second and subsequent lines are indented an extra tab.
-			buf.WriteString("\n\t\t")
-		}
-		buf.WriteString(line)
-	}
-	buf.WriteByte('\n')
-	return buf.String()
-}
-
-func findScope() (*_scope, _entry) {
-	registry.lock.RLock()
-	defer registry.lock.RUnlock()
-	table := registry.table
-	depth := 2 // Starting depth
-	call := _entry{}
-	for {
-		pc, _, _, ok := runtime.Caller(depth)
-		if !ok {
-			break
-		}
-		if scope, exists := table[pc]; exists {
-			pc, file, line, _ := runtime.Caller(depth - 3) // Terst(...) + func(){}() + fn() => ???()
-			call.PC = pc
-			call.File = file
-			call.Line = line
-			return scope, call
-		}
-		depth++
-	}
-	return nil, _entry{}
-}
-
-// Call is a reference to a line immediately under a Terst testing scope.
-type Call struct {
-	scope *_scope
-	entry _entry
-}
-
-// Caller will search the stack, looking for a Terst testing scope. If a scope
-// is found, then Caller returns a Call for logging errors, accessing testing.T, etc.
-// If no scope is found, Caller returns nil.
-func Caller() *Call {
-	scope, entry := findScope()
-	if scope == nil {
-		return nil
-	}
-	return &Call{
-		scope: scope,
-		entry: entry,
-	}
-}
-
-// TestFunc returns the *runtime.Func entry for the top-level Test...(t testing.T)
-// function.
-func (cl *Call) TestFunc() *runtime.Func {
-	return cl.scope.testFunc
-}
-
-// T returns the original testing.T passed to Terst(...)
-func (cl *Call) T() *testing.T {
-	return cl.scope.t
-}
-
-// Log is the terst version of `testing.T.Log`
-func (cl *Call) Log(arguments ...interface{}) {
-	cl.scope.log(cl.entry, fmt.Sprintln(arguments...))
-}
-
-// Logf is the terst version of `testing.T.Logf`
-func (cl *Call) Logf(format string, arguments ...interface{}) {
-	cl.scope.log(cl.entry, fmt.Sprintf(format, arguments...))
-}
-
-// Error is the terst version of `testing.T.Error`
-func (cl *Call) Error(arguments ...interface{}) {
-	cl.scope.log(cl.entry, fmt.Sprintln(arguments...))
-	cl.scope.t.Fail()
-}
-
-// Errorf is the terst version of `testing.T.Errorf`
-func (cl *Call) Errorf(format string, arguments ...interface{}) {
-	cl.scope.log(cl.entry, fmt.Sprintf(format, arguments...))
-	cl.scope.t.Fail()
-}
-
-// Skip is the terst version of `testing.T.Skip`
-func (cl *Call) Skip(arguments ...interface{}) {
-	cl.scope.log(cl.entry, fmt.Sprintln(arguments...))
-	cl.scope.t.SkipNow()
-}
-
-// Skipf is the terst version of `testing.T.Skipf`
-func (cl *Call) Skipf(format string, arguments ...interface{}) {
-	cl.scope.log(cl.entry, fmt.Sprintf(format, arguments...))
-	cl.scope.t.SkipNow()
-}
-
-type _scope struct {
-	t        *testing.T
-	testFunc *runtime.Func
-	name     string
-	mu       sync.RWMutex
-	output   []byte
-	start    time.Time
-	duration time.Duration
-}
-
-type _entry struct {
-	PC   uintptr
-	File string
-	Line int
-	Func *runtime.Func
-}
-
-func _findFunc(match string) (_entry, *runtime.Func) {
-	depth := 2 // Starting depth
-	for {
-		pc, file, line, ok := runtime.Caller(depth)
-		if !ok {
-			break
-		}
-		fn := runtime.FuncForPC(pc)
-		name := fn.Name()
-		if index := strings.LastIndex(name, match); index >= 0 {
-			// Assume we have an instance of TestXyzzy in a _test file
-			return _entry{
-				PC:   pc,
-				File: file,
-				Line: line,
-				Func: fn,
-			}, fn
-		}
-		depth++
-	}
-	return _entry{}, nil
-}
-
-func findTestFunc() (_entry, *runtime.Func) {
-	return _findFunc(".Test")
-}
-
-func findTerstFunc() (_entry, *runtime.Func) {
-	return _findFunc(".Terst")
-}

+ 0 - 26
Godeps/_workspace/src/github.com/robertkrimen/otto/test/Makefile

@@ -1,26 +0,0 @@
-.PHONY: test fetch clean build err report
-
-TESTER := tester
-
-test: $(TESTER)
-	for test in test-*.js; do ./$^ -test=true $$test 1>/dev/null || exit 1; done
-	@echo PASS
-
-report: $(TESTER)
-	./$^ -report | grep -v "MT READY"
-
-fetch: $(TESTER)
-	./$^ fetch
-
-build:
-	go build -a -o $(TESTER)
-
-$(TESTER): tester.go
-	$(MAKE) build
-
-clean:
-	rm -f test-*.js
-	rm -f $(TESTER)
-
-err: $(TESTER)
-	for test in test-*.js; do ./$^ $$test; done 2>$@

+ 0 - 196
Godeps/_workspace/src/github.com/robertkrimen/otto/test/tester.go

@@ -1,196 +0,0 @@
-package main
-
-import (
-	"encoding/json"
-	"flag"
-	"fmt"
-	"io/ioutil"
-	"net/http"
-	"os"
-	"regexp"
-	"strings"
-	"sync"
-	"text/tabwriter"
-
-	"github.com/robertkrimen/otto"
-	"github.com/robertkrimen/otto/parser"
-)
-
-var flag_test *bool = flag.Bool("test", false, "")
-var flag_report *bool = flag.Bool("report", false, "")
-
-var match_ReferenceError_not_defined = regexp.MustCompile(`^ReferenceError: \S+ is not defined$`)
-var match_lookahead = regexp.MustCompile(`Invalid regular expression: re2: Invalid \(\?[=!]\) <lookahead>`)
-var match_backreference = regexp.MustCompile(`Invalid regular expression: re2: Invalid \\\d <backreference>`)
-var match_TypeError_undefined = regexp.MustCompile(`^TypeError: Cannot access member '[^']+' of undefined$`)
-
-var target = map[string]string{
-	"test-angular-bindonce.js": "fail",  // (anonymous): Line 1:944 Unexpected token ( (and 40 more errors)
-	"test-jsforce.js":          "fail",  // (anonymous): Line 9:28329 RuneError (and 5 more errors)
-	"test-chaplin.js":          "parse", // Error: Chaplin requires Common.js or AMD modules
-	"test-dropbox.js.js":       "parse", // Error: dropbox.js loaded in an unsupported JavaScript environment.
-	"test-epitome.js":          "parse", // TypeError: undefined is not a function
-	"test-portal.js":           "parse", // TypeError
-	"test-reactive-coffee.js":  "parse", // Dependencies are not met for reactive: _ and $ not found
-	"test-scriptaculous.js":    "parse", // script.aculo.us requires the Prototype JavaScript framework >= 1.6.0.3
-	"test-waypoints.js":        "parse", // TypeError: undefined is not a function
-	"test-webuploader.js":      "parse", // Error: `jQuery` is undefined
-	"test-xuijs.js":            "parse", // TypeError: undefined is not a function
-}
-
-// http://cdnjs.com/
-// http://api.cdnjs.com/libraries
-
-func fetch(name, location string) error {
-	response, err := http.Get(location)
-	if err != nil {
-		return err
-	}
-	defer response.Body.Close()
-	body, err := ioutil.ReadAll(response.Body)
-	if err != nil {
-		return err
-	}
-
-	if !strings.HasSuffix(location, ".js") {
-		return nil
-	}
-
-	filename := "test-" + name + ".js"
-	fmt.Println(filename, len(body))
-	return ioutil.WriteFile(filename, body, 0644)
-}
-
-func test(filename string) error {
-	script, err := ioutil.ReadFile(filename)
-	if err != nil {
-		return err
-	}
-
-	if !*flag_report {
-		fmt.Fprintln(os.Stdout, filename, len(script))
-	}
-
-	parse := false
-	option := target[filename]
-
-	if option != "parse" {
-		vm := otto.New()
-		_, err = vm.Run(string(script))
-		if err != nil {
-			value := err.Error()
-			switch {
-			case match_ReferenceError_not_defined.MatchString(value):
-			case match_TypeError_undefined.MatchString(value):
-			case match_lookahead.MatchString(value):
-			case match_backreference.MatchString(value):
-			default:
-				return err
-			}
-			parse = true
-		}
-	}
-
-	if parse {
-		_, err = parser.ParseFile(nil, filename, string(script), parser.IgnoreRegExpErrors)
-		if err != nil {
-			return err
-		}
-		target[filename] = "parse"
-	}
-
-	return nil
-}
-
-func main() {
-	flag.Parse()
-
-	filename := ""
-
-	err := func() error {
-
-		if flag.Arg(0) == "fetch" {
-			response, err := http.Get("http://api.cdnjs.com/libraries")
-			if err != nil {
-				return err
-			}
-			defer response.Body.Close()
-			body, err := ioutil.ReadAll(response.Body)
-			if err != nil {
-				return err
-			}
-
-			var tmp map[string]interface{}
-
-			err = json.Unmarshal(body, &tmp)
-			if err != nil {
-				return err
-			}
-
-			var wg sync.WaitGroup
-
-			for _, value := range tmp["results"].([]interface{}) {
-				wg.Add(1)
-				library := value.(map[string]interface{})
-				go func() {
-					defer wg.Done()
-					fetch(library["name"].(string), library["latest"].(string))
-				}()
-			}
-
-			wg.Wait()
-
-			return nil
-		}
-
-		if *flag_report {
-			files, err := ioutil.ReadDir(".")
-			if err != nil {
-				return err
-			}
-			writer := tabwriter.NewWriter(os.Stdout, 0, 8, 0, '\t', 0)
-			fmt.Fprintln(writer, "", "\t| Status")
-			fmt.Fprintln(writer, "---", "\t| ---")
-			for _, file := range files {
-				filename := file.Name()
-				if !strings.HasPrefix(filename, "test-") {
-					continue
-				}
-				err := test(filename)
-				option := target[filename]
-				name := strings.TrimPrefix(strings.TrimSuffix(filename, ".js"), "test-")
-				if err == nil {
-					switch option {
-					case "":
-						fmt.Fprintln(writer, name, "\t| pass")
-					case "parse":
-						fmt.Fprintln(writer, name, "\t| pass (parse)")
-					case "re2":
-						continue
-						fmt.Fprintln(writer, name, "\t| unknown (re2)")
-					}
-				} else {
-					fmt.Fprintln(writer, name, "\t| fail")
-				}
-			}
-			writer.Flush()
-			return nil
-		}
-
-		filename = flag.Arg(0)
-		return test(filename)
-
-	}()
-	if err != nil {
-		if filename != "" {
-			if *flag_test && target[filename] == "fail" {
-				goto exit
-			}
-			fmt.Fprintf(os.Stderr, "%s: %s\n", filename, err.Error())
-		} else {
-			fmt.Fprintln(os.Stderr, err)
-		}
-		os.Exit(64)
-	}
-exit:
-}

+ 0 - 13
Godeps/_workspace/src/github.com/robertkrimen/otto/type_error.go

@@ -1,13 +0,0 @@
-package otto
-
-func (rt *_runtime) newErrorObject(name string, message Value) *_object {
-	self := rt.newClassObject("Error")
-	if message.IsDefined() {
-		msg := message.string()
-		self.defineProperty("message", toValue_string(msg), 0111, false)
-		self.value = newError(rt, name, msg)
-	} else {
-		self.value = newError(rt, name)
-	}
-	return self
-}

+ 0 - 11
Godeps/_workspace/src/github.com/robertkrimen/otto/underscore/Makefile

@@ -1,11 +0,0 @@
-.PHONY: source
-
-source: source.go
-
-underscore.js:
-	curl -kL http://underscorejs.org/underscore.js > $@
-
-source.go: underscore.js
-	go-bindata -f underscore -p underscore -u true < $< 2>/dev/null | grep -v '^//' | gofmt > $@
-	head -4 $< >> $@
-	mv $< ..

+ 0 - 53
Godeps/_workspace/src/github.com/robertkrimen/otto/underscore/README.markdown

@@ -1,53 +0,0 @@
-# underscore
---
-    import "github.com/robertkrimen/otto/underscore"
-
-Package underscore contains the source for the JavaScript utility-belt library.
-
-    import (
-    	_ "github.com/robertkrimen/otto/underscore"
-    )
-    // Every Otto runtime will now include underscore
-
-http://underscorejs.org
-
-https://github.com/documentcloud/underscore
-
-By importing this package, you'll automatically load underscore every time you
-create a new Otto runtime.
-
-To prevent this behavior, you can do the following:
-
-    import (
-    	"github.com/robertkrimen/otto/underscore"
-    )
-
-    func init() {
-    	underscore.Disable()
-    }
-
-## Usage
-
-#### func  Disable
-
-```go
-func Disable()
-```
-Disable underscore runtime inclusion.
-
-#### func  Enable
-
-```go
-func Enable()
-```
-Enable underscore runtime inclusion.
-
-#### func  Source
-
-```go
-func Source() string
-```
-Source returns the underscore source.
-
---
-**godocdown** http://github.com/robertkrimen/godocdown

+ 0 - 3463
Godeps/_workspace/src/github.com/robertkrimen/otto/underscore/source.go

@@ -1,3463 +0,0 @@
-package underscore
-
-func underscore() []byte {
-	return []byte{
-		0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x6e, 0x64, 0x65, 0x72,
-		0x73, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6a, 0x73, 0x20, 0x31, 0x2e, 0x34,
-		0x2e, 0x34, 0x0a, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x74,
-		0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63,
-		0x6f, 0x72, 0x65, 0x6a, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x0a, 0x2f, 0x2f,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x30,
-		0x39, 0x2d, 0x32, 0x30, 0x31, 0x33, 0x20, 0x4a, 0x65, 0x72, 0x65, 0x6d,
-		0x79, 0x20, 0x41, 0x73, 0x68, 0x6b, 0x65, 0x6e, 0x61, 0x73, 0x2c, 0x20,
-		0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x75,
-		0x64, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x0a, 0x2f, 0x2f, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x55, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65,
-		0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x66, 0x72, 0x65, 0x65,
-		0x6c, 0x79, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
-		0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x4d, 0x49, 0x54, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65,
-		0x2e, 0x0a, 0x0a, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x29, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x42,
-		0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x73, 0x65, 0x74, 0x75,
-		0x70, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
-		0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x45, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73,
-		0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x6f,
-		0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x60, 0x77, 0x69, 0x6e, 0x64,
-		0x6f, 0x77, 0x60, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62,
-		0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x60,
-		0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x60, 0x20, 0x6f, 0x6e, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x0a, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x3d, 0x20,
-		0x74, 0x68, 0x69, 0x73, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x53, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65,
-		0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
-		0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x5f, 0x60, 0x20, 0x76,
-		0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x76,
-		0x61, 0x72, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x55,
-		0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x3d, 0x20,
-		0x72, 0x6f, 0x6f, 0x74, 0x2e, 0x5f, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x45, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x20,
-		0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x20, 0x67, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x72, 0x65,
-		0x61, 0x6b, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20,
-		0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69,
-		0x6f, 0x6e, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x62, 0x72,
-		0x65, 0x61, 0x6b, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x53, 0x61, 0x76, 0x65, 0x20, 0x62,
-		0x79, 0x74, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
-		0x6d, 0x69, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x28, 0x62, 0x75,
-		0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x67, 0x7a, 0x69, 0x70, 0x70, 0x65,
-		0x64, 0x29, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x0a,
-		0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50,
-		0x72, 0x6f, 0x74, 0x6f, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79,
-		0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20,
-		0x4f, 0x62, 0x6a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x20, 0x3d, 0x20, 0x4f,
-		0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74,
-		0x79, 0x70, 0x65, 0x2c, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x50, 0x72, 0x6f,
-		0x74, 0x6f, 0x20, 0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x3b,
-		0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74,
-		0x65, 0x20, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x20, 0x72, 0x65, 0x66, 0x65,
-		0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62,
-		0x6c, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x70, 0x65, 0x65,
-		0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20,
-		0x63, 0x6f, 0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x79,
-		0x70, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x70,
-		0x75, 0x73, 0x68, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50,
-		0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2c, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20,
-		0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73,
-		0x6c, 0x69, 0x63, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79,
-		0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74,
-		0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6f, 0x53, 0x74,
-		0x72, 0x69, 0x6e, 0x67, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-		0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x73, 0x4f, 0x77, 0x6e, 0x50, 0x72,
-		0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x4f,
-		0x62, 0x6a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x68, 0x61, 0x73, 0x4f,
-		0x77, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x2a, 0x2a,
-		0x45, 0x43, 0x4d, 0x41, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x35,
-		0x2a, 0x2a, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65,
-		0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x20, 0x77, 0x65, 0x20, 0x68, 0x6f, 0x70, 0x65, 0x20,
-		0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64,
-		0x20, 0x68, 0x65, 0x72, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x46,
-		0x6f, 0x72, 0x45, 0x61, 0x63, 0x68, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f,
-		0x2e, 0x66, 0x6f, 0x72, 0x45, 0x61, 0x63, 0x68, 0x2c, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x70, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x41,
-		0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x61,
-		0x70, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76,
-		0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f,
-		0x74, 0x6f, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x2c, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x64,
-		0x75, 0x63, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x20, 0x20, 0x3d, 0x20,
-		0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x72,
-		0x65, 0x64, 0x75, 0x63, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x2c, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x69,
-		0x6c, 0x74, 0x65, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d,
-		0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-		0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, 0x72, 0x79, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72,
-		0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x76, 0x65, 0x72,
-		0x79, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76,
-		0x65, 0x53, 0x6f, 0x6d, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f,
-		0x74, 0x6f, 0x2e, 0x73, 0x6f, 0x6d, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78,
-		0x4f, 0x66, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x41, 0x72,
-		0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64,
-		0x65, 0x78, 0x4f, 0x66, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61,
-		0x74, 0x69, 0x76, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65,
-		0x78, 0x4f, 0x66, 0x20, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79,
-		0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e,
-		0x64, 0x65, 0x78, 0x4f, 0x66, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e,
-		0x61, 0x74, 0x69, 0x76, 0x65, 0x49, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x41, 0x72, 0x72, 0x61,
-		0x79, 0x2e, 0x69, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4b, 0x65, 0x79,
-		0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20,
-		0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2c,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x42,
-		0x69, 0x6e, 0x64, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x3d, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-		0x62, 0x69, 0x6e, 0x64, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x73, 0x61, 0x66,
-		0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
-		0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x64, 0x65, 0x72,
-		0x73, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
-		0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x62, 0x65, 0x6c,
-		0x6f, 0x77, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x5f, 0x20,
-		0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f,
-		0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x6f, 0x62, 0x6a, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e,
-		0x63, 0x65, 0x6f, 0x66, 0x20, 0x5f, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69,
-		0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x6f, 0x66, 0x20, 0x5f, 0x29,
-		0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77,
-		0x20, 0x5f, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70,
-		0x65, 0x64, 0x20, 0x3d, 0x20, 0x6f, 0x62, 0x6a, 0x3b, 0x0a, 0x20, 0x20,
-		0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x45, 0x78, 0x70,
-		0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x64, 0x65,
-		0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
-		0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x2a, 0x2a, 0x4e, 0x6f, 0x64, 0x65,
-		0x2e, 0x6a, 0x73, 0x2a, 0x2a, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72,
-		0x64, 0x73, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69,
-		0x6c, 0x69, 0x74, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x6f, 0x6c, 0x64, 0x20, 0x60, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
-		0x65, 0x28, 0x29, 0x60, 0x20, 0x41, 0x50, 0x49, 0x2e, 0x20, 0x49, 0x66,
-		0x20, 0x77, 0x65, 0x27, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x72, 0x6f, 0x77, 0x73,
-		0x65, 0x72, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x20, 0x60, 0x5f, 0x60, 0x20,
-		0x61, 0x73, 0x20, 0x61, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20,
-		0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x76, 0x69, 0x61, 0x20, 0x61,
-		0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x64, 0x65, 0x6e,
-		0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x66, 0x6f, 0x72, 0x20, 0x43, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65,
-		0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x22, 0x61,
-		0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x22, 0x20, 0x6d, 0x6f, 0x64,
-		0x65, 0x2e, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70,
-		0x65, 0x6f, 0x66, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20,
-		0x21, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e,
-		0x65, 0x64, 0x27, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
-		0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x6d, 0x6f,
-		0x64, 0x75, 0x6c, 0x65, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x27, 0x75, 0x6e,
-		0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x27, 0x20, 0x26, 0x26, 0x20,
-		0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x65, 0x78, 0x70, 0x6f, 0x72,
-		0x74, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x6f,
-		0x64, 0x75, 0x6c, 0x65, 0x2e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73,
-		0x20, 0x3d, 0x20, 0x5f, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e,
-		0x5f, 0x20, 0x3d, 0x20, 0x5f, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x20, 0x65,
-		0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x6f,
-		0x6f, 0x74, 0x2e, 0x5f, 0x20, 0x3d, 0x20, 0x5f, 0x3b, 0x0a, 0x20, 0x20,
-		0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x75, 0x72, 0x72,
-		0x65, 0x6e, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
-		0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e,
-		0x20, 0x3d, 0x20, 0x27, 0x31, 0x2e, 0x34, 0x2e, 0x34, 0x27, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x73, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x2d, 0x2d, 0x2d, 0x2d,
-		0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
-		0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54,
-		0x68, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x73, 0x74, 0x6f,
-		0x6e, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x60, 0x65, 0x61, 0x63, 0x68,
-		0x60, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61,
-		0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x6b, 0x61, 0x20, 0x60, 0x66,
-		0x6f, 0x72, 0x45, 0x61, 0x63, 0x68, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x62,
-		0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x2d, 0x69, 0x6e, 0x20,
-		0x60, 0x66, 0x6f, 0x72, 0x45, 0x61, 0x63, 0x68, 0x60, 0x2c, 0x20, 0x61,
-		0x72, 0x72, 0x61, 0x79, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72,
-		0x61, 0x77, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74,
-		0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x2a, 0x2a, 0x45, 0x43, 0x4d, 0x41,
-		0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x35, 0x2a, 0x2a, 0x27, 0x73,
-		0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x60, 0x66, 0x6f, 0x72,
-		0x45, 0x61, 0x63, 0x68, 0x60, 0x20, 0x69, 0x66, 0x20, 0x61, 0x76, 0x61,
-		0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61,
-		0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x65,
-		0x61, 0x63, 0x68, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x66, 0x6f, 0x72, 0x45,
-		0x61, 0x63, 0x68, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x72,
-		0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
-		0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c,
-		0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65,
-		0x46, 0x6f, 0x72, 0x45, 0x61, 0x63, 0x68, 0x20, 0x26, 0x26, 0x20, 0x6f,
-		0x62, 0x6a, 0x2e, 0x66, 0x6f, 0x72, 0x45, 0x61, 0x63, 0x68, 0x20, 0x3d,
-		0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x6f, 0x72,
-		0x45, 0x61, 0x63, 0x68, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x6f, 0x72, 0x45, 0x61, 0x63,
-		0x68, 0x28, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20,
-		0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x6f, 0x62, 0x6a, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20,
-		0x3d, 0x3d, 0x3d, 0x20, 0x2b, 0x6f, 0x62, 0x6a, 0x2e, 0x6c, 0x65, 0x6e,
-		0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x20,
-		0x3d, 0x20, 0x30, 0x2c, 0x20, 0x6c, 0x20, 0x3d, 0x20, 0x6f, 0x62, 0x6a,
-		0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x69, 0x20, 0x3c,
-		0x20, 0x6c, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69,
-		0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c,
-		0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x6f, 0x62,
-		0x6a, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0x69, 0x2c, 0x20, 0x6f, 0x62, 0x6a,
-		0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x65,
-		0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d,
-		0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x6b,
-		0x65, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x5f, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20,
-		0x6b, 0x65, 0x79, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x74,
-		0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28,
-		0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x6f, 0x62, 0x6a,
-		0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x2c, 0x20,
-		0x6f, 0x62, 0x6a, 0x29, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x62, 0x72, 0x65,
-		0x61, 0x6b, 0x65, 0x72, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61,
-		0x70, 0x70, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20,
-		0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20,
-		0x65, 0x61, 0x63, 0x68, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
-		0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x67,
-		0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x2a, 0x2a, 0x45, 0x43,
-		0x4d, 0x41, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x35, 0x2a, 0x2a,
-		0x27, 0x73, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x60, 0x6d,
-		0x61, 0x70, 0x60, 0x20, 0x69, 0x66, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c,
-		0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6d, 0x61,
-		0x70, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63,
-		0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74,
-		0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72,
-		0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a,
-		0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x61,
-		0x74, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x70, 0x20, 0x26, 0x26, 0x20, 0x6f,
-		0x62, 0x6a, 0x2e, 0x6d, 0x61, 0x70, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e,
-		0x61, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x70, 0x29, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x6d, 0x61, 0x70,
-		0x28, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63,
-		0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75,
-		0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69,
-		0x73, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5b, 0x72, 0x65, 0x73, 0x75,
-		0x6c, 0x74, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5d, 0x20,
-		0x3d, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63,
-		0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c,
-		0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65,
-		0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
-		0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x76, 0x61,
-		0x72, 0x20, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x45, 0x72, 0x72, 0x6f,
-		0x72, 0x20, 0x3d, 0x20, 0x27, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x20,
-		0x6f, 0x66, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x61, 0x72, 0x72,
-		0x61, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x69,
-		0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x27, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x2a, 0x2a, 0x52,
-		0x65, 0x64, 0x75, 0x63, 0x65, 0x2a, 0x2a, 0x20, 0x62, 0x75, 0x69, 0x6c,
-		0x64, 0x73, 0x20, 0x75, 0x70, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67,
-		0x6c, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x66, 0x72,
-		0x6f, 0x6d, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66,
-		0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x6b, 0x61,
-		0x20, 0x60, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x60, 0x2c, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x6f, 0x72, 0x20, 0x60, 0x66, 0x6f, 0x6c, 0x64,
-		0x6c, 0x60, 0x2e, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65,
-		0x73, 0x20, 0x74, 0x6f, 0x20, 0x2a, 0x2a, 0x45, 0x43, 0x4d, 0x41, 0x53,
-		0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x35, 0x2a, 0x2a, 0x27, 0x73, 0x20,
-		0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x60, 0x72, 0x65, 0x64, 0x75,
-		0x63, 0x65, 0x60, 0x20, 0x69, 0x66, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c,
-		0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x72, 0x65,
-		0x64, 0x75, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x66, 0x6f, 0x6c,
-		0x64, 0x6c, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63,
-		0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74,
-		0x6f, 0x72, 0x2c, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x2c, 0x20, 0x63, 0x6f,
-		0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c,
-		0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
-		0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, 0x32, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a,
-		0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x6f, 0x62,
-		0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65,
-		0x64, 0x75, 0x63, 0x65, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x62, 0x6a, 0x2e,
-		0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e,
-		0x61, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x69, 0x74,
-		0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x62,
-		0x69, 0x6e, 0x64, 0x28, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72,
-		0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x3f, 0x20, 0x6f,
-		0x62, 0x6a, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x28, 0x69, 0x74,
-		0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x6d, 0x65, 0x6d, 0x6f,
-		0x29, 0x20, 0x3a, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x72, 0x65, 0x64, 0x75,
-		0x63, 0x65, 0x28, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x65, 0x61, 0x63, 0x68, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73,
-		0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
-		0x66, 0x20, 0x28, 0x21, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d,
-		0x65, 0x6d, 0x6f, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x69,
-		0x74, 0x69, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73,
-		0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x6d, 0x65, 0x6d, 0x6f, 0x20, 0x3d, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61,
-		0x74, 0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e,
-		0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x2c, 0x20,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78,
-		0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x6e,
-		0x69, 0x74, 0x69, 0x61, 0x6c, 0x29, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77,
-		0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x79, 0x70, 0x65, 0x45, 0x72, 0x72,
-		0x6f, 0x72, 0x28, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x45, 0x72, 0x72,
-		0x6f, 0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x3b, 0x0a, 0x20, 0x20,
-		0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x65,
-		0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x61, 0x73, 0x73, 0x6f, 0x63,
-		0x69, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69,
-		0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65,
-		0x2c, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e,
-		0x20, 0x61, 0x73, 0x20, 0x60, 0x66, 0x6f, 0x6c, 0x64, 0x72, 0x60, 0x2e,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61,
-		0x74, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x2a, 0x2a, 0x45, 0x43, 0x4d,
-		0x41, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x35, 0x2a, 0x2a, 0x27,
-		0x73, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x60, 0x72, 0x65,
-		0x64, 0x75, 0x63, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x60, 0x20, 0x69,
-		0x66, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e,
-		0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x52,
-		0x69, 0x67, 0x68, 0x74, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x66, 0x6f, 0x6c,
-		0x64, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61,
-		0x74, 0x6f, 0x72, 0x2c, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x2c, 0x20, 0x63,
-		0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61,
-		0x6c, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
-		0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3e, 0x20, 0x32,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x62,
-		0x6a, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x6f,
-		0x62, 0x6a, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x52,
-		0x65, 0x64, 0x75, 0x63, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x20, 0x26,
-		0x26, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65,
-		0x52, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e, 0x61,
-		0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x52, 0x69,
-		0x67, 0x68, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
-		0x29, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d,
-		0x20, 0x5f, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x28, 0x69, 0x74, 0x65, 0x72,
-		0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
-		0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c,
-		0x20, 0x3f, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63,
-		0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x28, 0x69, 0x74, 0x65, 0x72, 0x61,
-		0x74, 0x6f, 0x72, 0x2c, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x29, 0x20, 0x3a,
-		0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x52,
-		0x69, 0x67, 0x68, 0x74, 0x28, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f,
-		0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
-		0x20, 0x3d, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74,
-		0x68, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c,
-		0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x2b, 0x6c,
-		0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x20,
-		0x3d, 0x20, 0x5f, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x28, 0x6f, 0x62, 0x6a,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x65, 0x6e,
-		0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x6c,
-		0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x6f, 0x62,
-		0x6a, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78,
-		0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20,
-		0x6b, 0x65, 0x79, 0x73, 0x20, 0x3f, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x5b,
-		0x2d, 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5d, 0x20, 0x3a, 0x20,
-		0x2d, 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x6e, 0x69,
-		0x74, 0x69, 0x61, 0x6c, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x20, 0x3d, 0x20, 0x6f,
-		0x62, 0x6a, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69,
-		0x61, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65,
-		0x6d, 0x6f, 0x20, 0x3d, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f,
-		0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-		0x78, 0x74, 0x2c, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x2c, 0x20, 0x6f, 0x62,
-		0x6a, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 0x2c, 0x20, 0x69, 0x6e,
-		0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28,
-		0x21, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x29, 0x20, 0x74, 0x68,
-		0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x79, 0x70, 0x65,
-		0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65,
-		0x45, 0x72, 0x72, 0x6f, 0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
-		0x69, 0x72, 0x73, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77,
-		0x68, 0x69, 0x63, 0x68, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x20,
-		0x61, 0x20, 0x74, 0x72, 0x75, 0x74, 0x68, 0x20, 0x74, 0x65, 0x73, 0x74,
-		0x2e, 0x20, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x64, 0x20, 0x61, 0x73,
-		0x20, 0x60, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x60, 0x2e, 0x0a, 0x20,
-		0x20, 0x5f, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x5f, 0x2e,
-		0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69,
-		0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e,
-		0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x61, 0x6e, 0x79, 0x28, 0x6f, 0x62, 0x6a, 0x2c,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61,
-		0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20,
-		0x6c, 0x69, 0x73, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74,
-		0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74,
-		0x65, 0x78, 0x74, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20,
-		0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c,
-		0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68,
-		0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x20, 0x70, 0x61, 0x73, 0x73, 0x20, 0x61, 0x20, 0x74,
-		0x72, 0x75, 0x74, 0x68, 0x20, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65,
-		0x73, 0x20, 0x74, 0x6f, 0x20, 0x2a, 0x2a, 0x45, 0x43, 0x4d, 0x41, 0x53,
-		0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x35, 0x2a, 0x2a, 0x27, 0x73, 0x20,
-		0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x60, 0x66, 0x69, 0x6c, 0x74,
-		0x65, 0x72, 0x60, 0x20, 0x69, 0x66, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c,
-		0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41,
-		0x6c, 0x69, 0x61, 0x73, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x60, 0x73,
-		0x65, 0x6c, 0x65, 0x63, 0x74, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e,
-		0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x73,
-		0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x74,
-		0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74,
-		0x65, 0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76,
-		0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x3d,
-		0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c,
-		0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73,
-		0x75, 0x6c, 0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x74,
-		0x65, 0x72, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69,
-		0x6c, 0x74, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x74,
-		0x69, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x29, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x66, 0x69,
-		0x6c, 0x74, 0x65, 0x72, 0x28, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f,
-		0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x6f, 0x62,
-		0x6a, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78,
-		0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x74, 0x65, 0x72,
-		0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f,
-		0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73,
-		0x74, 0x29, 0x29, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5b,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67,
-		0x74, 0x68, 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75,
-		0x6c, 0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61,
-		0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65,
-		0x6e, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x68, 0x69, 0x63,
-		0x68, 0x20, 0x61, 0x20, 0x74, 0x72, 0x75, 0x74, 0x68, 0x20, 0x74, 0x65,
-		0x73, 0x74, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x0a, 0x20, 0x20,
-		0x5f, 0x2e, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c,
-		0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63,
-		0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x66,
-		0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75,
-		0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69,
-		0x73, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x21, 0x69, 0x74, 0x65, 0x72,
-		0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f,
-		0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73,
-		0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x20, 0x63,
-		0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x74, 0x65,
-		0x72, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65,
-		0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6d, 0x61,
-		0x74, 0x63, 0x68, 0x20, 0x61, 0x20, 0x74, 0x72, 0x75, 0x74, 0x68, 0x20,
-		0x74, 0x65, 0x73, 0x74, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44,
-		0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20,
-		0x2a, 0x2a, 0x45, 0x43, 0x4d, 0x41, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74,
-		0x20, 0x35, 0x2a, 0x2a, 0x27, 0x73, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76,
-		0x65, 0x20, 0x60, 0x65, 0x76, 0x65, 0x72, 0x79, 0x60, 0x20, 0x69, 0x66,
-		0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x64,
-		0x20, 0x61, 0x73, 0x20, 0x60, 0x61, 0x6c, 0x6c, 0x60, 0x2e, 0x0a, 0x20,
-		0x20, 0x5f, 0x2e, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x5f,
-		0x2e, 0x61, 0x6c, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x74, 0x65,
-		0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-		0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x74,
-		0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x69,
-		0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x5f, 0x2e,
-		0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x29, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
-		0x74, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d,
-		0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65,
-		0x45, 0x76, 0x65, 0x72, 0x79, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x62, 0x6a,
-		0x2e, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e,
-		0x61, 0x74, 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, 0x72, 0x79, 0x29, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x65,
-		0x76, 0x65, 0x72, 0x79, 0x28, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f,
-		0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x6f, 0x62,
-		0x6a, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78,
-		0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x28, 0x72, 0x65,
-		0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
-		0x74, 0x20, 0x26, 0x26, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f,
-		0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-		0x78, 0x74, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69,
-		0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x29,
-		0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x72, 0x65,
-		0x61, 0x6b, 0x65, 0x72, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x21, 0x21, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x20,
-		0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65,
-		0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x66, 0x20, 0x61,
-		0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20,
-		0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6d, 0x61,
-		0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61, 0x20, 0x74, 0x72, 0x75, 0x74,
-		0x68, 0x20, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74,
-		0x6f, 0x20, 0x2a, 0x2a, 0x45, 0x43, 0x4d, 0x41, 0x53, 0x63, 0x72, 0x69,
-		0x70, 0x74, 0x20, 0x35, 0x2a, 0x2a, 0x27, 0x73, 0x20, 0x6e, 0x61, 0x74,
-		0x69, 0x76, 0x65, 0x20, 0x60, 0x73, 0x6f, 0x6d, 0x65, 0x60, 0x20, 0x69,
-		0x66, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65,
-		0x64, 0x20, 0x61, 0x73, 0x20, 0x60, 0x61, 0x6e, 0x79, 0x60, 0x2e, 0x0a,
-		0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x3d, 0x20,
-		0x5f, 0x2e, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x61,
-		0x6e, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61,
-		0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x74, 0x65, 0x72,
-		0x61, 0x74, 0x6f, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x69, 0x74, 0x65,
-		0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x69, 0x64,
-		0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20,
-		0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d, 0x20,
-		0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53,
-		0x6f, 0x6d, 0x65, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x73,
-		0x6f, 0x6d, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x74, 0x69,
-		0x76, 0x65, 0x53, 0x6f, 0x6d, 0x65, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x73, 0x6f, 0x6d, 0x65, 0x28,
-		0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f,
-		0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x65, 0x61, 0x63, 0x68, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73,
-		0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
-		0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x7c, 0x7c,
-		0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x69,
-		0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c,
-		0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x76, 0x61,
-		0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20,
-		0x6c, 0x69, 0x73, 0x74, 0x29, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x21, 0x21, 0x72, 0x65, 0x73,
-		0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e,
-		0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72,
-		0x61, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
-		0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x20,
-		0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
-		0x28, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x3d, 0x3d, 0x3d, 0x60,
-		0x29, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x6c, 0x69, 0x61,
-		0x73, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x60, 0x69, 0x6e, 0x63, 0x6c,
-		0x75, 0x64, 0x65, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x63, 0x6f,
-		0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x69,
-		0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x74,
-		0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d, 0x20,
-		0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e,
-		0x64, 0x65, 0x78, 0x4f, 0x66, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x62, 0x6a,
-		0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x20, 0x3d, 0x3d, 0x3d,
-		0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78,
-		0x4f, 0x66, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f,
-		0x62, 0x6a, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x74,
-		0x61, 0x72, 0x67, 0x65, 0x74, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x2d, 0x31,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x61, 0x6e, 0x79, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d,
-		0x3d, 0x3d, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65,
-		0x20, 0x61, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x28, 0x77,
-		0x69, 0x74, 0x68, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
-		0x73, 0x29, 0x20, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20,
-		0x69, 0x74, 0x65, 0x6d, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6f,
-		0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x20, 0x20,
-		0x5f, 0x2e, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x20, 0x3d, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c,
-		0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x72, 0x67, 0x73, 0x20,
-		0x3d, 0x20, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c,
-		0x28, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20,
-		0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x69, 0x73, 0x46, 0x75, 0x6e, 0x63, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x69,
-		0x73, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x65,
-		0x74, 0x68, 0x6f, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x6d, 0x61, 0x70, 0x28,
-		0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x28, 0x69, 0x73, 0x46, 0x75, 0x6e, 0x63, 0x20, 0x3f, 0x20, 0x6d, 0x65,
-		0x74, 0x68, 0x6f, 0x64, 0x20, 0x3a, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x5b, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5d, 0x29, 0x2e, 0x61, 0x70,
-		0x70, 0x6c, 0x79, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x61,
-		0x72, 0x67, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63, 0x65,
-		0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20,
-		0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65,
-		0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x6d, 0x61,
-		0x70, 0x60, 0x3a, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67,
-		0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x2e,
-		0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x70, 0x6c, 0x75, 0x63, 0x6b, 0x20, 0x3d,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62,
-		0x6a, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x6d,
-		0x61, 0x70, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x7b,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75,
-		0x65, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x3b, 0x20, 0x7d, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43,
-		0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x76,
-		0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20,
-		0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x20, 0x63,
-		0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x66, 0x69, 0x6c, 0x74,
-		0x65, 0x72, 0x60, 0x3a, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69,
-		0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x62, 0x6a, 0x65,
-		0x63, 0x74, 0x73, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e,
-		0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x70, 0x65, 0x63,
-		0x69, 0x66, 0x69, 0x63, 0x20, 0x60, 0x6b, 0x65, 0x79, 0x3a, 0x76, 0x61,
-		0x6c, 0x75, 0x65, 0x60, 0x20, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2e, 0x0a,
-		0x20, 0x20, 0x5f, 0x2e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a,
-		0x2c, 0x20, 0x61, 0x74, 0x74, 0x72, 0x73, 0x2c, 0x20, 0x66, 0x69, 0x72,
-		0x73, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x5f, 0x2e, 0x69, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28,
-		0x61, 0x74, 0x74, 0x72, 0x73, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x3f, 0x20, 0x6e,
-		0x75, 0x6c, 0x6c, 0x20, 0x3a, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5b, 0x66,
-		0x69, 0x72, 0x73, 0x74, 0x20, 0x3f, 0x20, 0x27, 0x66, 0x69, 0x6e, 0x64,
-		0x27, 0x20, 0x3a, 0x20, 0x27, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x27,
-		0x5d, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28,
-		0x76, 0x61, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x61,
-		0x74, 0x74, 0x72, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x74, 0x74, 0x72,
-		0x73, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x76,
-		0x61, 0x6c, 0x75, 0x65, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x29, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72,
-		0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43,
-		0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x76,
-		0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20,
-		0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x20, 0x63,
-		0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x66, 0x69, 0x6e, 0x64,
-		0x60, 0x3a, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a,
-		0x65, 0x63, 0x74, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e,
-		0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x70, 0x65, 0x63,
-		0x69, 0x66, 0x69, 0x63, 0x20, 0x60, 0x6b, 0x65, 0x79, 0x3a, 0x76, 0x61,
-		0x6c, 0x75, 0x65, 0x60, 0x20, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2e, 0x0a,
-		0x20, 0x20, 0x5f, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x57, 0x68, 0x65, 0x72,
-		0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x61, 0x74, 0x74, 0x72, 0x73, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x5f, 0x2e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x28, 0x6f, 0x62,
-		0x6a, 0x2c, 0x20, 0x61, 0x74, 0x74, 0x72, 0x73, 0x2c, 0x20, 0x74, 0x72,
-		0x75, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x65,
-		0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x28, 0x65,
-		0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x62, 0x61, 0x73, 0x65, 0x64,
-		0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-		0x29, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x61, 0x6e, 0x27,
-		0x74, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x20, 0x61,
-		0x72, 0x72, 0x61, 0x79, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x74,
-		0x65, 0x67, 0x65, 0x72, 0x73, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72,
-		0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x36, 0x35, 0x2c, 0x35, 0x33, 0x35,
-		0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x53, 0x65, 0x65, 0x3a, 0x20, 0x68, 0x74, 0x74,
-		0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x62, 0x75, 0x67, 0x73, 0x2e, 0x77, 0x65,
-		0x62, 0x6b, 0x69, 0x74, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73, 0x68, 0x6f,
-		0x77, 0x5f, 0x62, 0x75, 0x67, 0x2e, 0x63, 0x67, 0x69, 0x3f, 0x69, 0x64,
-		0x3d, 0x38, 0x30, 0x37, 0x39, 0x37, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6d,
-		0x61, 0x78, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61,
-		0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28,
-		0x21, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x26, 0x26,
-		0x20, 0x5f, 0x2e, 0x69, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x6f,
-		0x62, 0x6a, 0x29, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x62, 0x6a, 0x5b, 0x30,
-		0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x2b, 0x6f, 0x62, 0x6a, 0x5b, 0x30,
-		0x5d, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x6c, 0x65, 0x6e,
-		0x67, 0x74, 0x68, 0x20, 0x3c, 0x20, 0x36, 0x35, 0x35, 0x33, 0x35, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x61, 0x78,
-		0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x4d, 0x61, 0x74, 0x68, 0x2c,
-		0x20, 0x6f, 0x62, 0x6a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x74,
-		0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x26, 0x26, 0x20, 0x5f, 0x2e,
-		0x69, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x6f, 0x62, 0x6a, 0x29,
-		0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x49, 0x6e,
-		0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d,
-		0x20, 0x7b, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x20, 0x3a,
-		0x20, 0x2d, 0x49, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x2c, 0x20,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x20, 0x2d, 0x49, 0x6e, 0x66, 0x69,
-		0x6e, 0x69, 0x74, 0x79, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
-		0x61, 0x63, 0x68, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c,
-		0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61,
-		0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x20, 0x3d,
-		0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3f, 0x20,
-		0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c,
-		0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x76,
-		0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c,
-		0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x20, 0x3a, 0x20, 0x76, 0x61, 0x6c,
-		0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f,
-		0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x20, 0x3e, 0x3d, 0x20, 0x72, 0x65,
-		0x73, 0x75, 0x6c, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65,
-		0x64, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
-		0x20, 0x3d, 0x20, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3a, 0x20,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75,
-		0x74, 0x65, 0x64, 0x20, 0x3a, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74,
-		0x65, 0x64, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x76, 0x61, 0x6c, 0x75,
-		0x65, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x65, 0x6c, 0x65,
-		0x6d, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x6f, 0x72, 0x20, 0x65, 0x6c, 0x65,
-		0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x63,
-		0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e,
-		0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6d, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c,
-		0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63,
-		0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x74, 0x65, 0x72, 0x61,
-		0x74, 0x6f, 0x72, 0x20, 0x26, 0x26, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x41,
-		0x72, 0x72, 0x61, 0x79, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x26, 0x26,
-		0x20, 0x6f, 0x62, 0x6a, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20,
-		0x2b, 0x6f, 0x62, 0x6a, 0x5b, 0x30, 0x5d, 0x20, 0x26, 0x26, 0x20, 0x6f,
-		0x62, 0x6a, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3c, 0x20,
-		0x36, 0x35, 0x35, 0x33, 0x35, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x4d, 0x61,
-		0x74, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79,
-		0x28, 0x4d, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
-		0x66, 0x20, 0x28, 0x21, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72,
-		0x20, 0x26, 0x26, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x45, 0x6d, 0x70, 0x74,
-		0x79, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x49, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73,
-		0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x63, 0x6f, 0x6d, 0x70, 0x75,
-		0x74, 0x65, 0x64, 0x20, 0x3a, 0x20, 0x49, 0x6e, 0x66, 0x69, 0x6e, 0x69,
-		0x74, 0x79, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x20, 0x49,
-		0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x7d, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c,
-		0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c,
-		0x69, 0x73, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65,
-		0x64, 0x20, 0x3d, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72,
-		0x20, 0x3f, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e,
-		0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
-		0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64,
-		0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x20, 0x3a, 0x20,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x20, 0x3c, 0x20,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x75,
-		0x74, 0x65, 0x64, 0x20, 0x26, 0x26, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75,
-		0x6c, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
-		0x3a, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6d,
-		0x70, 0x75, 0x74, 0x65, 0x64, 0x20, 0x3a, 0x20, 0x63, 0x6f, 0x6d, 0x70,
-		0x75, 0x74, 0x65, 0x64, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x76, 0x61,
-		0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x53, 0x68, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x20,
-		0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x0a, 0x20, 0x20,
-		0x5f, 0x2e, 0x73, 0x68, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x72, 0x61, 0x6e, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61,
-		0x72, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x30, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x73, 0x68, 0x75,
-		0x66, 0x66, 0x6c, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x6f, 0x62, 0x6a,
-		0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76,
-		0x61, 0x6c, 0x75, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x72,
-		0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2b,
-		0x2b, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x68,
-		0x75, 0x66, 0x66, 0x6c, 0x65, 0x64, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78,
-		0x20, 0x2d, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x68, 0x75, 0x66,
-		0x66, 0x6c, 0x65, 0x64, 0x5b, 0x72, 0x61, 0x6e, 0x64, 0x5d, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x68, 0x75, 0x66, 0x66, 0x6c,
-		0x65, 0x64, 0x5b, 0x72, 0x61, 0x6e, 0x64, 0x5d, 0x20, 0x3d, 0x20, 0x76,
-		0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x73, 0x68, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x64, 0x3b, 0x0a, 0x20,
-		0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x6e,
-		0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65,
-		0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75,
-		0x70, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2e,
-		0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75,
-		0x70, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c,
-		0x75, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x46, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29,
-		0x20, 0x3f, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3a, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29,
-		0x7b, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a,
-		0x5b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5d, 0x3b, 0x20, 0x7d, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x53,
-		0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65,
-		0x63, 0x74, 0x27, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20,
-		0x62, 0x79, 0x20, 0x61, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69,
-		0x6f, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20,
-		0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74,
-		0x6f, 0x72, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x73, 0x6f, 0x72, 0x74,
-		0x42, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x74, 0x65,
-		0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x6f, 0x6b,
-		0x75, 0x70, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x28, 0x76,
-		0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x70, 0x6c, 0x75, 0x63,
-		0x6b, 0x28, 0x5f, 0x2e, 0x6d, 0x61, 0x70, 0x28, 0x6f, 0x62, 0x6a, 0x2c,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61,
-		0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20,
-		0x6c, 0x69, 0x73, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x20, 0x3a, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20,
-		0x3a, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69,
-		0x61, 0x20, 0x3a, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72,
-		0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
-		0x74, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e,
-		0x64, 0x65, 0x78, 0x2c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x7d, 0x29, 0x2e, 0x73, 0x6f, 0x72, 0x74, 0x28, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6c, 0x65, 0x66, 0x74, 0x2c, 0x20, 0x72,
-		0x69, 0x67, 0x68, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x6c, 0x65,
-		0x66, 0x74, 0x2e, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x62,
-		0x20, 0x3d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x63, 0x72, 0x69,
-		0x74, 0x65, 0x72, 0x69, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x62,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x61, 0x20, 0x3e, 0x20, 0x62, 0x20, 0x7c, 0x7c,
-		0x20, 0x61, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20,
-		0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x61, 0x20, 0x3c, 0x20, 0x62, 0x20, 0x7c, 0x7c, 0x20, 0x62, 0x20,
-		0x3d, 0x3d, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x29, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x65, 0x66, 0x74,
-		0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x72, 0x69, 0x67,
-		0x68, 0x74, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3f, 0x20, 0x2d,
-		0x31, 0x20, 0x3a, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d,
-		0x29, 0x2c, 0x20, 0x27, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x41, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65,
-		0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67,
-		0x61, 0x74, 0x65, 0x20, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x62,
-		0x79, 0x22, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-		0x73, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x67, 0x72, 0x6f,
-		0x75, 0x70, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x62,
-		0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
-		0x74, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x76, 0x61, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72,
-		0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x49, 0x74, 0x65,
-		0x72, 0x61, 0x74, 0x6f, 0x72, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
-		0x7c, 0x7c, 0x20, 0x5f, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74,
-		0x79, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68,
-		0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e,
-		0x64, 0x65, 0x78, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x3d, 0x20, 0x69,
-		0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c,
-		0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x76, 0x61,
-		0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20,
-		0x6f, 0x62, 0x6a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x28, 0x72, 0x65, 0x73,
-		0x75, 0x6c, 0x74, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x76, 0x61,
-		0x6c, 0x75, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x47, 0x72, 0x6f, 0x75,
-		0x70, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
-		0x74, 0x27, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x62,
-		0x79, 0x20, 0x61, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x6f,
-		0x6e, 0x2e, 0x20, 0x50, 0x61, 0x73, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68,
-		0x65, 0x72, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20,
-		0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20,
-		0x62, 0x79, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
-		0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x20, 0x20,
-		0x5f, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a,
-		0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e,
-		0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70,
-		0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c,
-		0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c,
-		0x74, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75,
-		0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28,
-		0x5f, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
-		0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x20, 0x3f, 0x20, 0x72, 0x65, 0x73,
-		0x75, 0x6c, 0x74, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x20, 0x3a, 0x20, 0x28,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x20,
-		0x3d, 0x20, 0x5b, 0x5d, 0x29, 0x29, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e,
-		0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61,
-		0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61,
-		0x74, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x62, 0x79, 0x20, 0x61,
-		0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x72, 0x69,
-		0x74, 0x65, 0x72, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x50, 0x61, 0x73, 0x73,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72,
-		0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74,
-		0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63,
-		0x6f, 0x75, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x2c, 0x20, 0x6f, 0x72, 0x20,
-		0x61, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20,
-		0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x72, 0x69,
-		0x74, 0x65, 0x72, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e,
-		0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-		0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x28, 0x6f,
-		0x62, 0x6a, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x63,
-		0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c,
-		0x20, 0x6b, 0x65, 0x79, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x5f, 0x2e, 0x68, 0x61, 0x73,
-		0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x6b, 0x65, 0x79,
-		0x29, 0x29, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5b, 0x6b, 0x65,
-		0x79, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5b, 0x6b, 0x65, 0x79,
-		0x5d, 0x2b, 0x2b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x55, 0x73, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72,
-		0x61, 0x74, 0x6f, 0x72, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x20,
-		0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6d, 0x61, 0x6c,
-		0x6c, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x61,
-		0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x0a, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x73,
-		0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x73,
-		0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x20, 0x61, 0x73, 0x20,
-		0x74, 0x6f, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20,
-		0x6f, 0x72, 0x64, 0x65, 0x72, 0x2e, 0x20, 0x55, 0x73, 0x65, 0x73, 0x20,
-		0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63,
-		0x68, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x73, 0x6f, 0x72, 0x74, 0x65,
-		0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c,
-		0x20, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74,
-		0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61,
-		0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74,
-		0x6f, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x3f,
-		0x20, 0x5f, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
-		0x3a, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x49, 0x74, 0x65, 0x72,
-		0x61, 0x74, 0x6f, 0x72, 0x28, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f,
-		0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x74, 0x65, 0x72,
-		0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f,
-		0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6c, 0x6f, 0x77,
-		0x20, 0x3d, 0x20, 0x30, 0x2c, 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x3d,
-		0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74,
-		0x68, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65,
-		0x20, 0x28, 0x6c, 0x6f, 0x77, 0x20, 0x3c, 0x20, 0x68, 0x69, 0x67, 0x68,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61,
-		0x72, 0x20, 0x6d, 0x69, 0x64, 0x20, 0x3d, 0x20, 0x28, 0x6c, 0x6f, 0x77,
-		0x20, 0x2b, 0x20, 0x68, 0x69, 0x67, 0x68, 0x29, 0x20, 0x3e, 0x3e, 0x3e,
-		0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x74,
-		0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28,
-		0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x61, 0x72, 0x72,
-		0x61, 0x79, 0x5b, 0x6d, 0x69, 0x64, 0x5d, 0x29, 0x20, 0x3c, 0x20, 0x76,
-		0x61, 0x6c, 0x75, 0x65, 0x20, 0x3f, 0x20, 0x6c, 0x6f, 0x77, 0x20, 0x3d,
-		0x20, 0x6d, 0x69, 0x64, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x3a, 0x20, 0x68,
-		0x69, 0x67, 0x68, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x64, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x6c, 0x6f, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x53, 0x61, 0x66, 0x65,
-		0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x61,
-		0x6e, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x74, 0x65, 0x72,
-		0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20,
-		0x72, 0x65, 0x61, 0x6c, 0x2c, 0x20, 0x6c, 0x69, 0x76, 0x65, 0x20, 0x61,
-		0x72, 0x72, 0x61, 0x79, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x74, 0x6f,
-		0x41, 0x72, 0x72, 0x61, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6f, 0x62, 0x6a,
-		0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5b, 0x5d, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e, 0x69,
-		0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x29,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6c, 0x69, 0x63,
-		0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a,
-		0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x3d, 0x20,
-		0x2b, 0x6f, 0x62, 0x6a, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x6d, 0x61,
-		0x70, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x5f, 0x2e, 0x69, 0x64, 0x65,
-		0x6e, 0x74, 0x69, 0x74, 0x79, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x76, 0x61, 0x6c,
-		0x75, 0x65, 0x73, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x3b, 0x0a, 0x20, 0x20,
-		0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62,
-		0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
-		0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a,
-		0x65, 0x63, 0x74, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x73, 0x69, 0x7a,
-		0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d, 0x20, 0x6e,
-		0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x28, 0x6f, 0x62, 0x6a, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74,
-		0x68, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x2b, 0x6f, 0x62, 0x6a, 0x2e, 0x6c,
-		0x65, 0x6e, 0x67, 0x74, 0x68, 0x29, 0x20, 0x3f, 0x20, 0x6f, 0x62, 0x6a,
-		0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3a, 0x20, 0x5f, 0x2e,
-		0x6b, 0x65, 0x79, 0x73, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2e, 0x6c, 0x65,
-		0x6e, 0x67, 0x74, 0x68, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x20, 0x46,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
-		0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x47, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73,
-		0x74, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66,
-		0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x20, 0x50,
-		0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x2a, 0x2a, 0x6e, 0x2a, 0x2a,
-		0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x4e,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
-		0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61,
-		0x79, 0x2e, 0x20, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x64, 0x20, 0x61,
-		0x73, 0x20, 0x60, 0x68, 0x65, 0x61, 0x64, 0x60, 0x20, 0x61, 0x6e, 0x64,
-		0x20, 0x60, 0x74, 0x61, 0x6b, 0x65, 0x60, 0x2e, 0x20, 0x54, 0x68, 0x65,
-		0x20, 0x2a, 0x2a, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2a, 0x2a, 0x20, 0x63,
-		0x68, 0x65, 0x63, 0x6b, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x6c,
-		0x6c, 0x6f, 0x77, 0x73, 0x20, 0x69, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x77,
-		0x6f, 0x72, 0x6b, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x60, 0x5f, 0x2e,
-		0x6d, 0x61, 0x70, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x66, 0x69,
-		0x72, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x68, 0x65, 0x61, 0x64,
-		0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x72, 0x72,
-		0x61, 0x79, 0x2c, 0x20, 0x6e, 0x2c, 0x20, 0x67, 0x75, 0x61, 0x72, 0x64,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28,
-		0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c,
-		0x6c, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x6f,
-		0x69, 0x64, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x6e,
-		0x75, 0x6c, 0x6c, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x67, 0x75, 0x61,
-		0x72, 0x64, 0x20, 0x3f, 0x20, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63,
-		0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x30,
-		0x2c, 0x20, 0x6e, 0x29, 0x20, 0x3a, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79,
-		0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20,
-		0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x62,
-		0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20,
-		0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x20, 0x45, 0x73, 0x70, 0x65,
-		0x63, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75,
-		0x6c, 0x20, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x68,
-		0x65, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20,
-		0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x20, 0x50, 0x61, 0x73, 0x73,
-		0x69, 0x6e, 0x67, 0x20, 0x2a, 0x2a, 0x6e, 0x2a, 0x2a, 0x20, 0x77, 0x69,
-		0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x6c,
-		0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
-		0x20, 0x69, 0x6e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x6c,
-		0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61,
-		0x73, 0x74, 0x20, 0x4e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x2a, 0x2a,
-		0x67, 0x75, 0x61, 0x72, 0x64, 0x2a, 0x2a, 0x20, 0x63, 0x68, 0x65, 0x63,
-		0x6b, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x69, 0x74, 0x20,
-		0x74, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x77, 0x69, 0x74, 0x68,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x60, 0x5f, 0x2e, 0x6d, 0x61, 0x70,
-		0x60, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x69,
-		0x61, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x6e, 0x2c, 0x20,
-		0x67, 0x75, 0x61, 0x72, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6c, 0x69, 0x63,
-		0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79,
-		0x2c, 0x20, 0x30, 0x2c, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x6c,
-		0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x28, 0x28, 0x6e, 0x20,
-		0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x7c, 0x7c, 0x20,
-		0x67, 0x75, 0x61, 0x72, 0x64, 0x20, 0x3f, 0x20, 0x31, 0x20, 0x3a, 0x20,
-		0x6e, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x47, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20,
-		0x6c, 0x61, 0x73, 0x74, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
-		0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79,
-		0x2e, 0x20, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x2a, 0x2a,
-		0x6e, 0x2a, 0x2a, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x73, 0x74,
-		0x20, 0x4e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x76, 0x61, 0x6c, 0x75,
-		0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72,
-		0x72, 0x61, 0x79, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x2a, 0x2a, 0x67,
-		0x75, 0x61, 0x72, 0x64, 0x2a, 0x2a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b,
-		0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x69, 0x74, 0x20, 0x74,
-		0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
-		0x60, 0x5f, 0x2e, 0x6d, 0x61, 0x70, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x5f,
-		0x2e, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20,
-		0x6e, 0x2c, 0x20, 0x67, 0x75, 0x61, 0x72, 0x64, 0x29, 0x20, 0x7b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x72, 0x61,
-		0x79, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6e,
-		0x20, 0x21, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x26, 0x26,
-		0x20, 0x21, 0x67, 0x75, 0x61, 0x72, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61,
-		0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d,
-		0x61, 0x78, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x6c, 0x65, 0x6e,
-		0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x6e, 0x2c, 0x20, 0x30, 0x29, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5b, 0x61, 0x72,
-		0x72, 0x61, 0x79, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d,
-		0x20, 0x31, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20,
-		0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74,
-		0x68, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79,
-		0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61,
-		0x79, 0x2e, 0x20, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x64, 0x20, 0x61,
-		0x73, 0x20, 0x60, 0x74, 0x61, 0x69, 0x6c, 0x60, 0x20, 0x61, 0x6e, 0x64,
-		0x20, 0x60, 0x64, 0x72, 0x6f, 0x70, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x45, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x6c, 0x79,
-		0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x6f, 0x6e, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
-		0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x20, 0x50, 0x61, 0x73,
-		0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x2a, 0x2a, 0x6e, 0x2a,
-		0x2a, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72,
-		0x65, 0x73, 0x74, 0x20, 0x4e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
-		0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61,
-		0x79, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x2a, 0x2a, 0x67, 0x75, 0x61,
-		0x72, 0x64, 0x2a, 0x2a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x68,
-		0x65, 0x63, 0x6b, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x69,
-		0x74, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x77, 0x69,
-		0x74, 0x68, 0x20, 0x60, 0x5f, 0x2e, 0x6d, 0x61, 0x70, 0x60, 0x2e, 0x0a,
-		0x20, 0x20, 0x5f, 0x2e, 0x72, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x5f,
-		0x2e, 0x74, 0x61, 0x69, 0x6c, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x64, 0x72,
-		0x6f, 0x70, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x6e, 0x2c, 0x20,
-		0x67, 0x75, 0x61, 0x72, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6c, 0x69, 0x63,
-		0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79,
-		0x2c, 0x20, 0x28, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c,
-		0x29, 0x20, 0x7c, 0x7c, 0x20, 0x67, 0x75, 0x61, 0x72, 0x64, 0x20, 0x3f,
-		0x20, 0x31, 0x20, 0x3a, 0x20, 0x6e, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x72, 0x69, 0x6d,
-		0x20, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x66, 0x61, 0x6c,
-		0x73, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x66, 0x72,
-		0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e,
-		0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74,
-		0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x66, 0x69,
-		0x6c, 0x74, 0x65, 0x72, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20,
-		0x5f, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x69, 0x6d, 0x70,
-		0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
-		0x6f, 0x66, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69,
-		0x76, 0x65, 0x20, 0x60, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x60,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e,
-		0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x69, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c,
-		0x6f, 0x77, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x69,
-		0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x20, 0x7b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e,
-		0x69, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x76, 0x61, 0x6c, 0x75,
-		0x65, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x3f, 0x20,
-		0x70, 0x75, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x6f,
-		0x75, 0x74, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x29, 0x20, 0x3a, 0x20, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x28,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c,
-		0x6f, 0x77, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73,
-		0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f,
-		0x75, 0x74, 0x70, 0x75, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x6c,
-		0x79, 0x20, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x20,
-		0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61,
-		0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x0a, 0x20, 0x20, 0x5f,
-		0x2e, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x72, 0x72, 0x61,
-		0x79, 0x2c, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x28, 0x61, 0x72, 0x72,
-		0x61, 0x79, 0x2c, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x2c,
-		0x20, 0x5b, 0x5d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x61, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66,
-		0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74,
-		0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x76,
-		0x61, 0x6c, 0x75, 0x65, 0x28, 0x73, 0x29, 0x2e, 0x0a, 0x20, 0x20, 0x5f,
-		0x2e, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x72, 0x72, 0x61,
-		0x79, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72,
-		0x65, 0x6e, 0x63, 0x65, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20,
-		0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61,
-		0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x31, 0x29,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x20, 0x61, 0x20,
-		0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2d, 0x66, 0x72,
-		0x65, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f,
-		0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e,
-		0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61,
-		0x79, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64,
-		0x79, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20,
-		0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20,
-		0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x74,
-		0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67,
-		0x20, 0x61, 0x20, 0x66, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6c,
-		0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x64, 0x20, 0x61, 0x73,
-		0x20, 0x60, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x60, 0x2e, 0x0a, 0x20,
-		0x20, 0x5f, 0x2e, 0x75, 0x6e, 0x69, 0x71, 0x20, 0x3d, 0x20, 0x5f, 0x2e,
-		0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c,
-		0x20, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x69,
-		0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e,
-		0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e, 0x69, 0x73, 0x46, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x65,
-		0x64, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x74,
-		0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d,
-		0x20, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x65,
-		0x64, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72,
-		0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x69,
-		0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3f, 0x20, 0x5f, 0x2e,
-		0x6d, 0x61, 0x70, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x69,
-		0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6e,
-		0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x3a, 0x20, 0x61, 0x72, 0x72, 0x61,
-		0x79, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72,
-		0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x73, 0x65, 0x65,
-		0x6e, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x65, 0x61, 0x63, 0x68, 0x28, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c,
-		0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76,
-		0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x3f, 0x20,
-		0x28, 0x21, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x7c, 0x7c, 0x20, 0x73,
-		0x65, 0x65, 0x6e, 0x5b, 0x73, 0x65, 0x65, 0x6e, 0x2e, 0x6c, 0x65, 0x6e,
-		0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x31, 0x5d, 0x20, 0x21, 0x3d, 0x3d,
-		0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x20, 0x3a, 0x20, 0x21, 0x5f,
-		0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x28, 0x73, 0x65,
-		0x65, 0x6e, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65,
-		0x65, 0x6e, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x76, 0x61, 0x6c, 0x75,
-		0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68,
-		0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5b, 0x69, 0x6e, 0x64, 0x65, 0x78,
-		0x5d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
-		0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x20, 0x61,
-		0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74,
-		0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68,
-		0x65, 0x20, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x65, 0x61, 0x63,
-		0x68, 0x20, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x20, 0x65,
-		0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20,
-		0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x2d, 0x69,
-		0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x73, 0x2e, 0x0a, 0x20, 0x20,
-		0x5f, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e,
-		0x75, 0x6e, 0x69, 0x71, 0x28, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x2e,
-		0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50,
-		0x72, 0x6f, 0x74, 0x6f, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65,
-		0x6e, 0x74, 0x73, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
-		0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73,
-		0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x20,
-		0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65,
-		0x65, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x2d, 0x69,
-		0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x73, 0x2e, 0x0a, 0x20, 0x20,
-		0x5f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x74, 0x20,
-		0x3d, 0x20, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c,
-		0x28, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20,
-		0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28,
-		0x5f, 0x2e, 0x75, 0x6e, 0x69, 0x71, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79,
-		0x29, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x69, 0x74, 0x65, 0x6d, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x65,
-		0x76, 0x65, 0x72, 0x79, 0x28, 0x72, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x74, 0x68, 0x65,
-		0x72, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x69, 0x6e,
-		0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2c,
-		0x20, 0x69, 0x74, 0x65, 0x6d, 0x29, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x61, 0x6b, 0x65, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
-		0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x6f, 0x6e,
-		0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20,
-		0x61, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20,
-		0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x73,
-		0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4f, 0x6e, 0x6c, 0x79, 0x20,
-		0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73,
-		0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20,
-		0x6a, 0x75, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72,
-		0x73, 0x74, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x77, 0x69, 0x6c,
-		0x6c, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x0a, 0x20, 0x20,
-		0x5f, 0x2e, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
-		0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x61, 0x72, 0x72, 0x61, 0x79, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x20,
-		0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79,
-		0x28, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2c,
-		0x20, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28,
-		0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x31,
-		0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28,
-		0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x7b, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x21, 0x5f, 0x2e, 0x63, 0x6f,
-		0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x28, 0x72, 0x65, 0x73, 0x74, 0x2c,
-		0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0x20, 0x7d, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x5a, 0x69, 0x70, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72,
-		0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x6c, 0x69,
-		0x73, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x73,
-		0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20,
-		0x2d, 0x2d, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20,
-		0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78,
-		0x20, 0x67, 0x6f, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72,
-		0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x7a, 0x69, 0x70, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x72, 0x67,
-		0x73, 0x20, 0x3d, 0x20, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61,
-		0x6c, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6c,
-		0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x6d, 0x61,
-		0x78, 0x28, 0x5f, 0x2e, 0x70, 0x6c, 0x75, 0x63, 0x6b, 0x28, 0x61, 0x72,
-		0x67, 0x73, 0x2c, 0x20, 0x27, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x27,
-		0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x65,
-		0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x6c, 0x65, 0x6e, 0x67,
-		0x74, 0x68, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72,
-		0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b,
-		0x20, 0x69, 0x20, 0x3c, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b,
-		0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5b, 0x69, 0x5d,
-		0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x70, 0x6c, 0x75, 0x63, 0x6b, 0x28, 0x61,
-		0x72, 0x67, 0x73, 0x2c, 0x20, 0x22, 0x22, 0x20, 0x2b, 0x20, 0x69, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
-		0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x73, 0x20,
-		0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x6f,
-		0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 0x20, 0x50, 0x61, 0x73, 0x73,
-		0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x73, 0x69,
-		0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6f,
-		0x66, 0x20, 0x60, 0x5b, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x76, 0x61, 0x6c,
-		0x75, 0x65, 0x5d, 0x60, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x70, 0x61,
-		0x69, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x77, 0x6f, 0x20,
-		0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x20, 0x61, 0x72, 0x72,
-		0x61, 0x79, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
-		0x61, 0x6d, 0x65, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d,
-		0x2d, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x65, 0x79,
-		0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f,
-		0x66, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
-		0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67,
-		0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x5f,
-		0x2e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6c, 0x69, 0x73, 0x74, 0x2c,
-		0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x69, 0x73, 0x74, 0x20,
-		0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x7b, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d,
-		0x20, 0x7b, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72,
-		0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x2c,
-		0x20, 0x6c, 0x20, 0x3d, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x6c, 0x65,
-		0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6c, 0x3b,
-		0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5b, 0x6c, 0x69, 0x73, 0x74, 0x5b,
-		0x69, 0x5d, 0x5d, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
-		0x5b, 0x69, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d,
-		0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5b, 0x6c,
-		0x69, 0x73, 0x74, 0x5b, 0x69, 0x5d, 0x5b, 0x30, 0x5d, 0x5d, 0x20, 0x3d,
-		0x20, 0x6c, 0x69, 0x73, 0x74, 0x5b, 0x69, 0x5d, 0x5b, 0x31, 0x5d, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x20, 0x20,
-		0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x66, 0x20,
-		0x74, 0x68, 0x65, 0x20, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x20,
-		0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70,
-		0x6c, 0x79, 0x20, 0x75, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x69,
-		0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x20, 0x28, 0x49, 0x27, 0x6d, 0x20,
-		0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x20, 0x79,
-		0x6f, 0x75, 0x2c, 0x20, 0x2a, 0x2a, 0x4d, 0x53, 0x49, 0x45, 0x2a, 0x2a,
-		0x29, 0x2c, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x77, 0x65, 0x20, 0x6e,
-		0x65, 0x65, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
-		0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69,
-		0x72, 0x73, 0x74, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
-		0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e,
-		0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x2d,
-		0x31, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x74, 0x65,
-		0x6d, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x63,
-		0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74,
-		0x6f, 0x20, 0x2a, 0x2a, 0x45, 0x43, 0x4d, 0x41, 0x53, 0x63, 0x72, 0x69,
-		0x70, 0x74, 0x20, 0x35, 0x2a, 0x2a, 0x27, 0x73, 0x20, 0x6e, 0x61, 0x74,
-		0x69, 0x76, 0x65, 0x20, 0x60, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66,
-		0x60, 0x20, 0x69, 0x66, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62,
-		0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x66, 0x20,
-		0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x69, 0x73,
-		0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61,
-		0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f,
-		0x72, 0x74, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x61,
-		0x73, 0x73, 0x20, 0x60, 0x74, 0x72, 0x75, 0x65, 0x60, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x2a, 0x2a, 0x69, 0x73, 0x53,
-		0x6f, 0x72, 0x74, 0x65, 0x64, 0x2a, 0x2a, 0x20, 0x74, 0x6f, 0x20, 0x75,
-		0x73, 0x65, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x73, 0x65,
-		0x61, 0x72, 0x63, 0x68, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x6e,
-		0x64, 0x65, 0x78, 0x4f, 0x66, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20,
-		0x69, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74,
-		0x65, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x3d, 0x3d, 0x20, 0x6e,
-		0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x2d, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x69, 0x20, 0x3d, 0x20, 0x30, 0x2c, 0x20, 0x6c, 0x20, 0x3d, 0x20, 0x61,
-		0x72, 0x72, 0x61, 0x79, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x73, 0x53,
-		0x6f, 0x72, 0x74, 0x65, 0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f,
-		0x66, 0x20, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x3d,
-		0x3d, 0x20, 0x27, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x27, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x20,
-		0x3d, 0x20, 0x28, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20,
-		0x3c, 0x20, 0x30, 0x20, 0x3f, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x6d,
-		0x61, 0x78, 0x28, 0x30, 0x2c, 0x20, 0x6c, 0x20, 0x2b, 0x20, 0x69, 0x73,
-		0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x29, 0x20, 0x3a, 0x20, 0x69, 0x73,
-		0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x20, 0x3d, 0x20,
-		0x5f, 0x2e, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x64, 0x65,
-		0x78, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x69, 0x74, 0x65,
-		0x6d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79,
-		0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x69, 0x74, 0x65, 0x6d,
-		0x20, 0x3f, 0x20, 0x69, 0x20, 0x3a, 0x20, 0x2d, 0x31, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x74,
-		0x69, 0x76, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x20, 0x26,
-		0x26, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x69, 0x6e, 0x64, 0x65,
-		0x78, 0x4f, 0x66, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x74, 0x69,
-		0x76, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x29, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e,
-		0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x69, 0x74, 0x65, 0x6d,
-		0x2c, 0x20, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x3b, 0x20,
-		0x69, 0x20, 0x3c, 0x20, 0x6c, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5b, 0x69, 0x5d,
-		0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x29, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2d, 0x31, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44,
-		0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20,
-		0x2a, 0x2a, 0x45, 0x43, 0x4d, 0x41, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74,
-		0x20, 0x35, 0x2a, 0x2a, 0x27, 0x73, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76,
-		0x65, 0x20, 0x60, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78,
-		0x4f, 0x66, 0x60, 0x20, 0x69, 0x66, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c,
-		0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6c, 0x61,
-		0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x72, 0x72,
-		0x61, 0x79, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x66, 0x72,
-		0x6f, 0x6d, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x3d, 0x3d, 0x20, 0x6e,
-		0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x2d, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x68, 0x61, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x66,
-		0x72, 0x6f, 0x6d, 0x20, 0x21, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x61, 0x74,
-		0x69, 0x76, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78,
-		0x4f, 0x66, 0x20, 0x26, 0x26, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e,
-		0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x20,
-		0x3d, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4c, 0x61,
-		0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x68, 0x61, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3f,
-		0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49,
-		0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x2c,
-		0x20, 0x66, 0x72, 0x6f, 0x6d, 0x29, 0x20, 0x3a, 0x20, 0x61, 0x72, 0x72,
-		0x61, 0x79, 0x2e, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78,
-		0x4f, 0x66, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x29, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x69, 0x20, 0x3d, 0x20, 0x28, 0x68, 0x61, 0x73, 0x49, 0x6e, 0x64, 0x65,
-		0x78, 0x20, 0x3f, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x3a, 0x20, 0x61,
-		0x72, 0x72, 0x61, 0x79, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20,
-		0x28, 0x69, 0x2d, 0x2d, 0x29, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72,
-		0x72, 0x61, 0x79, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x69,
-		0x74, 0x65, 0x6d, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x69, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x2d, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
-		0x65, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72,
-		0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61,
-		0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x69,
-		0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x20, 0x70, 0x72, 0x6f, 0x67,
-		0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x41, 0x20, 0x70,
-		0x6f, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x50,
-		0x79, 0x74, 0x68, 0x6f, 0x6e, 0x20, 0x60, 0x72, 0x61, 0x6e, 0x67, 0x65,
-		0x28, 0x29, 0x60, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x2e, 0x20, 0x53, 0x65, 0x65, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x5b,
-		0x74, 0x68, 0x65, 0x20, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x20, 0x64,
-		0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-		0x5d, 0x28, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x64, 0x6f, 0x63,
-		0x73, 0x2e, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67,
-		0x2f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2f, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x23,
-		0x72, 0x61, 0x6e, 0x67, 0x65, 0x29, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e,
-		0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2c, 0x20,
-		0x73, 0x74, 0x6f, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x65, 0x70, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x72,
-		0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67,
-		0x74, 0x68, 0x20, 0x3c, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x3d, 0x20,
-		0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x7c, 0x7c, 0x20, 0x30, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20,
-		0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x61, 0x72,
-		0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5b, 0x32, 0x5d, 0x20, 0x7c,
-		0x7c, 0x20, 0x31, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61,
-		0x72, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68,
-		0x2e, 0x6d, 0x61, 0x78, 0x28, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x63, 0x65,
-		0x69, 0x6c, 0x28, 0x28, 0x73, 0x74, 0x6f, 0x70, 0x20, 0x2d, 0x20, 0x73,
-		0x74, 0x61, 0x72, 0x74, 0x29, 0x20, 0x2f, 0x20, 0x73, 0x74, 0x65, 0x70,
-		0x29, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76,
-		0x61, 0x72, 0x20, 0x69, 0x64, 0x78, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x61, 0x6e, 0x67,
-		0x65, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x72, 0x72, 0x61,
-		0x79, 0x28, 0x6c, 0x65, 0x6e, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x28, 0x69, 0x64, 0x78, 0x20, 0x3c,
-		0x20, 0x6c, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5b, 0x69, 0x64, 0x78, 0x2b,
-		0x2b, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20,
-		0x2b, 0x3d, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x3b, 0x0a, 0x20, 0x20,
-		0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x46, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x61, 0x68, 0x65, 0x6d, 0x29,
-		0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
-		0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20,
-		0x61, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62,
-		0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x67, 0x69,
-		0x76, 0x65, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x28,
-		0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x74,
-		0x68, 0x69, 0x73, 0x60, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72,
-		0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79,
-		0x29, 0x2e, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x73,
-		0x20, 0x74, 0x6f, 0x20, 0x2a, 0x2a, 0x45, 0x43, 0x4d, 0x41, 0x53, 0x63,
-		0x72, 0x69, 0x70, 0x74, 0x20, 0x35, 0x2a, 0x2a, 0x27, 0x73, 0x20, 0x6e,
-		0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x60, 0x46, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x60, 0x20, 0x69, 0x66,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61,
-		0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x62, 0x69, 0x6e,
-		0x64, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x66, 0x75, 0x6e, 0x63, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-		0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x20,
-		0x3d, 0x3d, 0x3d, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x42, 0x69,
-		0x6e, 0x64, 0x20, 0x26, 0x26, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65,
-		0x42, 0x69, 0x6e, 0x64, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x2e,
-		0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x2c, 0x20,
-		0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61,
-		0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x31, 0x29,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x61,
-		0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e,
-		0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e,
-		0x74, 0x73, 0x2c, 0x20, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x74,
-		0x65, 0x78, 0x74, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x2e, 0x63, 0x6f,
-		0x6e, 0x63, 0x61, 0x74, 0x28, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63,
-		0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
-		0x73, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x61, 0x70,
-		0x70, 0x6c, 0x79, 0x20, 0x61, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69,
-		0x6e, 0x67, 0x20, 0x61, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
-		0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x68, 0x61,
-		0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74,
-		0x73, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d,
-		0x65, 0x6e, 0x74, 0x73, 0x20, 0x70, 0x72, 0x65, 0x2d, 0x66, 0x69, 0x6c,
-		0x6c, 0x65, 0x64, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74,
-		0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x74,
-		0x73, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x60, 0x74,
-		0x68, 0x69, 0x73, 0x60, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
-		0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61,
-		0x6c, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x66, 0x75, 0x6e, 0x63, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20,
-		0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61,
-		0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x31, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x2e, 0x61, 0x70, 0x70, 0x6c,
-		0x79, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73,
-		0x2e, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x28, 0x73, 0x6c, 0x69, 0x63,
-		0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75, 0x6d,
-		0x65, 0x6e, 0x74, 0x73, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x42, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20,
-		0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
-		0x27, 0x73, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x20, 0x74,
-		0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
-		0x74, 0x2e, 0x20, 0x55, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x66, 0x6f,
-		0x72, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x6c, 0x6c,
-		0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x20, 0x64,
-		0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x6e,
-		0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x62, 0x65, 0x6c, 0x6f,
-		0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x2e, 0x0a, 0x20, 0x20,
-		0x5f, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x6c, 0x69, 0x63,
-		0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75, 0x6d,
-		0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x73, 0x2e,
-		0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30,
-		0x29, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x73, 0x20, 0x3d, 0x20, 0x5f, 0x2e,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x28, 0x6f, 0x62,
-		0x6a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68,
-		0x28, 0x66, 0x75, 0x6e, 0x63, 0x73, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66, 0x29, 0x20, 0x7b, 0x20, 0x6f, 0x62,
-		0x6a, 0x5b, 0x66, 0x5d, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x62, 0x69, 0x6e,
-		0x64, 0x28, 0x6f, 0x62, 0x6a, 0x5b, 0x66, 0x5d, 0x2c, 0x20, 0x6f, 0x62,
-		0x6a, 0x29, 0x3b, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4d,
-		0x65, 0x6d, 0x6f, 0x69, 0x7a, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78,
-		0x70, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x73, 0x74, 0x6f, 0x72,
-		0x69, 0x6e, 0x67, 0x20, 0x69, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x75,
-		0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6d, 0x65, 0x6d,
-		0x6f, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x2c, 0x20, 0x68, 0x61,
-		0x73, 0x68, 0x65, 0x72, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x76, 0x61, 0x72, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x20, 0x3d, 0x20, 0x7b,
-		0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x73, 0x68, 0x65,
-		0x72, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x68, 0x61, 0x73, 0x68, 0x65, 0x72,
-		0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74,
-		0x79, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61,
-		0x72, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x73, 0x68,
-		0x65, 0x72, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x74, 0x68, 0x69,
-		0x73, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x6d, 0x65,
-		0x6d, 0x6f, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x20, 0x3f, 0x20, 0x6d,
-		0x65, 0x6d, 0x6f, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x20, 0x3a, 0x20, 0x28,
-		0x6d, 0x65, 0x6d, 0x6f, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x74,
-		0x68, 0x69, 0x73, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e,
-		0x74, 0x73, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x44, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x20, 0x61, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68,
-		0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62,
-		0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73,
-		0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20,
-		0x74, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x69, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
-		0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
-		0x73, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x2e, 0x0a,
-		0x20, 0x20, 0x5f, 0x2e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66, 0x75, 0x6e,
-		0x63, 0x2c, 0x20, 0x77, 0x61, 0x69, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x72, 0x67, 0x73, 0x20,
-		0x3d, 0x20, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c,
-		0x28, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20,
-		0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75,
-		0x74, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29,
-		0x7b, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x6e, 0x75, 0x6c, 0x6c,
-		0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0x20, 0x7d, 0x2c, 0x20,
-		0x77, 0x61, 0x69, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x66, 0x65, 0x72, 0x73,
-		0x20, 0x61, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c,
-		0x20, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x20,
-		0x69, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x61, 0x66,
-		0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72,
-		0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x61,
-		0x63, 0x6b, 0x20, 0x68, 0x61, 0x73, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x63, 0x6c, 0x65, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x20, 0x5f,
-		0x2e, 0x64, 0x65, 0x66, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x5f, 0x2e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70,
-		0x6c, 0x79, 0x28, 0x5f, 0x2c, 0x20, 0x5b, 0x66, 0x75, 0x6e, 0x63, 0x2c,
-		0x20, 0x31, 0x5d, 0x2e, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x28, 0x73,
-		0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72,
-		0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x31, 0x29, 0x29,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x74, 0x68,
-		0x61, 0x74, 0x2c, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x76,
-		0x6f, 0x6b, 0x65, 0x64, 0x2c, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6f,
-		0x6e, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x20, 0x74, 0x72, 0x69, 0x67, 0x67,
-		0x65, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x73, 0x74,
-		0x20, 0x6f, 0x6e, 0x63, 0x65, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x64,
-		0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65,
-		0x6e, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x20, 0x6f, 0x66, 0x20,
-		0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x74, 0x68,
-		0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x2c, 0x20,
-		0x77, 0x61, 0x69, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x76, 0x61, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c,
-		0x20, 0x61, 0x72, 0x67, 0x73, 0x2c, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f,
-		0x75, 0x74, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x70, 0x72, 0x65, 0x76,
-		0x69, 0x6f, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20,
-		0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x65,
-		0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20,
-		0x44, 0x61, 0x74, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x75,
-		0x6c, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x2e,
-		0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
-		0x74, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76,
-		0x61, 0x72, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77,
-		0x20, 0x44, 0x61, 0x74, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69,
-		0x6e, 0x67, 0x20, 0x3d, 0x20, 0x77, 0x61, 0x69, 0x74, 0x20, 0x2d, 0x20,
-		0x28, 0x6e, 0x6f, 0x77, 0x20, 0x2d, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69,
-		0x6f, 0x75, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x68,
-		0x69, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72,
-		0x67, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e,
-		0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20,
-		0x3c, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x54, 0x69, 0x6d,
-		0x65, 0x6f, 0x75, 0x74, 0x28, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74,
-		0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c,
-		0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70,
-		0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x6f,
-		0x77, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
-		0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-		0x78, 0x74, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x21, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x65,
-		0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x61, 0x74,
-		0x65, 0x72, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e,
-		0x67, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x6c, 0x6f, 0x6e, 0x67,
-		0x20, 0x61, 0x73, 0x20, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69,
-		0x6e, 0x75, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x69,
-		0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x2c, 0x20, 0x77, 0x69, 0x6c, 0x6c,
-		0x20, 0x6e, 0x6f, 0x74, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x62, 0x65,
-		0x20, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x2e, 0x20,
-		0x54, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x63, 0x61, 0x6c,
-		0x6c, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x69, 0x74,
-		0x20, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67,
-		0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4e, 0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x69,
-		0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x20, 0x49, 0x66, 0x20,
-		0x60, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x60, 0x20,
-		0x69, 0x73, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x74,
-		0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x74,
-		0x68, 0x65, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x65, 0x61, 0x64,
-		0x69, 0x6e, 0x67, 0x20, 0x65, 0x64, 0x67, 0x65, 0x2c, 0x20, 0x69, 0x6e,
-		0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x20,
-		0x20, 0x5f, 0x2e, 0x64, 0x65, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x20,
-		0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66,
-		0x75, 0x6e, 0x63, 0x2c, 0x20, 0x77, 0x61, 0x69, 0x74, 0x2c, 0x20, 0x69,
-		0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x29, 0x20, 0x7b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x74, 0x69, 0x6d, 0x65,
-		0x6f, 0x75, 0x74, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x63,
-		0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x69,
-		0x73, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x72,
-		0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72,
-		0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x75,
-		0x6c, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x21, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61,
-		0x74, 0x65, 0x29, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28,
-		0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x61, 0x72, 0x67,
-		0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x63,
-		0x61, 0x6c, 0x6c, 0x4e, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x6d,
-		0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x20, 0x26, 0x26, 0x20, 0x21, 0x74,
-		0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x6f,
-		0x75, 0x74, 0x28, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f,
-		0x75, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65,
-		0x6f, 0x75, 0x74, 0x28, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x77,
-		0x61, 0x69, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x63, 0x61, 0x6c, 0x6c, 0x4e, 0x6f, 0x77, 0x29,
-		0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x63, 0x6f, 0x6e,
-		0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20,
-		0x61, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20,
-		0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20,
-		0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x74, 0x69, 0x6d,
-		0x65, 0x2c, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72,
-		0x20, 0x68, 0x6f, 0x77, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6f, 0x66,
-		0x74, 0x65, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6c, 0x6c,
-		0x20, 0x69, 0x74, 0x2e, 0x20, 0x55, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20,
-		0x66, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x7a, 0x79, 0x20, 0x69, 0x6e, 0x69,
-		0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
-		0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66, 0x75, 0x6e,
-		0x63, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72,
-		0x20, 0x72, 0x61, 0x6e, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65,
-		0x2c, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x61, 0x6e, 0x29, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x61, 0x6e, 0x20, 0x3d, 0x20,
-		0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x6d, 0x65, 0x6d, 0x6f, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x2e,
-		0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2c, 0x20,
-		0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x20, 0x3d,
-		0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65, 0x6d, 0x6f,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73,
-		0x74, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70,
-		0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20,
-		0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20,
-		0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2c, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e,
-		0x67, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6a,
-		0x75, 0x73, 0x74, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
-		0x73, 0x2c, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20,
-		0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61,
-		0x66, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
-		0x61, 0x6c, 0x6c, 0x79, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
-		0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61,
-		0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a,
-		0x20, 0x20, 0x5f, 0x2e, 0x77, 0x72, 0x61, 0x70, 0x20, 0x3d, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x66, 0x75, 0x6e, 0x63,
-		0x2c, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x61,
-		0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x66, 0x75, 0x6e, 0x63, 0x5d,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x73, 0x68,
-		0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2c,
-		0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x61, 0x70,
-		0x70, 0x6c, 0x79, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2c, 0x20, 0x61, 0x72,
-		0x67, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69,
-		0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73,
-		0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6c,
-		0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x65, 0x61, 0x63, 0x68, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x69, 0x6e,
-		0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
-		0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x2e,
-		0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65,
-		0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x73, 0x20, 0x3d, 0x20, 0x61, 0x72, 0x67, 0x75,
-		0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x72, 0x67, 0x73, 0x20, 0x3d, 0x20,
-		0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61,
-		0x72, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x73, 0x2e,
-		0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x31, 0x3b, 0x20,
-		0x69, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x2d, 0x2d, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61,
-		0x72, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x66, 0x75, 0x6e, 0x63, 0x73,
-		0x5b, 0x69, 0x5d, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x74, 0x68,
-		0x69, 0x73, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73, 0x29, 0x5d, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x72, 0x67,
-		0x73, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
-		0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x62, 0x65,
-		0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x20, 0x61, 0x66,
-		0x74, 0x65, 0x72, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x61,
-		0x6c, 0x6c, 0x65, 0x64, 0x20, 0x4e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73,
-		0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20,
-		0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x74,
-		0x69, 0x6d, 0x65, 0x73, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x69,
-		0x6d, 0x65, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x28, 0x29, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x2d,
-		0x2d, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x3c, 0x20, 0x31, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x2e, 0x61, 0x70,
-		0x70, 0x6c, 0x79, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2c, 0x20, 0x61, 0x72,
-		0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x2d, 0x2d,
-		0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
-		0x2d, 0x2d, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74,
-		0x72, 0x69, 0x65, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61,
-		0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62,
-		0x6a, 0x65, 0x63, 0x74, 0x27, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65,
-		0x72, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x6f,
-		0x20, 0x2a, 0x2a, 0x45, 0x43, 0x4d, 0x41, 0x53, 0x63, 0x72, 0x69, 0x70,
-		0x74, 0x20, 0x35, 0x2a, 0x2a, 0x27, 0x73, 0x20, 0x6e, 0x61, 0x74, 0x69,
-		0x76, 0x65, 0x20, 0x60, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6b,
-		0x65, 0x79, 0x73, 0x60, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6b, 0x65, 0x79,
-		0x73, 0x20, 0x3d, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4b, 0x65,
-		0x79, 0x73, 0x20, 0x7c, 0x7c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a, 0x20, 0x21, 0x3d,
-		0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x6f, 0x62, 0x6a,
-		0x29, 0x29, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x6e, 0x65, 0x77,
-		0x20, 0x54, 0x79, 0x70, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x27,
-		0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65,
-		0x63, 0x74, 0x27, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61,
-		0x72, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61,
-		0x72, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x62, 0x6a,
-		0x29, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e, 0x68, 0x61, 0x73, 0x28,
-		0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x29, 0x20, 0x6b,
-		0x65, 0x79, 0x73, 0x5b, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x6c, 0x65, 0x6e,
-		0x67, 0x74, 0x68, 0x5d, 0x20, 0x3d, 0x20, 0x6b, 0x65, 0x79, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6b,
-		0x65, 0x79, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65,
-		0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20,
-		0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
-		0x27, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
-		0x73, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x73, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x76, 0x61, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x3d,
-		0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72,
-		0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x69, 0x6e,
-		0x20, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e,
-		0x68, 0x61, 0x73, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x6b, 0x65, 0x79,
-		0x29, 0x29, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x70, 0x75,
-		0x73, 0x68, 0x28, 0x6f, 0x62, 0x6a, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x29,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6e, 0x76,
-		0x65, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
-		0x74, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73,
-		0x74, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x5b, 0x6b, 0x65, 0x79, 0x2c, 0x20,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x5d, 0x60, 0x20, 0x70, 0x61, 0x69, 0x72,
-		0x73, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x70, 0x61, 0x69, 0x72, 0x73,
-		0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76,
-		0x61, 0x72, 0x20, 0x70, 0x61, 0x69, 0x72, 0x73, 0x20, 0x3d, 0x20, 0x5b,
-		0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28,
-		0x76, 0x61, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x6f,
-		0x62, 0x6a, 0x29, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e, 0x68, 0x61,
-		0x73, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x29,
-		0x20, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28,
-		0x5b, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x5b, 0x6b, 0x65,
-		0x79, 0x5d, 0x5d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x69, 0x72, 0x73, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49,
-		0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6b, 0x65,
-		0x79, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65,
-		0x63, 0x74, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75,
-		0x65, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73,
-		0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x2e,
-		0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20,
-		0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f,
-		0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61,
-		0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x7b,
-		0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28,
-		0x76, 0x61, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x6f,
-		0x62, 0x6a, 0x29, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e, 0x68, 0x61,
-		0x73, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x29,
-		0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5b, 0x6f, 0x62, 0x6a, 0x5b,
-		0x6b, 0x65, 0x79, 0x5d, 0x5d, 0x20, 0x3d, 0x20, 0x6b, 0x65, 0x79, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b,
-		0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x61, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x6c,
-		0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65,
-		0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20,
-		0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
-		0x74, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x6c, 0x69, 0x61,
-		0x73, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x60, 0x6d, 0x65, 0x74, 0x68,
-		0x6f, 0x64, 0x73, 0x60, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x6d,
-		0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6e, 0x61, 0x6d,
-		0x65, 0x73, 0x20, 0x3d, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x65,
-		0x79, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e,
-		0x69, 0x73, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f,
-		0x62, 0x6a, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x29, 0x29, 0x20, 0x6e, 0x61,
-		0x6d, 0x65, 0x73, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x6b, 0x65, 0x79,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65,
-		0x73, 0x2e, 0x73, 0x6f, 0x72, 0x74, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20,
-		0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x45, 0x78, 0x74,
-		0x65, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20,
-		0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
-		0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70,
-		0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x61,
-		0x73, 0x73, 0x65, 0x64, 0x2d, 0x69, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65,
-		0x63, 0x74, 0x28, 0x73, 0x29, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x65,
-		0x78, 0x74, 0x65, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x73, 0x6c, 0x69,
-		0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75,
-		0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x31, 0x29, 0x2c, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x6f, 0x75, 0x72,
-		0x63, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f,
-		0x72, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x20,
-		0x69, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f,
-		0x62, 0x6a, 0x5b, 0x70, 0x72, 0x6f, 0x70, 0x5d, 0x20, 0x3d, 0x20, 0x73,
-		0x6f, 0x75, 0x72, 0x63, 0x65, 0x5b, 0x70, 0x72, 0x6f, 0x70, 0x5d, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x6e,
-		0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e,
-		0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x6c,
-		0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
-		0x74, 0x69, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x70, 0x69,
-		0x63, 0x6b, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x3d, 0x20,
-		0x7b, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x6b, 0x65, 0x79, 0x73, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61,
-		0x74, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x41, 0x72, 0x72, 0x61,
-		0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2c, 0x20, 0x73, 0x6c, 0x69, 0x63,
-		0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75, 0x6d,
-		0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x31, 0x29, 0x29, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x6b, 0x65, 0x79, 0x73,
-		0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6b,
-		0x65, 0x79, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x6f,
-		0x62, 0x6a, 0x29, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x5b, 0x6b, 0x65, 0x79,
-		0x5d, 0x20, 0x3d, 0x20, 0x6f, 0x62, 0x6a, 0x5b, 0x6b, 0x65, 0x79, 0x5d,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x6f, 0x70,
-		0x79, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20,
-		0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
-		0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f,
-		0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b,
-		0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65,
-		0x72, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6f,
-		0x6d, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x3d,
-		0x20, 0x7b, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72,
-		0x20, 0x6b, 0x65, 0x79, 0x73, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x63,
-		0x61, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x41, 0x72, 0x72,
-		0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2c, 0x20, 0x73, 0x6c, 0x69,
-		0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75,
-		0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x31, 0x29, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61, 0x72,
-		0x20, 0x6b, 0x65, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x21, 0x5f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73,
-		0x28, 0x6b, 0x65, 0x79, 0x73, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x29,
-		0x20, 0x63, 0x6f, 0x70, 0x79, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x20, 0x3d,
-		0x20, 0x6f, 0x62, 0x6a, 0x5b, 0x6b, 0x65, 0x79, 0x5d, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x3b, 0x0a, 0x20, 0x20,
-		0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x46, 0x69, 0x6c,
-		0x6c, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e,
-		0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68,
-		0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x70, 0x72, 0x6f,
-		0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x5f,
-		0x2e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68,
-		0x28, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28,
-		0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x31,
-		0x29, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x6f, 0x75, 0x72,
-		0x63, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x70,
-		0x72, 0x6f, 0x70, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63,
-		0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a, 0x5b, 0x70,
-		0x72, 0x6f, 0x70, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c,
-		0x29, 0x20, 0x6f, 0x62, 0x6a, 0x5b, 0x70, 0x72, 0x6f, 0x70, 0x5d, 0x20,
-		0x3d, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5b, 0x70, 0x72, 0x6f,
-		0x70, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x3b, 0x0a, 0x20, 0x20,
-		0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x72, 0x65,
-		0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x28, 0x73, 0x68, 0x61, 0x6c, 0x6c,
-		0x6f, 0x77, 0x2d, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x64, 0x29, 0x20, 0x64,
-		0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20,
-		0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x20,
-		0x20, 0x5f, 0x2e, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21,
-		0x5f, 0x2e, 0x69, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x6f,
-		0x62, 0x6a, 0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x6f, 0x62, 0x6a, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x41, 0x72, 0x72, 0x61,
-		0x79, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x3f, 0x20, 0x6f, 0x62, 0x6a,
-		0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x28, 0x29, 0x20, 0x3a, 0x20, 0x5f,
-		0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x28, 0x7b, 0x7d, 0x2c, 0x20,
-		0x6f, 0x62, 0x6a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x73,
-		0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x6f, 0x72,
-		0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62,
-		0x6a, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x6f, 0x62, 0x6a, 0x2e,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x72,
-		0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73,
-		0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65,
-		0x74, 0x68, 0x6f, 0x64, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x22,
-		0x74, 0x61, 0x70, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x22, 0x20, 0x61, 0x20,
-		0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e,
-		0x2c, 0x20, 0x69, 0x6e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6f, 0x72,
-		0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f,
-		0x72, 0x6d, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-		0x73, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65,
-		0x64, 0x69, 0x61, 0x74, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
-		0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
-		0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e,
-		0x74, 0x61, 0x70, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x65,
-		0x72, 0x63, 0x65, 0x70, 0x74, 0x6f, 0x72, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74,
-		0x6f, 0x72, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x63,
-		0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61,
-		0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x60, 0x69, 0x73, 0x45, 0x71,
-		0x75, 0x61, 0x6c, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x65, 0x71, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x2c, 0x20, 0x61, 0x53, 0x74, 0x61,
-		0x63, 0x6b, 0x2c, 0x20, 0x62, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x64, 0x65,
-		0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
-		0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c,
-		0x2e, 0x20, 0x60, 0x30, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x2d, 0x30, 0x60,
-		0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61,
-		0x72, 0x65, 0x6e, 0x27, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
-		0x63, 0x61, 0x6c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x53, 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x48, 0x61, 0x72, 0x6d,
-		0x6f, 0x6e, 0x79, 0x20, 0x60, 0x65, 0x67, 0x61, 0x6c, 0x60, 0x20, 0x70,
-		0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x3a, 0x20, 0x68, 0x74, 0x74,
-		0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x69, 0x6b, 0x69, 0x2e, 0x65, 0x63, 0x6d,
-		0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
-		0x64, 0x6f, 0x6b, 0x75, 0x2e, 0x70, 0x68, 0x70, 0x3f, 0x69, 0x64, 0x3d,
-		0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x3a, 0x65, 0x67, 0x61, 0x6c,
-		0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x20,
-		0x3d, 0x3d, 0x3d, 0x20, 0x62, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x61, 0x20, 0x21, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c,
-		0x20, 0x31, 0x20, 0x2f, 0x20, 0x61, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20,
-		0x2f, 0x20, 0x62, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x41, 0x20, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x6d,
-		0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x6e,
-		0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x79, 0x20, 0x62, 0x65, 0x63,
-		0x61, 0x75, 0x73, 0x65, 0x20, 0x60, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x3d,
-		0x3d, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x60,
-		0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x20,
-		0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x7c, 0x7c, 0x20, 0x62,
-		0x20, 0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x62,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x55, 0x6e, 0x77,
-		0x72, 0x61, 0x70, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x77, 0x72, 0x61, 0x70,
-		0x70, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x20, 0x69,
-		0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x6f, 0x66, 0x20, 0x5f, 0x29,
-		0x20, 0x61, 0x20, 0x3d, 0x20, 0x61, 0x2e, 0x5f, 0x77, 0x72, 0x61, 0x70,
-		0x70, 0x65, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x62, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x6f,
-		0x66, 0x20, 0x5f, 0x29, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x62, 0x2e, 0x5f,
-		0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x20,
-		0x60, 0x5b, 0x5b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x5d, 0x5d, 0x60, 0x20,
-		0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76,
-		0x61, 0x72, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65,
-		0x20, 0x3d, 0x20, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
-		0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61,
-		0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69,
-		0x6e, 0x67, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x62, 0x29, 0x29, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68,
-		0x20, 0x28, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x6e, 0x75, 0x6d,
-		0x62, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2c,
-		0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e,
-		0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72,
-		0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20,
-		0x27, 0x5b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x53, 0x74, 0x72,
-		0x69, 0x6e, 0x67, 0x5d, 0x27, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74,
-		0x69, 0x76, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65,
-		0x69, 0x72, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-		0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
-		0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65,
-		0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x3b,
-		0x20, 0x74, 0x68, 0x75, 0x73, 0x2c, 0x20, 0x60, 0x22, 0x35, 0x22, 0x60,
-		0x20, 0x69, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e,
-		0x74, 0x20, 0x74, 0x6f, 0x20, 0x60, 0x6e, 0x65, 0x77, 0x20, 0x53, 0x74,
-		0x72, 0x69, 0x6e, 0x67, 0x28, 0x22, 0x35, 0x22, 0x29, 0x60, 0x2e, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x61, 0x20, 0x3d, 0x3d, 0x20, 0x53, 0x74, 0x72, 0x69,
-		0x6e, 0x67, 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x5b, 0x6f, 0x62, 0x6a, 0x65,
-		0x63, 0x74, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5d, 0x27, 0x3a,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x60, 0x4e, 0x61, 0x4e, 0x60, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x65,
-		0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62,
-		0x75, 0x74, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x72, 0x65, 0x66, 0x6c, 0x65,
-		0x78, 0x69, 0x76, 0x65, 0x2e, 0x20, 0x41, 0x6e, 0x20, 0x60, 0x65, 0x67,
-		0x61, 0x6c, 0x60, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73,
-		0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72,
-		0x6d, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72,
-		0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x76, 0x61, 0x6c,
-		0x75, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x21, 0x3d,
-		0x20, 0x2b, 0x61, 0x20, 0x3f, 0x20, 0x62, 0x20, 0x21, 0x3d, 0x20, 0x2b,
-		0x62, 0x20, 0x3a, 0x20, 0x28, 0x61, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20,
-		0x3f, 0x20, 0x31, 0x20, 0x2f, 0x20, 0x61, 0x20, 0x3d, 0x3d, 0x20, 0x31,
-		0x20, 0x2f, 0x20, 0x62, 0x20, 0x3a, 0x20, 0x61, 0x20, 0x3d, 0x3d, 0x20,
-		0x2b, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63,
-		0x61, 0x73, 0x65, 0x20, 0x27, 0x5b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
-		0x20, 0x44, 0x61, 0x74, 0x65, 0x5d, 0x27, 0x3a, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x5b, 0x6f, 0x62,
-		0x6a, 0x65, 0x63, 0x74, 0x20, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e,
-		0x5d, 0x27, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x65, 0x72, 0x63, 0x65, 0x20, 0x64, 0x61,
-		0x74, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x6f, 0x6c,
-		0x65, 0x61, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6e, 0x75, 0x6d, 0x65,
-		0x72, 0x69, 0x63, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76,
-		0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x20, 0x44, 0x61,
-		0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70,
-		0x61, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x69,
-		0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
-		0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74,
-		0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74,
-		0x68, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20,
-		0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6d,
-		0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x72,
-		0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f,
-		0x6e, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x4e, 0x61, 0x4e, 0x60, 0x20, 0x61,
-		0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76,
-		0x61, 0x6c, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x2b, 0x61,
-		0x20, 0x3d, 0x3d, 0x20, 0x2b, 0x62, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x67, 0x45, 0x78, 0x70, 0x73,
-		0x20, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65,
-		0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x73,
-		0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72,
-		0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x73,
-		0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65,
-		0x20, 0x27, 0x5b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x52, 0x65,
-		0x67, 0x45, 0x78, 0x70, 0x5d, 0x27, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61,
-		0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x62,
-		0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x26, 0x26, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x61, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x3d,
-		0x3d, 0x20, 0x62, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x26,
-		0x26, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69,
-		0x6c, 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x62, 0x2e, 0x6d, 0x75,
-		0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x26, 0x26, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x61, 0x2e, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x43, 0x61,
-		0x73, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x62, 0x2e, 0x69, 0x67, 0x6e, 0x6f,
-		0x72, 0x65, 0x43, 0x61, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79,
-		0x70, 0x65, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x6f,
-		0x62, 0x6a, 0x65, 0x63, 0x74, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x79,
-		0x70, 0x65, 0x6f, 0x66, 0x20, 0x62, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x6f,
-		0x62, 0x6a, 0x65, 0x63, 0x74, 0x27, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20,
-		0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x66, 0x6f, 0x72,
-		0x20, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x75,
-		0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20,
-		0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x20, 0x66, 0x6f,
-		0x72, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20,
-		0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73,
-		0x20, 0x69, 0x73, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x64, 0x20,
-		0x66, 0x72, 0x6f, 0x6d, 0x20, 0x45, 0x53, 0x20, 0x35, 0x2e, 0x31, 0x20,
-		0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x35, 0x2e, 0x31,
-		0x32, 0x2e, 0x33, 0x2c, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63,
-		0x74, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
-		0x60, 0x4a, 0x4f, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61,
-		0x72, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x61,
-		0x53, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20,
-		0x28, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2d, 0x2d, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4c, 0x69,
-		0x6e, 0x65, 0x61, 0x72, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e,
-		0x20, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65,
-		0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c,
-		0x79, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e,
-		0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75,
-		0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20,
-		0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63,
-		0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x5b,
-		0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x61,
-		0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x53, 0x74,
-		0x61, 0x63, 0x6b, 0x5b, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5d, 0x20,
-		0x3d, 0x3d, 0x20, 0x62, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x64, 0x64, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a,
-		0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
-		0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x72, 0x61, 0x76,
-		0x65, 0x72, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
-		0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x53, 0x74, 0x61, 0x63,
-		0x6b, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x62, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x70, 0x75,
-		0x73, 0x68, 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76,
-		0x61, 0x72, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x2c,
-		0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x72,
-		0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52,
-		0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20, 0x63,
-		0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
-		0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79,
-		0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63,
-		0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x3d, 0x20,
-		0x27, 0x5b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x41, 0x72, 0x72,
-		0x61, 0x79, 0x5d, 0x27, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65,
-		0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74,
-		0x68, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d,
-		0x69, 0x6e, 0x65, 0x20, 0x69, 0x66, 0x20, 0x61, 0x20, 0x64, 0x65, 0x65,
-		0x70, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e,
-		0x20, 0x69, 0x73, 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72,
-		0x79, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x7a,
-		0x65, 0x20, 0x3d, 0x20, 0x61, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75,
-		0x6c, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d,
-		0x20, 0x62, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73,
-		0x75, 0x6c, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x65, 0x70, 0x20, 0x63,
-		0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
-		0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x69, 0x67, 0x6e,
-		0x6f, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6e, 0x75,
-		0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
-		0x74, 0x69, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x73, 0x69, 0x7a,
-		0x65, 0x2d, 0x2d, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x28, 0x72,
-		0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x65, 0x71, 0x28, 0x61,
-		0x5b, 0x73, 0x69, 0x7a, 0x65, 0x5d, 0x2c, 0x20, 0x62, 0x5b, 0x73, 0x69,
-		0x7a, 0x65, 0x5d, 0x2c, 0x20, 0x61, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x2c,
-		0x20, 0x62, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x29, 0x29, 0x29, 0x20, 0x62,
-		0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4f, 0x62,
-		0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64,
-		0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e,
-		0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x72,
-		0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61,
-		0x6c, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x60, 0x4f,
-		0x62, 0x6a, 0x65, 0x63, 0x74, 0x60, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x64, 0x69,
-		0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x61, 0x6d,
-		0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x43, 0x74, 0x6f, 0x72, 0x20,
-		0x3d, 0x20, 0x61, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63,
-		0x74, 0x6f, 0x72, 0x2c, 0x20, 0x62, 0x43, 0x74, 0x6f, 0x72, 0x20, 0x3d,
-		0x20, 0x62, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74,
-		0x6f, 0x72, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x61, 0x43, 0x74, 0x6f, 0x72, 0x20, 0x21, 0x3d, 0x3d, 0x20,
-		0x62, 0x43, 0x74, 0x6f, 0x72, 0x20, 0x26, 0x26, 0x20, 0x21, 0x28, 0x5f,
-		0x2e, 0x69, 0x73, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x61, 0x43, 0x74, 0x6f, 0x72, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x61,
-		0x43, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63,
-		0x65, 0x6f, 0x66, 0x20, 0x61, 0x43, 0x74, 0x6f, 0x72, 0x29, 0x20, 0x26,
-		0x26, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2e, 0x69,
-		0x73, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x62, 0x43,
-		0x74, 0x6f, 0x72, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x62, 0x43, 0x74,
-		0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x6f,
-		0x66, 0x20, 0x62, 0x43, 0x74, 0x6f, 0x72, 0x29, 0x29, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x65, 0x70, 0x20, 0x63, 0x6f, 0x6d,
-		0x70, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73,
-		0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20,
-		0x28, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x69, 0x6e, 0x20,
-		0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x61,
-		0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43,
-		0x6f, 0x75, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70,
-		0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
-		0x20, 0x6f, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
-		0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2b, 0x2b, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44,
-		0x65, 0x65, 0x70, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x20,
-		0x65, 0x61, 0x63, 0x68, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
-		0x66, 0x20, 0x28, 0x21, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20,
-		0x3d, 0x20, 0x5f, 0x2e, 0x68, 0x61, 0x73, 0x28, 0x62, 0x2c, 0x20, 0x6b,
-		0x65, 0x79, 0x29, 0x20, 0x26, 0x26, 0x20, 0x65, 0x71, 0x28, 0x61, 0x5b,
-		0x6b, 0x65, 0x79, 0x5d, 0x2c, 0x20, 0x62, 0x5b, 0x6b, 0x65, 0x79, 0x5d,
-		0x2c, 0x20, 0x61, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x2c, 0x20, 0x62, 0x53,
-		0x74, 0x61, 0x63, 0x6b, 0x29, 0x29, 0x29, 0x20, 0x62, 0x72, 0x65, 0x61,
-		0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x45, 0x6e, 0x73, 0x75, 0x72, 0x65,
-		0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x6f,
-		0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61,
-		0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20,
-		0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x72,
-		0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75,
-		0x6c, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x20, 0x69,
-		0x6e, 0x20, 0x62, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e, 0x68,
-		0x61, 0x73, 0x28, 0x62, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x20, 0x26,
-		0x26, 0x20, 0x21, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x2d, 0x2d, 0x29, 0x29,
-		0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x21,
-		0x73, 0x69, 0x7a, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68,
-		0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x65,
-		0x63, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20,
-		0x73, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x72, 0x61,
-		0x76, 0x65, 0x72, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
-		0x74, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x53, 0x74, 0x61,
-		0x63, 0x6b, 0x2e, 0x70, 0x6f, 0x70, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x62, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x70, 0x6f, 0x70,
-		0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x20,
-		0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x50, 0x65,
-		0x72, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x20, 0x64, 0x65, 0x65, 0x70,
-		0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20,
-		0x74, 0x6f, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x69, 0x66, 0x20,
-		0x74, 0x77, 0x6f, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20,
-		0x61, 0x72, 0x65, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x2e, 0x0a, 0x20,
-		0x20, 0x5f, 0x2e, 0x69, 0x73, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x3d,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x2c,
-		0x20, 0x62, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
-		0x74, 0x75, 0x72, 0x6e, 0x20, 0x65, 0x71, 0x28, 0x61, 0x2c, 0x20, 0x62,
-		0x2c, 0x20, 0x5b, 0x5d, 0x2c, 0x20, 0x5b, 0x5d, 0x29, 0x3b, 0x0a, 0x20,
-		0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x73,
-		0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x72, 0x72,
-		0x61, 0x79, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20,
-		0x6f, 0x72, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x65, 0x6d,
-		0x70, 0x74, 0x79, 0x3f, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x6e,
-		0x20, 0x22, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x20, 0x6f, 0x62, 0x6a,
-		0x65, 0x63, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x65,
-		0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6f, 0x77,
-		0x6e, 0x2d, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
-		0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x45, 0x6d, 0x70, 0x74,
-		0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d, 0x20, 0x6e,
-		0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x5f, 0x2e, 0x69, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28,
-		0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x5f, 0x2e, 0x69, 0x73,
-		0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x29,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x2e,
-		0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76,
-		0x61, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x62,
-		0x6a, 0x29, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x2e, 0x68, 0x61, 0x73,
-		0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x29, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x73, 0x20, 0x61, 0x20, 0x67,
-		0x69, 0x76, 0x65, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61,
-		0x20, 0x44, 0x4f, 0x4d, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
-		0x3f, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x45, 0x6c, 0x65, 0x6d,
-		0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x21, 0x21, 0x28,
-		0x6f, 0x62, 0x6a, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x6e,
-		0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x3d, 0x20,
-		0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x49, 0x73, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65,
-		0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61,
-		0x72, 0x72, 0x61, 0x79, 0x3f, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44,
-		0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20,
-		0x45, 0x43, 0x4d, 0x41, 0x35, 0x27, 0x73, 0x20, 0x6e, 0x61, 0x74, 0x69,
-		0x76, 0x65, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x69, 0x73, 0x41,
-		0x72, 0x72, 0x61, 0x79, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x41,
-		0x72, 0x72, 0x61, 0x79, 0x20, 0x3d, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x76,
-		0x65, 0x49, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x20, 0x7c, 0x7c, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e,
-		0x63, 0x61, 0x6c, 0x6c, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x3d, 0x3d,
-		0x20, 0x27, 0x5b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x41, 0x72,
-		0x72, 0x61, 0x79, 0x5d, 0x27, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x73, 0x20, 0x61, 0x20, 0x67,
-		0x69, 0x76, 0x65, 0x6e, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c,
-		0x65, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3f,
-		0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63,
-		0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d,
-		0x3d, 0x3d, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x28, 0x6f, 0x62,
-		0x6a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x41, 0x64, 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20,
-		0x69, 0x73, 0x54, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f,
-		0x64, 0x73, 0x3a, 0x20, 0x69, 0x73, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65,
-		0x6e, 0x74, 0x73, 0x2c, 0x20, 0x69, 0x73, 0x46, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e,
-		0x67, 0x2c, 0x20, 0x69, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c,
-		0x20, 0x69, 0x73, 0x44, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x73, 0x52,
-		0x65, 0x67, 0x45, 0x78, 0x70, 0x2e, 0x0a, 0x20, 0x20, 0x65, 0x61, 0x63,
-		0x68, 0x28, 0x5b, 0x27, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
-		0x73, 0x27, 0x2c, 0x20, 0x27, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x27, 0x2c, 0x20, 0x27, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27,
-		0x2c, 0x20, 0x27, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x27, 0x2c, 0x20,
-		0x27, 0x44, 0x61, 0x74, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x52, 0x65, 0x67,
-		0x45, 0x78, 0x70, 0x27, 0x5d, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x5f, 0x5b, 0x27, 0x69, 0x73, 0x27, 0x20, 0x2b,
-		0x20, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x63,
-		0x61, 0x6c, 0x6c, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x3d, 0x3d, 0x20,
-		0x27, 0x5b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x27, 0x20, 0x2b,
-		0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x2b, 0x20, 0x27, 0x5d, 0x27, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x66, 0x69,
-		0x6e, 0x65, 0x20, 0x61, 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63,
-		0x6b, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66,
-		0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20,
-		0x69, 0x6e, 0x20, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x73, 0x20,
-		0x28, 0x61, 0x68, 0x65, 0x6d, 0x2c, 0x20, 0x49, 0x45, 0x29, 0x2c, 0x20,
-		0x77, 0x68, 0x65, 0x72, 0x65, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74,
-		0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x61,
-		0x6e, 0x79, 0x20, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x61, 0x62,
-		0x6c, 0x65, 0x20, 0x22, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
-		0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x69,
-		0x66, 0x20, 0x28, 0x21, 0x5f, 0x2e, 0x69, 0x73, 0x41, 0x72, 0x67, 0x75,
-		0x6d, 0x65, 0x6e, 0x74, 0x73, 0x28, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65,
-		0x6e, 0x74, 0x73, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x5f, 0x2e, 0x69, 0x73, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
-		0x73, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x21, 0x21, 0x28,
-		0x6f, 0x62, 0x6a, 0x20, 0x26, 0x26, 0x20, 0x5f, 0x2e, 0x68, 0x61, 0x73,
-		0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x27, 0x63, 0x61, 0x6c, 0x6c, 0x65,
-		0x65, 0x27, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b,
-		0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4f,
-		0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x20, 0x60, 0x69, 0x73, 0x46,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x20, 0x69, 0x66, 0x20,
-		0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x2e,
-		0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f,
-		0x66, 0x20, 0x28, 0x2f, 0x2e, 0x2f, 0x29, 0x20, 0x21, 0x3d, 0x3d, 0x20,
-		0x27, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x46, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, 0x6f, 0x62, 0x6a,
-		0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x27, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x27, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x73,
-		0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x6f, 0x62, 0x6a,
-		0x65, 0x63, 0x74, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65,
-		0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x3f, 0x0a, 0x20, 0x20, 0x5f,
-		0x2e, 0x69, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x69, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x28,
-		0x6f, 0x62, 0x6a, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x69, 0x73, 0x4e,
-		0x61, 0x4e, 0x28, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x6c, 0x6f, 0x61,
-		0x74, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x73, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x76, 0x61, 0x6c,
-		0x75, 0x65, 0x20, 0x60, 0x4e, 0x61, 0x4e, 0x60, 0x3f, 0x20, 0x28, 0x4e,
-		0x61, 0x4e, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e,
-		0x6c, 0x79, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x77, 0x68,
-		0x69, 0x63, 0x68, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74,
-		0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x69, 0x74, 0x73, 0x65, 0x6c,
-		0x66, 0x29, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x4e, 0x61,
-		0x4e, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x4e,
-		0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x26,
-		0x26, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x21, 0x3d, 0x20, 0x2b, 0x6f, 0x62,
-		0x6a, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x49, 0x73, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e,
-		0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x20, 0x62, 0x6f, 0x6f,
-		0x6c, 0x65, 0x61, 0x6e, 0x3f, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x73,
-		0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x20, 0x3d, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x74, 0x72, 0x75,
-		0x65, 0x20, 0x7c, 0x7c, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d, 0x3d,
-		0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x6f,
-		0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28,
-		0x6f, 0x62, 0x6a, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x5b, 0x6f, 0x62,
-		0x6a, 0x65, 0x63, 0x74, 0x20, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e,
-		0x5d, 0x27, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x49, 0x73, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65,
-		0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x65, 0x71, 0x75, 0x61,
-		0x6c, 0x20, 0x74, 0x6f, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x3f, 0x0a, 0x20,
-		0x20, 0x5f, 0x2e, 0x69, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x6e,
-		0x75, 0x6c, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x49, 0x73, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76,
-		0x65, 0x6e, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20,
-		0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x3f, 0x0a, 0x20,
-		0x20, 0x5f, 0x2e, 0x69, 0x73, 0x55, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e,
-		0x65, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x20,
-		0x3d, 0x3d, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x30, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x53,
-		0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x65,
-		0x63, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x20,
-		0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61,
-		0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65,
-		0x72, 0x74, 0x79, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x74, 0x73,
-		0x65, 0x6c, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x20, 0x6f, 0x74, 0x68, 0x65,
-		0x72, 0x20, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2c, 0x20, 0x6e, 0x6f, 0x74,
-		0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74,
-		0x79, 0x70, 0x65, 0x29, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x68, 0x61,
-		0x73, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x2c, 0x20, 0x6b, 0x65, 0x79, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x68, 0x61, 0x73, 0x4f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
-		0x74, 0x79, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x6f, 0x62, 0x6a, 0x2c,
-		0x20, 0x6b, 0x65, 0x79, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x74,
-		0x79, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
-		0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x75, 0x6e, 0x20, 0x55, 0x6e, 0x64,
-		0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6a, 0x73, 0x20, 0x69,
-		0x6e, 0x20, 0x2a, 0x6e, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63,
-		0x74, 0x2a, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60,
-		0x5f, 0x60, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20,
-		0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6f, 0x77, 0x6e,
-		0x65, 0x72, 0x2e, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20,
-		0x61, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
-		0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x64, 0x65, 0x72,
-		0x73, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
-		0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6e, 0x6f, 0x43, 0x6f, 0x6e, 0x66,
-		0x6c, 0x69, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x6f, 0x6f, 0x74, 0x2e, 0x5f, 0x20, 0x3d, 0x20, 0x70, 0x72, 0x65,
-		0x76, 0x69, 0x6f, 0x75, 0x73, 0x55, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63,
-		0x6f, 0x72, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x3b, 0x0a, 0x20, 0x20,
-		0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4b, 0x65, 0x65,
-		0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
-		0x74, 0x79, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
-		0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64,
-		0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61,
-		0x74, 0x6f, 0x72, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x69, 0x64,
-		0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x75, 0x6e, 0x20,
-		0x61, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2a,
-		0x2a, 0x6e, 0x2a, 0x2a, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x2e, 0x0a,
-		0x20, 0x20, 0x5f, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6e, 0x2c, 0x20,
-		0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x63, 0x6f,
-		0x6e, 0x74, 0x65, 0x78, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x63, 0x63, 0x75, 0x6d, 0x20, 0x3d,
-		0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x6e, 0x29, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20,
-		0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x6e,
-		0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x61, 0x63, 0x63, 0x75, 0x6d,
-		0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74,
-		0x6f, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x63, 0x6f, 0x6e, 0x74,
-		0x65, 0x78, 0x74, 0x2c, 0x20, 0x69, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x63, 0x63, 0x75,
-		0x6d, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x72,
-		0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65,
-		0x72, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x6d, 0x69,
-		0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x78, 0x20, 0x28, 0x69,
-		0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x29, 0x2e, 0x0a, 0x20,
-		0x20, 0x5f, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x3d, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x69, 0x6e,
-		0x2c, 0x20, 0x6d, 0x61, 0x78, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x61, 0x78, 0x20, 0x3d, 0x3d, 0x20,
-		0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x6d, 0x61, 0x78, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6e, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x3d,
-		0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x6e,
-		0x20, 0x2b, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x66, 0x6c, 0x6f, 0x6f,
-		0x72, 0x28, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f,
-		0x6d, 0x28, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x6d, 0x61, 0x78, 0x20, 0x2d,
-		0x20, 0x6d, 0x69, 0x6e, 0x20, 0x2b, 0x20, 0x31, 0x29, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4c,
-		0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20,
-		0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72,
-		0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x20,
-		0x20, 0x76, 0x61, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4d,
-		0x61, 0x70, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65,
-		0x73, 0x63, 0x61, 0x70, 0x65, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x27, 0x26, 0x27, 0x3a, 0x20, 0x27, 0x26, 0x61, 0x6d,
-		0x70, 0x3b, 0x27, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27,
-		0x3c, 0x27, 0x3a, 0x20, 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x27, 0x2c, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x3e, 0x27, 0x3a, 0x20, 0x27,
-		0x26, 0x67, 0x74, 0x3b, 0x27, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x27, 0x22, 0x27, 0x3a, 0x20, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74,
-		0x3b, 0x27, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x27,
-		0x22, 0x3a, 0x20, 0x27, 0x26, 0x23, 0x78, 0x32, 0x37, 0x3b, 0x27, 0x2c,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2f, 0x27, 0x3a, 0x20,
-		0x27, 0x26, 0x23, 0x78, 0x32, 0x46, 0x3b, 0x27, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x65, 0x6e,
-		0x74, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x70, 0x2e, 0x75, 0x6e, 0x65, 0x73,
-		0x63, 0x61, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x69, 0x6e, 0x76,
-		0x65, 0x72, 0x74, 0x28, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4d, 0x61,
-		0x70, 0x2e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x29, 0x3b, 0x0a, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x52, 0x65, 0x67, 0x65, 0x78, 0x65, 0x73,
-		0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20,
-		0x74, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x20, 0x61, 0x6e, 0x64,
-		0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74,
-		0x65, 0x64, 0x20, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65,
-		0x6c, 0x79, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x20, 0x20,
-		0x76, 0x61, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65,
-		0x67, 0x65, 0x78, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x3a, 0x20, 0x20, 0x20,
-		0x6e, 0x65, 0x77, 0x20, 0x52, 0x65, 0x67, 0x45, 0x78, 0x70, 0x28, 0x27,
-		0x5b, 0x27, 0x20, 0x2b, 0x20, 0x5f, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x28,
-		0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x70, 0x2e, 0x65, 0x73,
-		0x63, 0x61, 0x70, 0x65, 0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27,
-		0x27, 0x29, 0x20, 0x2b, 0x20, 0x27, 0x5d, 0x27, 0x2c, 0x20, 0x27, 0x67,
-		0x27, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x65, 0x73,
-		0x63, 0x61, 0x70, 0x65, 0x3a, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x52, 0x65,
-		0x67, 0x45, 0x78, 0x70, 0x28, 0x27, 0x28, 0x27, 0x20, 0x2b, 0x20, 0x5f,
-		0x2e, 0x6b, 0x65, 0x79, 0x73, 0x28, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
-		0x4d, 0x61, 0x70, 0x2e, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65,
-		0x29, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x28, 0x27, 0x7c, 0x27, 0x29, 0x20,
-		0x2b, 0x20, 0x27, 0x29, 0x27, 0x2c, 0x20, 0x27, 0x67, 0x27, 0x29, 0x0a,
-		0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x46,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72,
-		0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e,
-		0x64, 0x20, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67,
-		0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x2f,
-		0x66, 0x72, 0x6f, 0x6d, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x69, 0x6e,
-		0x74, 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
-		0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x65, 0x61, 0x63, 0x68, 0x28, 0x5b, 0x27,
-		0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x75, 0x6e,
-		0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x27, 0x5d, 0x2c, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x65, 0x74, 0x68, 0x6f,
-		0x64, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5b, 0x6d,
-		0x65, 0x74, 0x68, 0x6f, 0x64, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
-		0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x3d, 0x20,
-		0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-		0x20, 0x27, 0x27, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x27, 0x27, 0x20, 0x2b, 0x20,
-		0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x2e, 0x72, 0x65, 0x70, 0x6c,
-		0x61, 0x63, 0x65, 0x28, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65,
-		0x67, 0x65, 0x78, 0x65, 0x73, 0x5b, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64,
-		0x5d, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x6d, 0x61, 0x74, 0x63, 0x68, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x70, 0x5b, 0x6d, 0x65,
-		0x74, 0x68, 0x6f, 0x64, 0x5d, 0x5b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5d,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b,
-		0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68,
-		0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x70, 0x72, 0x6f,
-		0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e,
-		0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x20, 0x69, 0x74, 0x3b, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69,
-		0x73, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69,
-		0x74, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c,
-		0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x70, 0x72, 0x6f,
-		0x70, 0x65, 0x72, 0x74, 0x79, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x69, 0x66, 0x20, 0x28, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
-		0x3d, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
-		0x3d, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5b, 0x70, 0x72, 0x6f,
-		0x70, 0x65, 0x72, 0x74, 0x79, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x2e, 0x69, 0x73, 0x46,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x61, 0x6c, 0x75,
-		0x65, 0x29, 0x20, 0x3f, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x63,
-		0x61, 0x6c, 0x6c, 0x28, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x29, 0x20,
-		0x3a, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x64, 0x64, 0x20,
-		0x79, 0x6f, 0x75, 0x72, 0x20, 0x6f, 0x77, 0x6e, 0x20, 0x63, 0x75, 0x73,
-		0x74, 0x6f, 0x6d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x64,
-		0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65,
-		0x63, 0x74, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6d, 0x69, 0x78, 0x69,
-		0x6e, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x65, 0x61, 0x63, 0x68, 0x28, 0x5f, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x73, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2c, 0x20, 0x66,
-		0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65,
-		0x29, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x20, 0x3d, 0x20, 0x5f, 0x5b, 0x6e, 0x61,
-		0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x20, 0x6f, 0x62, 0x6a, 0x5b, 0x6e, 0x61,
-		0x6d, 0x65, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f,
-		0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x5b, 0x6e,
-		0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x72, 0x67, 0x73,
-		0x20, 0x3d, 0x20, 0x5b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x5f, 0x77, 0x72,
-		0x61, 0x70, 0x70, 0x65, 0x64, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x70,
-		0x6c, 0x79, 0x28, 0x61, 0x72, 0x67, 0x73, 0x2c, 0x20, 0x61, 0x72, 0x67,
-		0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-		0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28,
-		0x74, 0x68, 0x69, 0x73, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x2e, 0x61,
-		0x70, 0x70, 0x6c, 0x79, 0x28, 0x5f, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x73,
-		0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x47, 0x65, 0x6e, 0x65,
-		0x72, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75,
-		0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x69, 0x64,
-		0x20, 0x28, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x77, 0x69, 0x74,
-		0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69,
-		0x72, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x65,
-		0x73, 0x73, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x55, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20,
-		0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x20, 0x44, 0x4f,
-		0x4d, 0x20, 0x69, 0x64, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72,
-		0x20, 0x69, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x3d,
-		0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x75, 0x6e, 0x69, 0x71,
-		0x75, 0x65, 0x49, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x29, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x64,
-		0x20, 0x3d, 0x20, 0x2b, 0x2b, 0x69, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74,
-		0x65, 0x72, 0x20, 0x2b, 0x20, 0x27, 0x27, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x72, 0x65, 0x66,
-		0x69, 0x78, 0x20, 0x3f, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20,
-		0x2b, 0x20, 0x69, 0x64, 0x20, 0x3a, 0x20, 0x69, 0x64, 0x3b, 0x0a, 0x20,
-		0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x42, 0x79,
-		0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x55, 0x6e,
-		0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65,
-		0x73, 0x20, 0x45, 0x52, 0x42, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20,
-		0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x64, 0x65, 0x6c,
-		0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x63, 0x68, 0x61,
-		0x6e, 0x67, 0x65, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74,
-		0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x65, 0x74, 0x74,
-		0x69, 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20,
-		0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20,
-		0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x0a,
-		0x20, 0x20, 0x5f, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
-		0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74,
-		0x65, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x2f, 0x3c, 0x25, 0x28, 0x5b,
-		0x5c, 0x73, 0x5c, 0x53, 0x5d, 0x2b, 0x3f, 0x29, 0x25, 0x3e, 0x2f, 0x67,
-		0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70,
-		0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3a, 0x20, 0x2f, 0x3c, 0x25, 0x3d,
-		0x28, 0x5b, 0x5c, 0x73, 0x5c, 0x53, 0x5d, 0x2b, 0x3f, 0x29, 0x25, 0x3e,
-		0x2f, 0x67, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x73, 0x63, 0x61,
-		0x70, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x2f, 0x3c,
-		0x25, 0x2d, 0x28, 0x5b, 0x5c, 0x73, 0x5c, 0x53, 0x5d, 0x2b, 0x3f, 0x29,
-		0x25, 0x3e, 0x2f, 0x67, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x75, 0x73,
-		0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x74, 0x65,
-		0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
-		0x67, 0x73, 0x60, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20,
-		0x64, 0x6f, 0x6e, 0x27, 0x74, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 0x74,
-		0x6f, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x61, 0x6e, 0x0a,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x6f,
-		0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x65, 0x76, 0x61, 0x6c,
-		0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x73,
-		0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x67, 0x65, 0x78,
-		0x2c, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x6f, 0x6e,
-		0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65,
-		0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x74,
-		0x63, 0x68, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6e, 0x6f,
-		0x4d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x3d, 0x20, 0x2f, 0x28, 0x2e, 0x29,
-		0x5e, 0x2f, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x65,
-		0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
-		0x74, 0x65, 0x72, 0x73, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f,
-		0x20, 0x62, 0x65, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x20,
-		0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x79,
-		0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x70, 0x75, 0x74, 0x20,
-		0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72,
-		0x61, 0x6c, 0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x65, 0x73,
-		0x63, 0x61, 0x70, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x22, 0x27, 0x22, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x22, 0x27, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x5c, 0x5c,
-		0x27, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x5c, 0x5c, 0x27, 0x2c,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x5c, 0x72, 0x27, 0x3a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x27, 0x72, 0x27, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x27, 0x5c, 0x6e, 0x27, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x6e,
-		0x27, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x5c, 0x74, 0x27, 0x3a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x74, 0x27, 0x2c, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x27, 0x5c, 0x75, 0x32, 0x30, 0x32, 0x38, 0x27, 0x3a, 0x20,
-		0x27, 0x75, 0x32, 0x30, 0x32, 0x38, 0x27, 0x2c, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x27, 0x5c, 0x75, 0x32, 0x30, 0x32, 0x39, 0x27, 0x3a, 0x20, 0x27,
-		0x75, 0x32, 0x30, 0x32, 0x39, 0x27, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70,
-		0x65, 0x72, 0x20, 0x3d, 0x20, 0x2f, 0x5c, 0x5c, 0x7c, 0x27, 0x7c, 0x5c,
-		0x72, 0x7c, 0x5c, 0x6e, 0x7c, 0x5c, 0x74, 0x7c, 0x5c, 0x75, 0x32, 0x30,
-		0x32, 0x38, 0x7c, 0x5c, 0x75, 0x32, 0x30, 0x32, 0x39, 0x2f, 0x67, 0x3b,
-		0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4a, 0x61, 0x76, 0x61, 0x53,
-		0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x2d,
-		0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2c, 0x20,
-		0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x4a,
-		0x6f, 0x68, 0x6e, 0x20, 0x52, 0x65, 0x73, 0x69, 0x67, 0x27, 0x73, 0x20,
-		0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,
-		0x6f, 0x6e, 0x2e, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x55, 0x6e, 0x64,
-		0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70,
-		0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c,
-		0x65, 0x73, 0x20, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x72, 0x79,
-		0x20, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x73, 0x2c,
-		0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x20, 0x77,
-		0x68, 0x69, 0x74, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2c, 0x0a, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x72, 0x72,
-		0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65,
-		0x73, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74,
-		0x68, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x6f, 0x6c,
-		0x61, 0x74, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x0a, 0x20,
-		0x20, 0x5f, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20,
-		0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x74,
-		0x65, 0x78, 0x74, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73,
-		0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x20, 0x7b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x6e, 0x64, 0x65,
-		0x72, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69,
-		0x6e, 0x67, 0x73, 0x20, 0x3d, 0x20, 0x5f, 0x2e, 0x64, 0x65, 0x66, 0x61,
-		0x75, 0x6c, 0x74, 0x73, 0x28, 0x7b, 0x7d, 0x2c, 0x20, 0x73, 0x65, 0x74,
-		0x74, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x5f, 0x2e, 0x74, 0x65, 0x6d,
-		0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
-		0x73, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x20, 0x64, 0x65, 0x6c, 0x69,
-		0x6d, 0x69, 0x74, 0x65, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20,
-		0x6f, 0x6e, 0x65, 0x20, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x20,
-		0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x76,
-		0x69, 0x61, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69,
-		0x6f, 0x6e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
-		0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65,
-		0x77, 0x20, 0x52, 0x65, 0x67, 0x45, 0x78, 0x70, 0x28, 0x5b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e,
-		0x67, 0x73, 0x2e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x7c, 0x7c,
-		0x20, 0x6e, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x29, 0x2e, 0x73, 0x6f,
-		0x75, 0x72, 0x63, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x28, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x69, 0x6e,
-		0x74, 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x7c, 0x7c,
-		0x20, 0x6e, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x29, 0x2e, 0x73, 0x6f,
-		0x75, 0x72, 0x63, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x28, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x65, 0x76,
-		0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x6f,
-		0x4d, 0x61, 0x74, 0x63, 0x68, 0x29, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63,
-		0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2e, 0x6a, 0x6f, 0x69, 0x6e,
-		0x28, 0x27, 0x7c, 0x27, 0x29, 0x20, 0x2b, 0x20, 0x27, 0x7c, 0x24, 0x27,
-		0x2c, 0x20, 0x27, 0x67, 0x27, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x20,
-		0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
-		0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x65, 0x73, 0x63,
-		0x61, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
-		0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x20, 0x61, 0x70,
-		0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x2e,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x64,
-		0x65, 0x78, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x76, 0x61, 0x72, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d,
-		0x20, 0x22, 0x5f, 0x5f, 0x70, 0x2b, 0x3d, 0x27, 0x22, 0x3b, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x72, 0x65, 0x70, 0x6c,
-		0x61, 0x63, 0x65, 0x28, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x2c,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x61,
-		0x74, 0x63, 0x68, 0x2c, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x2c,
-		0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x65,
-		0x2c, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x2c, 0x20,
-		0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b,
-		0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x73, 0x6c, 0x69, 0x63, 0x65,
-		0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x73,
-		0x65, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x65, 0x73, 0x63,
-		0x61, 0x70, 0x65, 0x72, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69,
-		0x6f, 0x6e, 0x28, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x29, 0x20, 0x7b, 0x20,
-		0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x5c, 0x5c, 0x27, 0x20,
-		0x2b, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x73, 0x5b, 0x6d, 0x61,
-		0x74, 0x63, 0x68, 0x5d, 0x3b, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x0a, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x73, 0x63,
-		0x61, 0x70, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d,
-		0x20, 0x22, 0x27, 0x2b, 0x5c, 0x6e, 0x28, 0x28, 0x5f, 0x5f, 0x74, 0x3d,
-		0x28, 0x22, 0x20, 0x2b, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20,
-		0x2b, 0x20, 0x22, 0x29, 0x29, 0x3d, 0x3d, 0x6e, 0x75, 0x6c, 0x6c, 0x3f,
-		0x27, 0x27, 0x3a, 0x5f, 0x2e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28,
-		0x5f, 0x5f, 0x74, 0x29, 0x29, 0x2b, 0x5c, 0x6e, 0x27, 0x22, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70,
-		0x6f, 0x6c, 0x61, 0x74, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20,
-		0x2b, 0x3d, 0x20, 0x22, 0x27, 0x2b, 0x5c, 0x6e, 0x28, 0x28, 0x5f, 0x5f,
-		0x74, 0x3d, 0x28, 0x22, 0x20, 0x2b, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72,
-		0x70, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x2b, 0x20, 0x22, 0x29, 0x29,
-		0x3d, 0x3d, 0x6e, 0x75, 0x6c, 0x6c, 0x3f, 0x27, 0x27, 0x3a, 0x5f, 0x5f,
-		0x74, 0x29, 0x2b, 0x5c, 0x6e, 0x27, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
-		0x66, 0x20, 0x28, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x29,
-		0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73,
-		0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x22, 0x27, 0x3b,
-		0x5c, 0x6e, 0x22, 0x20, 0x2b, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61,
-		0x74, 0x65, 0x20, 0x2b, 0x20, 0x22, 0x5c, 0x6e, 0x5f, 0x5f, 0x70, 0x2b,
-		0x3d, 0x27, 0x22, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78,
-		0x20, 0x3d, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x20,
-		0x6d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
-		0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
-		0x72, 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x6f,
-		0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x3d, 0x20, 0x22, 0x27, 0x3b, 0x5c,
-		0x6e, 0x22, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20,
-		0x49, 0x66, 0x20, 0x61, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c,
-		0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65,
-		0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x70, 0x6c, 0x61, 0x63,
-		0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
-		0x73, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73,
-		0x63, 0x6f, 0x70, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
-		0x20, 0x28, 0x21, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e,
-		0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x20, 0x73, 0x6f,
-		0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x77, 0x69, 0x74, 0x68,
-		0x28, 0x6f, 0x62, 0x6a, 0x7c, 0x7c, 0x7b, 0x7d, 0x29, 0x7b, 0x5c, 0x6e,
-		0x27, 0x20, 0x2b, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b,
-		0x20, 0x27, 0x7d, 0x5c, 0x6e, 0x27, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x22, 0x76,
-		0x61, 0x72, 0x20, 0x5f, 0x5f, 0x74, 0x2c, 0x5f, 0x5f, 0x70, 0x3d, 0x27,
-		0x27, 0x2c, 0x5f, 0x5f, 0x6a, 0x3d, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e,
-		0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x6a, 0x6f,
-		0x69, 0x6e, 0x2c, 0x22, 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x22, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x3d, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x5f, 0x5f, 0x70, 0x2b, 0x3d,
-		0x5f, 0x5f, 0x6a, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x61, 0x72, 0x67,
-		0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x27, 0x27, 0x29, 0x3b, 0x7d,
-		0x3b, 0x5c, 0x6e, 0x22, 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x2b, 0x20, 0x22, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x3b, 0x5c, 0x6e,
-		0x22, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x79, 0x20,
-		0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x6e, 0x64,
-		0x65, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x46, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e,
-		0x67, 0x73, 0x2e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20,
-		0x7c, 0x7c, 0x20, 0x27, 0x6f, 0x62, 0x6a, 0x27, 0x2c, 0x20, 0x27, 0x5f,
-		0x27, 0x2c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x63, 0x61, 0x74, 0x63, 0x68, 0x20,
-		0x28, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x65, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x73,
-		0x6f, 0x75, 0x72, 0x63, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x65, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-		0x6e, 0x20, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x28, 0x64, 0x61, 0x74,
-		0x61, 0x2c, 0x20, 0x5f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76,
-		0x61, 0x72, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20,
-		0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x64,
-		0x61, 0x74, 0x61, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x6e, 0x64,
-		0x65, 0x72, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x74, 0x68, 0x69, 0x73,
-		0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x5f, 0x29, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75,
-		0x72, 0x63, 0x65, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e,
-		0x76, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72,
-		0x20, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74,
-		0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x6d,
-		0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-		0x20, 0x3d, 0x20, 0x27, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x27, 0x20, 0x2b, 0x20, 0x28, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e,
-		0x67, 0x73, 0x2e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20,
-		0x7c, 0x7c, 0x20, 0x27, 0x6f, 0x62, 0x6a, 0x27, 0x29, 0x20, 0x2b, 0x20,
-		0x27, 0x29, 0x7b, 0x5c, 0x6e, 0x27, 0x20, 0x2b, 0x20, 0x73, 0x6f, 0x75,
-		0x72, 0x63, 0x65, 0x20, 0x2b, 0x20, 0x27, 0x7d, 0x27, 0x3b, 0x0a, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74,
-		0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x7d,
-		0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x64, 0x64, 0x20,
-		0x61, 0x20, 0x22, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x22, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63,
-		0x68, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x67,
-		0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77,
-		0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e,
-		0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63,
-		0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f,
-		0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x28,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x4f, 0x4f, 0x50, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x2d,
-		0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
-		0x2d, 0x2d, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x66, 0x20, 0x55,
-		0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x73,
-		0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61,
-		0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69,
-		0x74, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20,
-		0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65,
-		0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64,
-		0x20, 0x4f, 0x4f, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x20, 0x54,
-		0x68, 0x69, 0x73, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x20,
-		0x68, 0x6f, 0x6c, 0x64, 0x73, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x65,
-		0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f,
-		0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72,
-		0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
-		0x20, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a,
-		0x65, 0x63, 0x74, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20,
-		0x63, 0x68, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x20, 0x20,
-		0x2f, 0x2f, 0x20, 0x48, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f,
-		0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e,
-		0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64,
-		0x69, 0x61, 0x74, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
-		0x2e, 0x0a, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75,
-		0x6c, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
-		0x6e, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20,
-		0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73,
-		0x2e, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x3f, 0x20, 0x5f, 0x28,
-		0x6f, 0x62, 0x6a, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x28, 0x29,
-		0x20, 0x3a, 0x20, 0x6f, 0x62, 0x6a, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b,
-		0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x64, 0x64, 0x20, 0x61,
-		0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e,
-		0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x66, 0x75, 0x6e,
-		0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68,
-		0x65, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x20, 0x6f, 0x62,
-		0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x6d, 0x69,
-		0x78, 0x69, 0x6e, 0x28, 0x5f, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f,
-		0x2f, 0x20, 0x41, 0x64, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6d, 0x75,
-		0x74, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f,
-		0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72,
-		0x2e, 0x0a, 0x20, 0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x5b, 0x27, 0x70,
-		0x6f, 0x70, 0x27, 0x2c, 0x20, 0x27, 0x70, 0x75, 0x73, 0x68, 0x27, 0x2c,
-		0x20, 0x27, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x27, 0x2c, 0x20,
-		0x27, 0x73, 0x68, 0x69, 0x66, 0x74, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x6f,
-		0x72, 0x74, 0x27, 0x2c, 0x20, 0x27, 0x73, 0x70, 0x6c, 0x69, 0x63, 0x65,
-		0x27, 0x2c, 0x20, 0x27, 0x75, 0x6e, 0x73, 0x68, 0x69, 0x66, 0x74, 0x27,
-		0x5d, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28,
-		0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x76, 0x61, 0x72, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x3d,
-		0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5b,
-		0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5f,
-		0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x5b, 0x6e,
-		0x61, 0x6d, 0x65, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x20,
-		0x74, 0x68, 0x69, 0x73, 0x2e, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65,
-		0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x74,
-		0x68, 0x6f, 0x64, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x28, 0x6f, 0x62,
-		0x6a, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
-		0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
-		0x28, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x73,
-		0x68, 0x69, 0x66, 0x74, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x61, 0x6d,
-		0x65, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x70, 0x6c, 0x69, 0x63, 0x65,
-		0x27, 0x29, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x62, 0x6a, 0x2e, 0x6c, 0x65,
-		0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20,
-		0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x5b, 0x30,
-		0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x63,
-		0x61, 0x6c, 0x6c, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2c, 0x20, 0x6f, 0x62,
-		0x6a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20,
-		0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41,
-		0x64, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73,
-		0x73, 0x6f, 0x72, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x20, 0x66, 0x75,
-		0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74,
-		0x68, 0x65, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x0a,
-		0x20, 0x20, 0x65, 0x61, 0x63, 0x68, 0x28, 0x5b, 0x27, 0x63, 0x6f, 0x6e,
-		0x63, 0x61, 0x74, 0x27, 0x2c, 0x20, 0x27, 0x6a, 0x6f, 0x69, 0x6e, 0x27,
-		0x2c, 0x20, 0x27, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x27, 0x5d, 0x2c, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6e, 0x61, 0x6d,
-		0x65, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72,
-		0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x3d, 0x20, 0x41, 0x72,
-		0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5b, 0x6e, 0x61, 0x6d,
-		0x65, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2e, 0x70, 0x72,
-		0x6f, 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x5b, 0x6e, 0x61, 0x6d, 0x65,
-		0x5d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-		0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72,
-		0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
-		0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2c, 0x20,
-		0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x79,
-		0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70,
-		0x65, 0x64, 0x2c, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
-		0x73, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x3b, 0x0a,
-		0x20, 0x20, 0x7d, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x5f, 0x2e, 0x65,
-		0x78, 0x74, 0x65, 0x6e, 0x64, 0x28, 0x5f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-		0x6f, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x7b, 0x0a, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x2f, 0x2f, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x63,
-		0x68, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x72,
-		0x61, 0x70, 0x70, 0x65, 0x64, 0x20, 0x55, 0x6e, 0x64, 0x65, 0x72, 0x73,
-		0x63, 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x3a, 0x20,
-		0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b,
-		0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e,
-		0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75,
-		0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
-		0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x3b, 0x0a, 0x20, 0x20,
-		0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f,
-		0x20, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, 0x20, 0x74, 0x68,
-		0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x66, 0x72, 0x6f,
-		0x6d, 0x20, 0x61, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x20,
-		0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20,
-		0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
-		0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20,
-		0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x69,
-		0x73, 0x2e, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x3b, 0x0a,
-		0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x7d, 0x29, 0x3b,
-		0x0a, 0x0a, 0x7d, 0x29, 0x2e, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x74, 0x68,
-		0x69, 0x73, 0x29, 0x3b, 0x0a,
-	}
-}
-
-//     Underscore.js 1.4.4
-//     http://underscorejs.org
-//     (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
-//     Underscore may be freely distributed under the MIT license.

+ 0 - 84
Godeps/_workspace/src/github.com/robertkrimen/otto/underscore/testify

@@ -1,84 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-
-my $underscore_test = shift @ARGV || "";
-if (!-d $underscore_test) {
-    print <<_END_;
-Usage:
-
-    testify ./underscore/test
-
-    # Should look something like:
-    arrays.js
-    chaining.js
-    collections.js
-    functions.js
-    index.html
-    objects.js
-    speed.js
-    utility.js
-    vendor
-
-_END_
-    if ($underscore_test) {
-        die "!: Not a directory: $underscore_test\n"
-    }
-    exit;
-}
-
-chdir $underscore_test or die "!: $!";
-
-my @js = <*.js>;
-
-for my $file (@js) {
-    open my $fh, '<', $file or die "!: $!";
-    my $tests = join "", <$fh>;
-    my @tests = $tests =~ m/
-        ^(\s{2}test\(.*?
-        ^\s{2}}\);)$
-    /mgxs;
-    close $fh;
-    next unless @tests;
-    print "$file: ", scalar(@tests), "\n";
-    my $underscore_name = "underscore_$file";
-    $underscore_name =~ s/.js$//;
-    my $go_file = "${underscore_name}_test.go";
-    $go_file =~ s/.js$/.go/;
-    open $fh, '>', $go_file or die "!: $!";
-
-    $fh->print(<<_END_);
-package otto
-
-import (
-	"testing"
-)
-
-_END_
-
-    my $count = 0;
-    for my $test (@tests) {
-        $test =~ s/`([^`]+)`/<$1>/g;
-        my ($name) = $test =~ m/^\s*test\(['"]([^'"]+)['"]/;
-        $fh->print(<<_END_);
-// $name
-func Test_${underscore_name}_$count(t *testing.T) {
-    tt(t, func(){
-	    test := underscoreTest()
-
-	    test(`
-$test
-        `)
-    })
-}
-
-_END_
-        $count++;
-    }
-}
-
-#  test('#779 - delimeters are applied to unescaped text.', 1, function() {
-#    var template = _.template('<<\nx\n>>', null, {evaluate: /<<(.*?)>>/g});
-#    strictEqual(template(), '<<\nx\n>>');
-#  });

+ 0 - 49
Godeps/_workspace/src/github.com/robertkrimen/otto/underscore/underscore.go

@@ -1,49 +0,0 @@
-/*
-Package underscore contains the source for the JavaScript utility-belt library.
-
-	import (
-		_ "github.com/robertkrimen/otto/underscore"
-	)
-	// Every Otto runtime will now include underscore
-
-http://underscorejs.org
-
-https://github.com/documentcloud/underscore
-
-By importing this package, you'll automatically load underscore every time you create a new Otto runtime.
-
-To prevent this behavior, you can do the following:
-
-	import (
-		"github.com/robertkrimen/otto/underscore"
-	)
-
-	func init() {
-		underscore.Disable()
-	}
-
-*/
-package underscore
-
-import (
-	"github.com/robertkrimen/otto/registry"
-)
-
-var entry *registry.Entry = registry.Register(func() string {
-	return Source()
-})
-
-// Enable underscore runtime inclusion.
-func Enable() {
-	entry.Enable()
-}
-
-// Disable underscore runtime inclusion.
-func Disable() {
-	entry.Disable()
-}
-
-// Source returns the underscore source.
-func Source() string {
-	return string(underscore())
-}

+ 0 - 308
Godeps/_workspace/src/github.com/rs/cors/cors.go

@@ -1,308 +0,0 @@
-/*
-Package cors is net/http handler to handle CORS related requests
-as defined by http://www.w3.org/TR/cors/
-
-You can configure it by passing an option struct to cors.New:
-
-    c := cors.New(cors.Options{
-        AllowedOrigins: []string{"foo.com"},
-        AllowedMethods: []string{"GET", "POST", "DELETE"},
-        AllowCredentials: true,
-    })
-
-Then insert the handler in the chain:
-
-    handler = c.Handler(handler)
-
-See Options documentation for more options.
-
-The resulting handler is a standard net/http handler.
-*/
-package cors
-
-import (
-	"log"
-	"net/http"
-	"os"
-	"strconv"
-	"strings"
-)
-
-// Options is a configuration container to setup the CORS middleware.
-type Options struct {
-	// AllowedOrigins is a list of origins a cross-domain request can be executed from.
-	// If the special "*" value is present in the list, all origins will be allowed.
-	// Default value is ["*"]
-	AllowedOrigins []string
-	// AllowedMethods is a list of methods the client is allowed to use with
-	// cross-domain requests. Default value is simple methods (GET and POST)
-	AllowedMethods []string
-	// AllowedHeaders is list of non simple headers the client is allowed to use with
-	// cross-domain requests.
-	// If the special "*" value is present in the list, all headers will be allowed.
-	// Default value is [] but "Origin" is always appended to the list.
-	AllowedHeaders []string
-	// ExposedHeaders indicates which headers are safe to expose to the API of a CORS
-	// API specification
-	ExposedHeaders []string
-	// AllowCredentials indicates whether the request can include user credentials like
-	// cookies, HTTP authentication or client side SSL certificates.
-	AllowCredentials bool
-	// MaxAge indicates how long (in seconds) the results of a preflight request
-	// can be cached
-	MaxAge int
-	// Debugging flag adds additional output to debug server side CORS issues
-	Debug bool
-	// log object to use when debugging
-	log *log.Logger
-}
-
-type Cors struct {
-	// The CORS Options
-	options Options
-}
-
-// New creates a new Cors handler with the provided options.
-func New(options Options) *Cors {
-	// Normalize options
-	// Note: for origins and methods matching, the spec requires a case-sensitive matching.
-	// As it may error prone, we chose to ignore the spec here.
-	normOptions := Options{
-		AllowedOrigins: convert(options.AllowedOrigins, strings.ToLower),
-		AllowedMethods: convert(options.AllowedMethods, strings.ToUpper),
-		// Origin is always appended as some browsers will always request
-		// for this header at preflight
-		AllowedHeaders:   convert(append(options.AllowedHeaders, "Origin"), http.CanonicalHeaderKey),
-		ExposedHeaders:   convert(options.ExposedHeaders, http.CanonicalHeaderKey),
-		AllowCredentials: options.AllowCredentials,
-		MaxAge:           options.MaxAge,
-		Debug:            options.Debug,
-		log:              log.New(os.Stdout, "[cors] ", log.LstdFlags),
-	}
-	if len(normOptions.AllowedOrigins) == 0 {
-		// Default is all origins
-		normOptions.AllowedOrigins = []string{"*"}
-	}
-	if len(normOptions.AllowedHeaders) == 1 {
-		// Add some sensible defaults
-		normOptions.AllowedHeaders = []string{"Origin", "Accept", "Content-Type"}
-	}
-	if len(normOptions.AllowedMethods) == 0 {
-		// Default is simple methods
-		normOptions.AllowedMethods = []string{"GET", "POST"}
-	}
-
-	if normOptions.Debug {
-		normOptions.log.Printf("Options: %v", normOptions)
-	}
-	return &Cors{
-		options: normOptions,
-	}
-}
-
-// Default creates a new Cors handler with default options
-func Default() *Cors {
-	return New(Options{})
-}
-
-// Handler apply the CORS specification on the request, and add relevant CORS headers
-// as necessary.
-func (cors *Cors) Handler(h http.Handler) http.Handler {
-	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		if r.Method == "OPTIONS" {
-			cors.logf("Handler: Preflight request")
-			cors.handlePreflight(w, r)
-			// Preflight requests are standalone and should stop the chain as some other
-			// middleware may not handle OPTIONS requests correctly. One typical example
-			// is authentication middleware ; OPTIONS requests won't carry authentication
-			// headers (see #1)
-		} else {
-			cors.logf("Handler: Actual request")
-			cors.handleActualRequest(w, r)
-			h.ServeHTTP(w, r)
-		}
-	})
-}
-
-// Martini compatible handler
-func (cors *Cors) HandlerFunc(w http.ResponseWriter, r *http.Request) {
-	if r.Method == "OPTIONS" {
-		cors.logf("HandlerFunc: Preflight request")
-		cors.handlePreflight(w, r)
-	} else {
-		cors.logf("HandlerFunc: Actual request")
-		cors.handleActualRequest(w, r)
-	}
-}
-
-// Negroni compatible interface
-func (cors *Cors) ServeHTTP(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
-	if r.Method == "OPTIONS" {
-		cors.logf("ServeHTTP: Preflight request")
-		cors.handlePreflight(w, r)
-		// Preflight requests are standalone and should stop the chain as some other
-		// middleware may not handle OPTIONS requests correctly. One typical example
-		// is authentication middleware ; OPTIONS requests won't carry authentication
-		// headers (see #1)
-	} else {
-		cors.logf("ServeHTTP: Actual request")
-		cors.handleActualRequest(w, r)
-		next(w, r)
-	}
-}
-
-// handlePreflight handles pre-flight CORS requests
-func (cors *Cors) handlePreflight(w http.ResponseWriter, r *http.Request) {
-	options := cors.options
-	headers := w.Header()
-	origin := r.Header.Get("Origin")
-
-	if r.Method != "OPTIONS" {
-		cors.logf("  Preflight aborted: %s!=OPTIONS", r.Method)
-		return
-	}
-	if origin == "" {
-		cors.logf("  Preflight aborted: empty origin")
-		return
-	}
-	if !cors.isOriginAllowed(origin) {
-		cors.logf("  Preflight aborted: origin '%s' not allowed", origin)
-		return
-	}
-
-	reqMethod := r.Header.Get("Access-Control-Request-Method")
-	if !cors.isMethodAllowed(reqMethod) {
-		cors.logf("  Preflight aborted: method '%s' not allowed", reqMethod)
-		return
-	}
-	reqHeaders := parseHeaderList(r.Header.Get("Access-Control-Request-Headers"))
-	if !cors.areHeadersAllowed(reqHeaders) {
-		cors.logf("  Preflight aborted: headers '%v' not allowed", reqHeaders)
-		return
-	}
-	headers.Set("Access-Control-Allow-Origin", origin)
-	headers.Add("Vary", "Origin")
-	// Spec says: Since the list of methods can be unbounded, simply returning the method indicated
-	// by Access-Control-Request-Method (if supported) can be enough
-	headers.Set("Access-Control-Allow-Methods", strings.ToUpper(reqMethod))
-	if len(reqHeaders) > 0 {
-
-		// Spec says: Since the list of headers can be unbounded, simply returning supported headers
-		// from Access-Control-Request-Headers can be enough
-		headers.Set("Access-Control-Allow-Headers", strings.Join(reqHeaders, ", "))
-	}
-	if options.AllowCredentials {
-		headers.Set("Access-Control-Allow-Credentials", "true")
-	}
-	if options.MaxAge > 0 {
-		headers.Set("Access-Control-Max-Age", strconv.Itoa(options.MaxAge))
-	}
-	cors.logf("  Preflight response headers: %v", headers)
-}
-
-// handleActualRequest handles simple cross-origin requests, actual request or redirects
-func (cors *Cors) handleActualRequest(w http.ResponseWriter, r *http.Request) {
-	options := cors.options
-	headers := w.Header()
-	origin := r.Header.Get("Origin")
-
-	if r.Method == "OPTIONS" {
-		cors.logf("  Actual request no headers added: method == %s", r.Method)
-		return
-	}
-	if origin == "" {
-		cors.logf("  Actual request no headers added: missing origin")
-		return
-	}
-	if !cors.isOriginAllowed(origin) {
-		cors.logf("  Actual request no headers added: origin '%s' not allowed", origin)
-		return
-	}
-
-	// Note that spec does define a way to specifically disallow a simple method like GET or
-	// POST. Access-Control-Allow-Methods is only used for pre-flight requests and the
-	// spec doesn't instruct to check the allowed methods for simple cross-origin requests.
-	// We think it's a nice feature to be able to have control on those methods though.
-	if !cors.isMethodAllowed(r.Method) {
-		if cors.options.Debug {
-			cors.logf("  Actual request no headers added: method '%s' not allowed",
-				r.Method)
-		}
-
-		return
-	}
-	headers.Set("Access-Control-Allow-Origin", origin)
-	headers.Add("Vary", "Origin")
-	if len(options.ExposedHeaders) > 0 {
-		headers.Set("Access-Control-Expose-Headers", strings.Join(options.ExposedHeaders, ", "))
-	}
-	if options.AllowCredentials {
-		headers.Set("Access-Control-Allow-Credentials", "true")
-	}
-	cors.logf("  Actual response added headers: %v", headers)
-}
-
-// convenience method. checks if debugging is turned on before printing
-func (cors *Cors) logf(format string, a ...interface{}) {
-	if cors.options.Debug {
-		cors.options.log.Printf(format, a...)
-	}
-}
-
-// isOriginAllowed checks if a given origin is allowed to perform cross-domain requests
-// on the endpoint
-func (cors *Cors) isOriginAllowed(origin string) bool {
-	allowedOrigins := cors.options.AllowedOrigins
-	origin = strings.ToLower(origin)
-	for _, allowedOrigin := range allowedOrigins {
-		switch allowedOrigin {
-		case "*":
-			return true
-		case origin:
-			return true
-		}
-	}
-	return false
-}
-
-// isMethodAllowed checks if a given method can be used as part of a cross-domain request
-// on the endpoing
-func (cors *Cors) isMethodAllowed(method string) bool {
-	allowedMethods := cors.options.AllowedMethods
-	if len(allowedMethods) == 0 {
-		// If no method allowed, always return false, even for preflight request
-		return false
-	}
-	method = strings.ToUpper(method)
-	if method == "OPTIONS" {
-		// Always allow preflight requests
-		return true
-	}
-	for _, allowedMethod := range allowedMethods {
-		if allowedMethod == method {
-			return true
-		}
-	}
-	return false
-}
-
-// areHeadersAllowed checks if a given list of headers are allowed to used within
-// a cross-domain request.
-func (cors *Cors) areHeadersAllowed(requestedHeaders []string) bool {
-	if len(requestedHeaders) == 0 {
-		return true
-	}
-	for _, header := range requestedHeaders {
-		found := false
-		for _, allowedHeader := range cors.options.AllowedHeaders {
-			if allowedHeader == "*" || allowedHeader == header {
-				found = true
-				break
-			}
-		}
-		if !found {
-			return false
-		}
-	}
-	return true
-}

+ 0 - 27
Godeps/_workspace/src/github.com/rs/cors/utils.go

@@ -1,27 +0,0 @@
-package cors
-
-import (
-	"net/http"
-	"strings"
-)
-
-type converter func(string) string
-
-// convert converts a list of string using the passed converter function
-func convert(s []string, c converter) []string {
-	out := []string{}
-	for _, i := range s {
-		out = append(out, c(i))
-	}
-	return out
-}
-
-func parseHeaderList(headerList string) (headers []string) {
-	for _, header := range strings.Split(headerList, ",") {
-		header = http.CanonicalHeaderKey(strings.TrimSpace(header))
-		if header != "" {
-			headers = append(headers, header)
-		}
-	}
-	return headers
-}

+ 0 - 762
Godeps/_workspace/src/golang.org/x/text/language/index.go

@@ -1,762 +0,0 @@
-// This file was generated by go generate; DO NOT EDIT
-
-package language
-
-// NumCompactTags is the number of common tags. The maximum tag is
-// NumCompactTags-1.
-const NumCompactTags = 747
-
-var specialTags = []Tag{ // 2 elements
-	0: {lang: 0x61, region: 0x6d, script: 0x0, pVariant: 0x5, pExt: 0xe, str: "ca-ES-valencia"},
-	1: {lang: 0x9b, region: 0x132, script: 0x0, pVariant: 0x5, pExt: 0x5, str: "en-US-u-va-posix"},
-} // Size: 72 bytes
-
-var coreTags = map[uint32]uint16{
-	0x0:        0,   // und
-	0x00a00000: 3,   // af
-	0x00a000d0: 4,   // af-NA
-	0x00a0015e: 5,   // af-ZA
-	0x00b00000: 6,   // agq
-	0x00b00051: 7,   // agq-CM
-	0x00d00000: 8,   // ak
-	0x00d0007e: 9,   // ak-GH
-	0x01100000: 10,  // am
-	0x0110006e: 11,  // am-ET
-	0x01500000: 12,  // ar
-	0x01500001: 13,  // ar-001
-	0x01500022: 14,  // ar-AE
-	0x01500038: 15,  // ar-BH
-	0x01500061: 16,  // ar-DJ
-	0x01500066: 17,  // ar-DZ
-	0x0150006a: 18,  // ar-EG
-	0x0150006b: 19,  // ar-EH
-	0x0150006c: 20,  // ar-ER
-	0x01500095: 21,  // ar-IL
-	0x01500099: 22,  // ar-IQ
-	0x0150009f: 23,  // ar-JO
-	0x015000a6: 24,  // ar-KM
-	0x015000aa: 25,  // ar-KW
-	0x015000ae: 26,  // ar-LB
-	0x015000b7: 27,  // ar-LY
-	0x015000b8: 28,  // ar-MA
-	0x015000c7: 29,  // ar-MR
-	0x015000df: 30,  // ar-OM
-	0x015000eb: 31,  // ar-PS
-	0x015000f1: 32,  // ar-QA
-	0x01500106: 33,  // ar-SA
-	0x01500109: 34,  // ar-SD
-	0x01500113: 35,  // ar-SO
-	0x01500115: 36,  // ar-SS
-	0x0150011a: 37,  // ar-SY
-	0x0150011e: 38,  // ar-TD
-	0x01500126: 39,  // ar-TN
-	0x0150015b: 40,  // ar-YE
-	0x01c00000: 41,  // as
-	0x01c00097: 42,  // as-IN
-	0x01d00000: 43,  // asa
-	0x01d0012d: 44,  // asa-TZ
-	0x01f00000: 45,  // ast
-	0x01f0006d: 46,  // ast-ES
-	0x02400000: 47,  // az
-	0x0241e000: 48,  // az-Cyrl
-	0x0241e031: 49,  // az-Cyrl-AZ
-	0x02452000: 50,  // az-Latn
-	0x02452031: 51,  // az-Latn-AZ
-	0x02a00000: 52,  // bas
-	0x02a00051: 53,  // bas-CM
-	0x02f00000: 54,  // be
-	0x02f00046: 55,  // be-BY
-	0x03100000: 56,  // bem
-	0x0310015f: 57,  // bem-ZM
-	0x03300000: 58,  // bez
-	0x0330012d: 59,  // bez-TZ
-	0x03800000: 60,  // bg
-	0x03800037: 61,  // bg-BG
-	0x03c00000: 62,  // bh
-	0x04900000: 63,  // bm
-	0x049000c1: 64,  // bm-ML
-	0x04b00000: 65,  // bn
-	0x04b00034: 66,  // bn-BD
-	0x04b00097: 67,  // bn-IN
-	0x04c00000: 68,  // bo
-	0x04c00052: 69,  // bo-CN
-	0x04c00097: 70,  // bo-IN
-	0x05000000: 71,  // br
-	0x05000076: 72,  // br-FR
-	0x05300000: 73,  // brx
-	0x05300097: 74,  // brx-IN
-	0x05400000: 75,  // bs
-	0x0541e000: 76,  // bs-Cyrl
-	0x0541e032: 77,  // bs-Cyrl-BA
-	0x05452000: 78,  // bs-Latn
-	0x05452032: 79,  // bs-Latn-BA
-	0x06100000: 80,  // ca
-	0x06100021: 81,  // ca-AD
-	0x0610006d: 82,  // ca-ES
-	0x06100076: 83,  // ca-FR
-	0x0610009c: 84,  // ca-IT
-	0x06400000: 85,  // ce
-	0x06400104: 86,  // ce-RU
-	0x06600000: 87,  // cgg
-	0x0660012f: 88,  // cgg-UG
-	0x06c00000: 89,  // chr
-	0x06c00132: 90,  // chr-US
-	0x06f00000: 91,  // ckb
-	0x06f00099: 92,  // ckb-IQ
-	0x06f0009a: 93,  // ckb-IR
-	0x07900000: 94,  // cs
-	0x0790005d: 95,  // cs-CZ
-	0x07d00000: 96,  // cu
-	0x07d00104: 97,  // cu-RU
-	0x07f00000: 98,  // cy
-	0x07f00079: 99,  // cy-GB
-	0x08000000: 100, // da
-	0x08000062: 101, // da-DK
-	0x08000080: 102, // da-GL
-	0x08300000: 103, // dav
-	0x083000a2: 104, // dav-KE
-	0x08500000: 105, // de
-	0x0850002d: 106, // de-AT
-	0x08500035: 107, // de-BE
-	0x0850004d: 108, // de-CH
-	0x0850005f: 109, // de-DE
-	0x085000b0: 110, // de-LI
-	0x085000b5: 111, // de-LU
-	0x08800000: 112, // dje
-	0x088000d2: 113, // dje-NE
-	0x08b00000: 114, // dsb
-	0x08b0005f: 115, // dsb-DE
-	0x08f00000: 116, // dua
-	0x08f00051: 117, // dua-CM
-	0x09000000: 118, // dv
-	0x09100000: 119, // dyo
-	0x09100112: 120, // dyo-SN
-	0x09300000: 121, // dz
-	0x09300042: 122, // dz-BT
-	0x09400000: 123, // ebu
-	0x094000a2: 124, // ebu-KE
-	0x09500000: 125, // ee
-	0x0950007e: 126, // ee-GH
-	0x09500120: 127, // ee-TG
-	0x09a00000: 128, // el
-	0x09a0005c: 129, // el-CY
-	0x09a00085: 130, // el-GR
-	0x09b00000: 131, // en
-	0x09b00001: 132, // en-001
-	0x09b0001a: 133, // en-150
-	0x09b00024: 134, // en-AG
-	0x09b00025: 135, // en-AI
-	0x09b0002c: 136, // en-AS
-	0x09b0002d: 137, // en-AT
-	0x09b0002e: 138, // en-AU
-	0x09b00033: 139, // en-BB
-	0x09b00035: 140, // en-BE
-	0x09b00039: 141, // en-BI
-	0x09b0003c: 142, // en-BM
-	0x09b00041: 143, // en-BS
-	0x09b00045: 144, // en-BW
-	0x09b00047: 145, // en-BZ
-	0x09b00048: 146, // en-CA
-	0x09b00049: 147, // en-CC
-	0x09b0004d: 148, // en-CH
-	0x09b0004f: 149, // en-CK
-	0x09b00051: 150, // en-CM
-	0x09b0005b: 151, // en-CX
-	0x09b0005c: 152, // en-CY
-	0x09b0005f: 153, // en-DE
-	0x09b00060: 154, // en-DG
-	0x09b00062: 155, // en-DK
-	0x09b00063: 156, // en-DM
-	0x09b0006c: 157, // en-ER
-	0x09b00070: 158, // en-FI
-	0x09b00071: 159, // en-FJ
-	0x09b00072: 160, // en-FK
-	0x09b00073: 161, // en-FM
-	0x09b00079: 162, // en-GB
-	0x09b0007a: 163, // en-GD
-	0x09b0007d: 164, // en-GG
-	0x09b0007e: 165, // en-GH
-	0x09b0007f: 166, // en-GI
-	0x09b00081: 167, // en-GM
-	0x09b00088: 168, // en-GU
-	0x09b0008a: 169, // en-GY
-	0x09b0008b: 170, // en-HK
-	0x09b00094: 171, // en-IE
-	0x09b00095: 172, // en-IL
-	0x09b00096: 173, // en-IM
-	0x09b00097: 174, // en-IN
-	0x09b00098: 175, // en-IO
-	0x09b0009d: 176, // en-JE
-	0x09b0009e: 177, // en-JM
-	0x09b000a2: 178, // en-KE
-	0x09b000a5: 179, // en-KI
-	0x09b000a7: 180, // en-KN
-	0x09b000ab: 181, // en-KY
-	0x09b000af: 182, // en-LC
-	0x09b000b2: 183, // en-LR
-	0x09b000b3: 184, // en-LS
-	0x09b000bd: 185, // en-MG
-	0x09b000be: 186, // en-MH
-	0x09b000c4: 187, // en-MO
-	0x09b000c5: 188, // en-MP
-	0x09b000c8: 189, // en-MS
-	0x09b000c9: 190, // en-MT
-	0x09b000ca: 191, // en-MU
-	0x09b000cc: 192, // en-MW
-	0x09b000ce: 193, // en-MY
-	0x09b000d0: 194, // en-NA
-	0x09b000d3: 195, // en-NF
-	0x09b000d4: 196, // en-NG
-	0x09b000d7: 197, // en-NL
-	0x09b000db: 198, // en-NR
-	0x09b000dd: 199, // en-NU
-	0x09b000de: 200, // en-NZ
-	0x09b000e4: 201, // en-PG
-	0x09b000e5: 202, // en-PH
-	0x09b000e6: 203, // en-PK
-	0x09b000e9: 204, // en-PN
-	0x09b000ea: 205, // en-PR
-	0x09b000ee: 206, // en-PW
-	0x09b00105: 207, // en-RW
-	0x09b00107: 208, // en-SB
-	0x09b00108: 209, // en-SC
-	0x09b00109: 210, // en-SD
-	0x09b0010a: 211, // en-SE
-	0x09b0010b: 212, // en-SG
-	0x09b0010c: 213, // en-SH
-	0x09b0010d: 214, // en-SI
-	0x09b00110: 215, // en-SL
-	0x09b00115: 216, // en-SS
-	0x09b00119: 217, // en-SX
-	0x09b0011b: 218, // en-SZ
-	0x09b0011d: 219, // en-TC
-	0x09b00123: 220, // en-TK
-	0x09b00127: 221, // en-TO
-	0x09b0012a: 222, // en-TT
-	0x09b0012b: 223, // en-TV
-	0x09b0012d: 224, // en-TZ
-	0x09b0012f: 225, // en-UG
-	0x09b00131: 226, // en-UM
-	0x09b00132: 227, // en-US
-	0x09b00136: 228, // en-VC
-	0x09b00139: 229, // en-VG
-	0x09b0013a: 230, // en-VI
-	0x09b0013c: 231, // en-VU
-	0x09b0013f: 232, // en-WS
-	0x09b0015e: 233, // en-ZA
-	0x09b0015f: 234, // en-ZM
-	0x09b00161: 235, // en-ZW
-	0x09c00000: 236, // eo
-	0x09c00001: 237, // eo-001
-	0x09d00000: 238, // es
-	0x09d0001e: 239, // es-419
-	0x09d0002b: 240, // es-AR
-	0x09d0003e: 241, // es-BO
-	0x09d00040: 242, // es-BR
-	0x09d00050: 243, // es-CL
-	0x09d00053: 244, // es-CO
-	0x09d00055: 245, // es-CR
-	0x09d00058: 246, // es-CU
-	0x09d00064: 247, // es-DO
-	0x09d00067: 248, // es-EA
-	0x09d00068: 249, // es-EC
-	0x09d0006d: 250, // es-ES
-	0x09d00084: 251, // es-GQ
-	0x09d00087: 252, // es-GT
-	0x09d0008d: 253, // es-HN
-	0x09d00092: 254, // es-IC
-	0x09d000cd: 255, // es-MX
-	0x09d000d6: 256, // es-NI
-	0x09d000e0: 257, // es-PA
-	0x09d000e2: 258, // es-PE
-	0x09d000e5: 259, // es-PH
-	0x09d000ea: 260, // es-PR
-	0x09d000ef: 261, // es-PY
-	0x09d00118: 262, // es-SV
-	0x09d00132: 263, // es-US
-	0x09d00133: 264, // es-UY
-	0x09d00138: 265, // es-VE
-	0x09f00000: 266, // et
-	0x09f00069: 267, // et-EE
-	0x0a100000: 268, // eu
-	0x0a10006d: 269, // eu-ES
-	0x0a200000: 270, // ewo
-	0x0a200051: 271, // ewo-CM
-	0x0a400000: 272, // fa
-	0x0a400023: 273, // fa-AF
-	0x0a40009a: 274, // fa-IR
-	0x0a600000: 275, // ff
-	0x0a600051: 276, // ff-CM
-	0x0a600082: 277, // ff-GN
-	0x0a6000c7: 278, // ff-MR
-	0x0a600112: 279, // ff-SN
-	0x0a800000: 280, // fi
-	0x0a800070: 281, // fi-FI
-	0x0aa00000: 282, // fil
-	0x0aa000e5: 283, // fil-PH
-	0x0ad00000: 284, // fo
-	0x0ad00062: 285, // fo-DK
-	0x0ad00074: 286, // fo-FO
-	0x0af00000: 287, // fr
-	0x0af00035: 288, // fr-BE
-	0x0af00036: 289, // fr-BF
-	0x0af00039: 290, // fr-BI
-	0x0af0003a: 291, // fr-BJ
-	0x0af0003b: 292, // fr-BL
-	0x0af00048: 293, // fr-CA
-	0x0af0004a: 294, // fr-CD
-	0x0af0004b: 295, // fr-CF
-	0x0af0004c: 296, // fr-CG
-	0x0af0004d: 297, // fr-CH
-	0x0af0004e: 298, // fr-CI
-	0x0af00051: 299, // fr-CM
-	0x0af00061: 300, // fr-DJ
-	0x0af00066: 301, // fr-DZ
-	0x0af00076: 302, // fr-FR
-	0x0af00078: 303, // fr-GA
-	0x0af0007c: 304, // fr-GF
-	0x0af00082: 305, // fr-GN
-	0x0af00083: 306, // fr-GP
-	0x0af00084: 307, // fr-GQ
-	0x0af0008f: 308, // fr-HT
-	0x0af000a6: 309, // fr-KM
-	0x0af000b5: 310, // fr-LU
-	0x0af000b8: 311, // fr-MA
-	0x0af000b9: 312, // fr-MC
-	0x0af000bc: 313, // fr-MF
-	0x0af000bd: 314, // fr-MG
-	0x0af000c1: 315, // fr-ML
-	0x0af000c6: 316, // fr-MQ
-	0x0af000c7: 317, // fr-MR
-	0x0af000ca: 318, // fr-MU
-	0x0af000d1: 319, // fr-NC
-	0x0af000d2: 320, // fr-NE
-	0x0af000e3: 321, // fr-PF
-	0x0af000e8: 322, // fr-PM
-	0x0af00100: 323, // fr-RE
-	0x0af00105: 324, // fr-RW
-	0x0af00108: 325, // fr-SC
-	0x0af00112: 326, // fr-SN
-	0x0af0011a: 327, // fr-SY
-	0x0af0011e: 328, // fr-TD
-	0x0af00120: 329, // fr-TG
-	0x0af00126: 330, // fr-TN
-	0x0af0013c: 331, // fr-VU
-	0x0af0013d: 332, // fr-WF
-	0x0af0015c: 333, // fr-YT
-	0x0b600000: 334, // fur
-	0x0b60009c: 335, // fur-IT
-	0x0b900000: 336, // fy
-	0x0b9000d7: 337, // fy-NL
-	0x0ba00000: 338, // ga
-	0x0ba00094: 339, // ga-IE
-	0x0c200000: 340, // gd
-	0x0c200079: 341, // gd-GB
-	0x0c800000: 342, // gl
-	0x0c80006d: 343, // gl-ES
-	0x0d200000: 344, // gsw
-	0x0d20004d: 345, // gsw-CH
-	0x0d200076: 346, // gsw-FR
-	0x0d2000b0: 347, // gsw-LI
-	0x0d300000: 348, // gu
-	0x0d300097: 349, // gu-IN
-	0x0d700000: 350, // guw
-	0x0d800000: 351, // guz
-	0x0d8000a2: 352, // guz-KE
-	0x0d900000: 353, // gv
-	0x0d900096: 354, // gv-IM
-	0x0dc00000: 355, // ha
-	0x0dc0007e: 356, // ha-GH
-	0x0dc000d2: 357, // ha-NE
-	0x0dc000d4: 358, // ha-NG
-	0x0de00000: 359, // haw
-	0x0de00132: 360, // haw-US
-	0x0e000000: 361, // he
-	0x0e000095: 362, // he-IL
-	0x0e100000: 363, // hi
-	0x0e100097: 364, // hi-IN
-	0x0ee00000: 365, // hr
-	0x0ee00032: 366, // hr-BA
-	0x0ee0008e: 367, // hr-HR
-	0x0ef00000: 368, // hsb
-	0x0ef0005f: 369, // hsb-DE
-	0x0f200000: 370, // hu
-	0x0f200090: 371, // hu-HU
-	0x0f300000: 372, // hy
-	0x0f300027: 373, // hy-AM
-	0x0f800000: 374, // id
-	0x0f800093: 375, // id-ID
-	0x0fa00000: 376, // ig
-	0x0fa000d4: 377, // ig-NG
-	0x0fb00000: 378, // ii
-	0x0fb00052: 379, // ii-CN
-	0x10200000: 380, // is
-	0x1020009b: 381, // is-IS
-	0x10300000: 382, // it
-	0x1030004d: 383, // it-CH
-	0x1030009c: 384, // it-IT
-	0x10300111: 385, // it-SM
-	0x10400000: 386, // iu
-	0x10700000: 387, // ja
-	0x107000a0: 388, // ja-JP
-	0x10900000: 389, // jbo
-	0x10a00000: 390, // jgo
-	0x10a00051: 391, // jgo-CM
-	0x10c00000: 392, // jmc
-	0x10c0012d: 393, // jmc-TZ
-	0x10f00000: 394, // jv
-	0x11100000: 395, // ka
-	0x1110007b: 396, // ka-GE
-	0x11300000: 397, // kab
-	0x11300066: 398, // kab-DZ
-	0x11500000: 399, // kaj
-	0x11600000: 400, // kam
-	0x116000a2: 401, // kam-KE
-	0x11900000: 402, // kcg
-	0x11b00000: 403, // kde
-	0x11b0012d: 404, // kde-TZ
-	0x11d00000: 405, // kea
-	0x11d00059: 406, // kea-CV
-	0x12800000: 407, // khq
-	0x128000c1: 408, // khq-ML
-	0x12b00000: 409, // ki
-	0x12b000a2: 410, // ki-KE
-	0x12f00000: 411, // kk
-	0x12f000ac: 412, // kk-KZ
-	0x13000000: 413, // kkj
-	0x13000051: 414, // kkj-CM
-	0x13100000: 415, // kl
-	0x13100080: 416, // kl-GL
-	0x13200000: 417, // kln
-	0x132000a2: 418, // kln-KE
-	0x13300000: 419, // km
-	0x133000a4: 420, // km-KH
-	0x13500000: 421, // kn
-	0x13500097: 422, // kn-IN
-	0x13600000: 423, // ko
-	0x136000a8: 424, // ko-KP
-	0x136000a9: 425, // ko-KR
-	0x13800000: 426, // kok
-	0x13800097: 427, // kok-IN
-	0x14100000: 428, // ks
-	0x14100097: 429, // ks-IN
-	0x14200000: 430, // ksb
-	0x1420012d: 431, // ksb-TZ
-	0x14300000: 432, // ksf
-	0x14300051: 433, // ksf-CM
-	0x14400000: 434, // ksh
-	0x1440005f: 435, // ksh-DE
-	0x14500000: 436, // ku
-	0x14a00000: 437, // kw
-	0x14a00079: 438, // kw-GB
-	0x14d00000: 439, // ky
-	0x14d000a3: 440, // ky-KG
-	0x15100000: 441, // lag
-	0x1510012d: 442, // lag-TZ
-	0x15400000: 443, // lb
-	0x154000b5: 444, // lb-LU
-	0x15a00000: 445, // lg
-	0x15a0012f: 446, // lg-UG
-	0x16100000: 447, // lkt
-	0x16100132: 448, // lkt-US
-	0x16400000: 449, // ln
-	0x16400029: 450, // ln-AO
-	0x1640004a: 451, // ln-CD
-	0x1640004b: 452, // ln-CF
-	0x1640004c: 453, // ln-CG
-	0x16500000: 454, // lo
-	0x165000ad: 455, // lo-LA
-	0x16800000: 456, // lrc
-	0x16800099: 457, // lrc-IQ
-	0x1680009a: 458, // lrc-IR
-	0x16900000: 459, // lt
-	0x169000b4: 460, // lt-LT
-	0x16b00000: 461, // lu
-	0x16b0004a: 462, // lu-CD
-	0x16d00000: 463, // luo
-	0x16d000a2: 464, // luo-KE
-	0x16e00000: 465, // luy
-	0x16e000a2: 466, // luy-KE
-	0x17000000: 467, // lv
-	0x170000b6: 468, // lv-LV
-	0x17a00000: 469, // mas
-	0x17a000a2: 470, // mas-KE
-	0x17a0012d: 471, // mas-TZ
-	0x18000000: 472, // mer
-	0x180000a2: 473, // mer-KE
-	0x18200000: 474, // mfe
-	0x182000ca: 475, // mfe-MU
-	0x18300000: 476, // mg
-	0x183000bd: 477, // mg-MG
-	0x18400000: 478, // mgh
-	0x184000cf: 479, // mgh-MZ
-	0x18500000: 480, // mgo
-	0x18500051: 481, // mgo-CM
-	0x18c00000: 482, // mk
-	0x18c000c0: 483, // mk-MK
-	0x18d00000: 484, // ml
-	0x18d00097: 485, // ml-IN
-	0x18f00000: 486, // mn
-	0x18f000c3: 487, // mn-MN
-	0x19600000: 488, // mr
-	0x19600097: 489, // mr-IN
-	0x19a00000: 490, // ms
-	0x19a0003d: 491, // ms-BN
-	0x19a000ce: 492, // ms-MY
-	0x19a0010b: 493, // ms-SG
-	0x19b00000: 494, // mt
-	0x19b000c9: 495, // mt-MT
-	0x19d00000: 496, // mua
-	0x19d00051: 497, // mua-CM
-	0x1a500000: 498, // my
-	0x1a5000c2: 499, // my-MM
-	0x1a900000: 500, // mzn
-	0x1a90009a: 501, // mzn-IR
-	0x1ab00000: 502, // nah
-	0x1ae00000: 503, // naq
-	0x1ae000d0: 504, // naq-NA
-	0x1af00000: 505, // nb
-	0x1af000d8: 506, // nb-NO
-	0x1af0010e: 507, // nb-SJ
-	0x1b100000: 508, // nd
-	0x1b100161: 509, // nd-ZW
-	0x1b400000: 510, // ne
-	0x1b400097: 511, // ne-IN
-	0x1b4000d9: 512, // ne-NP
-	0x1bd00000: 513, // nl
-	0x1bd0002f: 514, // nl-AW
-	0x1bd00035: 515, // nl-BE
-	0x1bd0003f: 516, // nl-BQ
-	0x1bd0005a: 517, // nl-CW
-	0x1bd000d7: 518, // nl-NL
-	0x1bd00114: 519, // nl-SR
-	0x1bd00119: 520, // nl-SX
-	0x1be00000: 521, // nmg
-	0x1be00051: 522, // nmg-CM
-	0x1bf00000: 523, // nn
-	0x1bf000d8: 524, // nn-NO
-	0x1c000000: 525, // nnh
-	0x1c000051: 526, // nnh-CM
-	0x1c100000: 527, // no
-	0x1c500000: 528, // nqo
-	0x1c600000: 529, // nr
-	0x1c800000: 530, // nso
-	0x1c900000: 531, // nus
-	0x1c900115: 532, // nus-SS
-	0x1cc00000: 533, // ny
-	0x1ce00000: 534, // nyn
-	0x1ce0012f: 535, // nyn-UG
-	0x1d200000: 536, // om
-	0x1d20006e: 537, // om-ET
-	0x1d2000a2: 538, // om-KE
-	0x1d300000: 539, // or
-	0x1d300097: 540, // or-IN
-	0x1d400000: 541, // os
-	0x1d40007b: 542, // os-GE
-	0x1d400104: 543, // os-RU
-	0x1d700000: 544, // pa
-	0x1d705000: 545, // pa-Arab
-	0x1d7050e6: 546, // pa-Arab-PK
-	0x1d72f000: 547, // pa-Guru
-	0x1d72f097: 548, // pa-Guru-IN
-	0x1db00000: 549, // pap
-	0x1e700000: 550, // pl
-	0x1e7000e7: 551, // pl-PL
-	0x1ed00000: 552, // prg
-	0x1ed00001: 553, // prg-001
-	0x1ee00000: 554, // ps
-	0x1ee00023: 555, // ps-AF
-	0x1ef00000: 556, // pt
-	0x1ef00029: 557, // pt-AO
-	0x1ef00040: 558, // pt-BR
-	0x1ef0004d: 559, // pt-CH
-	0x1ef00059: 560, // pt-CV
-	0x1ef00084: 561, // pt-GQ
-	0x1ef00089: 562, // pt-GW
-	0x1ef000b5: 563, // pt-LU
-	0x1ef000c4: 564, // pt-MO
-	0x1ef000cf: 565, // pt-MZ
-	0x1ef000ec: 566, // pt-PT
-	0x1ef00116: 567, // pt-ST
-	0x1ef00124: 568, // pt-TL
-	0x1f100000: 569, // qu
-	0x1f10003e: 570, // qu-BO
-	0x1f100068: 571, // qu-EC
-	0x1f1000e2: 572, // qu-PE
-	0x1fc00000: 573, // rm
-	0x1fc0004d: 574, // rm-CH
-	0x20100000: 575, // rn
-	0x20100039: 576, // rn-BI
-	0x20300000: 577, // ro
-	0x203000ba: 578, // ro-MD
-	0x20300102: 579, // ro-RO
-	0x20500000: 580, // rof
-	0x2050012d: 581, // rof-TZ
-	0x20700000: 582, // ru
-	0x20700046: 583, // ru-BY
-	0x207000a3: 584, // ru-KG
-	0x207000ac: 585, // ru-KZ
-	0x207000ba: 586, // ru-MD
-	0x20700104: 587, // ru-RU
-	0x2070012e: 588, // ru-UA
-	0x20a00000: 589, // rw
-	0x20a00105: 590, // rw-RW
-	0x20b00000: 591, // rwk
-	0x20b0012d: 592, // rwk-TZ
-	0x20f00000: 593, // sah
-	0x20f00104: 594, // sah-RU
-	0x21000000: 595, // saq
-	0x210000a2: 596, // saq-KE
-	0x21400000: 597, // sbp
-	0x2140012d: 598, // sbp-TZ
-	0x21c00000: 599, // sdh
-	0x21d00000: 600, // se
-	0x21d00070: 601, // se-FI
-	0x21d000d8: 602, // se-NO
-	0x21d0010a: 603, // se-SE
-	0x21f00000: 604, // seh
-	0x21f000cf: 605, // seh-MZ
-	0x22100000: 606, // ses
-	0x221000c1: 607, // ses-ML
-	0x22200000: 608, // sg
-	0x2220004b: 609, // sg-CF
-	0x22600000: 610, // shi
-	0x22652000: 611, // shi-Latn
-	0x226520b8: 612, // shi-Latn-MA
-	0x226d2000: 613, // shi-Tfng
-	0x226d20b8: 614, // shi-Tfng-MA
-	0x22800000: 615, // si
-	0x228000b1: 616, // si-LK
-	0x22a00000: 617, // sk
-	0x22a0010f: 618, // sk-SK
-	0x22c00000: 619, // sl
-	0x22c0010d: 620, // sl-SI
-	0x23000000: 621, // sma
-	0x23100000: 622, // smi
-	0x23200000: 623, // smj
-	0x23300000: 624, // smn
-	0x23300070: 625, // smn-FI
-	0x23500000: 626, // sms
-	0x23600000: 627, // sn
-	0x23600161: 628, // sn-ZW
-	0x23800000: 629, // so
-	0x23800061: 630, // so-DJ
-	0x2380006e: 631, // so-ET
-	0x238000a2: 632, // so-KE
-	0x23800113: 633, // so-SO
-	0x23a00000: 634, // sq
-	0x23a00026: 635, // sq-AL
-	0x23a000c0: 636, // sq-MK
-	0x23a0014a: 637, // sq-XK
-	0x23b00000: 638, // sr
-	0x23b1e000: 639, // sr-Cyrl
-	0x23b1e032: 640, // sr-Cyrl-BA
-	0x23b1e0bb: 641, // sr-Cyrl-ME
-	0x23b1e103: 642, // sr-Cyrl-RS
-	0x23b1e14a: 643, // sr-Cyrl-XK
-	0x23b52000: 644, // sr-Latn
-	0x23b52032: 645, // sr-Latn-BA
-	0x23b520bb: 646, // sr-Latn-ME
-	0x23b52103: 647, // sr-Latn-RS
-	0x23b5214a: 648, // sr-Latn-XK
-	0x24000000: 649, // ss
-	0x24100000: 650, // ssy
-	0x24200000: 651, // st
-	0x24700000: 652, // sv
-	0x24700030: 653, // sv-AX
-	0x24700070: 654, // sv-FI
-	0x2470010a: 655, // sv-SE
-	0x24800000: 656, // sw
-	0x2480004a: 657, // sw-CD
-	0x248000a2: 658, // sw-KE
-	0x2480012d: 659, // sw-TZ
-	0x2480012f: 660, // sw-UG
-	0x24f00000: 661, // syr
-	0x25100000: 662, // ta
-	0x25100097: 663, // ta-IN
-	0x251000b1: 664, // ta-LK
-	0x251000ce: 665, // ta-MY
-	0x2510010b: 666, // ta-SG
-	0x25800000: 667, // te
-	0x25800097: 668, // te-IN
-	0x25a00000: 669, // teo
-	0x25a000a2: 670, // teo-KE
-	0x25a0012f: 671, // teo-UG
-	0x25d00000: 672, // th
-	0x25d00121: 673, // th-TH
-	0x26100000: 674, // ti
-	0x2610006c: 675, // ti-ER
-	0x2610006e: 676, // ti-ET
-	0x26200000: 677, // tig
-	0x26400000: 678, // tk
-	0x26400125: 679, // tk-TM
-	0x26b00000: 680, // tn
-	0x26c00000: 681, // to
-	0x26c00127: 682, // to-TO
-	0x26f00000: 683, // tr
-	0x26f0005c: 684, // tr-CY
-	0x26f00129: 685, // tr-TR
-	0x27200000: 686, // ts
-	0x27e00000: 687, // twq
-	0x27e000d2: 688, // twq-NE
-	0x28200000: 689, // tzm
-	0x282000b8: 690, // tzm-MA
-	0x28400000: 691, // ug
-	0x28400052: 692, // ug-CN
-	0x28600000: 693, // uk
-	0x2860012e: 694, // uk-UA
-	0x28c00000: 695, // ur
-	0x28c00097: 696, // ur-IN
-	0x28c000e6: 697, // ur-PK
-	0x28d00000: 698, // uz
-	0x28d05000: 699, // uz-Arab
-	0x28d05023: 700, // uz-Arab-AF
-	0x28d1e000: 701, // uz-Cyrl
-	0x28d1e134: 702, // uz-Cyrl-UZ
-	0x28d52000: 703, // uz-Latn
-	0x28d52134: 704, // uz-Latn-UZ
-	0x28e00000: 705, // vai
-	0x28e52000: 706, // vai-Latn
-	0x28e520b2: 707, // vai-Latn-LR
-	0x28ed9000: 708, // vai-Vaii
-	0x28ed90b2: 709, // vai-Vaii-LR
-	0x28f00000: 710, // ve
-	0x29200000: 711, // vi
-	0x2920013b: 712, // vi-VN
-	0x29700000: 713, // vo
-	0x29700001: 714, // vo-001
-	0x29a00000: 715, // vun
-	0x29a0012d: 716, // vun-TZ
-	0x29b00000: 717, // wa
-	0x29c00000: 718, // wae
-	0x29c0004d: 719, // wae-CH
-	0x2a400000: 720, // wo
-	0x2a900000: 721, // xh
-	0x2b100000: 722, // xog
-	0x2b10012f: 723, // xog-UG
-	0x2b700000: 724, // yav
-	0x2b700051: 725, // yav-CM
-	0x2b900000: 726, // yi
-	0x2b900001: 727, // yi-001
-	0x2ba00000: 728, // yo
-	0x2ba0003a: 729, // yo-BJ
-	0x2ba000d4: 730, // yo-NG
-	0x2bd00000: 731, // yue
-	0x2bd0008b: 732, // yue-HK
-	0x2c300000: 733, // zgh
-	0x2c3000b8: 734, // zgh-MA
-	0x2c400000: 735, // zh
-	0x2c434000: 736, // zh-Hans
-	0x2c434052: 737, // zh-Hans-CN
-	0x2c43408b: 738, // zh-Hans-HK
-	0x2c4340c4: 739, // zh-Hans-MO
-	0x2c43410b: 740, // zh-Hans-SG
-	0x2c435000: 741, // zh-Hant
-	0x2c43508b: 742, // zh-Hant-HK
-	0x2c4350c4: 743, // zh-Hant-MO
-	0x2c43512c: 744, // zh-Hant-TW
-	0x2c600000: 745, // zu
-	0x2c60015e: 746, // zu-ZA
-}
-
-// Total table size 4550 bytes (4KiB); checksum: B6D49547

+ 0 - 2791
Godeps/_workspace/src/golang.org/x/text/language/tables.go

@@ -1,2791 +0,0 @@
-// This file was generated by go generate; DO NOT EDIT
-
-package language
-
-import "golang.org/x/text/internal/tag"
-
-// CLDRVersion is the CLDR version from which the tables in this package are derived.
-const CLDRVersion = "29"
-
-const numLanguages = 8654
-
-const numScripts = 230
-
-const numRegions = 354
-
-type fromTo struct {
-	from uint16
-	to   uint16
-}
-
-const nonCanonicalUnd = 649
-const (
-	_af  = 10
-	_am  = 17
-	_ar  = 21
-	_az  = 36
-	_bg  = 56
-	_bn  = 75
-	_ca  = 97
-	_cs  = 121
-	_da  = 128
-	_de  = 133
-	_el  = 154
-	_en  = 155
-	_es  = 157
-	_et  = 159
-	_fa  = 164
-	_fi  = 168
-	_fil = 170
-	_fr  = 175
-	_gu  = 211
-	_he  = 224
-	_hi  = 225
-	_hr  = 238
-	_hu  = 242
-	_hy  = 243
-	_id  = 248
-	_is  = 258
-	_it  = 259
-	_ja  = 263
-	_ka  = 273
-	_kk  = 303
-	_km  = 307
-	_kn  = 309
-	_ko  = 310
-	_ky  = 333
-	_lo  = 357
-	_lt  = 361
-	_lv  = 368
-	_mk  = 396
-	_ml  = 397
-	_mn  = 399
-	_mo  = 402
-	_mr  = 406
-	_ms  = 410
-	_mul = 414
-	_my  = 421
-	_nb  = 431
-	_ne  = 436
-	_nl  = 445
-	_no  = 449
-	_pa  = 471
-	_pl  = 487
-	_pt  = 495
-	_ro  = 515
-	_ru  = 519
-	_sh  = 549
-	_si  = 552
-	_sk  = 554
-	_sl  = 556
-	_sq  = 570
-	_sr  = 571
-	_sv  = 583
-	_sw  = 584
-	_ta  = 593
-	_te  = 600
-	_th  = 605
-	_tl  = 616
-	_tn  = 619
-	_tr  = 623
-	_uk  = 646
-	_ur  = 652
-	_uz  = 653
-	_vi  = 658
-	_zh  = 708
-	_zu  = 710
-	_jbo = 265
-	_ami = 1033
-	_bnn = 1740
-	_hak = 221
-	_tlh = 13850
-	_lb  = 340
-	_nv  = 458
-	_pwn = 11438
-	_tao = 13571
-	_tay = 13581
-	_tsu = 14045
-	_nn  = 447
-	_sfb = 13012
-	_vgt = 15084
-	_sgg = 13043
-	_cmn = 2390
-	_nan = 428
-	_hsn = 240
-)
-
-const langPrivateStart = 0x2d09
-
-const langPrivateEnd = 0x2f10
-
-// lang holds an alphabetically sorted list of ISO-639 language identifiers.
-// All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag.
-// For 2-byte language identifiers, the two successive bytes have the following meaning:
-//     - if the first letter of the 2- and 3-letter ISO codes are the same:
-//       the second and third letter of the 3-letter ISO code.
-//     - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3.
-// For 3-byte language identifiers the 4th byte is 0.
-var lang tag.Index = "" + // Size: 2856 bytes
-	"---\x00aaarabbkabr\x00ace\x00ach\x00ada\x00ady\x00aeveaeb\x00affragq\x00" +
-	"aho\x00akkaakk\x00aln\x00alt\x00ammhamo\x00anrgaoz\x00arraarc\x00arn\x00" +
-	"aro\x00arq\x00ary\x00arz\x00assmasa\x00ase\x00ast\x00atj\x00avvaawa\x00a" +
-	"yymazzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bax\x00bbc\x00bbj\x00bci" +
-	"\x00beelbej\x00bem\x00bew\x00bez\x00bfd\x00bfq\x00bft\x00bfy\x00bgulbgc" +
-	"\x00bgn\x00bgx\x00bhihbhb\x00bhi\x00bhk\x00bho\x00biisbik\x00bin\x00bjj" +
-	"\x00bjn\x00bkm\x00bku\x00blt\x00bmambmq\x00bnenboodbpy\x00bqi\x00bqv\x00" +
-	"brrebra\x00brh\x00brx\x00bsosbsq\x00bss\x00bto\x00btv\x00bua\x00buc\x00b" +
-	"ug\x00bum\x00bvb\x00byn\x00byv\x00bze\x00caatcch\x00ccp\x00ceheceb\x00cg" +
-	"g\x00chhachk\x00chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00ckb\x00cooscop" +
-	"\x00cps\x00crrecrj\x00crk\x00crl\x00crm\x00crs\x00csescsb\x00csw\x00ctd" +
-	"\x00cuhucvhvcyymdaandak\x00dar\x00dav\x00dcc\x00deeuden\x00dgr\x00dje" +
-	"\x00dnj\x00doi\x00dsb\x00dtm\x00dtp\x00dty\x00dua\x00dvivdyo\x00dyu\x00d" +
-	"zzoebu\x00eeweefi\x00egl\x00egy\x00eky\x00elllenngeopoes\x00\x05esu\x00e" +
-	"tstett\x00euusewo\x00ext\x00faasfan\x00ffulffm\x00fiinfia\x00fil\x00fit" +
-	"\x00fjijfoaofon\x00frrafrc\x00frp\x00frr\x00frs\x00fud\x00fuq\x00fur\x00" +
-	"fuv\x00fvr\x00fyrygalegaa\x00gag\x00gan\x00gay\x00gbm\x00gbz\x00gcr\x00g" +
-	"dlagez\x00ggn\x00gil\x00gjk\x00gju\x00gllgglk\x00gnrngom\x00gon\x00gor" +
-	"\x00gos\x00got\x00grc\x00grt\x00gsw\x00guujgub\x00guc\x00gur\x00guw\x00g" +
-	"uz\x00gvlvgvr\x00gwi\x00haauhak\x00haw\x00haz\x00heebhiinhif\x00hil\x00h" +
-	"lu\x00hmd\x00hnd\x00hne\x00hnj\x00hnn\x00hno\x00homohoc\x00hoj\x00hrrvhs" +
-	"b\x00hsn\x00htathuunhyyehzerianaiba\x00ibb\x00idndieleigboiiiiikpkikt" +
-	"\x00ilo\x00inndinh\x00iodoisslittaiukuiw\x00\x03izh\x00japnjam\x00jbo" +
-	"\x00jgo\x00ji\x00\x06jmc\x00jml\x00jut\x00jvavjwavkaatkaa\x00kab\x00kac" +
-	"\x00kaj\x00kam\x00kao\x00kbd\x00kcg\x00kck\x00kde\x00kdt\x00kea\x00ken" +
-	"\x00kfo\x00kfr\x00kfy\x00kgonkge\x00kgp\x00kha\x00khb\x00khn\x00khq\x00k" +
-	"ht\x00khw\x00kiikkiu\x00kjuakjg\x00kkazkkj\x00klalkln\x00kmhmkmb\x00knan" +
-	"koorkoi\x00kok\x00kos\x00kpe\x00kraukrc\x00kri\x00krj\x00krl\x00kru\x00k" +
-	"sasksb\x00ksf\x00ksh\x00kuurkum\x00kvomkvr\x00kvx\x00kw\x00\x01kxm\x00kx" +
-	"p\x00kyirlaatlab\x00lad\x00lag\x00lah\x00laj\x00lbtzlbe\x00lbw\x00lcp" +
-	"\x00lep\x00lez\x00lgugliimlif\x00lij\x00lis\x00ljp\x00lki\x00lkt\x00lmn" +
-	"\x00lmo\x00lninloaolol\x00loz\x00lrc\x00ltitltg\x00luublua\x00luo\x00luy" +
-	"\x00luz\x00lvavlwl\x00lzh\x00lzz\x00mad\x00maf\x00mag\x00mai\x00mak\x00m" +
-	"an\x00mas\x00maz\x00mdf\x00mdh\x00mdr\x00men\x00mer\x00mfa\x00mfe\x00mgl" +
-	"gmgh\x00mgo\x00mgp\x00mgy\x00mhahmirimin\x00mis\x00mkkdmlalmls\x00mnonmn" +
-	"i\x00mnw\x00moolmoe\x00moh\x00mos\x00mrarmrd\x00mrj\x00mro\x00mssamtltmt" +
-	"r\x00mua\x00mul\x00mus\x00mvy\x00mwk\x00mwr\x00mwv\x00mxc\x00myyamyv\x00" +
-	"myx\x00myz\x00mzn\x00naaunah\x00nan\x00nap\x00naq\x00nbobnch\x00nddendc" +
-	"\x00nds\x00neepnew\x00ngdongl\x00nhe\x00nhw\x00nij\x00niu\x00njo\x00nlld" +
-	"nmg\x00nnnonnh\x00noornod\x00noe\x00non\x00nqo\x00nrblnsk\x00nso\x00nus" +
-	"\x00nvavnxq\x00nyyanym\x00nyn\x00nzi\x00occiojjiomrmorriosssosa\x00otk" +
-	"\x00paanpag\x00pal\x00pam\x00pap\x00pau\x00pcd\x00pcm\x00pdc\x00pdt\x00p" +
-	"eo\x00pfl\x00phn\x00pilipka\x00pko\x00plolpms\x00pnt\x00pon\x00pra\x00pr" +
-	"d\x00prg\x00psusptorpuu\x00quuequc\x00qug\x00raj\x00rcf\x00rej\x00rgn" +
-	"\x00ria\x00rif\x00rjs\x00rkt\x00rmohrmf\x00rmo\x00rmt\x00rmu\x00rnunrng" +
-	"\x00roonrob\x00rof\x00rtm\x00ruusrue\x00rug\x00rw\x00\x04rwk\x00ryu\x00s" +
-	"aansaf\x00sah\x00saq\x00sas\x00sat\x00saz\x00sbp\x00scrdsck\x00scn\x00sc" +
-	"o\x00scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00sei\x00ses\x00sgagsga" +
-	"\x00sgs\x00sh\x00\x02shi\x00shn\x00siinsid\x00sklkskr\x00sllvsli\x00sly" +
-	"\x00smmosma\x00smi\x00smj\x00smn\x00smp\x00sms\x00snnasnk\x00soomsou\x00" +
-	"sqqisrrpsrb\x00srn\x00srr\x00srx\x00ssswssy\x00stotstq\x00suunsuk\x00sus" +
-	"\x00svweswwaswb\x00swc\x00swg\x00swv\x00sxn\x00syl\x00syr\x00szl\x00taam" +
-	"taj\x00tbw\x00tcy\x00tdd\x00tdg\x00tdh\x00teeltem\x00teo\x00tet\x00tggkt" +
-	"hhathl\x00thq\x00thr\x00tiirtig\x00tiv\x00tkuktkl\x00tkr\x00tkt\x00tlglt" +
-	"ly\x00tmh\x00tnsntoontog\x00tpi\x00trurtru\x00trv\x00tssotsd\x00tsf\x00t" +
-	"sg\x00tsj\x00ttatttj\x00tts\x00ttt\x00tum\x00tvl\x00twwitwq\x00txg\x00ty" +
-	"ahtyv\x00tzm\x00udm\x00ugiguga\x00ukkruli\x00umb\x00und\x00unr\x00unx" +
-	"\x00urrduzzbvai\x00veenvec\x00vep\x00viievic\x00vls\x00vmf\x00vmw\x00voo" +
-	"lvot\x00vro\x00vun\x00walnwae\x00wal\x00war\x00wbp\x00wbq\x00wbr\x00wls" +
-	"\x00wni\x00woolwtm\x00wuu\x00xav\x00xcr\x00xhhoxlc\x00xld\x00xmf\x00xmn" +
-	"\x00xmr\x00xna\x00xnr\x00xog\x00xpr\x00xsa\x00xsr\x00yao\x00yap\x00yav" +
-	"\x00ybb\x00yiidyooryrl\x00yua\x00yue\x00zahazag\x00zbl\x00zdj\x00zea\x00" +
-	"zgh\x00zhhozmi\x00zuulzxx\x00zza\x00\xff\xff\xff\xff"
-
-const langNoIndexOffset = 713
-
-// langNoIndex is a bit vector of all 3-letter language codes that are not used as an index
-// in lookup tables. The language ids for these language codes are derived directly
-// from the letters and are not consecutive.
-// Size: 2197 bytes, 2197 elements
-var langNoIndex = [2197]uint8{
-	// Entry 0 - 3F
-	0xff, 0xfd, 0xfd, 0xfe, 0xef, 0xf7, 0xbf, 0xd2,
-	0xfb, 0xbf, 0xfe, 0xfa, 0xb7, 0x1d, 0x3c, 0x57,
-	0x6f, 0x97, 0x73, 0xf8, 0xff, 0xef, 0xff, 0x70,
-	0xaf, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x85, 0x62,
-	0xe9, 0xbf, 0xfd, 0xff, 0xff, 0xf7, 0xfd, 0x77,
-	0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3,
-	0xc9, 0xff, 0xff, 0xff, 0x4d, 0xb8, 0x0a, 0x6a,
-	0x7e, 0xfa, 0xe3, 0xfe, 0x7e, 0xff, 0x77, 0xff,
-	// Entry 40 - 7F
-	0xff, 0xff, 0xff, 0xdf, 0x2b, 0xf4, 0xf1, 0xe0,
-	0x5d, 0xe7, 0x9f, 0x14, 0x07, 0x20, 0xdf, 0xed,
-	0x9f, 0x3f, 0xc9, 0x21, 0xf8, 0x3f, 0x94, 0xf7,
-	0x7e, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff,
-	0xff, 0xff, 0x5f, 0xfc, 0xdb, 0xfd, 0xbf, 0xb5,
-	0x7b, 0xdf, 0x7f, 0xf7, 0xeb, 0xfe, 0xff, 0xa7,
-	0xbd, 0xff, 0x7f, 0xf7, 0xff, 0xef, 0xef, 0xef,
-	0xff, 0xff, 0x9f, 0xff, 0xff, 0xef, 0xff, 0xdf,
-	// Entry 80 - BF
-	0xff, 0xff, 0xf3, 0xff, 0xfb, 0x2f, 0xff, 0xff,
-	0xfb, 0xee, 0xff, 0xbd, 0xdb, 0xff, 0xdf, 0xf7,
-	0xff, 0xfa, 0xfd, 0xff, 0x7e, 0xaf, 0x7b, 0xfe,
-	0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdf, 0xff,
-	0xff, 0xdf, 0xfb, 0xff, 0xfd, 0xfc, 0xfb, 0xff,
-	0xff, 0xff, 0xff, 0xf7, 0x7f, 0xbf, 0xfd, 0xd5,
-	0xa5, 0x77, 0x40, 0xff, 0x9c, 0xc1, 0x41, 0x2c,
-	0x08, 0x24, 0x41, 0x00, 0x50, 0x40, 0x00, 0x80,
-	// Entry C0 - FF
-	0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96,
-	0x9b, 0x14, 0x88, 0xf6, 0x7b, 0xe7, 0x17, 0x56,
-	0x55, 0x7d, 0x0e, 0x1c, 0x37, 0x71, 0xf3, 0xef,
-	0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10,
-	0xbc, 0x87, 0xaf, 0xdf, 0xff, 0xf7, 0x73, 0x35,
-	0x3e, 0x87, 0xc7, 0xdf, 0xff, 0x00, 0x81, 0x00,
-	0xb0, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03,
-	0x40, 0x00, 0x40, 0x92, 0x21, 0xd0, 0xbf, 0x5d,
-	// Entry 100 - 13F
-	0xfd, 0xde, 0xfe, 0x5e, 0x00, 0x00, 0x02, 0x64,
-	0x8d, 0x19, 0xc1, 0xdf, 0x79, 0x22, 0x00, 0x00,
-	0x00, 0xdf, 0x6d, 0xdc, 0x26, 0xe5, 0xd9, 0xf3,
-	0xfe, 0xff, 0xfd, 0xcb, 0x9f, 0x14, 0x01, 0x0c,
-	0x86, 0x00, 0xd1, 0x00, 0xf0, 0xc5, 0x67, 0x5f,
-	0x56, 0x89, 0x5e, 0xb7, 0xec, 0xef, 0x03, 0x00,
-	0x02, 0x00, 0x00, 0x00, 0xc0, 0x77, 0xda, 0x57,
-	0x90, 0x69, 0x01, 0x2c, 0x96, 0x79, 0xe0, 0xff,
-	// Entry 140 - 17F
-	0xff, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x08, 0x56,
-	0x01, 0x00, 0x00, 0xb0, 0x14, 0x03, 0x50, 0x16,
-	0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x09,
-	0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10,
-	0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x04,
-	0x08, 0x00, 0x00, 0x04, 0x00, 0x80, 0x28, 0x04,
-	0x00, 0x00, 0x50, 0xd5, 0x2d, 0x00, 0x64, 0x35,
-	0x24, 0x53, 0xf5, 0xd4, 0xbd, 0xe2, 0xcd, 0x03,
-	// Entry 180 - 1BF
-	0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x04, 0x17, 0x39, 0x01, 0xdd, 0x57, 0x98,
-	0x21, 0x98, 0xa5, 0x00, 0x00, 0x01, 0x40, 0x82,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x01, 0x40, 0x00, 0x44, 0x00, 0x00, 0xb0, 0xfe,
-	0xa9, 0x39, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x40,
-	0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-	// Entry 1C0 - 1FF
-	0x00, 0x01, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00,
-	0x04, 0x20, 0x04, 0xa6, 0x08, 0x04, 0x00, 0x08,
-	0x81, 0x50, 0x00, 0x00, 0x08, 0x11, 0x86, 0x40,
-	0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x06, 0x55,
-	0x02, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x60,
-	0x3b, 0x83, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0xbe, 0xdf, 0xff, 0xfe, 0xbf,
-	// Entry 200 - 23F
-	0xdf, 0xc7, 0x83, 0x82, 0xc0, 0xff, 0xdf, 0x27,
-	0xcf, 0x5f, 0xe7, 0x01, 0x10, 0x20, 0xb2, 0xc5,
-	0xa4, 0x45, 0x25, 0x9b, 0x03, 0xcf, 0xf0, 0xdf,
-	0x03, 0xc4, 0x08, 0x10, 0x01, 0x0e, 0x01, 0xe3,
-	0x92, 0x54, 0xdb, 0x38, 0xf1, 0x7f, 0xf7, 0x6d,
-	0xf9, 0xff, 0x1c, 0x7d, 0x04, 0x08, 0x00, 0x01,
-	0x21, 0x12, 0x6c, 0x5f, 0xdd, 0x0f, 0x85, 0x4f,
-	0x40, 0x40, 0x00, 0x04, 0xf9, 0xfd, 0xbd, 0xd4,
-	// Entry 240 - 27F
-	0xe8, 0x13, 0xf4, 0x27, 0xa3, 0x0d, 0x00, 0x00,
-	0x20, 0x7b, 0x39, 0x02, 0x05, 0x84, 0x00, 0xf0,
-	0xbf, 0x7f, 0xda, 0x00, 0x18, 0x04, 0x81, 0x00,
-	0x00, 0x00, 0x80, 0x10, 0x94, 0x1c, 0x01, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x04,
-	0x08, 0xb4, 0x7c, 0xa5, 0x0c, 0x40, 0x00, 0x00,
-	0x11, 0x04, 0x04, 0x6c, 0x00, 0x20, 0x70, 0xff,
-	0xfb, 0x7f, 0x60, 0x00, 0x05, 0x9b, 0xdd, 0x6e,
-	// Entry 280 - 2BF
-	0x03, 0x00, 0x11, 0x00, 0x00, 0x00, 0x40, 0x05,
-	0xb5, 0xb6, 0x80, 0x08, 0x04, 0x00, 0x04, 0x51,
-	0xe2, 0xff, 0xfd, 0x3f, 0x05, 0x09, 0x08, 0x05,
-	0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
-	0x08, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x02, 0x60,
-	0xe5, 0x48, 0x14, 0x89, 0x20, 0xc0, 0x47, 0x80,
-	0x07, 0x00, 0x00, 0x00, 0xcc, 0x50, 0x40, 0x24,
-	0x85, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20,
-	// Entry 2C0 - 2FF
-	0x02, 0x50, 0x88, 0x11, 0x00, 0xd1, 0x6c, 0xee,
-	0x50, 0x27, 0x1d, 0x11, 0x69, 0x06, 0x59, 0xe9,
-	0x33, 0x08, 0x00, 0x20, 0x05, 0x40, 0x10, 0x00,
-	0x00, 0x00, 0x50, 0x44, 0x96, 0x49, 0xd6, 0x5d,
-	0xa7, 0x81, 0x47, 0x97, 0xfb, 0x00, 0x10, 0x00,
-	0x08, 0x00, 0x80, 0x00, 0x40, 0x45, 0x00, 0x01,
-	0x02, 0x00, 0x01, 0x40, 0x80, 0x00, 0x04, 0x08,
-	0xf8, 0xeb, 0xf6, 0x39, 0xc4, 0x89, 0x16, 0x00,
-	// Entry 300 - 33F
-	0x00, 0x0c, 0x04, 0x01, 0x20, 0x20, 0xdd, 0xa2,
-	0x01, 0x00, 0x00, 0x00, 0x12, 0x04, 0x00, 0x00,
-	0x04, 0x10, 0xf0, 0x9d, 0x95, 0x13, 0x04, 0x80,
-	0x00, 0x01, 0xd0, 0x12, 0x40, 0x00, 0x10, 0xb0,
-	0x10, 0x62, 0x4c, 0xd2, 0x02, 0x01, 0x4a, 0x00,
-	0x46, 0x04, 0x00, 0x08, 0x02, 0x00, 0x20, 0xc0,
-	0x00, 0x80, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00,
-	0x00, 0xf0, 0xd8, 0x6f, 0x15, 0x02, 0x08, 0x00,
-	// Entry 340 - 37F
-	0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01,
-	0x00, 0x10, 0x00, 0x00, 0x00, 0xf8, 0x85, 0xe3,
-	0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x7f, 0xfb,
-	0xff, 0xfc, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0xf6,
-	0xfb, 0xfe, 0xf7, 0x1f, 0xff, 0xb3, 0xed, 0xff,
-	0xdb, 0xed, 0xff, 0xfe, 0xff, 0xfe, 0xdf, 0xff,
-	0xff, 0xff, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xff,
-	0xfd, 0xff, 0xdf, 0xaf, 0x9c, 0xff, 0xfb, 0xff,
-	// Entry 380 - 3BF
-	0xff, 0xff, 0xff, 0xff, 0xef, 0xd2, 0xbb, 0xdf,
-	0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef,
-	0xfd, 0xff, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0xff,
-	0xef, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-	0xff, 0x5f, 0xd3, 0x7b, 0xfd, 0xd9, 0xdf, 0xef,
-	0xbc, 0x18, 0x05, 0x2c, 0xff, 0x07, 0xf0, 0xff,
-	0xf7, 0x5f, 0x00, 0x08, 0x00, 0xc3, 0x3d, 0x1b,
-	0x06, 0xe6, 0x72, 0xf0, 0xdd, 0x3c, 0x7f, 0x44,
-	// Entry 3C0 - 3FF
-	0x02, 0x30, 0x9f, 0x7a, 0x16, 0xfd, 0xff, 0x57,
-	0xf2, 0xff, 0x39, 0xff, 0xf2, 0x1e, 0x95, 0xf7,
-	0xf7, 0xff, 0x45, 0x80, 0x01, 0x02, 0x00, 0x00,
-	0x40, 0x54, 0x9f, 0x8a, 0xd9, 0xd9, 0x0e, 0x11,
-	0x84, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x00, 0x01,
-	0x05, 0xd1, 0x50, 0x58, 0x00, 0x00, 0x00, 0x10,
-	0x04, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x17, 0xd2,
-	0xf9, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
-	// Entry 400 - 43F
-	0xd7, 0x6f, 0xff, 0xff, 0xdf, 0x7d, 0xbb, 0xff,
-	0xff, 0xff, 0xf7, 0xf3, 0xef, 0xff, 0xff, 0xf7,
-	0xff, 0xdf, 0xdb, 0x7f, 0xff, 0xff, 0x7f, 0xff,
-	0xff, 0xff, 0xef, 0xff, 0xbc, 0xff, 0xff, 0xfb,
-	0xff, 0xfb, 0xff, 0xde, 0x76, 0xbd, 0xff, 0xf7,
-	0xff, 0xff, 0xf7, 0xff, 0xff, 0xdf, 0xf3, 0xfe,
-	0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xde,
-	0xf7, 0xbb, 0xef, 0xf7, 0xff, 0xfb, 0xbf, 0xdf,
-	// Entry 440 - 47F
-	0xfd, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0x5f, 0x7d,
-	0x7f, 0xff, 0xff, 0xf7, 0xe5, 0xfc, 0xff, 0xfd,
-	0x7f, 0x7f, 0xff, 0x9e, 0xae, 0xff, 0xee, 0xff,
-	0x7f, 0xf7, 0x7b, 0x02, 0x82, 0x04, 0xff, 0xf7,
-	0xff, 0xbf, 0xd7, 0xef, 0xfe, 0xdf, 0xf7, 0xfe,
-	0xe2, 0x8e, 0xe7, 0xff, 0xf7, 0xff, 0x56, 0xbd,
-	0xcd, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xef, 0xff,
-	0xe5, 0xdf, 0x7d, 0x0f, 0xa7, 0x51, 0x04, 0x44,
-	// Entry 480 - 4BF
-	0x13, 0xd0, 0x5d, 0xaf, 0xa6, 0xfd, 0xb9, 0xff,
-	0x63, 0x5d, 0x5b, 0xff, 0xff, 0xbf, 0x3f, 0x20,
-	0x14, 0x00, 0x57, 0x51, 0x82, 0x65, 0xf5, 0x49,
-	0xe2, 0xff, 0xfc, 0xdf, 0x00, 0x05, 0xc5, 0x05,
-	0x00, 0x22, 0x00, 0x74, 0x69, 0x10, 0x08, 0x04,
-	0x41, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x51, 0x60, 0x05, 0x04, 0x01, 0x00, 0x00,
-	0x06, 0x01, 0x20, 0x00, 0x18, 0x01, 0x92, 0xb1,
-	// Entry 4C0 - 4FF
-	0xfd, 0x67, 0x4b, 0x06, 0x95, 0x06, 0x57, 0xed,
-	0xfb, 0x4c, 0x9d, 0x7b, 0x83, 0x04, 0x62, 0x40,
-	0x00, 0x15, 0x42, 0x00, 0x00, 0x00, 0x54, 0x83,
-	0xf9, 0x4f, 0x10, 0x8c, 0xc9, 0x46, 0xde, 0xf7,
-	0x13, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x90,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x00,
-	0x01, 0x40, 0x00, 0xf0, 0x5b, 0xf4, 0xbe, 0x7d,
-	0xba, 0xcf, 0xf7, 0xaf, 0x42, 0x04, 0x84, 0x41,
-	// Entry 500 - 53F
-	0xb0, 0xff, 0x79, 0x7a, 0x04, 0x00, 0x00, 0x49,
-	0x2d, 0x14, 0x27, 0x77, 0xed, 0xf1, 0xbf, 0xef,
-	0x3f, 0x00, 0x00, 0x02, 0xc6, 0xa0, 0x1e, 0xfc,
-	0xbb, 0xff, 0xfd, 0xfb, 0xb7, 0xfd, 0xf5, 0xff,
-	0xfd, 0xfc, 0xd5, 0xed, 0x47, 0xf4, 0x7f, 0x10,
-	0x01, 0x01, 0x84, 0x6d, 0xff, 0xf7, 0xdd, 0xf9,
-	0x5f, 0x05, 0x86, 0xef, 0xf5, 0x77, 0xbd, 0x3c,
-	0x00, 0x00, 0x00, 0x43, 0x71, 0x42, 0x00, 0x40,
-	// Entry 540 - 57F
-	0x00, 0x00, 0x01, 0x43, 0x19, 0x00, 0x08, 0x00,
-	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-	// Entry 580 - 5BF
-	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-	0xff, 0xab, 0xbd, 0xe7, 0x57, 0xee, 0x13, 0x5d,
-	0x09, 0xc1, 0x40, 0x21, 0xfa, 0x17, 0x01, 0x80,
-	0x00, 0x00, 0x00, 0x00, 0xf0, 0xde, 0xff, 0xbf,
-	0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
-	0x00, 0x30, 0x95, 0xe3, 0x10, 0x00, 0x00, 0x00,
-	0x11, 0x04, 0x16, 0x00, 0x01, 0x02, 0x00, 0x81,
-	0xa3, 0x01, 0x50, 0x00, 0x00, 0x83, 0x11, 0x40,
-	// Entry 5C0 - 5FF
-	0x00, 0x00, 0x00, 0xf0, 0xdd, 0x7b, 0x7e, 0x02,
-	0xaa, 0x10, 0x5d, 0xd8, 0x52, 0x00, 0x80, 0x20,
-	0x00, 0x00, 0x00, 0x00, 0x40, 0x10, 0x02, 0x02,
-	0x19, 0x00, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d,
-	0x31, 0x00, 0x00, 0x00, 0x01, 0x50, 0x02, 0x20,
-	0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x20, 0x00,
-	0x00, 0x1f, 0xdf, 0xf2, 0xfd, 0xff, 0xfd, 0x3f,
-	0x9f, 0x18, 0xcf, 0x9c, 0xbf, 0xaf, 0x5f, 0xfe,
-	// Entry 600 - 63F
-	0x7b, 0x4b, 0x40, 0x10, 0xe1, 0xfd, 0xaf, 0xfd,
-	0xb7, 0xf7, 0xff, 0xf3, 0xdf, 0xff, 0x6f, 0xf1,
-	0x7b, 0xf1, 0x7f, 0xdf, 0x7f, 0xbf, 0xfe, 0xb7,
-	0xee, 0x1c, 0xfb, 0xdb, 0xef, 0xdf, 0xff, 0xfd,
-	0x7e, 0xbe, 0x57, 0xff, 0x6f, 0x81, 0x76, 0x1f,
-	0xd4, 0x77, 0xf5, 0xfd, 0xff, 0xff, 0xeb, 0xfe,
-	0xbf, 0x5f, 0x57, 0x1b, 0xeb, 0x5f, 0x50, 0x18,
-	0x02, 0xfa, 0xff, 0x9d, 0x15, 0x97, 0x15, 0x0f,
-	// Entry 640 - 67F
-	0x75, 0xc4, 0x7d, 0x81, 0x82, 0xf1, 0xd7, 0x7e,
-	0xff, 0xff, 0xff, 0xef, 0xff, 0xfd, 0xdd, 0xde,
-	0xfc, 0xfd, 0xf6, 0x5f, 0x7a, 0x1f, 0x40, 0x98,
-	0x02, 0xff, 0xe3, 0xff, 0xf3, 0xd6, 0xf2, 0xff,
-	0xfb, 0xdf, 0x7d, 0x50, 0x1e, 0x15, 0x7b, 0xb4,
-	0xf5, 0xbe, 0xff, 0xff, 0xf3, 0xf7, 0xff, 0xf7,
-	0x7f, 0xff, 0xff, 0xbe, 0xdb, 0xf7, 0xd7, 0xf9,
-	0xef, 0x2f, 0x80, 0xbf, 0xc5, 0xff, 0xff, 0xf3,
-	// Entry 680 - 6BF
-	0x97, 0x9d, 0xff, 0xff, 0xf7, 0xcf, 0xfd, 0xbf,
-	0xde, 0x7f, 0x06, 0x1d, 0x57, 0xff, 0xf8, 0xda,
-	0x5d, 0xce, 0x7d, 0x16, 0xb9, 0xea, 0x69, 0xa0,
-	0x1a, 0x20, 0x00, 0x30, 0x02, 0x04, 0x24, 0x48,
-	0x04, 0x00, 0x00, 0x40, 0xd4, 0x02, 0x04, 0x00,
-	0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x01, 0x06,
-	0x50, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0x00,
-	0x04, 0x00, 0x10, 0x8c, 0x58, 0xd5, 0x0d, 0x0f,
-	// Entry 6C0 - 6FF
-	0x14, 0x4d, 0xf1, 0x16, 0x44, 0xd1, 0x42, 0x08,
-	0x40, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00,
-	0x00, 0xdc, 0xff, 0xeb, 0x1f, 0x58, 0x08, 0x41,
-	0x04, 0xa0, 0x04, 0x00, 0x30, 0x12, 0x40, 0x22,
-	0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x01, 0x00, 0x00, 0x00, 0x80, 0x10, 0x10, 0xaf,
-	0x6f, 0x93, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x80, 0x80, 0x25, 0x00, 0x00,
-	// Entry 700 - 73F
-	0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
-	0x80, 0x86, 0xc2, 0x02, 0x00, 0x00, 0x00, 0x01,
-	0xdf, 0x18, 0x00, 0x00, 0x02, 0xf0, 0xfd, 0x79,
-	0x3b, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
-	0x03, 0x00, 0x09, 0x20, 0x00, 0x00, 0x01, 0x00,
-	0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	// Entry 740 - 77F
-	0x00, 0x00, 0x00, 0xef, 0xf7, 0xfd, 0xcf, 0x7e,
-	0xa0, 0x11, 0x10, 0x00, 0x00, 0x92, 0x01, 0x44,
-	0xcd, 0xf9, 0x5e, 0x00, 0x01, 0x00, 0x30, 0x14,
-	0x04, 0x55, 0x10, 0x01, 0x04, 0xf6, 0x3f, 0x7a,
-	0x05, 0x04, 0x00, 0xb0, 0x80, 0x00, 0x55, 0x55,
-	0x97, 0x7c, 0x9f, 0x71, 0xcc, 0x78, 0xd1, 0x43,
-	0xf5, 0x57, 0x67, 0x14, 0x01, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x2c, 0xf7, 0xdb, 0x1f, 0x54, 0x60,
-	// Entry 780 - 7BF
-	0x03, 0x68, 0x01, 0x10, 0x8b, 0x38, 0xaa, 0x01,
-	0x00, 0x00, 0x30, 0x00, 0x24, 0x44, 0x00, 0x00,
-	0x10, 0x03, 0x11, 0x02, 0x01, 0x00, 0x00, 0xf0,
-	0xf5, 0xff, 0xd5, 0xd7, 0xbc, 0x70, 0xd6, 0x78,
-	0x78, 0x15, 0x50, 0x00, 0xa4, 0x84, 0xe9, 0x41,
-	0x00, 0x00, 0x00, 0x6b, 0x39, 0x52, 0x74, 0x00,
-	0xe8, 0x30, 0x90, 0x6a, 0x92, 0x00, 0x00, 0x02,
-	0xff, 0xef, 0xff, 0x4f, 0x85, 0x53, 0xf4, 0xed,
-	// Entry 7C0 - 7FF
-	0xdd, 0xbf, 0x72, 0x19, 0xc7, 0x0c, 0xf5, 0x42,
-	0x54, 0xdd, 0x77, 0x14, 0x00, 0x80, 0xc0, 0x56,
-	0xcc, 0x16, 0x9e, 0xfb, 0x35, 0x7d, 0xef, 0xff,
-	0xbd, 0xa4, 0xaf, 0x01, 0x44, 0x18, 0x01, 0x5d,
-	0x4e, 0x4a, 0x08, 0x50, 0x28, 0x30, 0xe0, 0x80,
-	0x10, 0x20, 0x24, 0x00, 0xff, 0x3f, 0xdf, 0x67,
-	0xfe, 0x01, 0x06, 0x88, 0x0a, 0x40, 0x16, 0x01,
-	0x01, 0x15, 0x2b, 0x3e, 0x01, 0x00, 0x00, 0x10,
-	// Entry 800 - 83F
-	0x90, 0x69, 0x45, 0x02, 0x02, 0x01, 0xe1, 0xbf,
-	0xbf, 0x03, 0x00, 0x00, 0x10, 0xd4, 0xa7, 0xd1,
-	0x54, 0x9e, 0x44, 0xdf, 0xfd, 0x8f, 0x66, 0xb3,
-	0x55, 0x20, 0xd4, 0xc3, 0xd8, 0x30, 0x3d, 0x80,
-	0x00, 0x00, 0x00, 0x4c, 0xd4, 0x11, 0xc5, 0x84,
-	0x6e, 0x50, 0x00, 0x22, 0x50, 0x6e, 0xbf, 0xdb,
-	0x07, 0x00, 0x20, 0x10, 0x84, 0xb2, 0x45, 0x10,
-	0x06, 0x44, 0x00, 0x00, 0x12, 0x02, 0x11, 0x00,
-	// Entry 840 - 87F
-	0xf0, 0xfb, 0xfd, 0x3f, 0x05, 0x00, 0x12, 0x81,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02,
-	0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28,
-	0x84, 0x00, 0x33, 0xc0, 0x23, 0x24, 0x00, 0x00,
-	0x00, 0xcb, 0xe4, 0x3a, 0x42, 0xc8, 0x14, 0xf1,
-	0xef, 0xff, 0x7f, 0x16, 0x01, 0x01, 0x84, 0x50,
-	0x07, 0xfc, 0xff, 0xff, 0x0f, 0x01, 0x00, 0x40,
-	0x10, 0x38, 0x01, 0x01, 0x1c, 0x12, 0x40, 0xe1,
-	// Entry 880 - 8BF
-	0x76, 0x16, 0x08, 0x03, 0x10, 0x00, 0x00, 0x00,
-	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24,
-	0x0a, 0x00, 0x80, 0x00, 0x00,
-}
-
-// altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives
-// to 2-letter language codes that cannot be derived using the method described above.
-// Each 3-letter code is followed by its 1-byte langID.
-var altLangISO3 tag.Index = "---\x00cor\x00hbs\x01heb\x02kin\x03spa\x04yid\x05\xff\xff\xff\xff"
-
-// altLangIndex is used to convert indexes in altLangISO3 to langIDs.
-// Size: 12 bytes, 6 elements
-var altLangIndex = [6]uint16{
-	0x014a, 0x0225, 0x0105, 0x020a, 0x009d, 0x010b,
-}
-
-// langAliasMap maps langIDs to their suggested replacements.
-// Size: 640 bytes, 160 elements
-var langAliasMap = [160]fromTo{
-	0:   {from: 0xc4, to: 0xda},
-	1:   {from: 0xff, to: 0xf8},
-	2:   {from: 0x105, to: 0xe0},
-	3:   {from: 0x10b, to: 0x2b9},
-	4:   {from: 0x110, to: 0x10f},
-	5:   {from: 0x192, to: 0x203},
-	6:   {from: 0x1af, to: 0x1c1},
-	7:   {from: 0x225, to: 0x23b},
-	8:   {from: 0x268, to: 0xaa},
-	9:   {from: 0x274, to: 0x252},
-	10:  {from: 0x27d, to: 0xd},
-	11:  {from: 0x2d5, to: 0x2db},
-	12:  {from: 0x326, to: 0x93},
-	13:  {from: 0x3c7, to: 0x1c48},
-	14:  {from: 0x3e8, to: 0x23a},
-	15:  {from: 0x3f9, to: 0x23a},
-	16:  {from: 0x484, to: 0x15},
-	17:  {from: 0x48f, to: 0xf3},
-	18:  {from: 0x4d5, to: 0x1f38},
-	19:  {from: 0x54a, to: 0x23},
-	20:  {from: 0x550, to: 0x2732},
-	21:  {from: 0x55c, to: 0x24},
-	22:  {from: 0x57d, to: 0xa1},
-	23:  {from: 0x5a3, to: 0x26},
-	24:  {from: 0x5ac, to: 0x42},
-	25:  {from: 0x615, to: 0x5a7},
-	26:  {from: 0x65a, to: 0xc7a},
-	27:  {from: 0x786, to: 0x1a5},
-	28:  {from: 0x7cd, to: 0x16e},
-	29:  {from: 0x7d4, to: 0x59},
-	30:  {from: 0x855, to: 0x30b9},
-	31:  {from: 0x8cf, to: 0x2c4},
-	32:  {from: 0x90c, to: 0x23f1},
-	33:  {from: 0x915, to: 0x95a},
-	34:  {from: 0x932, to: 0x24f},
-	35:  {from: 0x953, to: 0x3fc0},
-	36:  {from: 0x956, to: 0x2c4},
-	37:  {from: 0x995, to: 0x2b3e},
-	38:  {from: 0x9c5, to: 0x2f18},
-	39:  {from: 0xa50, to: 0x73},
-	40:  {from: 0xa9f, to: 0x79},
-	41:  {from: 0xb5f, to: 0x8a},
-	42:  {from: 0xb6e, to: 0x1a2},
-	43:  {from: 0xb8f, to: 0xb92},
-	44:  {from: 0xb95, to: 0x2c8},
-	45:  {from: 0xc76, to: 0x1df1},
-	46:  {from: 0xc85, to: 0x2c31},
-	47:  {from: 0xcd0, to: 0x1bd},
-	48:  {from: 0xe67, to: 0x9f},
-	49:  {from: 0xe9b, to: 0x179},
-	50:  {from: 0xf37, to: 0xfc},
-	51:  {from: 0x1010, to: 0xd},
-	52:  {from: 0x11bb, to: 0xaf},
-	53:  {from: 0x1207, to: 0xa6},
-	54:  {from: 0x12b6, to: 0xb32},
-	55:  {from: 0x12ba, to: 0x1d2},
-	56:  {from: 0x12c9, to: 0x145c},
-	57:  {from: 0x1317, to: 0x111},
-	58:  {from: 0x131a, to: 0x85},
-	59:  {from: 0x133a, to: 0x3a46},
-	60:  {from: 0x1401, to: 0xcc},
-	61:  {from: 0x145f, to: 0x9a},
-	62:  {from: 0x1497, to: 0x278f},
-	63:  {from: 0x14af, to: 0xca},
-	64:  {from: 0x14be, to: 0xcd6},
-	65:  {from: 0x1511, to: 0x12bb},
-	66:  {from: 0x15a0, to: 0x154d},
-	67:  {from: 0x15ad, to: 0x168a},
-	68:  {from: 0x1621, to: 0x23f},
-	69:  {from: 0x1710, to: 0x1a98},
-	70:  {from: 0x180b, to: 0x2947},
-	71:  {from: 0x1821, to: 0x102},
-	72:  {from: 0x18f1, to: 0x104},
-	73:  {from: 0x191d, to: 0x12ac},
-	74:  {from: 0x1dcf, to: 0x3548},
-	75:  {from: 0x1dd4, to: 0x1e74},
-	76:  {from: 0x1df1, to: 0x18f},
-	77:  {from: 0x1e7a, to: 0x145},
-	78:  {from: 0x1e85, to: 0x13b},
-	79:  {from: 0x1e89, to: 0x122},
-	80:  {from: 0x1e90, to: 0x138},
-	81:  {from: 0x1ea6, to: 0x1f82},
-	82:  {from: 0x1ecc, to: 0x147},
-	83:  {from: 0x1f30, to: 0x8d},
-	84:  {from: 0x1f65, to: 0x12f8},
-	85:  {from: 0x1f7d, to: 0x4235},
-	86:  {from: 0x1f8b, to: 0x371a},
-	87:  {from: 0x1fc4, to: 0x8d},
-	88:  {from: 0x1fce, to: 0x8d},
-	89:  {from: 0x1ff9, to: 0x6c1},
-	90:  {from: 0x20ad, to: 0x2fbd},
-	91:  {from: 0x2119, to: 0x30fc},
-	92:  {from: 0x2209, to: 0x170},
-	93:  {from: 0x227b, to: 0x18c},
-	94:  {from: 0x2287, to: 0x189},
-	95:  {from: 0x2291, to: 0x19a},
-	96:  {from: 0x22e7, to: 0x8f2},
-	97:  {from: 0x2340, to: 0x69},
-	98:  {from: 0x23d5, to: 0x179},
-	99:  {from: 0x2460, to: 0x244b},
-	100: {from: 0x2490, to: 0x1f4},
-	101: {from: 0x24be, to: 0x3a46},
-	102: {from: 0x24fc, to: 0x244b},
-	103: {from: 0x2520, to: 0x40ef},
-	104: {from: 0x2686, to: 0x25ce},
-	105: {from: 0x26ab, to: 0x1b4},
-	106: {from: 0x271d, to: 0x2b3e},
-	107: {from: 0x28b1, to: 0x1d1},
-	108: {from: 0x2993, to: 0x1d3},
-	109: {from: 0x29d6, to: 0x3a46},
-	110: {from: 0x2a93, to: 0x1ee},
-	111: {from: 0x2aaa, to: 0x32e},
-	112: {from: 0x2ade, to: 0xa4},
-	113: {from: 0x2adf, to: 0xa4},
-	114: {from: 0x2b96, to: 0x183},
-	115: {from: 0x2b9f, to: 0x1763},
-	116: {from: 0x2bb1, to: 0x2b2c},
-	117: {from: 0x2bb8, to: 0x152},
-	118: {from: 0x2beb, to: 0x37},
-	119: {from: 0x2bfc, to: 0x2019},
-	120: {from: 0x2c37, to: 0x2c32},
-	121: {from: 0x2c86, to: 0x2c6e},
-	122: {from: 0x2f2a, to: 0x1f1},
-	123: {from: 0x30fd, to: 0x3125},
-	124: {from: 0x31c1, to: 0x203},
-	125: {from: 0x3285, to: 0x1667},
-	126: {from: 0x337d, to: 0x22a},
-	127: {from: 0x33ef, to: 0x132},
-	128: {from: 0x340d, to: 0x215},
-	129: {from: 0x3494, to: 0x248},
-	130: {from: 0x3557, to: 0x8d},
-	131: {from: 0x35ad, to: 0x3689},
-	132: {from: 0x35c2, to: 0x2a32},
-	133: {from: 0x35c6, to: 0x4c},
-	134: {from: 0x35c9, to: 0x2fbf},
-	135: {from: 0x3603, to: 0x373d},
-	136: {from: 0x3629, to: 0x3d57},
-	137: {from: 0x363c, to: 0x376e},
-	138: {from: 0x364b, to: 0x1d3b},
-	139: {from: 0x364c, to: 0x2c31},
-	140: {from: 0x36f3, to: 0x26a},
-	141: {from: 0x38e5, to: 0xb28},
-	142: {from: 0x390f, to: 0xe91},
-	143: {from: 0x3a30, to: 0x28d},
-	144: {from: 0x3d54, to: 0x7f},
-	145: {from: 0x3f9f, to: 0x828},
-	146: {from: 0x4055, to: 0x30a},
-	147: {from: 0x4090, to: 0x3cf7},
-	148: {from: 0x410f, to: 0x13a},
-	149: {from: 0x4162, to: 0x3462},
-	150: {from: 0x4164, to: 0x86},
-	151: {from: 0x4246, to: 0x30b9},
-	152: {from: 0x427a, to: 0x2b9},
-	153: {from: 0x4361, to: 0x21a0},
-	154: {from: 0x4374, to: 0x2473},
-	155: {from: 0x43a7, to: 0x4645},
-	156: {from: 0x4445, to: 0x4437},
-	157: {from: 0x44d5, to: 0x44dc},
-	158: {from: 0x46ad, to: 0x19a},
-	159: {from: 0x473e, to: 0x2be},
-}
-
-// Size: 160 bytes, 160 elements
-var langAliasTypes = [160]langAliasType{
-	// Entry 0 - 3F
-	0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 1, 2, 1,
-	1, 2, 0, 1, 0, 1, 2, 1, 1, 0, 0, 2, 1, 1, 0, 2,
-	0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 1, 1, 0, 0, 2,
-	1, 1, 1, 1, 2, 1, 0, 1, 1, 2, 2, 0, 1, 2, 0, 1,
-	// Entry 40 - 7F
-	0, 1, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 1, 1, 1, 1,
-	1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 2, 2, 2,
-	0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0,
-	2, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 2, 1,
-	// Entry 80 - BF
-	1, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
-	2, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1,
-}
-
-const (
-	_Latn = 82
-	_Hani = 50
-	_Hans = 52
-	_Hant = 53
-	_Qaaa = 131
-	_Qaai = 139
-	_Qabx = 180
-	_Zinh = 224
-	_Zyyy = 229
-	_Zzzz = 230
-)
-
-// script is an alphabetically sorted list of ISO 15924 codes. The index
-// of the script in the string, divided by 4, is the internal scriptID.
-var script tag.Index = "" + // Size: 928 bytes
-	"----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" +
-	"BrahBraiBugiBuhdCakmCansCariChamCherCirtCoptCprtCyrlCyrsDevaDsrtDuplEgyd" +
-	"EgyhEgypElbaEthiGeokGeorGlagGothGranGrekGujrGuruHanbHangHaniHanoHansHant" +
-	"HatrHebrHiraHluwHmngHrktHungIndsItalJamoJavaJpanJurcKaliKanaKharKhmrKhoj" +
-	"KitlKitsKndaKoreKpelKthiLanaLaooLatfLatgLatnLekeLepcLimbLinaLinbLisuLoma" +
-	"LyciLydiMahjMandManiMarcMayaMendMercMeroMlymModiMongMoonMrooMteiMultMymr" +
-	"NarbNbatNewaNkgbNkooNshuOgamOlckOrkhOryaOsgeOsmaPalmPaucPermPhagPhliPhlp" +
-	"PhlvPhnxPiqdPlrdPrtiQaaaQaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaam" +
-	"QaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabe" +
-	"QabfQabgQabhQabiQabjQabkQablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabw" +
-	"QabxRjngRoroRunrSamrSaraSarbSaurSgnwShawShrdSiddSindSinhSoraSundSyloSyrc" +
-	"SyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTengTfngTglgThaaThaiTibtTirh" +
-	"UgarVaiiVispWaraWoleXpeoXsuxYiiiZinhZmthZsyeZsymZxxxZyyyZzzz\xff\xff\xff" +
-	"\xff"
-
-// suppressScript is an index from langID to the dominant script for that language,
-// if it exists.  If a script is given, it should be suppressed from the language tag.
-// Size: 713 bytes, 713 elements
-var suppressScript = [713]uint8{
-	// Entry 0 - 3F
-	0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x27, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	// Entry 40 - 7F
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
-	// Entry 80 - BF
-	0x52, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
-	0xd4, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x2d, 0x52, 0x52, 0x52, 0x00, 0x52,
-	0x00, 0x52, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
-	0x52, 0x00, 0x00, 0x00, 0x52, 0x52, 0x00, 0x52,
-	0x00, 0x00, 0x52, 0x52, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x52, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
-	// Entry C0 - FF
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x52, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x52, 0x2e, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x37, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x52,
-	0x00, 0x52, 0x52, 0x08, 0x00, 0x00, 0x00, 0x00,
-	0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
-	// Entry 100 - 13F
-	0x00, 0x00, 0x52, 0x52, 0x00, 0x37, 0x00, 0x41,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e,
-	0x00, 0x52, 0x00, 0x46, 0x00, 0x4a, 0x4b, 0x00,
-	0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	// Entry 140 - 17F
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x52, 0x4f, 0x00, 0x00,
-	0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
-	// Entry 180 - 1BF
-	0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
-	0x52, 0x00, 0x00, 0x00, 0x1e, 0x64, 0x00, 0x00,
-	0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00,
-	0x00, 0x00, 0x52, 0x52, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00,
-	0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x52,
-	0x00, 0x52, 0x00, 0x52, 0x20, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x52, 0x00, 0x52, 0x00, 0x52,
-	// Entry 1C0 - 1FF
-	0x00, 0x52, 0x00, 0x00, 0x00, 0x70, 0x52, 0x00,
-	0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x52, 0x75, 0x00, 0x00, 0x00, 0x2f,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x52,
-	0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
-	// Entry 200 - 23F
-	0x00, 0x52, 0x00, 0x52, 0x00, 0x00, 0x00, 0x1e,
-	0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0xc1, 0x00, 0x52, 0x00, 0x52, 0x00, 0x00, 0x52,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x52, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
-	// Entry 240 - 27F
-	0x52, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x52,
-	0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0xd0, 0x52, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00,
-	0x00, 0x27, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
-	0x52, 0x00, 0x52, 0x52, 0x52, 0x00, 0x52, 0x52,
-	0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
-	// Entry 280 - 2BF
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x52,
-	0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	// Entry 2C0 - 2FF
-	0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
-	0x00,
-}
-
-const (
-	_001 = 1
-	_419 = 30
-	_BR  = 64
-	_CA  = 72
-	_ES  = 109
-	_GB  = 121
-	_MD  = 186
-	_PT  = 236
-	_UK  = 304
-	_US  = 306
-	_ZZ  = 354
-	_XA  = 320
-	_XC  = 322
-	_XK  = 330
-)
-
-// isoRegionOffset needs to be added to the index of regionISO to obtain the regionID
-// for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for
-// the UN.M49 codes used for groups.)
-const isoRegionOffset = 31
-
-// regionTypes defines the status of a region for various standards.
-// Size: 355 bytes, 355 elements
-var regionTypes = [355]uint8{
-	// Entry 0 - 3F
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	// Entry 40 - 7F
-	0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x04, 0x00,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06,
-	0x04, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	// Entry 80 - BF
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x00, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
-	// Entry C0 - FF
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06,
-	0x06, 0x06, 0x00, 0x06, 0x04, 0x06, 0x06, 0x06,
-	0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06,
-	0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	// Entry 100 - 13F
-	0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06,
-	// Entry 140 - 17F
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x04, 0x06, 0x06, 0x04, 0x06, 0x06,
-	0x04, 0x06, 0x05,
-}
-
-// regionISO holds a list of alphabetically sorted 2-letter ISO region codes.
-// Each 2-letter codes is followed by two bytes with the following meaning:
-//     - [A-Z}{2}: the first letter of the 2-letter code plus these two
-//                 letters form the 3-letter ISO code.
-//     - 0, n:     index into altRegionISO3.
-var regionISO tag.Index = "" + // Size: 1300 bytes
-	"AAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLA" +
-	"AZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTN" +
-	"BUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPT" +
-	"CRRICS\x00\x00CTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADOOMDY" +
-	"HYDZZAEA  ECCUEESTEGGYEHSHERRIESSPETTHEU\x00\x03FIINFJJIFKLKFMSMFOROFQ" +
-	"\x00\x18FRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQNQGRRC" +
-	"GS\x00\x06GTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC  IDDNIERLILSRIM" +
-	"MNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM\x00\x09" +
-	"KNNAKP\x00\x0cKRORKWWTKY\x00\x0fKZAZLAAOLBBNLCCALIIELKKALRBRLSSOLTTULUUX" +
-	"LVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNPMQTQMRRT" +
-	"MSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLDNOORNPPL" +
-	"NQ\x00\x1eNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPM\x00\x12" +
-	"PNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSSQTTTQU" +
-	"\x00\x03QVVVQWWWQXXXQYYYQZZZREEURHHOROOURS\x00\x15RUUSRWWASAAUSBLBSCYCSD" +
-	"DNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXMSYYRSZ" +
-	"WZTAAATCCATDCDTF\x00\x18TGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTTTOTVUV" +
-	"TWWNTZZAUAKRUGGAUK  UMMIUSSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVNNMVUUTWFLF" +
-	"WKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXNNNXOOOXPPP" +
-	"XQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYT\x00\x1bYUUGZAAFZMMBZR" +
-	"ARZWWEZZZZ\xff\xff\xff\xff"
-
-// altRegionISO3 holds a list of 3-letter region codes that cannot be
-// mapped to 2-letter codes using the default algorithm. This is a short list.
-var altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN"
-
-// altRegionIDs holds a list of regionIDs the positions of which match those
-// of the 3-letter ISO codes in altRegionISO3.
-// Size: 22 bytes, 11 elements
-var altRegionIDs = [11]uint16{
-	0x0056, 0x006f, 0x0086, 0x00a6, 0x00a8, 0x00ab, 0x00e8, 0x0103,
-	0x011f, 0x015c, 0x00da,
-}
-
-// Size: 80 bytes, 20 elements
-var regionOldMap = [20]fromTo{
-	0:  {from: 0x43, to: 0xc2},
-	1:  {from: 0x57, to: 0xa5},
-	2:  {from: 0x5e, to: 0x5f},
-	3:  {from: 0x65, to: 0x3a},
-	4:  {from: 0x77, to: 0x76},
-	5:  {from: 0x91, to: 0x36},
-	6:  {from: 0xa1, to: 0x131},
-	7:  {from: 0xbf, to: 0x131},
-	8:  {from: 0xd5, to: 0x13c},
-	9:  {from: 0xda, to: 0x2a},
-	10: {from: 0xed, to: 0x131},
-	11: {from: 0xf0, to: 0xe0},
-	12: {from: 0xfa, to: 0x6f},
-	13: {from: 0x101, to: 0x161},
-	14: {from: 0x128, to: 0x124},
-	15: {from: 0x130, to: 0x79},
-	16: {from: 0x137, to: 0x13b},
-	17: {from: 0x13e, to: 0x131},
-	18: {from: 0x15a, to: 0x15b},
-	19: {from: 0x160, to: 0x4a},
-}
-
-// m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are
-// codes indicating collections of regions.
-// Size: 710 bytes, 355 elements
-var m49 = [355]int16{
-	// Entry 0 - 3F
-	0, 1, 2, 3, 5, 9, 11, 13,
-	14, 15, 17, 18, 19, 21, 29, 30,
-	34, 35, 39, 53, 54, 57, 61, 142,
-	143, 145, 150, 151, 154, 155, 419, 958,
-	0, 20, 784, 4, 28, 660, 8, 51,
-	530, 24, 10, 32, 16, 40, 36, 533,
-	248, 31, 70, 52, 50, 56, 854, 100,
-	48, 108, 204, 652, 60, 96, 68, 535,
-	// Entry 40 - 7F
-	76, 44, 64, 104, 74, 72, 112, 84,
-	124, 166, 180, 140, 178, 756, 384, 184,
-	152, 120, 156, 170, 0, 188, 891, 296,
-	192, 132, 531, 162, 196, 203, 278, 276,
-	0, 262, 208, 212, 214, 204, 12, 0,
-	218, 233, 818, 732, 232, 724, 231, 967,
-	246, 242, 238, 583, 234, 0, 250, 249,
-	266, 826, 308, 268, 254, 831, 288, 292,
-	// Entry 80 - BF
-	304, 270, 324, 312, 226, 300, 239, 320,
-	316, 624, 328, 344, 334, 340, 191, 332,
-	348, 854, 0, 360, 372, 376, 833, 356,
-	86, 368, 364, 352, 380, 832, 388, 400,
-	392, 581, 404, 417, 116, 296, 174, 659,
-	408, 410, 414, 136, 398, 418, 422, 662,
-	438, 144, 430, 426, 440, 442, 428, 434,
-	504, 492, 498, 499, 663, 450, 584, 581,
-	// Entry C0 - FF
-	807, 466, 104, 496, 446, 580, 474, 478,
-	500, 470, 480, 462, 454, 484, 458, 508,
-	516, 540, 562, 574, 566, 548, 558, 528,
-	578, 524, 10, 520, 536, 570, 554, 512,
-	591, 0, 604, 258, 598, 608, 586, 616,
-	666, 612, 630, 275, 620, 581, 585, 600,
-	591, 634, 959, 960, 961, 962, 963, 964,
-	965, 966, 967, 968, 969, 970, 971, 972,
-	// Entry 100 - 13F
-	638, 716, 642, 688, 643, 646, 682, 90,
-	690, 729, 752, 702, 654, 705, 744, 703,
-	694, 674, 686, 706, 740, 728, 678, 810,
-	222, 534, 760, 748, 0, 796, 148, 260,
-	768, 764, 762, 772, 626, 795, 788, 776,
-	626, 792, 780, 798, 158, 834, 804, 800,
-	826, 581, 840, 858, 860, 336, 670, 704,
-	862, 92, 850, 704, 548, 876, 581, 882,
-	// Entry 140 - 17F
-	973, 974, 975, 976, 977, 978, 979, 980,
-	981, 982, 983, 984, 985, 986, 987, 988,
-	989, 990, 991, 992, 993, 994, 995, 996,
-	997, 998, 720, 887, 175, 891, 710, 894,
-	180, 716, 999,
-}
-
-// m49Index gives indexes into fromM49 based on the three most significant bits
-// of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in
-//    fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]]
-// for an entry where the first 7 bits match the 7 lsb of the UN.M49 code.
-// The region code is stored in the 9 lsb of the indexed value.
-// Size: 18 bytes, 9 elements
-var m49Index = [9]int16{
-	0, 59, 107, 142, 180, 219, 258, 290,
-	332,
-}
-
-// fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details.
-// Size: 664 bytes, 332 elements
-var fromM49 = [332]uint16{
-	// Entry 0 - 3F
-	0x0201, 0x0402, 0x0603, 0x0823, 0x0a04, 0x1026, 0x1205, 0x142a,
-	0x1606, 0x1866, 0x1a07, 0x1c08, 0x1e09, 0x202c, 0x220a, 0x240b,
-	0x260c, 0x2821, 0x2a0d, 0x3029, 0x3824, 0x3a0e, 0x3c0f, 0x3e31,
-	0x402b, 0x4410, 0x4611, 0x482e, 0x4e12, 0x502d, 0x5841, 0x6038,
-	0x6434, 0x6627, 0x6833, 0x6a13, 0x6c14, 0x7035, 0x7215, 0x783c,
-	0x7a16, 0x8042, 0x883e, 0x8c32, 0x9045, 0x9444, 0x9840, 0xa847,
-	0xac98, 0xb507, 0xb939, 0xc03d, 0xc837, 0xd0c2, 0xd839, 0xe046,
-	0xe8a4, 0xf051, 0xf848, 0x0859, 0x10ab, 0x184b, 0x1c17, 0x1e18,
-	// Entry 40 - 7F
-	0x20b1, 0x2219, 0x291e, 0x2c1a, 0x2e1b, 0x3050, 0x341c, 0x361d,
-	0x3852, 0x3d2c, 0x445b, 0x4c49, 0x5453, 0x5ca6, 0x5f5c, 0x644c,
-	0x684a, 0x704f, 0x7855, 0x7e8e, 0x8058, 0x885c, 0x965d, 0x983a,
-	0xa062, 0xa863, 0xac64, 0xb468, 0xbd18, 0xc484, 0xcc6e, 0xce6e,
-	0xd06c, 0xd269, 0xd474, 0xdc72, 0xde86, 0xe471, 0xec70, 0xf030,
-	0xf277, 0xf476, 0xfc7c, 0x04e3, 0x091f, 0x0c61, 0x1478, 0x187b,
-	0x1c81, 0x26eb, 0x285f, 0x2c5e, 0x305f, 0x407e, 0x487f, 0x50a5,
-	0x5885, 0x6080, 0x687a, 0x7083, 0x7888, 0x8087, 0x8882, 0x908a,
-	// Entry 80 - BF
-	0x988f, 0x9c8c, 0xa135, 0xa88d, 0xb08b, 0xb890, 0xc09b, 0xc897,
-	0xd093, 0xd89a, 0xe099, 0xe894, 0xf095, 0xf89c, 0x004e, 0x089e,
-	0x10a0, 0x1cac, 0x209f, 0x28a2, 0x30a8, 0x34a9, 0x3caa, 0x42a3,
-	0x44ad, 0x461e, 0x4cae, 0x54b3, 0x58b6, 0x5cb2, 0x64b7, 0x6cb0,
-	0x70b4, 0x74b5, 0x7cc4, 0x84bd, 0x8ccc, 0x94ce, 0x9ccb, 0xa4c1,
-	0xacc9, 0xb4c6, 0xbcc7, 0xc0ca, 0xc8cd, 0xd8b9, 0xe0c3, 0xe4ba,
-	0xe6bb, 0xe8c8, 0xf0b8, 0xf8cf, 0x00df, 0x08d0, 0x10db, 0x18d9,
-	0x20d7, 0x2428, 0x265a, 0x2a2f, 0x2d19, 0x2e3f, 0x30dc, 0x38d1,
-	// Entry C0 - FF
-	0x493c, 0x54de, 0x5cd6, 0x64d2, 0x6cd4, 0x74dd, 0x7cd3, 0x84d8,
-	0x88c5, 0x8b31, 0x8e73, 0x90be, 0x92ee, 0x94e6, 0x9ee0, 0xace4,
-	0xb0ef, 0xb8e2, 0xc0e5, 0xc8e9, 0xd0e7, 0xd8ec, 0xe089, 0xe524,
-	0xecea, 0xf4f1, 0xfd00, 0x0502, 0x0704, 0x0d05, 0x183b, 0x1d0c,
-	0x26a7, 0x2825, 0x2caf, 0x2ebc, 0x34e8, 0x3d36, 0x4511, 0x4d16,
-	0x5506, 0x5d12, 0x6103, 0x6508, 0x6d10, 0x7d0b, 0x7f0f, 0x813b,
-	0x830d, 0x8513, 0x8d5e, 0x9961, 0xa15a, 0xa86d, 0xb115, 0xb309,
-	0xb86b, 0xc109, 0xc914, 0xd10e, 0xd91b, 0xe10a, 0xe84d, 0xf11a,
-	// Entry 100 - 13F
-	0xf522, 0xf921, 0x0120, 0x0923, 0x1127, 0x192a, 0x2022, 0x2926,
-	0x3129, 0x3725, 0x391d, 0x3d2b, 0x412f, 0x492e, 0x4ec0, 0x5517,
-	0x646a, 0x7479, 0x7e7d, 0x809d, 0x8296, 0x852d, 0x9132, 0xa53a,
-	0xac36, 0xb533, 0xb934, 0xbd38, 0xd93d, 0xe53f, 0xed5b, 0xef5b,
-	0xf656, 0xfd5f, 0x7c1f, 0x7ef2, 0x80f3, 0x82f4, 0x84f5, 0x86f6,
-	0x88f7, 0x8af8, 0x8cf9, 0x8e6f, 0x90fb, 0x92fc, 0x94fd, 0x96fe,
-	0x98ff, 0x9b40, 0x9d41, 0x9f42, 0xa143, 0xa344, 0xa545, 0xa746,
-	0xa947, 0xab48, 0xad49, 0xaf4a, 0xb14b, 0xb34c, 0xb54d, 0xb74e,
-	// Entry 140 - 17F
-	0xb94f, 0xbb50, 0xbd51, 0xbf52, 0xc153, 0xc354, 0xc555, 0xc756,
-	0xc957, 0xcb58, 0xcd59, 0xcf62,
-}
-
-// Size: 1444 bytes
-var variantIndex = map[string]uint8{
-	"1606nict": 0x0,
-	"1694acad": 0x1,
-	"1901":     0x2,
-	"1959acad": 0x3,
-	"1994":     0x45,
-	"1996":     0x4,
-	"abl1943":  0x5,
-	"alalc97":  0x47,
-	"aluku":    0x6,
-	"ao1990":   0x7,
-	"arevela":  0x8,
-	"arevmda":  0x9,
-	"baku1926": 0xa,
-	"balanka":  0xb,
-	"barla":    0xc,
-	"basiceng": 0xd,
-	"bauddha":  0xe,
-	"biscayan": 0xf,
-	"biske":    0x40,
-	"bohoric":  0x10,
-	"boont":    0x11,
-	"colb1945": 0x12,
-	"cornu":    0x13,
-	"dajnko":   0x14,
-	"ekavsk":   0x15,
-	"emodeng":  0x16,
-	"fonipa":   0x48,
-	"fonupa":   0x49,
-	"fonxsamp": 0x4a,
-	"hepburn":  0x17,
-	"heploc":   0x46,
-	"hognorsk": 0x18,
-	"ijekavsk": 0x19,
-	"itihasa":  0x1a,
-	"jauer":    0x1b,
-	"jyutping": 0x1c,
-	"kkcor":    0x1d,
-	"kociewie": 0x1e,
-	"kscor":    0x1f,
-	"laukika":  0x20,
-	"lipaw":    0x41,
-	"luna1918": 0x21,
-	"metelko":  0x22,
-	"monoton":  0x23,
-	"ndyuka":   0x24,
-	"nedis":    0x25,
-	"newfound": 0x26,
-	"njiva":    0x42,
-	"nulik":    0x27,
-	"osojs":    0x43,
-	"oxendict": 0x28,
-	"pamaka":   0x29,
-	"petr1708": 0x2a,
-	"pinyin":   0x2b,
-	"polyton":  0x2c,
-	"puter":    0x2d,
-	"rigik":    0x2e,
-	"rozaj":    0x2f,
-	"rumgr":    0x30,
-	"scotland": 0x31,
-	"scouse":   0x32,
-	"simple":   0x4b,
-	"solba":    0x44,
-	"sotav":    0x33,
-	"surmiran": 0x34,
-	"sursilv":  0x35,
-	"sutsilv":  0x36,
-	"tarask":   0x37,
-	"uccor":    0x38,
-	"ucrcor":   0x39,
-	"ulster":   0x3a,
-	"unifon":   0x3b,
-	"vaidika":  0x3c,
-	"valencia": 0x3d,
-	"vallader": 0x3e,
-	"wadegile": 0x3f,
-}
-
-// variantNumSpecialized is the number of specialized variants in variants.
-const variantNumSpecialized = 71
-
-// nRegionGroups is the number of region groups.
-const nRegionGroups = 32
-
-type likelyLangRegion struct {
-	lang   uint16
-	region uint16
-}
-
-// likelyScript is a lookup table, indexed by scriptID, for the most likely
-// languages and regions given a script.
-// Size: 928 bytes, 232 elements
-var likelyScript = [232]likelyLangRegion{
-	1:   {lang: 0xa6, region: 0x82},
-	3:   {lang: 0x159, region: 0x104},
-	4:   {lang: 0xc, region: 0x97},
-	5:   {lang: 0x15, region: 0x6a},
-	7:   {lang: 0x16, region: 0x9a},
-	8:   {lang: 0xf3, region: 0x27},
-	9:   {lang: 0x8, region: 0x9a},
-	10:  {lang: 0x27, region: 0x93},
-	11:  {lang: 0x2b, region: 0x51},
-	12:  {lang: 0x55, region: 0xb2},
-	13:  {lang: 0x2c, region: 0x93},
-	14:  {lang: 0x4b, region: 0x34},
-	15:  {lang: 0x20d, region: 0x97},
-	17:  {lang: 0x2c4, region: 0x12c},
-	18:  {lang: 0x1e5, region: 0x97},
-	19:  {lang: 0xaf, region: 0x76},
-	20:  {lang: 0x5b, region: 0x93},
-	21:  {lang: 0x47, region: 0xe5},
-	22:  {lang: 0x63, region: 0x34},
-	23:  {lang: 0x73, region: 0x48},
-	24:  {lang: 0x2a8, region: 0x129},
-	25:  {lang: 0x6e, region: 0x13b},
-	26:  {lang: 0x6c, region: 0x132},
-	28:  {lang: 0x71, region: 0x6a},
-	29:  {lang: 0xd0, region: 0x5c},
-	30:  {lang: 0x207, region: 0x104},
-	32:  {lang: 0xe1, region: 0x97},
-	34:  {lang: 0xaf, region: 0x76},
-	37:  {lang: 0x98, region: 0x6a},
-	38:  {lang: 0x23a, region: 0x26},
-	39:  {lang: 0x11, region: 0x6e},
-	41:  {lang: 0x111, region: 0x7b},
-	42:  {lang: 0x7d, region: 0x37},
-	43:  {lang: 0xcf, region: 0x12e},
-	44:  {lang: 0x20d, region: 0x97},
-	45:  {lang: 0x9a, region: 0x85},
-	46:  {lang: 0xd3, region: 0x97},
-	47:  {lang: 0x1d7, region: 0x97},
-	48:  {lang: 0x2c4, region: 0x12c},
-	49:  {lang: 0x136, region: 0xa9},
-	50:  {lang: 0x2c4, region: 0x52},
-	51:  {lang: 0xe9, region: 0xe5},
-	52:  {lang: 0x2c4, region: 0x52},
-	53:  {lang: 0x2c4, region: 0x12c},
-	54:  {lang: 0x18b, region: 0x99},
-	55:  {lang: 0xe0, region: 0x95},
-	56:  {lang: 0x107, region: 0xa0},
-	57:  {lang: 0xe4, region: 0x129},
-	58:  {lang: 0xe8, region: 0xad},
-	60:  {lang: 0xf2, region: 0x90},
-	62:  {lang: 0xa0, region: 0x9c},
-	63:  {lang: 0x136, region: 0xa9},
-	64:  {lang: 0x10f, region: 0x93},
-	65:  {lang: 0x107, region: 0xa0},
-	67:  {lang: 0x99, region: 0xc2},
-	68:  {lang: 0x107, region: 0xa0},
-	69:  {lang: 0x1eb, region: 0xe6},
-	70:  {lang: 0x133, region: 0xa4},
-	71:  {lang: 0x21a, region: 0x97},
-	74:  {lang: 0x135, region: 0x97},
-	75:  {lang: 0x136, region: 0xa9},
-	77:  {lang: 0x40, region: 0x97},
-	78:  {lang: 0x1c2, region: 0x121},
-	79:  {lang: 0x165, region: 0xad},
-	84:  {lang: 0x158, region: 0x97},
-	85:  {lang: 0x15c, region: 0x97},
-	86:  {lang: 0x14f, region: 0x85},
-	87:  {lang: 0xd0, region: 0x85},
-	88:  {lang: 0x15e, region: 0x52},
-	90:  {lang: 0x2aa, region: 0x129},
-	91:  {lang: 0x2ab, region: 0x129},
-	92:  {lang: 0xe1, region: 0x97},
-	93:  {lang: 0x1a8, region: 0x9a},
-	94:  {lang: 0x2ad, region: 0x52},
-	95:  {lang: 0x4c, region: 0x52},
-	97:  {lang: 0x17f, region: 0x110},
-	98:  {lang: 0x2ae, region: 0x109},
-	99:  {lang: 0x2ae, region: 0x109},
-	100: {lang: 0x18d, region: 0x97},
-	101: {lang: 0x196, region: 0x97},
-	102: {lang: 0x18f, region: 0x52},
-	104: {lang: 0x199, region: 0x34},
-	105: {lang: 0x190, region: 0x97},
-	106: {lang: 0x22b, region: 0xe6},
-	107: {lang: 0x1a5, region: 0xc2},
-	108: {lang: 0x2af, region: 0x106},
-	109: {lang: 0x16, region: 0x9f},
-	110: {lang: 0x1b5, region: 0xd9},
-	112: {lang: 0x179, region: 0x82},
-	114: {lang: 0x223, region: 0x94},
-	115: {lang: 0x212, region: 0x97},
-	116: {lang: 0x1d6, region: 0xc3},
-	117: {lang: 0x1d3, region: 0x97},
-	118: {lang: 0x1d5, region: 0x132},
-	119: {lang: 0x238, region: 0x113},
-	120: {lang: 0x16, region: 0x11a},
-	121: {lang: 0x7c, region: 0xc2},
-	122: {lang: 0x147, region: 0x104},
-	123: {lang: 0x172, region: 0x52},
-	124: {lang: 0x1d9, region: 0x9a},
-	125: {lang: 0x1d9, region: 0x52},
-	127: {lang: 0x1e3, region: 0xae},
-	129: {lang: 0xe5, region: 0x52},
-	130: {lang: 0x2b2, region: 0x9a},
-	181: {lang: 0x1f6, region: 0x93},
-	183: {lang: 0x1c4, region: 0x10a},
-	184: {lang: 0x234, region: 0x95},
-	186: {lang: 0x2b3, region: 0x15b},
-	187: {lang: 0x213, region: 0x97},
-	188: {lang: 0x1e, region: 0x132},
-	189: {lang: 0x9b, region: 0x79},
-	190: {lang: 0x20d, region: 0x97},
-	191: {lang: 0x20d, region: 0x97},
-	192: {lang: 0x21a, region: 0x97},
-	193: {lang: 0x228, region: 0xb1},
-	194: {lang: 0x23c, region: 0x97},
-	195: {lang: 0x244, region: 0x93},
-	196: {lang: 0x24e, region: 0x34},
-	197: {lang: 0x24f, region: 0x99},
-	201: {lang: 0x253, region: 0xe5},
-	202: {lang: 0x8a, region: 0x97},
-	203: {lang: 0x255, region: 0x52},
-	204: {lang: 0x126, region: 0x52},
-	205: {lang: 0x251, region: 0x97},
-	206: {lang: 0x27f, region: 0x52},
-	207: {lang: 0x48, region: 0x13b},
-	208: {lang: 0x258, region: 0x97},
-	210: {lang: 0x2c3, region: 0xb8},
-	211: {lang: 0xaa, region: 0xe5},
-	212: {lang: 0x90, region: 0xcb},
-	213: {lang: 0x25d, region: 0x121},
-	214: {lang: 0x4c, region: 0x52},
-	215: {lang: 0x177, region: 0x97},
-	216: {lang: 0x285, region: 0x11a},
-	217: {lang: 0x28e, region: 0xb2},
-	219: {lang: 0xec, region: 0x97},
-	221: {lang: 0x1e1, region: 0x9a},
-	222: {lang: 0xe, region: 0x99},
-	223: {lang: 0xfb, region: 0x52},
-}
-
-type likelyScriptRegion struct {
-	region uint16
-	script uint8
-	flags  uint8
-}
-
-// likelyLang is a lookup table, indexed by langID, for the most likely
-// scripts and regions given incomplete information. If more entries exist for a
-// given language, region and script are the index and size respectively
-// of the list in likelyLangList.
-// Size: 2852 bytes, 713 elements
-var likelyLang = [713]likelyScriptRegion{
-	0:   {region: 0x132, script: 0x52, flags: 0x0},
-	1:   {region: 0x6e, script: 0x52, flags: 0x0},
-	2:   {region: 0x7b, script: 0x1e, flags: 0x0},
-	3:   {region: 0x7e, script: 0x52, flags: 0x0},
-	4:   {region: 0x93, script: 0x52, flags: 0x0},
-	5:   {region: 0x12f, script: 0x52, flags: 0x0},
-	6:   {region: 0x7e, script: 0x52, flags: 0x0},
-	7:   {region: 0x104, script: 0x1e, flags: 0x0},
-	8:   {region: 0x9a, script: 0x9, flags: 0x0},
-	9:   {region: 0x126, script: 0x5, flags: 0x0},
-	10:  {region: 0x15e, script: 0x52, flags: 0x0},
-	11:  {region: 0x51, script: 0x52, flags: 0x0},
-	12:  {region: 0x97, script: 0x4, flags: 0x0},
-	13:  {region: 0x7e, script: 0x52, flags: 0x0},
-	14:  {region: 0x99, script: 0xde, flags: 0x0},
-	15:  {region: 0x14a, script: 0x52, flags: 0x0},
-	16:  {region: 0x104, script: 0x1e, flags: 0x0},
-	17:  {region: 0x6e, script: 0x27, flags: 0x0},
-	18:  {region: 0xd4, script: 0x52, flags: 0x0},
-	20:  {region: 0x93, script: 0x52, flags: 0x0},
-	21:  {region: 0x6a, script: 0x5, flags: 0x0},
-	22:  {region: 0x0, script: 0x3, flags: 0x1},
-	23:  {region: 0x50, script: 0x52, flags: 0x0},
-	24:  {region: 0x3e, script: 0x52, flags: 0x0},
-	25:  {region: 0x66, script: 0x5, flags: 0x0},
-	26:  {region: 0xb8, script: 0x5, flags: 0x0},
-	27:  {region: 0x6a, script: 0x5, flags: 0x0},
-	28:  {region: 0x97, script: 0xe, flags: 0x0},
-	29:  {region: 0x12d, script: 0x52, flags: 0x0},
-	30:  {region: 0x132, script: 0xbc, flags: 0x0},
-	31:  {region: 0x6d, script: 0x52, flags: 0x0},
-	32:  {region: 0x48, script: 0x52, flags: 0x0},
-	33:  {region: 0x104, script: 0x1e, flags: 0x0},
-	34:  {region: 0x97, script: 0x20, flags: 0x0},
-	35:  {region: 0x3e, script: 0x52, flags: 0x0},
-	36:  {region: 0x3, script: 0x5, flags: 0x1},
-	37:  {region: 0x104, script: 0x1e, flags: 0x0},
-	38:  {region: 0xe6, script: 0x5, flags: 0x0},
-	39:  {region: 0x93, script: 0x52, flags: 0x0},
-	40:  {region: 0xd9, script: 0x20, flags: 0x0},
-	41:  {region: 0x2d, script: 0x52, flags: 0x0},
-	42:  {region: 0x51, script: 0x52, flags: 0x0},
-	43:  {region: 0x51, script: 0xb, flags: 0x0},
-	44:  {region: 0x93, script: 0x52, flags: 0x0},
-	45:  {region: 0x51, script: 0x52, flags: 0x0},
-	46:  {region: 0x4e, script: 0x52, flags: 0x0},
-	47:  {region: 0x46, script: 0x1e, flags: 0x0},
-	48:  {region: 0x109, script: 0x5, flags: 0x0},
-	49:  {region: 0x15f, script: 0x52, flags: 0x0},
-	50:  {region: 0x93, script: 0x52, flags: 0x0},
-	51:  {region: 0x12d, script: 0x52, flags: 0x0},
-	52:  {region: 0x51, script: 0x52, flags: 0x0},
-	53:  {region: 0x97, script: 0xcd, flags: 0x0},
-	54:  {region: 0xe6, script: 0x5, flags: 0x0},
-	55:  {region: 0x97, script: 0x20, flags: 0x0},
-	56:  {region: 0x37, script: 0x1e, flags: 0x0},
-	57:  {region: 0x97, script: 0x20, flags: 0x0},
-	58:  {region: 0xe6, script: 0x5, flags: 0x0},
-	59:  {region: 0x129, script: 0x2d, flags: 0x0},
-	61:  {region: 0x97, script: 0x20, flags: 0x0},
-	62:  {region: 0x97, script: 0x20, flags: 0x0},
-	63:  {region: 0xe5, script: 0x52, flags: 0x0},
-	64:  {region: 0x97, script: 0x20, flags: 0x0},
-	65:  {region: 0x13c, script: 0x52, flags: 0x0},
-	66:  {region: 0xe5, script: 0x52, flags: 0x0},
-	67:  {region: 0xd4, script: 0x52, flags: 0x0},
-	68:  {region: 0x97, script: 0x20, flags: 0x0},
-	69:  {region: 0x93, script: 0x52, flags: 0x0},
-	70:  {region: 0x51, script: 0x52, flags: 0x0},
-	71:  {region: 0xe5, script: 0x52, flags: 0x0},
-	72:  {region: 0x13b, script: 0xcf, flags: 0x0},
-	73:  {region: 0xc1, script: 0x52, flags: 0x0},
-	74:  {region: 0xc1, script: 0x52, flags: 0x0},
-	75:  {region: 0x34, script: 0xe, flags: 0x0},
-	76:  {region: 0x52, script: 0xd6, flags: 0x0},
-	77:  {region: 0x97, script: 0xe, flags: 0x0},
-	78:  {region: 0x9a, script: 0x5, flags: 0x0},
-	79:  {region: 0x4e, script: 0x52, flags: 0x0},
-	80:  {region: 0x76, script: 0x52, flags: 0x0},
-	81:  {region: 0x97, script: 0x20, flags: 0x0},
-	82:  {region: 0xe6, script: 0x5, flags: 0x0},
-	83:  {region: 0x97, script: 0x20, flags: 0x0},
-	84:  {region: 0x32, script: 0x52, flags: 0x0},
-	85:  {region: 0xb2, script: 0xc, flags: 0x0},
-	86:  {region: 0x51, script: 0x52, flags: 0x0},
-	87:  {region: 0xe5, script: 0x52, flags: 0x0},
-	88:  {region: 0xe6, script: 0x20, flags: 0x0},
-	89:  {region: 0x104, script: 0x1e, flags: 0x0},
-	90:  {region: 0x15c, script: 0x52, flags: 0x0},
-	91:  {region: 0x93, script: 0x52, flags: 0x0},
-	92:  {region: 0x51, script: 0x52, flags: 0x0},
-	93:  {region: 0x84, script: 0x52, flags: 0x0},
-	94:  {region: 0x6c, script: 0x27, flags: 0x0},
-	95:  {region: 0x51, script: 0x52, flags: 0x0},
-	96:  {region: 0xc1, script: 0x52, flags: 0x0},
-	97:  {region: 0x6d, script: 0x52, flags: 0x0},
-	98:  {region: 0xd4, script: 0x52, flags: 0x0},
-	99:  {region: 0x8, script: 0x2, flags: 0x1},
-	100: {region: 0x104, script: 0x1e, flags: 0x0},
-	101: {region: 0xe5, script: 0x52, flags: 0x0},
-	102: {region: 0x12f, script: 0x52, flags: 0x0},
-	103: {region: 0x88, script: 0x52, flags: 0x0},
-	104: {region: 0x73, script: 0x52, flags: 0x0},
-	105: {region: 0x104, script: 0x1e, flags: 0x0},
-	106: {region: 0x132, script: 0x52, flags: 0x0},
-	107: {region: 0x48, script: 0x52, flags: 0x0},
-	108: {region: 0x132, script: 0x1a, flags: 0x0},
-	109: {region: 0xa4, script: 0x5, flags: 0x0},
-	110: {region: 0x13b, script: 0x19, flags: 0x0},
-	111: {region: 0x99, script: 0x5, flags: 0x0},
-	112: {region: 0x76, script: 0x52, flags: 0x0},
-	113: {region: 0x6a, script: 0x1c, flags: 0x0},
-	114: {region: 0xe5, script: 0x52, flags: 0x0},
-	115: {region: 0x48, script: 0x17, flags: 0x0},
-	116: {region: 0x48, script: 0x17, flags: 0x0},
-	117: {region: 0x48, script: 0x17, flags: 0x0},
-	118: {region: 0x48, script: 0x17, flags: 0x0},
-	119: {region: 0x48, script: 0x17, flags: 0x0},
-	120: {region: 0x108, script: 0x52, flags: 0x0},
-	121: {region: 0x5d, script: 0x52, flags: 0x0},
-	122: {region: 0xe7, script: 0x52, flags: 0x0},
-	123: {region: 0x48, script: 0x17, flags: 0x0},
-	124: {region: 0xc2, script: 0x79, flags: 0x0},
-	125: {region: 0xa, script: 0x2, flags: 0x1},
-	126: {region: 0x104, script: 0x1e, flags: 0x0},
-	127: {region: 0x79, script: 0x52, flags: 0x0},
-	128: {region: 0x62, script: 0x52, flags: 0x0},
-	129: {region: 0x132, script: 0x52, flags: 0x0},
-	130: {region: 0x104, script: 0x1e, flags: 0x0},
-	131: {region: 0xa2, script: 0x52, flags: 0x0},
-	132: {region: 0x97, script: 0x5, flags: 0x0},
-	133: {region: 0x5f, script: 0x52, flags: 0x0},
-	134: {region: 0x48, script: 0x52, flags: 0x0},
-	135: {region: 0x48, script: 0x52, flags: 0x0},
-	136: {region: 0xd2, script: 0x52, flags: 0x0},
-	137: {region: 0x4e, script: 0x52, flags: 0x0},
-	138: {region: 0x97, script: 0x5, flags: 0x0},
-	139: {region: 0x5f, script: 0x52, flags: 0x0},
-	140: {region: 0xc1, script: 0x52, flags: 0x0},
-	141: {region: 0xce, script: 0x52, flags: 0x0},
-	142: {region: 0xd9, script: 0x20, flags: 0x0},
-	143: {region: 0x51, script: 0x52, flags: 0x0},
-	144: {region: 0xcb, script: 0xd4, flags: 0x0},
-	145: {region: 0x112, script: 0x52, flags: 0x0},
-	146: {region: 0x36, script: 0x52, flags: 0x0},
-	147: {region: 0x42, script: 0xd6, flags: 0x0},
-	148: {region: 0xa2, script: 0x52, flags: 0x0},
-	149: {region: 0x7e, script: 0x52, flags: 0x0},
-	150: {region: 0xd4, script: 0x52, flags: 0x0},
-	151: {region: 0x9c, script: 0x52, flags: 0x0},
-	152: {region: 0x6a, script: 0x25, flags: 0x0},
-	153: {region: 0xc2, script: 0x43, flags: 0x0},
-	154: {region: 0x85, script: 0x2d, flags: 0x0},
-	155: {region: 0xc, script: 0x2, flags: 0x1},
-	156: {region: 0x1, script: 0x52, flags: 0x0},
-	157: {region: 0x6d, script: 0x52, flags: 0x0},
-	158: {region: 0x132, script: 0x52, flags: 0x0},
-	159: {region: 0x69, script: 0x52, flags: 0x0},
-	160: {region: 0x9c, script: 0x3e, flags: 0x0},
-	161: {region: 0x6d, script: 0x52, flags: 0x0},
-	162: {region: 0x51, script: 0x52, flags: 0x0},
-	163: {region: 0x6d, script: 0x52, flags: 0x0},
-	164: {region: 0x9a, script: 0x5, flags: 0x0},
-	165: {region: 0x84, script: 0x52, flags: 0x0},
-	166: {region: 0xe, script: 0x2, flags: 0x1},
-	167: {region: 0xc1, script: 0x52, flags: 0x0},
-	168: {region: 0x70, script: 0x52, flags: 0x0},
-	169: {region: 0x109, script: 0x5, flags: 0x0},
-	170: {region: 0xe5, script: 0x52, flags: 0x0},
-	171: {region: 0x10a, script: 0x52, flags: 0x0},
-	172: {region: 0x71, script: 0x52, flags: 0x0},
-	173: {region: 0x74, script: 0x52, flags: 0x0},
-	174: {region: 0x3a, script: 0x52, flags: 0x0},
-	175: {region: 0x76, script: 0x52, flags: 0x0},
-	176: {region: 0x132, script: 0x52, flags: 0x0},
-	177: {region: 0x76, script: 0x52, flags: 0x0},
-	178: {region: 0x5f, script: 0x52, flags: 0x0},
-	179: {region: 0x5f, script: 0x52, flags: 0x0},
-	180: {region: 0x13d, script: 0x52, flags: 0x0},
-	181: {region: 0xd2, script: 0x52, flags: 0x0},
-	182: {region: 0x9c, script: 0x52, flags: 0x0},
-	183: {region: 0xd4, script: 0x52, flags: 0x0},
-	184: {region: 0x109, script: 0x52, flags: 0x0},
-	185: {region: 0xd7, script: 0x52, flags: 0x0},
-	186: {region: 0x94, script: 0x52, flags: 0x0},
-	187: {region: 0x7e, script: 0x52, flags: 0x0},
-	188: {region: 0xba, script: 0x52, flags: 0x0},
-	189: {region: 0x52, script: 0x34, flags: 0x0},
-	190: {region: 0x93, script: 0x52, flags: 0x0},
-	191: {region: 0x97, script: 0x20, flags: 0x0},
-	192: {region: 0x9a, script: 0x5, flags: 0x0},
-	193: {region: 0x7c, script: 0x52, flags: 0x0},
-	194: {region: 0x79, script: 0x52, flags: 0x0},
-	195: {region: 0x6e, script: 0x27, flags: 0x0},
-	196: {region: 0xd9, script: 0x20, flags: 0x0},
-	197: {region: 0xa5, script: 0x52, flags: 0x0},
-	198: {region: 0xe6, script: 0x5, flags: 0x0},
-	199: {region: 0xe6, script: 0x5, flags: 0x0},
-	200: {region: 0x6d, script: 0x52, flags: 0x0},
-	201: {region: 0x9a, script: 0x5, flags: 0x0},
-	202: {region: 0xef, script: 0x52, flags: 0x0},
-	203: {region: 0x97, script: 0x20, flags: 0x0},
-	204: {region: 0x97, script: 0xd0, flags: 0x0},
-	205: {region: 0x93, script: 0x52, flags: 0x0},
-	206: {region: 0xd7, script: 0x52, flags: 0x0},
-	207: {region: 0x12e, script: 0x2b, flags: 0x0},
-	208: {region: 0x10, script: 0x2, flags: 0x1},
-	209: {region: 0x97, script: 0xe, flags: 0x0},
-	210: {region: 0x4d, script: 0x52, flags: 0x0},
-	211: {region: 0x97, script: 0x2e, flags: 0x0},
-	212: {region: 0x40, script: 0x52, flags: 0x0},
-	213: {region: 0x53, script: 0x52, flags: 0x0},
-	214: {region: 0x7e, script: 0x52, flags: 0x0},
-	216: {region: 0xa2, script: 0x52, flags: 0x0},
-	217: {region: 0x96, script: 0x52, flags: 0x0},
-	218: {region: 0xd9, script: 0x20, flags: 0x0},
-	219: {region: 0x48, script: 0x52, flags: 0x0},
-	220: {region: 0x12, script: 0x3, flags: 0x1},
-	221: {region: 0x52, script: 0x34, flags: 0x0},
-	222: {region: 0x132, script: 0x52, flags: 0x0},
-	223: {region: 0x23, script: 0x5, flags: 0x0},
-	224: {region: 0x95, script: 0x37, flags: 0x0},
-	225: {region: 0x97, script: 0x20, flags: 0x0},
-	226: {region: 0x71, script: 0x52, flags: 0x0},
-	227: {region: 0xe5, script: 0x52, flags: 0x0},
-	228: {region: 0x129, script: 0x39, flags: 0x0},
-	229: {region: 0x52, script: 0x81, flags: 0x0},
-	230: {region: 0xe6, script: 0x5, flags: 0x0},
-	231: {region: 0x97, script: 0x20, flags: 0x0},
-	232: {region: 0xad, script: 0x3a, flags: 0x0},
-	233: {region: 0xe5, script: 0x52, flags: 0x0},
-	234: {region: 0xe6, script: 0x5, flags: 0x0},
-	235: {region: 0xe4, script: 0x52, flags: 0x0},
-	236: {region: 0x97, script: 0x20, flags: 0x0},
-	237: {region: 0x97, script: 0x20, flags: 0x0},
-	238: {region: 0x8e, script: 0x52, flags: 0x0},
-	239: {region: 0x5f, script: 0x52, flags: 0x0},
-	240: {region: 0x52, script: 0x34, flags: 0x0},
-	241: {region: 0x8f, script: 0x52, flags: 0x0},
-	242: {region: 0x90, script: 0x52, flags: 0x0},
-	243: {region: 0x27, script: 0x8, flags: 0x0},
-	244: {region: 0xd0, script: 0x52, flags: 0x0},
-	245: {region: 0x76, script: 0x52, flags: 0x0},
-	246: {region: 0xce, script: 0x52, flags: 0x0},
-	247: {region: 0xd4, script: 0x52, flags: 0x0},
-	248: {region: 0x93, script: 0x52, flags: 0x0},
-	250: {region: 0xd4, script: 0x52, flags: 0x0},
-	251: {region: 0x52, script: 0xdf, flags: 0x0},
-	252: {region: 0x132, script: 0x52, flags: 0x0},
-	253: {region: 0x48, script: 0x52, flags: 0x0},
-	254: {region: 0xe5, script: 0x52, flags: 0x0},
-	255: {region: 0x93, script: 0x52, flags: 0x0},
-	256: {region: 0x104, script: 0x1e, flags: 0x0},
-	258: {region: 0x9b, script: 0x52, flags: 0x0},
-	259: {region: 0x9c, script: 0x52, flags: 0x0},
-	260: {region: 0x48, script: 0x17, flags: 0x0},
-	261: {region: 0x95, script: 0x37, flags: 0x0},
-	262: {region: 0x104, script: 0x52, flags: 0x0},
-	263: {region: 0xa0, script: 0x41, flags: 0x0},
-	264: {region: 0x9e, script: 0x52, flags: 0x0},
-	266: {region: 0x51, script: 0x52, flags: 0x0},
-	267: {region: 0x12e, script: 0x37, flags: 0x0},
-	268: {region: 0x12d, script: 0x52, flags: 0x0},
-	269: {region: 0xd9, script: 0x20, flags: 0x0},
-	270: {region: 0x62, script: 0x52, flags: 0x0},
-	271: {region: 0x93, script: 0x52, flags: 0x0},
-	272: {region: 0x93, script: 0x52, flags: 0x0},
-	273: {region: 0x7b, script: 0x29, flags: 0x0},
-	274: {region: 0x134, script: 0x1e, flags: 0x0},
-	275: {region: 0x66, script: 0x52, flags: 0x0},
-	276: {region: 0xc2, script: 0x52, flags: 0x0},
-	277: {region: 0xd4, script: 0x52, flags: 0x0},
-	278: {region: 0xa2, script: 0x52, flags: 0x0},
-	279: {region: 0xc1, script: 0x52, flags: 0x0},
-	280: {region: 0x104, script: 0x1e, flags: 0x0},
-	281: {region: 0xd4, script: 0x52, flags: 0x0},
-	282: {region: 0x161, script: 0x52, flags: 0x0},
-	283: {region: 0x12d, script: 0x52, flags: 0x0},
-	284: {region: 0x121, script: 0xd5, flags: 0x0},
-	285: {region: 0x59, script: 0x52, flags: 0x0},
-	286: {region: 0x51, script: 0x52, flags: 0x0},
-	287: {region: 0x4e, script: 0x52, flags: 0x0},
-	288: {region: 0x97, script: 0x20, flags: 0x0},
-	289: {region: 0x97, script: 0x20, flags: 0x0},
-	290: {region: 0x4a, script: 0x52, flags: 0x0},
-	291: {region: 0x93, script: 0x52, flags: 0x0},
-	292: {region: 0x40, script: 0x52, flags: 0x0},
-	293: {region: 0x97, script: 0x52, flags: 0x0},
-	294: {region: 0x52, script: 0xcc, flags: 0x0},
-	295: {region: 0x97, script: 0x20, flags: 0x0},
-	296: {region: 0xc1, script: 0x52, flags: 0x0},
-	297: {region: 0x97, script: 0x6b, flags: 0x0},
-	298: {region: 0xe6, script: 0x5, flags: 0x0},
-	299: {region: 0xa2, script: 0x52, flags: 0x0},
-	300: {region: 0x129, script: 0x52, flags: 0x0},
-	301: {region: 0xd0, script: 0x52, flags: 0x0},
-	302: {region: 0xad, script: 0x4f, flags: 0x0},
-	303: {region: 0x15, script: 0x6, flags: 0x1},
-	304: {region: 0x51, script: 0x52, flags: 0x0},
-	305: {region: 0x80, script: 0x52, flags: 0x0},
-	306: {region: 0xa2, script: 0x52, flags: 0x0},
-	307: {region: 0xa4, script: 0x46, flags: 0x0},
-	308: {region: 0x29, script: 0x52, flags: 0x0},
-	309: {region: 0x97, script: 0x4a, flags: 0x0},
-	310: {region: 0xa9, script: 0x4b, flags: 0x0},
-	311: {region: 0x104, script: 0x1e, flags: 0x0},
-	312: {region: 0x97, script: 0x20, flags: 0x0},
-	313: {region: 0x73, script: 0x52, flags: 0x0},
-	314: {region: 0xb2, script: 0x52, flags: 0x0},
-	316: {region: 0x104, script: 0x1e, flags: 0x0},
-	317: {region: 0x110, script: 0x52, flags: 0x0},
-	318: {region: 0xe5, script: 0x52, flags: 0x0},
-	319: {region: 0x104, script: 0x52, flags: 0x0},
-	320: {region: 0x97, script: 0x20, flags: 0x0},
-	321: {region: 0x97, script: 0x5, flags: 0x0},
-	322: {region: 0x12d, script: 0x52, flags: 0x0},
-	323: {region: 0x51, script: 0x52, flags: 0x0},
-	324: {region: 0x5f, script: 0x52, flags: 0x0},
-	325: {region: 0x1b, script: 0x3, flags: 0x1},
-	326: {region: 0x104, script: 0x1e, flags: 0x0},
-	327: {region: 0x104, script: 0x1e, flags: 0x0},
-	328: {region: 0x93, script: 0x52, flags: 0x0},
-	329: {region: 0xe6, script: 0x5, flags: 0x0},
-	330: {region: 0x79, script: 0x52, flags: 0x0},
-	331: {region: 0x121, script: 0xd5, flags: 0x0},
-	332: {region: 0xe6, script: 0x5, flags: 0x0},
-	333: {region: 0x1e, script: 0x5, flags: 0x1},
-	334: {region: 0x135, script: 0x52, flags: 0x0},
-	335: {region: 0x85, script: 0x56, flags: 0x0},
-	336: {region: 0x95, script: 0x37, flags: 0x0},
-	337: {region: 0x12d, script: 0x52, flags: 0x0},
-	338: {region: 0xe6, script: 0x5, flags: 0x0},
-	339: {region: 0x12f, script: 0x52, flags: 0x0},
-	340: {region: 0xb5, script: 0x52, flags: 0x0},
-	341: {region: 0x104, script: 0x1e, flags: 0x0},
-	342: {region: 0x93, script: 0x52, flags: 0x0},
-	343: {region: 0x52, script: 0xd5, flags: 0x0},
-	344: {region: 0x97, script: 0x54, flags: 0x0},
-	345: {region: 0x104, script: 0x1e, flags: 0x0},
-	346: {region: 0x12f, script: 0x52, flags: 0x0},
-	347: {region: 0xd7, script: 0x52, flags: 0x0},
-	348: {region: 0x23, script: 0x2, flags: 0x1},
-	349: {region: 0x9c, script: 0x52, flags: 0x0},
-	350: {region: 0x52, script: 0x58, flags: 0x0},
-	351: {region: 0x93, script: 0x52, flags: 0x0},
-	352: {region: 0x9a, script: 0x5, flags: 0x0},
-	353: {region: 0x132, script: 0x52, flags: 0x0},
-	354: {region: 0x97, script: 0xd0, flags: 0x0},
-	355: {region: 0x9c, script: 0x52, flags: 0x0},
-	356: {region: 0x4a, script: 0x52, flags: 0x0},
-	357: {region: 0xad, script: 0x4f, flags: 0x0},
-	358: {region: 0x4a, script: 0x52, flags: 0x0},
-	359: {region: 0x15f, script: 0x52, flags: 0x0},
-	360: {region: 0x9a, script: 0x5, flags: 0x0},
-	361: {region: 0xb4, script: 0x52, flags: 0x0},
-	362: {region: 0xb6, script: 0x52, flags: 0x0},
-	363: {region: 0x4a, script: 0x52, flags: 0x0},
-	364: {region: 0x4a, script: 0x52, flags: 0x0},
-	365: {region: 0xa2, script: 0x52, flags: 0x0},
-	366: {region: 0xa2, script: 0x52, flags: 0x0},
-	367: {region: 0x9a, script: 0x5, flags: 0x0},
-	368: {region: 0xb6, script: 0x52, flags: 0x0},
-	369: {region: 0x121, script: 0xd5, flags: 0x0},
-	370: {region: 0x52, script: 0x34, flags: 0x0},
-	371: {region: 0x129, script: 0x52, flags: 0x0},
-	372: {region: 0x93, script: 0x52, flags: 0x0},
-	373: {region: 0x51, script: 0x52, flags: 0x0},
-	374: {region: 0x97, script: 0x20, flags: 0x0},
-	375: {region: 0x97, script: 0x20, flags: 0x0},
-	376: {region: 0x93, script: 0x52, flags: 0x0},
-	377: {region: 0x25, script: 0x3, flags: 0x1},
-	378: {region: 0xa2, script: 0x52, flags: 0x0},
-	379: {region: 0xcd, script: 0x52, flags: 0x0},
-	380: {region: 0x104, script: 0x1e, flags: 0x0},
-	381: {region: 0xe5, script: 0x52, flags: 0x0},
-	382: {region: 0x93, script: 0x52, flags: 0x0},
-	383: {region: 0x110, script: 0x52, flags: 0x0},
-	384: {region: 0xa2, script: 0x52, flags: 0x0},
-	385: {region: 0x121, script: 0x5, flags: 0x0},
-	386: {region: 0xca, script: 0x52, flags: 0x0},
-	387: {region: 0xbd, script: 0x52, flags: 0x0},
-	388: {region: 0xcf, script: 0x52, flags: 0x0},
-	389: {region: 0x51, script: 0x52, flags: 0x0},
-	390: {region: 0xd9, script: 0x20, flags: 0x0},
-	391: {region: 0x12d, script: 0x52, flags: 0x0},
-	392: {region: 0xbe, script: 0x52, flags: 0x0},
-	393: {region: 0xde, script: 0x52, flags: 0x0},
-	394: {region: 0x93, script: 0x52, flags: 0x0},
-	395: {region: 0x99, script: 0x36, flags: 0x0},
-	396: {region: 0xc0, script: 0x1e, flags: 0x0},
-	397: {region: 0x97, script: 0x64, flags: 0x0},
-	398: {region: 0x109, script: 0x52, flags: 0x0},
-	399: {region: 0x28, script: 0x3, flags: 0x1},
-	400: {region: 0x97, script: 0xe, flags: 0x0},
-	401: {region: 0xc2, script: 0x6b, flags: 0x0},
-	403: {region: 0x48, script: 0x52, flags: 0x0},
-	404: {region: 0x48, script: 0x52, flags: 0x0},
-	405: {region: 0x36, script: 0x52, flags: 0x0},
-	406: {region: 0x97, script: 0x20, flags: 0x0},
-	407: {region: 0xd9, script: 0x20, flags: 0x0},
-	408: {region: 0x104, script: 0x1e, flags: 0x0},
-	409: {region: 0x34, script: 0x68, flags: 0x0},
-	410: {region: 0x2b, script: 0x3, flags: 0x1},
-	411: {region: 0xc9, script: 0x52, flags: 0x0},
-	412: {region: 0x97, script: 0x20, flags: 0x0},
-	413: {region: 0x51, script: 0x52, flags: 0x0},
-	415: {region: 0x132, script: 0x52, flags: 0x0},
-	416: {region: 0xe6, script: 0x5, flags: 0x0},
-	417: {region: 0xc1, script: 0x52, flags: 0x0},
-	418: {region: 0x97, script: 0x20, flags: 0x0},
-	419: {region: 0x93, script: 0x52, flags: 0x0},
-	420: {region: 0x161, script: 0x52, flags: 0x0},
-	421: {region: 0xc2, script: 0x6b, flags: 0x0},
-	422: {region: 0x104, script: 0x1e, flags: 0x0},
-	423: {region: 0x12f, script: 0x52, flags: 0x0},
-	424: {region: 0x9a, script: 0x5d, flags: 0x0},
-	425: {region: 0x9a, script: 0x5, flags: 0x0},
-	426: {region: 0xdb, script: 0x52, flags: 0x0},
-	428: {region: 0x52, script: 0x34, flags: 0x0},
-	429: {region: 0x9c, script: 0x52, flags: 0x0},
-	430: {region: 0xd0, script: 0x52, flags: 0x0},
-	431: {region: 0xd8, script: 0x52, flags: 0x0},
-	432: {region: 0xcd, script: 0x52, flags: 0x0},
-	433: {region: 0x161, script: 0x52, flags: 0x0},
-	434: {region: 0xcf, script: 0x52, flags: 0x0},
-	435: {region: 0x5f, script: 0x52, flags: 0x0},
-	436: {region: 0xd9, script: 0x20, flags: 0x0},
-	437: {region: 0xd9, script: 0x20, flags: 0x0},
-	438: {region: 0xd0, script: 0x52, flags: 0x0},
-	439: {region: 0xcf, script: 0x52, flags: 0x0},
-	440: {region: 0xcd, script: 0x52, flags: 0x0},
-	441: {region: 0xcd, script: 0x52, flags: 0x0},
-	442: {region: 0x93, script: 0x52, flags: 0x0},
-	443: {region: 0xdd, script: 0x52, flags: 0x0},
-	444: {region: 0x97, script: 0x52, flags: 0x0},
-	445: {region: 0xd7, script: 0x52, flags: 0x0},
-	446: {region: 0x51, script: 0x52, flags: 0x0},
-	447: {region: 0xd8, script: 0x52, flags: 0x0},
-	448: {region: 0x51, script: 0x52, flags: 0x0},
-	449: {region: 0xd8, script: 0x52, flags: 0x0},
-	450: {region: 0x121, script: 0x4e, flags: 0x0},
-	451: {region: 0x97, script: 0x20, flags: 0x0},
-	452: {region: 0x10a, script: 0xb7, flags: 0x0},
-	453: {region: 0x82, script: 0x70, flags: 0x0},
-	454: {region: 0x15e, script: 0x52, flags: 0x0},
-	455: {region: 0x48, script: 0x17, flags: 0x0},
-	456: {region: 0x15e, script: 0x52, flags: 0x0},
-	457: {region: 0x115, script: 0x52, flags: 0x0},
-	458: {region: 0x132, script: 0x52, flags: 0x0},
-	459: {region: 0x52, script: 0x52, flags: 0x0},
-	460: {region: 0xcc, script: 0x52, flags: 0x0},
-	461: {region: 0x12d, script: 0x52, flags: 0x0},
-	462: {region: 0x12f, script: 0x52, flags: 0x0},
-	463: {region: 0x7e, script: 0x52, flags: 0x0},
-	464: {region: 0x76, script: 0x52, flags: 0x0},
-	466: {region: 0x6e, script: 0x52, flags: 0x0},
-	467: {region: 0x97, script: 0x75, flags: 0x0},
-	468: {region: 0x7b, script: 0x1e, flags: 0x0},
-	469: {region: 0x132, script: 0x76, flags: 0x0},
-	470: {region: 0xc3, script: 0x74, flags: 0x0},
-	471: {region: 0x2e, script: 0x3, flags: 0x1},
-	472: {region: 0xe5, script: 0x52, flags: 0x0},
-	473: {region: 0x31, script: 0x2, flags: 0x1},
-	474: {region: 0xe5, script: 0x52, flags: 0x0},
-	475: {region: 0x2f, script: 0x52, flags: 0x0},
-	476: {region: 0xee, script: 0x52, flags: 0x0},
-	477: {region: 0x76, script: 0x52, flags: 0x0},
-	478: {region: 0xd4, script: 0x52, flags: 0x0},
-	479: {region: 0x132, script: 0x52, flags: 0x0},
-	480: {region: 0x48, script: 0x52, flags: 0x0},
-	481: {region: 0x9a, script: 0xdd, flags: 0x0},
-	482: {region: 0x5f, script: 0x52, flags: 0x0},
-	483: {region: 0xae, script: 0x7f, flags: 0x0},
-	485: {region: 0x97, script: 0x12, flags: 0x0},
-	486: {region: 0xa2, script: 0x52, flags: 0x0},
-	487: {region: 0xe7, script: 0x52, flags: 0x0},
-	488: {region: 0x9c, script: 0x52, flags: 0x0},
-	489: {region: 0x85, script: 0x2d, flags: 0x0},
-	490: {region: 0x73, script: 0x52, flags: 0x0},
-	491: {region: 0xe6, script: 0x45, flags: 0x0},
-	492: {region: 0x9a, script: 0x5, flags: 0x0},
-	493: {region: 0x1, script: 0x52, flags: 0x0},
-	494: {region: 0x23, script: 0x5, flags: 0x0},
-	495: {region: 0x40, script: 0x52, flags: 0x0},
-	496: {region: 0x78, script: 0x52, flags: 0x0},
-	497: {region: 0xe2, script: 0x52, flags: 0x0},
-	498: {region: 0x87, script: 0x52, flags: 0x0},
-	499: {region: 0x68, script: 0x52, flags: 0x0},
-	500: {region: 0x97, script: 0x20, flags: 0x0},
-	501: {region: 0x100, script: 0x52, flags: 0x0},
-	502: {region: 0x93, script: 0x52, flags: 0x0},
-	503: {region: 0x9c, script: 0x52, flags: 0x0},
-	504: {region: 0x97, script: 0x52, flags: 0x0},
-	505: {region: 0x33, script: 0x2, flags: 0x1},
-	506: {region: 0xd9, script: 0x20, flags: 0x0},
-	507: {region: 0x34, script: 0xe, flags: 0x0},
-	508: {region: 0x4d, script: 0x52, flags: 0x0},
-	509: {region: 0x70, script: 0x52, flags: 0x0},
-	510: {region: 0x4d, script: 0x52, flags: 0x0},
-	511: {region: 0x9a, script: 0x5, flags: 0x0},
-	512: {region: 0x10a, script: 0x52, flags: 0x0},
-	513: {region: 0x39, script: 0x52, flags: 0x0},
-	514: {region: 0xcf, script: 0x52, flags: 0x0},
-	515: {region: 0x102, script: 0x52, flags: 0x0},
-	516: {region: 0x93, script: 0x52, flags: 0x0},
-	517: {region: 0x12d, script: 0x52, flags: 0x0},
-	518: {region: 0x71, script: 0x52, flags: 0x0},
-	519: {region: 0x104, script: 0x1e, flags: 0x0},
-	520: {region: 0x12e, script: 0x1e, flags: 0x0},
-	521: {region: 0x107, script: 0x52, flags: 0x0},
-	522: {region: 0x105, script: 0x52, flags: 0x0},
-	523: {region: 0x12d, script: 0x52, flags: 0x0},
-	524: {region: 0xa0, script: 0x44, flags: 0x0},
-	525: {region: 0x97, script: 0x20, flags: 0x0},
-	526: {region: 0x7e, script: 0x52, flags: 0x0},
-	527: {region: 0x104, script: 0x1e, flags: 0x0},
-	528: {region: 0xa2, script: 0x52, flags: 0x0},
-	529: {region: 0x93, script: 0x52, flags: 0x0},
-	530: {region: 0x97, script: 0x52, flags: 0x0},
-	531: {region: 0x97, script: 0xbb, flags: 0x0},
-	532: {region: 0x12d, script: 0x52, flags: 0x0},
-	533: {region: 0x9c, script: 0x52, flags: 0x0},
-	534: {region: 0x97, script: 0x20, flags: 0x0},
-	535: {region: 0x9c, script: 0x52, flags: 0x0},
-	536: {region: 0x79, script: 0x52, flags: 0x0},
-	537: {region: 0x48, script: 0x52, flags: 0x0},
-	538: {region: 0x35, script: 0x4, flags: 0x1},
-	539: {region: 0x9c, script: 0x52, flags: 0x0},
-	540: {region: 0x9a, script: 0x5, flags: 0x0},
-	541: {region: 0xd8, script: 0x52, flags: 0x0},
-	542: {region: 0x4e, script: 0x52, flags: 0x0},
-	543: {region: 0xcf, script: 0x52, flags: 0x0},
-	544: {region: 0xcd, script: 0x52, flags: 0x0},
-	545: {region: 0xc1, script: 0x52, flags: 0x0},
-	546: {region: 0x4b, script: 0x52, flags: 0x0},
-	547: {region: 0x94, script: 0x72, flags: 0x0},
-	548: {region: 0xb4, script: 0x52, flags: 0x0},
-	550: {region: 0xb8, script: 0xd2, flags: 0x0},
-	551: {region: 0xc2, script: 0x6b, flags: 0x0},
-	552: {region: 0xb1, script: 0xc1, flags: 0x0},
-	553: {region: 0x6e, script: 0x52, flags: 0x0},
-	554: {region: 0x10f, script: 0x52, flags: 0x0},
-	555: {region: 0xe6, script: 0x5, flags: 0x0},
-	556: {region: 0x10d, script: 0x52, flags: 0x0},
-	557: {region: 0xe7, script: 0x52, flags: 0x0},
-	558: {region: 0x93, script: 0x52, flags: 0x0},
-	559: {region: 0x13f, script: 0x52, flags: 0x0},
-	560: {region: 0x10a, script: 0x52, flags: 0x0},
-	562: {region: 0x10a, script: 0x52, flags: 0x0},
-	563: {region: 0x70, script: 0x52, flags: 0x0},
-	564: {region: 0x95, script: 0xb8, flags: 0x0},
-	565: {region: 0x70, script: 0x52, flags: 0x0},
-	566: {region: 0x161, script: 0x52, flags: 0x0},
-	567: {region: 0xc1, script: 0x52, flags: 0x0},
-	568: {region: 0x113, script: 0x52, flags: 0x0},
-	569: {region: 0x121, script: 0xd5, flags: 0x0},
-	570: {region: 0x26, script: 0x52, flags: 0x0},
-	571: {region: 0x39, script: 0x5, flags: 0x1},
-	572: {region: 0x97, script: 0xc2, flags: 0x0},
-	573: {region: 0x114, script: 0x52, flags: 0x0},
-	574: {region: 0x112, script: 0x52, flags: 0x0},
-	575: {region: 0x97, script: 0x20, flags: 0x0},
-	576: {region: 0x15e, script: 0x52, flags: 0x0},
-	577: {region: 0x6c, script: 0x52, flags: 0x0},
-	578: {region: 0x15e, script: 0x52, flags: 0x0},
-	579: {region: 0x5f, script: 0x52, flags: 0x0},
-	580: {region: 0x93, script: 0x52, flags: 0x0},
-	581: {region: 0x12d, script: 0x52, flags: 0x0},
-	582: {region: 0x82, script: 0x52, flags: 0x0},
-	583: {region: 0x10a, script: 0x52, flags: 0x0},
-	584: {region: 0x12d, script: 0x52, flags: 0x0},
-	585: {region: 0x15c, script: 0x5, flags: 0x0},
-	586: {region: 0x4a, script: 0x52, flags: 0x0},
-	587: {region: 0x5f, script: 0x52, flags: 0x0},
-	588: {region: 0x97, script: 0x20, flags: 0x0},
-	589: {region: 0x93, script: 0x52, flags: 0x0},
-	590: {region: 0x34, script: 0xe, flags: 0x0},
-	591: {region: 0x99, script: 0xc5, flags: 0x0},
-	592: {region: 0xe7, script: 0x52, flags: 0x0},
-	593: {region: 0x97, script: 0xcd, flags: 0x0},
-	594: {region: 0xd9, script: 0x20, flags: 0x0},
-	595: {region: 0xe5, script: 0x52, flags: 0x0},
-	596: {region: 0x97, script: 0x4a, flags: 0x0},
-	597: {region: 0x52, script: 0xcb, flags: 0x0},
-	598: {region: 0xd9, script: 0x20, flags: 0x0},
-	599: {region: 0xd9, script: 0x20, flags: 0x0},
-	600: {region: 0x97, script: 0xd0, flags: 0x0},
-	601: {region: 0x110, script: 0x52, flags: 0x0},
-	602: {region: 0x12f, script: 0x52, flags: 0x0},
-	603: {region: 0x124, script: 0x52, flags: 0x0},
-	604: {region: 0x3e, script: 0x3, flags: 0x1},
-	605: {region: 0x121, script: 0xd5, flags: 0x0},
-	606: {region: 0xd9, script: 0x20, flags: 0x0},
-	607: {region: 0xd9, script: 0x20, flags: 0x0},
-	608: {region: 0xd9, script: 0x20, flags: 0x0},
-	609: {region: 0x6e, script: 0x27, flags: 0x0},
-	610: {region: 0x6c, script: 0x27, flags: 0x0},
-	611: {region: 0xd4, script: 0x52, flags: 0x0},
-	612: {region: 0x125, script: 0x52, flags: 0x0},
-	613: {region: 0x123, script: 0x52, flags: 0x0},
-	614: {region: 0x31, script: 0x52, flags: 0x0},
-	615: {region: 0xd9, script: 0x20, flags: 0x0},
-	616: {region: 0xe5, script: 0x52, flags: 0x0},
-	617: {region: 0x31, script: 0x52, flags: 0x0},
-	618: {region: 0xd2, script: 0x52, flags: 0x0},
-	619: {region: 0x15e, script: 0x52, flags: 0x0},
-	620: {region: 0x127, script: 0x52, flags: 0x0},
-	621: {region: 0xcc, script: 0x52, flags: 0x0},
-	622: {region: 0xe4, script: 0x52, flags: 0x0},
-	623: {region: 0x129, script: 0x52, flags: 0x0},
-	624: {region: 0x129, script: 0x52, flags: 0x0},
-	625: {region: 0x12c, script: 0x52, flags: 0x0},
-	626: {region: 0x15e, script: 0x52, flags: 0x0},
-	627: {region: 0x85, script: 0x2d, flags: 0x0},
-	628: {region: 0xd9, script: 0x20, flags: 0x0},
-	629: {region: 0xe5, script: 0x52, flags: 0x0},
-	630: {region: 0x42, script: 0xd6, flags: 0x0},
-	631: {region: 0x104, script: 0x1e, flags: 0x0},
-	632: {region: 0x12f, script: 0x52, flags: 0x0},
-	633: {region: 0x121, script: 0xd5, flags: 0x0},
-	634: {region: 0x31, script: 0x52, flags: 0x0},
-	635: {region: 0xcc, script: 0x52, flags: 0x0},
-	636: {region: 0x12b, script: 0x52, flags: 0x0},
-	638: {region: 0xd2, script: 0x52, flags: 0x0},
-	639: {region: 0x52, script: 0xce, flags: 0x0},
-	640: {region: 0xe3, script: 0x52, flags: 0x0},
-	641: {region: 0x104, script: 0x1e, flags: 0x0},
-	642: {region: 0xb8, script: 0x52, flags: 0x0},
-	643: {region: 0x104, script: 0x1e, flags: 0x0},
-	644: {region: 0x41, script: 0x4, flags: 0x1},
-	645: {region: 0x11a, script: 0xd8, flags: 0x0},
-	646: {region: 0x12e, script: 0x1e, flags: 0x0},
-	647: {region: 0x73, script: 0x52, flags: 0x0},
-	648: {region: 0x29, script: 0x52, flags: 0x0},
-	650: {region: 0x45, script: 0x3, flags: 0x1},
-	651: {region: 0x97, script: 0xe, flags: 0x0},
-	652: {region: 0xe6, script: 0x5, flags: 0x0},
-	653: {region: 0x48, script: 0x4, flags: 0x1},
-	654: {region: 0xb2, script: 0xd9, flags: 0x0},
-	655: {region: 0x15e, script: 0x52, flags: 0x0},
-	656: {region: 0x9c, script: 0x52, flags: 0x0},
-	657: {region: 0x104, script: 0x52, flags: 0x0},
-	658: {region: 0x13b, script: 0x52, flags: 0x0},
-	659: {region: 0x119, script: 0x52, flags: 0x0},
-	660: {region: 0x35, script: 0x52, flags: 0x0},
-	661: {region: 0x5f, script: 0x52, flags: 0x0},
-	662: {region: 0xcf, script: 0x52, flags: 0x0},
-	663: {region: 0x1, script: 0x52, flags: 0x0},
-	664: {region: 0x104, script: 0x52, flags: 0x0},
-	665: {region: 0x69, script: 0x52, flags: 0x0},
-	666: {region: 0x12d, script: 0x52, flags: 0x0},
-	667: {region: 0x35, script: 0x52, flags: 0x0},
-	668: {region: 0x4d, script: 0x52, flags: 0x0},
-	669: {region: 0x6e, script: 0x27, flags: 0x0},
-	670: {region: 0xe5, script: 0x52, flags: 0x0},
-	671: {region: 0x2e, script: 0x52, flags: 0x0},
-	672: {region: 0x97, script: 0xd0, flags: 0x0},
-	673: {region: 0x97, script: 0x20, flags: 0x0},
-	674: {region: 0x13d, script: 0x52, flags: 0x0},
-	675: {region: 0xa6, script: 0x5, flags: 0x0},
-	676: {region: 0x112, script: 0x52, flags: 0x0},
-	677: {region: 0x97, script: 0x20, flags: 0x0},
-	678: {region: 0x52, script: 0x34, flags: 0x0},
-	679: {region: 0x40, script: 0x52, flags: 0x0},
-	680: {region: 0x129, script: 0x18, flags: 0x0},
-	681: {region: 0x15e, script: 0x52, flags: 0x0},
-	682: {region: 0x129, script: 0x5a, flags: 0x0},
-	683: {region: 0x129, script: 0x5b, flags: 0x0},
-	684: {region: 0x7b, script: 0x29, flags: 0x0},
-	685: {region: 0x52, script: 0x5e, flags: 0x0},
-	686: {region: 0x109, script: 0x62, flags: 0x0},
-	687: {region: 0x106, script: 0x6c, flags: 0x0},
-	688: {region: 0x97, script: 0x20, flags: 0x0},
-	689: {region: 0x12f, script: 0x52, flags: 0x0},
-	690: {region: 0x9a, script: 0x82, flags: 0x0},
-	691: {region: 0x15b, script: 0xba, flags: 0x0},
-	692: {region: 0xd9, script: 0x20, flags: 0x0},
-	693: {region: 0xcf, script: 0x52, flags: 0x0},
-	694: {region: 0x73, script: 0x52, flags: 0x0},
-	695: {region: 0x51, script: 0x52, flags: 0x0},
-	696: {region: 0x51, script: 0x52, flags: 0x0},
-	697: {region: 0x1, script: 0x37, flags: 0x0},
-	698: {region: 0xd4, script: 0x52, flags: 0x0},
-	699: {region: 0x40, script: 0x52, flags: 0x0},
-	700: {region: 0xcd, script: 0x52, flags: 0x0},
-	701: {region: 0x4c, script: 0x3, flags: 0x1},
-	702: {region: 0x52, script: 0x52, flags: 0x0},
-	703: {region: 0x109, script: 0x52, flags: 0x0},
-	705: {region: 0xa6, script: 0x5, flags: 0x0},
-	706: {region: 0xd7, script: 0x52, flags: 0x0},
-	707: {region: 0xb8, script: 0xd2, flags: 0x0},
-	708: {region: 0x4f, script: 0x14, flags: 0x1},
-	709: {region: 0xce, script: 0x52, flags: 0x0},
-	710: {region: 0x15e, script: 0x52, flags: 0x0},
-	712: {region: 0x129, script: 0x52, flags: 0x0},
-}
-
-// likelyLangList holds lists info associated with likelyLang.
-// Size: 396 bytes, 99 elements
-var likelyLangList = [99]likelyScriptRegion{
-	0:  {region: 0x9a, script: 0x7, flags: 0x0},
-	1:  {region: 0x9f, script: 0x6d, flags: 0x2},
-	2:  {region: 0x11a, script: 0x78, flags: 0x2},
-	3:  {region: 0x31, script: 0x52, flags: 0x0},
-	4:  {region: 0x99, script: 0x5, flags: 0x4},
-	5:  {region: 0x9a, script: 0x5, flags: 0x4},
-	6:  {region: 0x104, script: 0x1e, flags: 0x4},
-	7:  {region: 0x9a, script: 0x5, flags: 0x2},
-	8:  {region: 0x97, script: 0xe, flags: 0x0},
-	9:  {region: 0x34, script: 0x16, flags: 0x2},
-	10: {region: 0x104, script: 0x1e, flags: 0x0},
-	11: {region: 0x37, script: 0x2a, flags: 0x2},
-	12: {region: 0x132, script: 0x52, flags: 0x0},
-	13: {region: 0x79, script: 0xbd, flags: 0x2},
-	14: {region: 0x112, script: 0x52, flags: 0x0},
-	15: {region: 0x82, script: 0x1, flags: 0x2},
-	16: {region: 0x5c, script: 0x1d, flags: 0x0},
-	17: {region: 0x85, script: 0x57, flags: 0x2},
-	18: {region: 0xd4, script: 0x52, flags: 0x0},
-	19: {region: 0x51, script: 0x5, flags: 0x4},
-	20: {region: 0x109, script: 0x5, flags: 0x4},
-	21: {region: 0xac, script: 0x1e, flags: 0x0},
-	22: {region: 0x23, script: 0x5, flags: 0x4},
-	23: {region: 0x52, script: 0x5, flags: 0x4},
-	24: {region: 0x9a, script: 0x5, flags: 0x4},
-	25: {region: 0xc3, script: 0x5, flags: 0x4},
-	26: {region: 0x52, script: 0x5, flags: 0x2},
-	27: {region: 0x129, script: 0x52, flags: 0x0},
-	28: {region: 0xae, script: 0x5, flags: 0x4},
-	29: {region: 0x99, script: 0x5, flags: 0x2},
-	30: {region: 0xa3, script: 0x1e, flags: 0x0},
-	31: {region: 0x52, script: 0x5, flags: 0x4},
-	32: {region: 0x129, script: 0x52, flags: 0x4},
-	33: {region: 0x52, script: 0x5, flags: 0x2},
-	34: {region: 0x129, script: 0x52, flags: 0x2},
-	35: {region: 0xd9, script: 0x20, flags: 0x0},
-	36: {region: 0x97, script: 0x55, flags: 0x2},
-	37: {region: 0x81, script: 0x52, flags: 0x0},
-	38: {region: 0x82, script: 0x70, flags: 0x4},
-	39: {region: 0x82, script: 0x70, flags: 0x2},
-	40: {region: 0xc3, script: 0x1e, flags: 0x0},
-	41: {region: 0x52, script: 0x66, flags: 0x4},
-	42: {region: 0x52, script: 0x66, flags: 0x2},
-	43: {region: 0xce, script: 0x52, flags: 0x0},
-	44: {region: 0x49, script: 0x5, flags: 0x4},
-	45: {region: 0x93, script: 0x5, flags: 0x4},
-	46: {region: 0x97, script: 0x2f, flags: 0x0},
-	47: {region: 0xe6, script: 0x5, flags: 0x4},
-	48: {region: 0xe6, script: 0x5, flags: 0x2},
-	49: {region: 0x9a, script: 0x7c, flags: 0x0},
-	50: {region: 0x52, script: 0x7d, flags: 0x2},
-	51: {region: 0xb8, script: 0xd2, flags: 0x0},
-	52: {region: 0xd7, script: 0x52, flags: 0x4},
-	53: {region: 0xe6, script: 0x5, flags: 0x0},
-	54: {region: 0x97, script: 0x20, flags: 0x2},
-	55: {region: 0x97, script: 0x47, flags: 0x2},
-	56: {region: 0x97, script: 0xc0, flags: 0x2},
-	57: {region: 0x103, script: 0x1e, flags: 0x0},
-	58: {region: 0xbb, script: 0x52, flags: 0x4},
-	59: {region: 0x102, script: 0x52, flags: 0x4},
-	60: {region: 0x104, script: 0x52, flags: 0x4},
-	61: {region: 0x129, script: 0x52, flags: 0x4},
-	62: {region: 0x122, script: 0x1e, flags: 0x0},
-	63: {region: 0xe6, script: 0x5, flags: 0x4},
-	64: {region: 0xe6, script: 0x5, flags: 0x2},
-	65: {region: 0x52, script: 0x5, flags: 0x0},
-	66: {region: 0xac, script: 0x1e, flags: 0x4},
-	67: {region: 0xc3, script: 0x1e, flags: 0x4},
-	68: {region: 0xac, script: 0x1e, flags: 0x2},
-	69: {region: 0x97, script: 0xe, flags: 0x0},
-	70: {region: 0xd9, script: 0x20, flags: 0x4},
-	71: {region: 0xd9, script: 0x20, flags: 0x2},
-	72: {region: 0x134, script: 0x52, flags: 0x0},
-	73: {region: 0x23, script: 0x5, flags: 0x4},
-	74: {region: 0x52, script: 0x1e, flags: 0x4},
-	75: {region: 0x23, script: 0x5, flags: 0x2},
-	76: {region: 0x8b, script: 0x35, flags: 0x0},
-	77: {region: 0x52, script: 0x34, flags: 0x4},
-	78: {region: 0x52, script: 0x34, flags: 0x2},
-	79: {region: 0x52, script: 0x34, flags: 0x0},
-	80: {region: 0x2e, script: 0x35, flags: 0x4},
-	81: {region: 0x3d, script: 0x35, flags: 0x4},
-	82: {region: 0x79, script: 0x35, flags: 0x4},
-	83: {region: 0x7c, script: 0x35, flags: 0x4},
-	84: {region: 0x8b, script: 0x35, flags: 0x4},
-	85: {region: 0x93, script: 0x35, flags: 0x4},
-	86: {region: 0xc4, script: 0x35, flags: 0x4},
-	87: {region: 0xce, script: 0x35, flags: 0x4},
-	88: {region: 0xe0, script: 0x35, flags: 0x4},
-	89: {region: 0xe3, script: 0x35, flags: 0x4},
-	90: {region: 0xe5, script: 0x35, flags: 0x4},
-	91: {region: 0x114, script: 0x35, flags: 0x4},
-	92: {region: 0x121, script: 0x35, flags: 0x4},
-	93: {region: 0x12c, script: 0x35, flags: 0x4},
-	94: {region: 0x132, script: 0x35, flags: 0x4},
-	95: {region: 0x13b, script: 0x35, flags: 0x4},
-	96: {region: 0x12c, script: 0x11, flags: 0x2},
-	97: {region: 0x12c, script: 0x30, flags: 0x2},
-	98: {region: 0x12c, script: 0x35, flags: 0x2},
-}
-
-type likelyLangScript struct {
-	lang   uint16
-	script uint8
-	flags  uint8
-}
-
-// likelyRegion is a lookup table, indexed by regionID, for the most likely
-// languages and scripts given incomplete information. If more entries exist
-// for a given regionID, lang and script are the index and size respectively
-// of the list in likelyRegionList.
-// TODO: exclude containers and user-definable regions from the list.
-// Size: 1420 bytes, 355 elements
-var likelyRegion = [355]likelyLangScript{
-	33:  {lang: 0x61, script: 0x52, flags: 0x0},
-	34:  {lang: 0x15, script: 0x5, flags: 0x0},
-	35:  {lang: 0x0, script: 0x2, flags: 0x1},
-	38:  {lang: 0x2, script: 0x2, flags: 0x1},
-	39:  {lang: 0x4, script: 0x2, flags: 0x1},
-	41:  {lang: 0x1ef, script: 0x52, flags: 0x0},
-	42:  {lang: 0x0, script: 0x52, flags: 0x0},
-	43:  {lang: 0x9d, script: 0x52, flags: 0x0},
-	44:  {lang: 0x22f, script: 0x52, flags: 0x0},
-	45:  {lang: 0x85, script: 0x52, flags: 0x0},
-	47:  {lang: 0x1bd, script: 0x52, flags: 0x0},
-	48:  {lang: 0x247, script: 0x52, flags: 0x0},
-	49:  {lang: 0x24, script: 0x52, flags: 0x0},
-	50:  {lang: 0x6, script: 0x2, flags: 0x1},
-	52:  {lang: 0x4b, script: 0xe, flags: 0x0},
-	53:  {lang: 0x1bd, script: 0x52, flags: 0x0},
-	54:  {lang: 0xaf, script: 0x52, flags: 0x0},
-	55:  {lang: 0x38, script: 0x1e, flags: 0x0},
-	56:  {lang: 0x15, script: 0x5, flags: 0x0},
-	57:  {lang: 0x201, script: 0x52, flags: 0x0},
-	58:  {lang: 0xaf, script: 0x52, flags: 0x0},
-	59:  {lang: 0xaf, script: 0x52, flags: 0x0},
-	61:  {lang: 0x19a, script: 0x52, flags: 0x0},
-	62:  {lang: 0x9d, script: 0x52, flags: 0x0},
-	63:  {lang: 0x1db, script: 0x52, flags: 0x0},
-	64:  {lang: 0x1ef, script: 0x52, flags: 0x0},
-	66:  {lang: 0x8, script: 0x2, flags: 0x1},
-	68:  {lang: 0x0, script: 0x52, flags: 0x0},
-	70:  {lang: 0x2f, script: 0x1e, flags: 0x0},
-	72:  {lang: 0x2b9, script: 0x37, flags: 0x2},
-	73:  {lang: 0x19a, script: 0x5, flags: 0x2},
-	74:  {lang: 0x248, script: 0x52, flags: 0x0},
-	75:  {lang: 0xaf, script: 0x52, flags: 0x0},
-	76:  {lang: 0xaf, script: 0x52, flags: 0x0},
-	77:  {lang: 0x85, script: 0x52, flags: 0x0},
-	78:  {lang: 0xaf, script: 0x52, flags: 0x0},
-	80:  {lang: 0x9d, script: 0x52, flags: 0x0},
-	81:  {lang: 0xaf, script: 0x52, flags: 0x0},
-	82:  {lang: 0xa, script: 0x5, flags: 0x1},
-	83:  {lang: 0x9d, script: 0x52, flags: 0x0},
-	84:  {lang: 0x0, script: 0x52, flags: 0x0},
-	85:  {lang: 0x9d, script: 0x52, flags: 0x0},
-	88:  {lang: 0x9d, script: 0x52, flags: 0x0},
-	89:  {lang: 0x1ef, script: 0x52, flags: 0x0},
-	90:  {lang: 0x1db, script: 0x52, flags: 0x0},
-	92:  {lang: 0xf, script: 0x2, flags: 0x1},
-	93:  {lang: 0x79, script: 0x52, flags: 0x0},
-	95:  {lang: 0x85, script: 0x52, flags: 0x0},
-	97:  {lang: 0x1, script: 0x52, flags: 0x0},
-	98:  {lang: 0x80, script: 0x52, flags: 0x0},
-	100: {lang: 0x9d, script: 0x52, flags: 0x0},
-	102: {lang: 0x11, script: 0x2, flags: 0x1},
-	103: {lang: 0x9d, script: 0x52, flags: 0x0},
-	104: {lang: 0x9d, script: 0x52, flags: 0x0},
-	105: {lang: 0x9f, script: 0x52, flags: 0x0},
-	106: {lang: 0x15, script: 0x5, flags: 0x0},
-	107: {lang: 0x15, script: 0x5, flags: 0x0},
-	108: {lang: 0x261, script: 0x27, flags: 0x0},
-	109: {lang: 0x9d, script: 0x52, flags: 0x0},
-	110: {lang: 0x13, script: 0x2, flags: 0x1},
-	112: {lang: 0xa8, script: 0x52, flags: 0x0},
-	113: {lang: 0xe2, script: 0x20, flags: 0x2},
-	116: {lang: 0xad, script: 0x52, flags: 0x0},
-	118: {lang: 0xaf, script: 0x52, flags: 0x0},
-	120: {lang: 0xaf, script: 0x52, flags: 0x0},
-	121: {lang: 0x15, script: 0x2, flags: 0x1},
-	123: {lang: 0x17, script: 0x3, flags: 0x1},
-	124: {lang: 0xaf, script: 0x52, flags: 0x0},
-	126: {lang: 0xd, script: 0x52, flags: 0x0},
-	128: {lang: 0x131, script: 0x52, flags: 0x0},
-	130: {lang: 0xaf, script: 0x52, flags: 0x0},
-	131: {lang: 0xaf, script: 0x52, flags: 0x0},
-	132: {lang: 0x9d, script: 0x52, flags: 0x0},
-	133: {lang: 0x1a, script: 0x2, flags: 0x1},
-	134: {lang: 0x0, script: 0x52, flags: 0x0},
-	135: {lang: 0x9d, script: 0x52, flags: 0x0},
-	137: {lang: 0x1ef, script: 0x52, flags: 0x0},
-	139: {lang: 0x2c4, script: 0x35, flags: 0x0},
-	140: {lang: 0x0, script: 0x52, flags: 0x0},
-	141: {lang: 0x9d, script: 0x52, flags: 0x0},
-	142: {lang: 0xee, script: 0x52, flags: 0x0},
-	143: {lang: 0xf1, script: 0x52, flags: 0x0},
-	144: {lang: 0xf2, script: 0x52, flags: 0x0},
-	146: {lang: 0x9d, script: 0x52, flags: 0x0},
-	147: {lang: 0x1c, script: 0x2, flags: 0x1},
-	149: {lang: 0xe0, script: 0x37, flags: 0x0},
-	151: {lang: 0x1e, script: 0x3, flags: 0x1},
-	153: {lang: 0x15, script: 0x5, flags: 0x0},
-	154: {lang: 0x21, script: 0x2, flags: 0x1},
-	155: {lang: 0x102, script: 0x52, flags: 0x0},
-	156: {lang: 0x103, script: 0x52, flags: 0x0},
-	159: {lang: 0x15, script: 0x5, flags: 0x0},
-	160: {lang: 0x107, script: 0x41, flags: 0x0},
-	162: {lang: 0x248, script: 0x52, flags: 0x0},
-	163: {lang: 0x14d, script: 0x1e, flags: 0x0},
-	164: {lang: 0x23, script: 0x3, flags: 0x1},
-	166: {lang: 0x26, script: 0x2, flags: 0x1},
-	168: {lang: 0x136, script: 0x4b, flags: 0x0},
-	169: {lang: 0x136, script: 0x4b, flags: 0x0},
-	170: {lang: 0x15, script: 0x5, flags: 0x0},
-	172: {lang: 0x207, script: 0x1e, flags: 0x0},
-	173: {lang: 0x28, script: 0x2, flags: 0x1},
-	174: {lang: 0x15, script: 0x5, flags: 0x0},
-	176: {lang: 0x85, script: 0x52, flags: 0x0},
-	177: {lang: 0x228, script: 0xc1, flags: 0x0},
-	179: {lang: 0x242, script: 0x52, flags: 0x0},
-	180: {lang: 0x169, script: 0x52, flags: 0x0},
-	181: {lang: 0xaf, script: 0x52, flags: 0x0},
-	182: {lang: 0x170, script: 0x52, flags: 0x0},
-	183: {lang: 0x15, script: 0x5, flags: 0x0},
-	184: {lang: 0x2a, script: 0x2, flags: 0x1},
-	185: {lang: 0xaf, script: 0x52, flags: 0x0},
-	186: {lang: 0x2c, script: 0x2, flags: 0x1},
-	187: {lang: 0x23b, script: 0x52, flags: 0x0},
-	188: {lang: 0xaf, script: 0x52, flags: 0x0},
-	189: {lang: 0x183, script: 0x52, flags: 0x0},
-	192: {lang: 0x2e, script: 0x2, flags: 0x1},
-	193: {lang: 0x49, script: 0x52, flags: 0x0},
-	194: {lang: 0x30, script: 0x2, flags: 0x1},
-	195: {lang: 0x32, script: 0x2, flags: 0x1},
-	196: {lang: 0x34, script: 0x2, flags: 0x1},
-	198: {lang: 0xaf, script: 0x52, flags: 0x0},
-	199: {lang: 0x36, script: 0x2, flags: 0x1},
-	201: {lang: 0x19b, script: 0x52, flags: 0x0},
-	202: {lang: 0x38, script: 0x3, flags: 0x1},
-	203: {lang: 0x90, script: 0xd4, flags: 0x0},
-	205: {lang: 0x9d, script: 0x52, flags: 0x0},
-	206: {lang: 0x19a, script: 0x52, flags: 0x0},
-	207: {lang: 0x1ef, script: 0x52, flags: 0x0},
-	208: {lang: 0xa, script: 0x52, flags: 0x0},
-	209: {lang: 0xaf, script: 0x52, flags: 0x0},
-	210: {lang: 0xdc, script: 0x52, flags: 0x0},
-	212: {lang: 0xdc, script: 0x5, flags: 0x2},
-	214: {lang: 0x9d, script: 0x52, flags: 0x0},
-	215: {lang: 0x1bd, script: 0x52, flags: 0x0},
-	216: {lang: 0x1af, script: 0x52, flags: 0x0},
-	217: {lang: 0x1b4, script: 0x20, flags: 0x0},
-	223: {lang: 0x15, script: 0x5, flags: 0x0},
-	224: {lang: 0x9d, script: 0x52, flags: 0x0},
-	226: {lang: 0x9d, script: 0x52, flags: 0x0},
-	227: {lang: 0xaf, script: 0x52, flags: 0x0},
-	228: {lang: 0x26e, script: 0x52, flags: 0x0},
-	229: {lang: 0xaa, script: 0x52, flags: 0x0},
-	230: {lang: 0x3b, script: 0x3, flags: 0x1},
-	231: {lang: 0x3e, script: 0x2, flags: 0x1},
-	232: {lang: 0xaf, script: 0x52, flags: 0x0},
-	234: {lang: 0x9d, script: 0x52, flags: 0x0},
-	235: {lang: 0x15, script: 0x5, flags: 0x0},
-	236: {lang: 0x1ef, script: 0x52, flags: 0x0},
-	238: {lang: 0x1dc, script: 0x52, flags: 0x0},
-	239: {lang: 0xca, script: 0x52, flags: 0x0},
-	241: {lang: 0x15, script: 0x5, flags: 0x0},
-	256: {lang: 0xaf, script: 0x52, flags: 0x0},
-	258: {lang: 0x40, script: 0x2, flags: 0x1},
-	259: {lang: 0x23b, script: 0x1e, flags: 0x0},
-	260: {lang: 0x42, script: 0x2, flags: 0x1},
-	261: {lang: 0x20a, script: 0x52, flags: 0x0},
-	262: {lang: 0x15, script: 0x5, flags: 0x0},
-	264: {lang: 0xaf, script: 0x52, flags: 0x0},
-	265: {lang: 0x15, script: 0x5, flags: 0x0},
-	266: {lang: 0x44, script: 0x2, flags: 0x1},
-	269: {lang: 0x22c, script: 0x52, flags: 0x0},
-	270: {lang: 0x1af, script: 0x52, flags: 0x0},
-	271: {lang: 0x46, script: 0x2, flags: 0x1},
-	273: {lang: 0x103, script: 0x52, flags: 0x0},
-	274: {lang: 0xaf, script: 0x52, flags: 0x0},
-	275: {lang: 0x238, script: 0x52, flags: 0x0},
-	276: {lang: 0x1bd, script: 0x52, flags: 0x0},
-	278: {lang: 0x1ef, script: 0x52, flags: 0x0},
-	280: {lang: 0x9d, script: 0x52, flags: 0x0},
-	282: {lang: 0x48, script: 0x2, flags: 0x1},
-	286: {lang: 0xaf, script: 0x52, flags: 0x0},
-	287: {lang: 0xaf, script: 0x52, flags: 0x0},
-	288: {lang: 0xaf, script: 0x52, flags: 0x0},
-	289: {lang: 0x4a, script: 0x3, flags: 0x1},
-	290: {lang: 0x4d, script: 0x2, flags: 0x1},
-	291: {lang: 0x265, script: 0x52, flags: 0x0},
-	292: {lang: 0x1ef, script: 0x52, flags: 0x0},
-	293: {lang: 0x264, script: 0x52, flags: 0x0},
-	294: {lang: 0x4f, script: 0x2, flags: 0x1},
-	295: {lang: 0x26c, script: 0x52, flags: 0x0},
-	297: {lang: 0x51, script: 0x4, flags: 0x1},
-	299: {lang: 0x27c, script: 0x52, flags: 0x0},
-	300: {lang: 0x55, script: 0x2, flags: 0x1},
-	301: {lang: 0x248, script: 0x52, flags: 0x0},
-	302: {lang: 0x57, script: 0x3, flags: 0x1},
-	303: {lang: 0x248, script: 0x52, flags: 0x0},
-	306: {lang: 0x2b9, script: 0x37, flags: 0x2},
-	307: {lang: 0x9d, script: 0x52, flags: 0x0},
-	308: {lang: 0x28d, script: 0x52, flags: 0x0},
-	309: {lang: 0x103, script: 0x52, flags: 0x0},
-	312: {lang: 0x9d, script: 0x52, flags: 0x0},
-	315: {lang: 0x292, script: 0x52, flags: 0x0},
-	316: {lang: 0x41, script: 0x52, flags: 0x0},
-	317: {lang: 0xaf, script: 0x52, flags: 0x0},
-	319: {lang: 0x22f, script: 0x52, flags: 0x0},
-	330: {lang: 0x5a, script: 0x2, flags: 0x1},
-	347: {lang: 0x15, script: 0x5, flags: 0x0},
-	348: {lang: 0x5c, script: 0x2, flags: 0x1},
-	353: {lang: 0x236, script: 0x52, flags: 0x0},
-}
-
-// likelyRegionList holds lists info associated with likelyRegion.
-// Size: 376 bytes, 94 elements
-var likelyRegionList = [94]likelyLangScript{
-	0:  {lang: 0xa4, script: 0x5, flags: 0x0},
-	1:  {lang: 0x264, script: 0x52, flags: 0x0},
-	2:  {lang: 0x23a, script: 0x52, flags: 0x0},
-	3:  {lang: 0x18c, script: 0x1e, flags: 0x0},
-	4:  {lang: 0xf3, script: 0x8, flags: 0x0},
-	5:  {lang: 0x145, script: 0x52, flags: 0x0},
-	6:  {lang: 0x54, script: 0x52, flags: 0x0},
-	7:  {lang: 0x23b, script: 0x1e, flags: 0x0},
-	8:  {lang: 0x93, script: 0xd6, flags: 0x0},
-	9:  {lang: 0x1b4, script: 0x20, flags: 0x0},
-	10: {lang: 0x2c4, script: 0x34, flags: 0x0},
-	11: {lang: 0x284, script: 0x5, flags: 0x0},
-	12: {lang: 0x2bd, script: 0x35, flags: 0x0},
-	13: {lang: 0x2be, script: 0x52, flags: 0x0},
-	14: {lang: 0x157, script: 0xd5, flags: 0x0},
-	15: {lang: 0x9a, script: 0x2d, flags: 0x0},
-	16: {lang: 0x26f, script: 0x52, flags: 0x0},
-	17: {lang: 0x15, script: 0x5, flags: 0x0},
-	18: {lang: 0xaf, script: 0x52, flags: 0x0},
-	19: {lang: 0x11, script: 0x27, flags: 0x0},
-	20: {lang: 0x9b, script: 0x52, flags: 0x0},
-	21: {lang: 0x141, script: 0x5, flags: 0x2},
-	22: {lang: 0x2b9, script: 0x37, flags: 0x2},
-	23: {lang: 0x111, script: 0x29, flags: 0x0},
-	24: {lang: 0x2, script: 0x1e, flags: 0x0},
-	25: {lang: 0x145, script: 0x52, flags: 0x0},
-	26: {lang: 0x9a, script: 0x2d, flags: 0x0},
-	27: {lang: 0x18c, script: 0x1e, flags: 0x0},
-	28: {lang: 0xf8, script: 0x52, flags: 0x0},
-	29: {lang: 0x19a, script: 0x5, flags: 0x0},
-	30: {lang: 0xe1, script: 0x20, flags: 0x0},
-	31: {lang: 0x28c, script: 0x5, flags: 0x0},
-	32: {lang: 0x129, script: 0x6b, flags: 0x0},
-	33: {lang: 0xa4, script: 0x5, flags: 0x0},
-	34: {lang: 0x264, script: 0x52, flags: 0x0},
-	35: {lang: 0x133, script: 0x46, flags: 0x0},
-	36: {lang: 0x6d, script: 0x5, flags: 0x0},
-	37: {lang: 0x11c, script: 0xd5, flags: 0x0},
-	38: {lang: 0x15, script: 0x5, flags: 0x0},
-	39: {lang: 0xaf, script: 0x52, flags: 0x0},
-	40: {lang: 0x165, script: 0x4f, flags: 0x0},
-	41: {lang: 0x11c, script: 0xd5, flags: 0x0},
-	42: {lang: 0x15, script: 0x5, flags: 0x0},
-	43: {lang: 0xaf, script: 0x52, flags: 0x0},
-	44: {lang: 0x203, script: 0x52, flags: 0x0},
-	45: {lang: 0x286, script: 0x1e, flags: 0x0},
-	46: {lang: 0x18c, script: 0x1e, flags: 0x0},
-	47: {lang: 0x23a, script: 0x52, flags: 0x0},
-	48: {lang: 0x1a5, script: 0x6b, flags: 0x0},
-	49: {lang: 0x114, script: 0x52, flags: 0x0},
-	50: {lang: 0x18f, script: 0x1e, flags: 0x0},
-	51: {lang: 0x12f, script: 0x5, flags: 0x0},
-	52: {lang: 0x2c4, script: 0x35, flags: 0x0},
-	53: {lang: 0x1ef, script: 0x52, flags: 0x0},
-	54: {lang: 0x15, script: 0x5, flags: 0x0},
-	55: {lang: 0xaf, script: 0x52, flags: 0x0},
-	56: {lang: 0x182, script: 0x52, flags: 0x0},
-	57: {lang: 0x28c, script: 0x5, flags: 0x0},
-	58: {lang: 0x40, script: 0x20, flags: 0x0},
-	59: {lang: 0x28c, script: 0x5, flags: 0x0},
-	60: {lang: 0x28c, script: 0x5, flags: 0x0},
-	61: {lang: 0x58, script: 0x20, flags: 0x0},
-	62: {lang: 0x1e7, script: 0x52, flags: 0x0},
-	63: {lang: 0x2f, script: 0x1e, flags: 0x0},
-	64: {lang: 0x203, script: 0x52, flags: 0x0},
-	65: {lang: 0x38, script: 0x1e, flags: 0x0},
-	66: {lang: 0x207, script: 0x1e, flags: 0x0},
-	67: {lang: 0x13f, script: 0x52, flags: 0x0},
-	68: {lang: 0x247, script: 0x52, flags: 0x0},
-	69: {lang: 0x2b9, script: 0x37, flags: 0x0},
-	70: {lang: 0x22a, script: 0x52, flags: 0x0},
-	71: {lang: 0x286, script: 0x1e, flags: 0x0},
-	72: {lang: 0x15, script: 0x5, flags: 0x0},
-	73: {lang: 0xaf, script: 0x52, flags: 0x0},
-	74: {lang: 0x25d, script: 0xd5, flags: 0x0},
-	75: {lang: 0x181, script: 0x5, flags: 0x0},
-	76: {lang: 0x191, script: 0x6b, flags: 0x0},
-	77: {lang: 0x25c, script: 0x1e, flags: 0x0},
-	78: {lang: 0xa4, script: 0x5, flags: 0x0},
-	79: {lang: 0x15, script: 0x5, flags: 0x0},
-	80: {lang: 0xaf, script: 0x52, flags: 0x0},
-	81: {lang: 0x26f, script: 0x52, flags: 0x0},
-	82: {lang: 0x24, script: 0x5, flags: 0x0},
-	83: {lang: 0x118, script: 0x1e, flags: 0x0},
-	84: {lang: 0x3b, script: 0x2d, flags: 0x0},
-	85: {lang: 0x2c4, script: 0x35, flags: 0x0},
-	86: {lang: 0x271, script: 0x52, flags: 0x0},
-	87: {lang: 0x286, script: 0x1e, flags: 0x0},
-	88: {lang: 0x2b9, script: 0x37, flags: 0x0},
-	89: {lang: 0x1e7, script: 0x52, flags: 0x0},
-	90: {lang: 0x23a, script: 0x52, flags: 0x0},
-	91: {lang: 0x23b, script: 0x1e, flags: 0x0},
-	92: {lang: 0xaf, script: 0x52, flags: 0x0},
-	93: {lang: 0x249, script: 0x5, flags: 0x0},
-}
-
-type likelyTag struct {
-	lang   uint16
-	region uint16
-	script uint8
-}
-
-// Size: 192 bytes, 32 elements
-var likelyRegionGroup = [32]likelyTag{
-	1:  {lang: 0x9b, region: 0xd4, script: 0x52},
-	2:  {lang: 0x9b, region: 0x132, script: 0x52},
-	3:  {lang: 0x1ef, region: 0x40, script: 0x52},
-	4:  {lang: 0x9b, region: 0x2e, script: 0x52},
-	5:  {lang: 0x9b, region: 0xd4, script: 0x52},
-	6:  {lang: 0x9d, region: 0xcd, script: 0x52},
-	7:  {lang: 0x248, region: 0x12d, script: 0x52},
-	8:  {lang: 0x15, region: 0x6a, script: 0x5},
-	9:  {lang: 0x248, region: 0x4a, script: 0x52},
-	10: {lang: 0x9b, region: 0x15e, script: 0x52},
-	11: {lang: 0x9b, region: 0x132, script: 0x52},
-	12: {lang: 0x9b, region: 0x132, script: 0x52},
-	13: {lang: 0x9d, region: 0x58, script: 0x52},
-	14: {lang: 0x2c4, region: 0x52, script: 0x34},
-	15: {lang: 0xe1, region: 0x97, script: 0x20},
-	16: {lang: 0xf8, region: 0x93, script: 0x52},
-	17: {lang: 0x103, region: 0x9c, script: 0x52},
-	18: {lang: 0x9b, region: 0x2e, script: 0x52},
-	19: {lang: 0x9b, region: 0xe4, script: 0x52},
-	20: {lang: 0x9b, region: 0x88, script: 0x52},
-	21: {lang: 0x22f, region: 0x13f, script: 0x52},
-	22: {lang: 0x2c4, region: 0x52, script: 0x34},
-	23: {lang: 0x28d, region: 0x134, script: 0x52},
-	24: {lang: 0x15, region: 0x106, script: 0x5},
-	25: {lang: 0x207, region: 0x104, script: 0x1e},
-	26: {lang: 0x207, region: 0x104, script: 0x1e},
-	27: {lang: 0x9b, region: 0x79, script: 0x52},
-	28: {lang: 0x85, region: 0x5f, script: 0x52},
-	29: {lang: 0x9d, region: 0x1e, script: 0x52},
-	30: {lang: 0x9b, region: 0x98, script: 0x52},
-	31: {lang: 0x9b, region: 0x79, script: 0x52},
-}
-
-type mutualIntelligibility struct {
-	want   uint16
-	have   uint16
-	conf   uint8
-	oneway bool
-}
-
-type scriptIntelligibility struct {
-	lang uint16
-	want uint8
-	have uint8
-	conf uint8
-}
-
-// matchLang holds pairs of langIDs of base languages that are typically
-// mutually intelligible. Each pair is associated with a confidence and
-// whether the intelligibility goes one or both ways.
-// Size: 708 bytes, 118 elements
-var matchLang = [118]mutualIntelligibility{
-	0:   {want: 0x1c1, have: 0x1af, conf: 0x2, oneway: false},
-	1:   {want: 0x145, have: 0x6f, conf: 0x2, oneway: false},
-	2:   {want: 0xee, have: 0x54, conf: 0x2, oneway: false},
-	3:   {want: 0x225, have: 0x54, conf: 0x2, oneway: false},
-	4:   {want: 0x23b, have: 0x54, conf: 0x2, oneway: false},
-	5:   {want: 0x225, have: 0xee, conf: 0x2, oneway: false},
-	6:   {want: 0x23b, have: 0xee, conf: 0x2, oneway: false},
-	7:   {want: 0x225, have: 0x23b, conf: 0x2, oneway: false},
-	8:   {want: 0x241, have: 0x1, conf: 0x2, oneway: false},
-	9:   {want: 0xd2, have: 0x85, conf: 0x2, oneway: true},
-	10:  {want: 0x154, have: 0x85, conf: 0x2, oneway: true},
-	11:  {want: 0x80, have: 0x1c1, conf: 0x2, oneway: false},
-	12:  {want: 0x80, have: 0x1af, conf: 0x2, oneway: false},
-	13:  {want: 0x6f, have: 0x145, conf: 0x2, oneway: false},
-	14:  {want: 0x2, have: 0x207, conf: 0x2, oneway: true},
-	15:  {want: 0x5, have: 0x9b, conf: 0x2, oneway: true},
-	16:  {want: 0xa, have: 0x1bd, conf: 0x2, oneway: true},
-	17:  {want: 0xd, have: 0x9b, conf: 0x2, oneway: true},
-	18:  {want: 0x23, have: 0x9d, conf: 0x2, oneway: true},
-	19:  {want: 0x24, have: 0x207, conf: 0x2, oneway: true},
-	20:  {want: 0x2f, have: 0x207, conf: 0x2, oneway: true},
-	21:  {want: 0x31, have: 0x9b, conf: 0x2, oneway: true},
-	22:  {want: 0x3c, have: 0xe1, conf: 0x2, oneway: true},
-	23:  {want: 0x4b, have: 0x9b, conf: 0x2, oneway: true},
-	24:  {want: 0x50, have: 0xaf, conf: 0x2, oneway: true},
-	25:  {want: 0x65, have: 0xaa, conf: 0x2, oneway: true},
-	26:  {want: 0x6c, have: 0x9b, conf: 0x2, oneway: true},
-	27:  {want: 0x6f, have: 0x15, conf: 0x2, oneway: true},
-	28:  {want: 0x70, have: 0xaf, conf: 0x2, oneway: true},
-	29:  {want: 0x78, have: 0xaf, conf: 0x2, oneway: true},
-	30:  {want: 0x7f, have: 0x9b, conf: 0x2, oneway: true},
-	31:  {want: 0x95, have: 0x9b, conf: 0x2, oneway: true},
-	32:  {want: 0x9c, have: 0x9b, conf: 0x2, oneway: true},
-	33:  {want: 0x9f, have: 0xa8, conf: 0x2, oneway: true},
-	34:  {want: 0xa1, have: 0x9d, conf: 0x2, oneway: true},
-	35:  {want: 0xad, have: 0x80, conf: 0x2, oneway: true},
-	36:  {want: 0xb9, have: 0x1bd, conf: 0x2, oneway: true},
-	37:  {want: 0xba, have: 0x9b, conf: 0x2, oneway: true},
-	38:  {want: 0xbb, have: 0x9b, conf: 0x2, oneway: true},
-	39:  {want: 0xc2, have: 0x9b, conf: 0x2, oneway: true},
-	40:  {want: 0xc8, have: 0x9d, conf: 0x2, oneway: true},
-	41:  {want: 0xca, have: 0x9d, conf: 0x2, oneway: true},
-	42:  {want: 0xd3, have: 0xe1, conf: 0x2, oneway: true},
-	43:  {want: 0xdc, have: 0x9b, conf: 0x2, oneway: true},
-	44:  {want: 0xde, have: 0x9b, conf: 0x2, oneway: true},
-	45:  {want: 0xf1, have: 0xaf, conf: 0x2, oneway: true},
-	46:  {want: 0xf3, have: 0x207, conf: 0x2, oneway: true},
-	47:  {want: 0xf5, have: 0x9b, conf: 0x2, oneway: true},
-	48:  {want: 0xfa, have: 0x9b, conf: 0x2, oneway: true},
-	49:  {want: 0x102, have: 0x9b, conf: 0x2, oneway: true},
-	50:  {want: 0x10f, have: 0xf8, conf: 0x2, oneway: true},
-	51:  {want: 0x111, have: 0x9b, conf: 0x2, oneway: true},
-	52:  {want: 0x122, have: 0xaf, conf: 0x2, oneway: true},
-	53:  {want: 0x12f, have: 0x207, conf: 0x2, oneway: true},
-	54:  {want: 0x133, have: 0x9b, conf: 0x2, oneway: true},
-	55:  {want: 0x135, have: 0x9b, conf: 0x2, oneway: true},
-	56:  {want: 0x13d, have: 0x9b, conf: 0x2, oneway: true},
-	57:  {want: 0x145, have: 0x26f, conf: 0x2, oneway: true},
-	58:  {want: 0x14d, have: 0x207, conf: 0x2, oneway: true},
-	59:  {want: 0x14e, have: 0x103, conf: 0x2, oneway: true},
-	60:  {want: 0x15a, have: 0x9b, conf: 0x2, oneway: true},
-	61:  {want: 0x164, have: 0xaf, conf: 0x2, oneway: true},
-	62:  {want: 0x165, have: 0x9b, conf: 0x2, oneway: true},
-	63:  {want: 0x167, have: 0x9b, conf: 0x2, oneway: true},
-	64:  {want: 0x16c, have: 0xaf, conf: 0x2, oneway: true},
-	65:  {want: 0x182, have: 0x9b, conf: 0x2, oneway: true},
-	66:  {want: 0x183, have: 0xaf, conf: 0x2, oneway: true},
-	67:  {want: 0x189, have: 0x9b, conf: 0x2, oneway: true},
-	68:  {want: 0x18c, have: 0x38, conf: 0x2, oneway: true},
-	69:  {want: 0x18d, have: 0x9b, conf: 0x2, oneway: true},
-	70:  {want: 0x18f, have: 0x207, conf: 0x2, oneway: true},
-	71:  {want: 0x196, have: 0xe1, conf: 0x2, oneway: true},
-	72:  {want: 0x19a, have: 0xf8, conf: 0x2, oneway: true},
-	73:  {want: 0x19b, have: 0x9b, conf: 0x2, oneway: true},
-	74:  {want: 0x1a5, have: 0x9b, conf: 0x2, oneway: true},
-	75:  {want: 0x1b4, have: 0x9b, conf: 0x2, oneway: true},
-	76:  {want: 0x1bf, have: 0x1af, conf: 0x2, oneway: false},
-	77:  {want: 0x1bf, have: 0x1c1, conf: 0x2, oneway: true},
-	78:  {want: 0x1c8, have: 0x9b, conf: 0x2, oneway: true},
-	79:  {want: 0x1cc, have: 0x9b, conf: 0x2, oneway: true},
-	80:  {want: 0x1ce, have: 0x9b, conf: 0x2, oneway: true},
-	81:  {want: 0x1d0, have: 0xaf, conf: 0x2, oneway: true},
-	82:  {want: 0x1d2, have: 0x9b, conf: 0x2, oneway: true},
-	83:  {want: 0x1d3, have: 0x9b, conf: 0x2, oneway: true},
-	84:  {want: 0x1d7, have: 0x9b, conf: 0x2, oneway: true},
-	85:  {want: 0x1de, have: 0x9b, conf: 0x2, oneway: true},
-	86:  {want: 0x1ee, have: 0x9b, conf: 0x2, oneway: true},
-	87:  {want: 0x1f1, have: 0x9d, conf: 0x2, oneway: true},
-	88:  {want: 0x1fc, have: 0x85, conf: 0x2, oneway: true},
-	89:  {want: 0x201, have: 0x9b, conf: 0x2, oneway: true},
-	90:  {want: 0x20a, have: 0xaf, conf: 0x2, oneway: true},
-	91:  {want: 0x20d, have: 0xe1, conf: 0x2, oneway: true},
-	92:  {want: 0x21a, have: 0x9b, conf: 0x2, oneway: true},
-	93:  {want: 0x228, have: 0x9b, conf: 0x2, oneway: true},
-	94:  {want: 0x236, have: 0x9b, conf: 0x2, oneway: true},
-	95:  {want: 0x238, have: 0x9b, conf: 0x2, oneway: true},
-	96:  {want: 0x23a, have: 0x9b, conf: 0x2, oneway: true},
-	97:  {want: 0x242, have: 0x9b, conf: 0x2, oneway: true},
-	98:  {want: 0x244, have: 0xf8, conf: 0x2, oneway: true},
-	99:  {want: 0x248, have: 0x9b, conf: 0x2, oneway: true},
-	100: {want: 0x251, have: 0x9b, conf: 0x2, oneway: true},
-	101: {want: 0x258, have: 0x9b, conf: 0x2, oneway: true},
-	102: {want: 0x25c, have: 0x207, conf: 0x2, oneway: true},
-	103: {want: 0x261, have: 0x9b, conf: 0x2, oneway: true},
-	104: {want: 0x264, have: 0x207, conf: 0x2, oneway: true},
-	105: {want: 0x361a, have: 0x9b, conf: 0x2, oneway: true},
-	106: {want: 0x26b, have: 0x9b, conf: 0x2, oneway: true},
-	107: {want: 0x26c, have: 0x9b, conf: 0x2, oneway: true},
-	108: {want: 0x277, have: 0x207, conf: 0x2, oneway: true},
-	109: {want: 0x27b, have: 0x9b, conf: 0x2, oneway: true},
-	110: {want: 0x284, have: 0x2c4, conf: 0x2, oneway: true},
-	111: {want: 0x28c, have: 0x9b, conf: 0x2, oneway: true},
-	112: {want: 0x28d, have: 0x207, conf: 0x2, oneway: true},
-	113: {want: 0x2a4, have: 0xaf, conf: 0x2, oneway: true},
-	114: {want: 0x2a9, have: 0x9b, conf: 0x2, oneway: true},
-	115: {want: 0x2b9, have: 0x9b, conf: 0x2, oneway: true},
-	116: {want: 0x2ba, have: 0x9b, conf: 0x2, oneway: true},
-	117: {want: 0x2c6, have: 0x9b, conf: 0x2, oneway: true},
-}
-
-// matchScript holds pairs of scriptIDs where readers of one script
-// can typically also read the other. Each is associated with a confidence.
-// Size: 24 bytes, 4 elements
-var matchScript = [4]scriptIntelligibility{
-	0: {lang: 0x23b, want: 0x52, have: 0x1e, conf: 0x2},
-	1: {lang: 0x23b, want: 0x1e, have: 0x52, conf: 0x2},
-	2: {lang: 0x0, want: 0x34, have: 0x35, conf: 0x1},
-	3: {lang: 0x0, want: 0x35, have: 0x34, conf: 0x1},
-}
-
-// Size: 128 bytes, 32 elements
-var regionContainment = [32]uint32{
-	0xffffffff, 0x000007a2, 0x00003044, 0x00000008,
-	0x403c0010, 0x00000020, 0x00000040, 0x00000080,
-	0x00000100, 0x00000200, 0x00000400, 0x2000384c,
-	0x00001000, 0x00002000, 0x00004000, 0x00008000,
-	0x00010000, 0x00020000, 0x00040000, 0x00080000,
-	0x00100000, 0x00200000, 0x01c1c000, 0x00800000,
-	0x01000000, 0x1e020000, 0x04000000, 0x08000000,
-	0x10000000, 0x20002048, 0x40000000, 0x80000000,
-}
-
-// regionInclusion maps region identifiers to sets of regions in regionInclusionBits,
-// where each set holds all groupings that are directly connected in a region
-// containment graph.
-// Size: 355 bytes, 355 elements
-var regionInclusion = [355]uint8{
-	// Entry 0 - 3F
-	0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
-	0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
-	0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
-	0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x20,
-	0x21, 0x22, 0x23, 0x24, 0x25, 0x25, 0x22, 0x23,
-	0x25, 0x26, 0x21, 0x27, 0x28, 0x29, 0x2a, 0x25,
-	0x2b, 0x23, 0x22, 0x25, 0x24, 0x29, 0x2c, 0x2d,
-	0x23, 0x2e, 0x2c, 0x25, 0x2f, 0x30, 0x27, 0x25,
-	// Entry 40 - 7F
-	0x27, 0x25, 0x24, 0x30, 0x21, 0x31, 0x32, 0x33,
-	0x2f, 0x21, 0x26, 0x26, 0x26, 0x34, 0x2c, 0x28,
-	0x27, 0x26, 0x35, 0x27, 0x21, 0x33, 0x22, 0x20,
-	0x25, 0x2c, 0x25, 0x21, 0x36, 0x2d, 0x34, 0x29,
-	0x21, 0x2e, 0x37, 0x25, 0x25, 0x20, 0x38, 0x38,
-	0x27, 0x37, 0x38, 0x38, 0x2e, 0x39, 0x2e, 0x1f,
-	0x37, 0x3a, 0x27, 0x3b, 0x2b, 0x20, 0x29, 0x34,
-	0x26, 0x37, 0x25, 0x23, 0x27, 0x2b, 0x2c, 0x22,
-	// Entry 80 - BF
-	0x2f, 0x2c, 0x2c, 0x25, 0x26, 0x39, 0x21, 0x33,
-	0x3b, 0x2c, 0x27, 0x35, 0x21, 0x33, 0x39, 0x25,
-	0x2d, 0x20, 0x38, 0x30, 0x37, 0x23, 0x2b, 0x24,
-	0x21, 0x23, 0x24, 0x2b, 0x39, 0x2b, 0x25, 0x23,
-	0x35, 0x20, 0x2e, 0x3c, 0x30, 0x3b, 0x2e, 0x25,
-	0x35, 0x35, 0x23, 0x25, 0x3c, 0x30, 0x23, 0x25,
-	0x34, 0x24, 0x2c, 0x31, 0x37, 0x29, 0x37, 0x38,
-	0x38, 0x34, 0x32, 0x22, 0x25, 0x2e, 0x3b, 0x20,
-	// Entry C0 - FF
-	0x22, 0x2c, 0x30, 0x35, 0x35, 0x3b, 0x25, 0x2c,
-	0x25, 0x39, 0x2e, 0x24, 0x2e, 0x33, 0x30, 0x2e,
-	0x31, 0x3a, 0x2c, 0x2a, 0x2c, 0x20, 0x33, 0x29,
-	0x2b, 0x24, 0x20, 0x3b, 0x23, 0x28, 0x2a, 0x23,
-	0x33, 0x20, 0x27, 0x28, 0x3a, 0x30, 0x24, 0x2d,
-	0x2f, 0x28, 0x25, 0x23, 0x39, 0x20, 0x3b, 0x27,
-	0x20, 0x23, 0x20, 0x20, 0x1e, 0x20, 0x20, 0x20,
-	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-	// Entry 100 - 13F
-	0x2e, 0x20, 0x2d, 0x22, 0x32, 0x2e, 0x23, 0x3a,
-	0x2e, 0x38, 0x37, 0x30, 0x2c, 0x39, 0x2b, 0x2d,
-	0x2c, 0x22, 0x2c, 0x2e, 0x27, 0x2e, 0x26, 0x32,
-	0x33, 0x25, 0x23, 0x31, 0x21, 0x25, 0x26, 0x21,
-	0x2c, 0x30, 0x3c, 0x28, 0x30, 0x3c, 0x38, 0x28,
-	0x30, 0x23, 0x25, 0x28, 0x35, 0x2e, 0x32, 0x2e,
-	0x20, 0x21, 0x2f, 0x27, 0x3c, 0x22, 0x25, 0x20,
-	0x27, 0x25, 0x25, 0x30, 0x3a, 0x28, 0x20, 0x28,
-	// Entry 140 - 17F
-	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-	0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20,
-	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-	0x20, 0x20, 0x23, 0x23, 0x2e, 0x22, 0x31, 0x2e,
-	0x26, 0x2e, 0x20,
-}
-
-// regionInclusionBits is an array of bit vectors where every vector represents
-// a set of region groupings.  These sets are used to compute the distance
-// between two regions for the purpose of language matching.
-// Size: 288 bytes, 72 elements
-var regionInclusionBits = [72]uint32{
-	// Entry 0 - 1F
-	0x82400813, 0x000007a3, 0x00003844, 0x20000808,
-	0x403c0011, 0x00000022, 0x20000844, 0x00000082,
-	0x00000102, 0x00000202, 0x00000402, 0x2000384d,
-	0x00001804, 0x20002804, 0x00404000, 0x00408000,
-	0x00410000, 0x02020000, 0x00040010, 0x00080010,
-	0x00100010, 0x00200010, 0x01c1c001, 0x00c00000,
-	0x01400000, 0x1e020001, 0x06000000, 0x0a000000,
-	0x12000000, 0x20002848, 0x40000010, 0x80000001,
-	// Entry 20 - 3F
-	0x00000001, 0x40000000, 0x00020000, 0x01000000,
-	0x00008000, 0x00002000, 0x00000200, 0x00000008,
-	0x00200000, 0x90000000, 0x00040000, 0x08000000,
-	0x00000020, 0x84000000, 0x00000080, 0x00001000,
-	0x00010000, 0x00000400, 0x04000000, 0x00000040,
-	0x10000000, 0x00004000, 0x81000000, 0x88000000,
-	0x00000100, 0x80020000, 0x00080000, 0x00100000,
-	0x00800000, 0xffffffff, 0x82400fb3, 0xc27c0813,
-	// Entry 40 - 5F
-	0xa240385f, 0x83c1c813, 0x9e420813, 0x92000001,
-	0x86000001, 0x81400001, 0x8a000001, 0x82020001,
-}
-
-// regionInclusionNext marks, for each entry in regionInclusionBits, the set of
-// all groups that are reachable from the groups set in the respective entry.
-// Size: 72 bytes, 72 elements
-var regionInclusionNext = [72]uint8{
-	// Entry 0 - 3F
-	0x3d, 0x3e, 0x0b, 0x0b, 0x3f, 0x01, 0x0b, 0x01,
-	0x01, 0x01, 0x01, 0x40, 0x0b, 0x0b, 0x16, 0x16,
-	0x16, 0x19, 0x04, 0x04, 0x04, 0x04, 0x41, 0x16,
-	0x16, 0x42, 0x19, 0x19, 0x19, 0x0b, 0x04, 0x00,
-	0x00, 0x1e, 0x11, 0x18, 0x0f, 0x0d, 0x09, 0x03,
-	0x15, 0x43, 0x12, 0x1b, 0x05, 0x44, 0x07, 0x0c,
-	0x10, 0x0a, 0x1a, 0x06, 0x1c, 0x0e, 0x45, 0x46,
-	0x08, 0x47, 0x13, 0x14, 0x17, 0x3d, 0x3d, 0x3d,
-	// Entry 40 - 7F
-	0x3d, 0x3d, 0x3d, 0x42, 0x42, 0x41, 0x42, 0x42,
-}
-
-type parentRel struct {
-	lang       uint16
-	script     uint8
-	maxScript  uint8
-	toRegion   uint16
-	fromRegion []uint16
-}
-
-// Size: 412 bytes, 5 elements
-var parents = [5]parentRel{
-	0: {lang: 0x9b, script: 0x0, maxScript: 0x52, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x24, 0x25, 0x2e, 0x33, 0x35, 0x3c, 0x41, 0x45, 0x47, 0x48, 0x49, 0x4f, 0x51, 0x5b, 0x5c, 0x60, 0x63, 0x6c, 0x71, 0x72, 0x73, 0x79, 0x7a, 0x7d, 0x7e, 0x7f, 0x81, 0x8a, 0x8b, 0x94, 0x95, 0x96, 0x97, 0x98, 0x9d, 0x9e, 0xa2, 0xa5, 0xa7, 0xab, 0xaf, 0xb2, 0xb3, 0xbd, 0xc4, 0xc8, 0xc9, 0xca, 0xcc, 0xce, 0xd0, 0xd3, 0xd4, 0xdb, 0xdd, 0xde, 0xe4, 0xe5, 0xe6, 0xe9, 0xee, 0x105, 0x107, 0x108, 0x109, 0x10b, 0x10c, 0x110, 0x115, 0x119, 0x11b, 0x11d, 0x123, 0x127, 0x12a, 0x12b, 0x12d, 0x12f, 0x136, 0x139, 0x13c, 0x13f, 0x15e, 0x15f, 0x161}},
-	1: {lang: 0x9b, script: 0x0, maxScript: 0x52, toRegion: 0x1a, fromRegion: []uint16{0x2d, 0x4d, 0x5f, 0x62, 0x70, 0xd7, 0x10a, 0x10d}},
-	2: {lang: 0x9d, script: 0x0, maxScript: 0x52, toRegion: 0x1e, fromRegion: []uint16{0x2b, 0x3e, 0x40, 0x50, 0x53, 0x55, 0x58, 0x64, 0x68, 0x87, 0x8d, 0xcd, 0xd6, 0xe0, 0xe2, 0xea, 0xef, 0x118, 0x132, 0x133, 0x138}},
-	3: {lang: 0x1ef, script: 0x0, maxScript: 0x52, toRegion: 0xec, fromRegion: []uint16{0x29, 0x4d, 0x59, 0x84, 0x89, 0xb5, 0xc4, 0xcf, 0x116, 0x124}},
-	4: {lang: 0x2c4, script: 0x35, maxScript: 0x35, toRegion: 0x8b, fromRegion: []uint16{0xc4}},
-}
-
-// Total table size 20315 bytes (19KiB); checksum: C16EF251

+ 0 - 23
Godeps/_workspace/src/gopkg.in/urfave/cli.v1/.travis.yml

@@ -1,23 +0,0 @@
-language: go
-sudo: false
-
-go:
-- 1.1.2
-- 1.2.2
-- 1.3.3
-- 1.4
-- 1.5.4
-- 1.6.2
-- tip
-
-matrix:
-  allow_failures:
-    - go: tip
-
-before_script:
-- go get github.com/meatballhat/gfmxr/...
-
-script:
-- go vet ./...
-- go test -v ./...
-- gfmxr -c $(grep -c 'package main' README.md) -s README.md

+ 0 - 21
Godeps/_workspace/src/gopkg.in/urfave/cli.v1/LICENSE

@@ -1,21 +0,0 @@
-Copyright (C) 2013 Jeremy Saenz
-All Rights Reserved.
-
-MIT LICENSE
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 579
Godeps/_workspace/src/gopkg.in/urfave/cli.v1/README.md

@@ -1,579 +0,0 @@
-[![Coverage](http://gocover.io/_badge/github.com/codegangsta/cli?0)](http://gocover.io/github.com/codegangsta/cli)
-[![Build Status](https://travis-ci.org/codegangsta/cli.svg?branch=master)](https://travis-ci.org/codegangsta/cli)
-[![GoDoc](https://godoc.org/github.com/codegangsta/cli?status.svg)](https://godoc.org/github.com/codegangsta/cli)
-[![codebeat](https://codebeat.co/badges/0a8f30aa-f975-404b-b878-5fab3ae1cc5f)](https://codebeat.co/projects/github-com-codegangsta-cli)
-[![Go Report Card](https://goreportcard.com/badge/codegangsta/cli)](https://goreportcard.com/report/codegangsta/cli)
-
-# cli
-
-cli is a simple, fast, and fun package for building command line apps in Go. The goal is to enable developers to write fast and distributable command line applications in an expressive way.
-
-## Overview
-
-Command line apps are usually so tiny that there is absolutely no reason why your code should *not* be self-documenting. Things like generating help text and parsing command flags/options should not hinder productivity when writing a command line app.
-
-**This is where cli comes into play.** cli makes command line programming fun, organized, and expressive!
-
-## Installation
-
-Make sure you have a working Go environment (go 1.1+ is *required*). [See the install instructions](http://golang.org/doc/install.html).
-
-To install cli, simply run:
-```
-$ go get github.com/codegangsta/cli
-```
-
-Make sure your `PATH` includes to the `$GOPATH/bin` directory so your commands can be easily used:
-```
-export PATH=$PATH:$GOPATH/bin
-```
-
-## Getting Started
-
-One of the philosophies behind cli is that an API should be playful and full of discovery. So a cli app can be as little as one line of code in `main()`.
-
-``` go
-package main
-
-import (
-  "os"
-  "github.com/codegangsta/cli"
-)
-
-func main() {
-  cli.NewApp().Run(os.Args)
-}
-```
-
-This app will run and show help text, but is not very useful. Let's give an action to execute and some help documentation:
-
-<!-- {
-  "output": "boom! I say!"
-} -->
-``` go
-package main
-
-import (
-  "fmt"
-  "os"
-
-  "github.com/codegangsta/cli"
-)
-
-func main() {
-  app := cli.NewApp()
-  app.Name = "boom"
-  app.Usage = "make an explosive entrance"
-  app.Action = func(c *cli.Context) error {
-    fmt.Println("boom! I say!")
-    return nil
-  }
-
-  app.Run(os.Args)
-}
-```
-
-Running this already gives you a ton of functionality, plus support for things like subcommands and flags, which are covered below.
-
-## Example
-
-Being a programmer can be a lonely job. Thankfully by the power of automation that is not the case! Let's create a greeter app to fend off our demons of loneliness!
-
-Start by creating a directory named `greet`, and within it, add a file, `greet.go` with the following code in it:
-
-<!-- {
-  "output": "Hello friend!"
-} -->
-``` go
-package main
-
-import (
-  "fmt"
-  "os"
-
-  "github.com/codegangsta/cli"
-)
-
-func main() {
-  app := cli.NewApp()
-  app.Name = "greet"
-  app.Usage = "fight the loneliness!"
-  app.Action = func(c *cli.Context) error {
-    fmt.Println("Hello friend!")
-    return nil
-  }
-
-  app.Run(os.Args)
-}
-```
-
-Install our command to the `$GOPATH/bin` directory:
-
-```
-$ go install
-```
-
-Finally run our new command:
-
-```
-$ greet
-Hello friend!
-```
-
-cli also generates neat help text:
-
-```
-$ greet help
-NAME:
-    greet - fight the loneliness!
-
-USAGE:
-    greet [global options] command [command options] [arguments...]
-
-VERSION:
-    0.0.0
-
-COMMANDS:
-    help, h  Shows a list of commands or help for one command
-
-GLOBAL OPTIONS
-    --version	Shows version information
-```
-
-### Arguments
-
-You can lookup arguments by calling the `Args` function on `cli.Context`.
-
-``` go
-...
-app.Action = func(c *cli.Context) error {
-  fmt.Println("Hello", c.Args()[0])
-  return nil
-}
-...
-```
-
-### Flags
-
-Setting and querying flags is simple.
-
-``` go
-...
-app.Flags = []cli.Flag {
-  cli.StringFlag{
-    Name: "lang",
-    Value: "english",
-    Usage: "language for the greeting",
-  },
-}
-app.Action = func(c *cli.Context) error {
-  name := "someone"
-  if c.NArg() > 0 {
-    name = c.Args()[0]
-  }
-  if c.String("lang") == "spanish" {
-    fmt.Println("Hola", name)
-  } else {
-    fmt.Println("Hello", name)
-  }
-  return nil
-}
-...
-```
-
-You can also set a destination variable for a flag, to which the content will be scanned.
-
-``` go
-...
-var language string
-app.Flags = []cli.Flag {
-  cli.StringFlag{
-    Name:        "lang",
-    Value:       "english",
-    Usage:       "language for the greeting",
-    Destination: &language,
-  },
-}
-app.Action = func(c *cli.Context) error {
-  name := "someone"
-  if c.NArg() > 0 {
-    name = c.Args()[0]
-  }
-  if language == "spanish" {
-    fmt.Println("Hola", name)
-  } else {
-    fmt.Println("Hello", name)
-  }
-  return nil
-}
-...
-```
-
-See full list of flags at http://godoc.org/github.com/codegangsta/cli
-
-#### Placeholder Values
-
-Sometimes it's useful to specify a flag's value within the usage string itself. Such placeholders are
-indicated with back quotes.
-
-For example this:
-
-```go
-cli.StringFlag{
-  Name:  "config, c",
-  Usage: "Load configuration from `FILE`",
-}
-```
-
-Will result in help output like:
-
-```
---config FILE, -c FILE   Load configuration from FILE
-```
-
-Note that only the first placeholder is used. Subsequent back-quoted words will be left as-is.
-
-#### Alternate Names
-
-You can set alternate (or short) names for flags by providing a comma-delimited list for the `Name`. e.g.
-
-``` go
-app.Flags = []cli.Flag {
-  cli.StringFlag{
-    Name: "lang, l",
-    Value: "english",
-    Usage: "language for the greeting",
-  },
-}
-```
-
-That flag can then be set with `--lang spanish` or `-l spanish`. Note that giving two different forms of the same flag in the same command invocation is an error.
-
-#### Values from the Environment
-
-You can also have the default value set from the environment via `EnvVar`.  e.g.
-
-``` go
-app.Flags = []cli.Flag {
-  cli.StringFlag{
-    Name: "lang, l",
-    Value: "english",
-    Usage: "language for the greeting",
-    EnvVar: "APP_LANG",
-  },
-}
-```
-
-The `EnvVar` may also be given as a comma-delimited "cascade", where the first environment variable that resolves is used as the default.
-
-``` go
-app.Flags = []cli.Flag {
-  cli.StringFlag{
-    Name: "lang, l",
-    Value: "english",
-    Usage: "language for the greeting",
-    EnvVar: "LEGACY_COMPAT_LANG,APP_LANG,LANG",
-  },
-}
-```
-
-#### Values from alternate input sources (YAML and others)
-
-There is a separate package altsrc that adds support for getting flag values from other input sources like YAML.
-
-In order to get values for a flag from an alternate input source the following code would be added to wrap an existing cli.Flag like below:
-
-``` go
-  altsrc.NewIntFlag(cli.IntFlag{Name: "test"})
-```
-
-Initialization must also occur for these flags. Below is an example initializing getting data from a yaml file below.
-
-``` go
-  command.Before = altsrc.InitInputSourceWithContext(command.Flags, NewYamlSourceFromFlagFunc("load"))
-```
-
-The code above will use the "load" string as a flag name to get the file name of a yaml file from the cli.Context.
-It will then use that file name to initialize the yaml input source for any flags that are defined on that command.
-As a note the "load" flag used would also have to be defined on the command flags in order for this code snipped to work.
-
-Currently only YAML files are supported but developers can add support for other input sources by implementing the
-altsrc.InputSourceContext for their given sources.
-
-Here is a more complete sample of a command using YAML support:
-
-``` go
-  command := &cli.Command{
-    Name:        "test-cmd",
-    Aliases:     []string{"tc"},
-    Usage:       "this is for testing",
-    Description: "testing",
-    Action: func(c *cli.Context) error {
-      // Action to run
-      return nil
-    },
-    Flags: []cli.Flag{
-      NewIntFlag(cli.IntFlag{Name: "test"}),
-      cli.StringFlag{Name: "load"}},
-  }
-  command.Before = InitInputSourceWithContext(command.Flags, NewYamlSourceFromFlagFunc("load"))
-  err := command.Run(c)
-```
-
-### Subcommands
-
-Subcommands can be defined for a more git-like command line app.
-
-```go
-...
-app.Commands = []cli.Command{
-  {
-    Name:      "add",
-    Aliases:     []string{"a"},
-    Usage:     "add a task to the list",
-    Action: func(c *cli.Context) error {
-      fmt.Println("added task: ", c.Args().First())
-      return nil
-    },
-  },
-  {
-    Name:      "complete",
-    Aliases:     []string{"c"},
-    Usage:     "complete a task on the list",
-    Action: func(c *cli.Context) error {
-      fmt.Println("completed task: ", c.Args().First())
-      return nil
-    },
-  },
-  {
-    Name:      "template",
-    Aliases:     []string{"r"},
-    Usage:     "options for task templates",
-    Subcommands: []cli.Command{
-      {
-        Name:  "add",
-        Usage: "add a new template",
-        Action: func(c *cli.Context) error {
-          fmt.Println("new task template: ", c.Args().First())
-          return nil
-        },
-      },
-      {
-        Name:  "remove",
-        Usage: "remove an existing template",
-        Action: func(c *cli.Context) error {
-          fmt.Println("removed task template: ", c.Args().First())
-          return nil
-        },
-      },
-    },
-  },
-}
-...
-```
-
-### Subcommands categories
-
-For additional organization in apps that have many subcommands, you can
-associate a category for each command to group them together in the help
-output.
-
-E.g.
-
-```go
-...
-  app.Commands = []cli.Command{
-    {
-      Name: "noop",
-    },
-    {
-      Name:     "add",
-      Category: "template",
-    },
-    {
-      Name:     "remove",
-      Category: "template",
-    },
-  }
-...
-```
-
-Will include:
-
-```
-...
-COMMANDS:
-    noop
-
-  Template actions:
-    add
-    remove
-...
-```
-
-### Exit code
-
-Calling `App.Run` will not automatically call `os.Exit`, which means that by
-default the exit code will "fall through" to being `0`.  An explicit exit code
-may be set by returning a non-nil error that fulfills `cli.ExitCoder`, *or* a
-`cli.MultiError` that includes an error that fulfills `cli.ExitCoder`, e.g.:
-
-``` go
-package main
-
-import (
-  "os"
-
-  "github.com/codegangsta/cli"
-)
-
-func main() {
-  app := cli.NewApp()
-  app.Flags = []cli.Flag{
-    cli.BoolTFlag{
-      Name:  "ginger-crouton",
-      Usage: "is it in the soup?",
-    },
-  }
-  app.Action = func(ctx *cli.Context) error {
-    if !ctx.Bool("ginger-crouton") {
-      return cli.NewExitError("it is not in the soup", 86)
-    }
-    return nil
-  }
-
-  app.Run(os.Args)
-}
-```
-
-### Bash Completion
-
-You can enable completion commands by setting the `EnableBashCompletion`
-flag on the `App` object.  By default, this setting will only auto-complete to
-show an app's subcommands, but you can write your own completion methods for
-the App or its subcommands.
-
-```go
-...
-var tasks = []string{"cook", "clean", "laundry", "eat", "sleep", "code"}
-app := cli.NewApp()
-app.EnableBashCompletion = true
-app.Commands = []cli.Command{
-  {
-    Name:  "complete",
-    Aliases: []string{"c"},
-    Usage: "complete a task on the list",
-    Action: func(c *cli.Context) error {
-       fmt.Println("completed task: ", c.Args().First())
-       return nil
-    },
-    BashComplete: func(c *cli.Context) {
-      // This will complete if no args are passed
-      if c.NArg() > 0 {
-        return
-      }
-      for _, t := range tasks {
-        fmt.Println(t)
-      }
-    },
-  }
-}
-...
-```
-
-#### To Enable
-
-Source the `autocomplete/bash_autocomplete` file in your `.bashrc` file while
-setting the `PROG` variable to the name of your program:
-
-`PROG=myprogram source /.../cli/autocomplete/bash_autocomplete`
-
-#### To Distribute
-
-Copy `autocomplete/bash_autocomplete` into `/etc/bash_completion.d/` and rename
-it to the name of the program you wish to add autocomplete support for (or
-automatically install it there if you are distributing a package). Don't forget
-to source the file to make it active in the current shell.
-
-```
-sudo cp src/bash_autocomplete /etc/bash_completion.d/<myprogram>
-source /etc/bash_completion.d/<myprogram>
-```
-
-Alternatively, you can just document that users should source the generic
-`autocomplete/bash_autocomplete` in their bash configuration with `$PROG` set
-to the name of their program (as above).
-
-### Generated Help Text Customization
-
-All of the help text generation may be customized, and at multiple levels.  The
-templates are exposed as variables `AppHelpTemplate`, `CommandHelpTemplate`, and
-`SubcommandHelpTemplate` which may be reassigned or augmented, and full override
-is possible by assigning a compatible func to the `cli.HelpPrinter` variable,
-e.g.:
-
-<!-- {
-  "output": "Ha HA.  I pwnd the help!!1"
-} -->
-``` go
-package main
-
-import (
-  "fmt"
-  "io"
-  "os"
-
-  "github.com/codegangsta/cli"
-)
-
-func main() {
-  // EXAMPLE: Append to an existing template
-  cli.AppHelpTemplate = fmt.Sprintf(`%s
-
-WEBSITE: http://awesometown.example.com
-
-SUPPORT: support@awesometown.example.com
-
-`, cli.AppHelpTemplate)
-
-  // EXAMPLE: Override a template
-  cli.AppHelpTemplate = `NAME:
-   {{.Name}} - {{.Usage}}
-USAGE:
-   {{.HelpName}} {{if .VisibleFlags}}[global options]{{end}}{{if .Commands}} command
-[command options]{{end}} {{if
-.ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}
-   {{if len .Authors}}
-AUTHOR(S):
-   {{range .Authors}}{{ . }}{{end}}
-   {{end}}{{if .Commands}}
-COMMANDS:
-{{range .Commands}}{{if not .HideHelp}}   {{join .Names ", "}}{{ "\t"
-}}{{.Usage}}{{ "\n" }}{{end}}{{end}}{{end}}{{if .VisibleFlags}}
-GLOBAL OPTIONS:
-   {{range .VisibleFlags}}{{.}}
-   {{end}}{{end}}{{if .Copyright }}
-COPYRIGHT:
-   {{.Copyright}}
-   {{end}}{{if .Version}}
-VERSION:
-   {{.Version}}
-   {{end}}
-`
-
-  // EXAMPLE: Replace the `HelpPrinter` func
-  cli.HelpPrinter = func(w io.Writer, templ string, data interface{}) {
-    fmt.Println("Ha HA.  I pwnd the help!!1")
-  }
-
-  cli.NewApp().Run(os.Args)
-}
-```
-
-## Contribution Guidelines
-
-Feel free to put up a pull request to fix a bug or maybe add a feature. I will give it a code review and make sure that it does not break backwards compatibility. If I or any other collaborators agree that it is in line with the vision of the project, we will work with you to get the code into a mergeable state and merge it into the master branch.
-
-If you have contributed something significant to the project, I will most likely add you as a collaborator. As a collaborator you are given the ability to merge others pull requests. It is very important that new code does not break existing code, so be careful about what code you do choose to merge. If you have any questions feel free to link @codegangsta to the issue in question and we can review it together.
-
-If you feel like you have contributed to the project but have not yet been added as a collaborator, I probably forgot to add you. Hit @codegangsta up over email and we will get it figured out.

+ 0 - 16
Godeps/_workspace/src/gopkg.in/urfave/cli.v1/appveyor.yml

@@ -1,16 +0,0 @@
-version: "{build}"
-
-os: Windows Server 2012 R2
-
-install:
-  - go version
-  - go env
-
-build_script:
-  - cd %APPVEYOR_BUILD_FOLDER%
-  - go vet ./...
-  - go test -v ./...
-
-test: off
-
-deploy: off

+ 0 - 0
Godeps/_workspace/src/golang.org/x/crypto/LICENSE → build/_vendor/src/golang.org/x/net/LICENSE


+ 1 - 1
Godeps/_workspace/src/golang.org/x/net/context/context.go → build/_vendor/src/golang.org/x/net/context/context.go

@@ -34,7 +34,7 @@
 //
 // See http://blog.golang.org/context for example code for a server that uses
 // Contexts.
-package context
+package context // import "golang.org/x/net/context"
 
 import "time"
 

+ 0 - 0
Godeps/_workspace/src/golang.org/x/net/context/go17.go → build/_vendor/src/golang.org/x/net/context/go17.go


+ 0 - 0
Godeps/_workspace/src/golang.org/x/net/context/pre_go17.go → build/_vendor/src/golang.org/x/net/context/pre_go17.go


+ 15 - 0
build/ci-notes.md

@@ -1,3 +1,18 @@
+# Vendored Dependencies
+
+Dependencies are almost all vendored in at the standard Go `/vendor` path. This allows
+people to build go-ethereum using the standard toolchain without any particular package
+manager. It also plays nicely with `go get`, not requiring external code to be relied on.
+
+The one single dependent package missing from `vendor` is `golang.org/x/net/context`. As
+this is a package exposed via public library APIs, it must not be vendored as dependent
+code woulnd't be able to instantiate.
+
+To allow reproducible builds of go-ethereum nonetheless that don't need network access
+during build time to fetch `golang.org/x/net/context`, a version was copied into our repo
+at the very specific `/build/_vendor` path, which is added automatically by all CI build
+scripts and the makefile too.
+
 # Debian Packaging
 
 Tagged releases and develop branch commits are available as installable Debian packages

+ 15 - 2
build/ci.go

@@ -141,7 +141,6 @@ func doInstall(cmdline []string) {
 		log.Println("be compiled with an earlier version. Please upgrade your Go installation.")
 		os.Exit(1)
 	}
-
 	// Compile packages given as arguments, or everything if there are no arguments.
 	packages := []string{"./..."}
 	if flag.NArg() > 0 {
@@ -178,6 +177,7 @@ func goTool(subcmd string, args ...string) *exec.Cmd {
 	cmd := exec.Command(gocmd, subcmd)
 	cmd.Args = append(cmd.Args, args...)
 	cmd.Env = []string{
+		"GO15VENDOREXPERIMENT=1",
 		"GOPATH=" + build.GOPATH(),
 		"GOBIN=" + GOBIN,
 	}
@@ -200,11 +200,24 @@ func doTest(cmdline []string) {
 		coverage = flag.Bool("coverage", false, "Whether to record code coverage")
 	)
 	flag.CommandLine.Parse(cmdline)
+
 	packages := []string{"./..."}
 	if len(flag.CommandLine.Args()) > 0 {
 		packages = flag.CommandLine.Args()
 	}
-
+	if len(packages) == 1 && packages[0] == "./..." {
+		// Resolve ./... manually since go vet will fail on vendored stuff
+		out, err := goTool("list", "./...").CombinedOutput()
+		if err != nil {
+			log.Fatalf("package listing failed: %v\n%s", err, string(out))
+		}
+		packages = []string{}
+		for _, line := range strings.Split(string(out), "\n") {
+			if !strings.Contains(line, "vendor") {
+				packages = append(packages, strings.TrimSpace(line))
+			}
+		}
+	}
 	// Run analysis tools before the tests.
 	if *vet {
 		build.MustRun(goTool("vet", packages...))

+ 1 - 43
cmd/geth/main.go

@@ -82,22 +82,6 @@ The makedag command generates an ethash DAG in /tmp/dag.
 
 This command exists to support the system testing project.
 Regular users do not need to execute it.
-`,
-		},
-		{
-			Action: gpuinfo,
-			Name:   "gpuinfo",
-			Usage:  "gpuinfo",
-			Description: `
-Prints OpenCL device info for all found GPUs.
-`,
-		},
-		{
-			Action: gpubench,
-			Name:   "gpubench",
-			Usage:  "benchmark GPU",
-			Description: `
-Runs quick benchmark on first GPU found.
 `,
 		},
 		{
@@ -147,7 +131,6 @@ participating.
 		utils.OpposeDAOFork,
 		utils.MinerThreadsFlag,
 		utils.MiningEnabledFlag,
-		utils.MiningGPUFlag,
 		utils.AutoDAGFlag,
 		utils.TargetGasLimitFlag,
 		utils.NATFlag,
@@ -312,7 +295,7 @@ func startNode(ctx *cli.Context, stack *node.Node) {
 		if err := stack.Service(&ethereum); err != nil {
 			utils.Fatalf("ethereum service not running: %v", err)
 		}
-		if err := ethereum.StartMining(ctx.GlobalInt(utils.MinerThreadsFlag.Name), ctx.GlobalString(utils.MiningGPUFlag.Name)); err != nil {
+		if err := ethereum.StartMining(ctx.GlobalInt(utils.MinerThreadsFlag.Name)); err != nil {
 			utils.Fatalf("Failed to start mining: %v", err)
 		}
 	}
@@ -348,31 +331,6 @@ func makedag(ctx *cli.Context) error {
 	return nil
 }
 
-func gpuinfo(ctx *cli.Context) error {
-	eth.PrintOpenCLDevices()
-	return nil
-}
-
-func gpubench(ctx *cli.Context) error {
-	args := ctx.Args()
-	wrongArgs := func() {
-		utils.Fatalf(`Usage: geth gpubench <gpu number>`)
-	}
-	switch {
-	case len(args) == 1:
-		n, err := strconv.ParseUint(args[0], 0, 64)
-		if err != nil {
-			wrongArgs()
-		}
-		eth.GPUBench(n)
-	case len(args) == 0:
-		eth.GPUBench(0)
-	default:
-		wrongArgs()
-	}
-	return nil
-}
-
 func version(c *cli.Context) error {
 	fmt.Println(strings.Title(clientIdentifier))
 	fmt.Println("Version:", utils.Version)

+ 0 - 1
cmd/geth/usage.go

@@ -128,7 +128,6 @@ var AppHelpFlagGroups = []flagGroup{
 		Flags: []cli.Flag{
 			utils.MiningEnabledFlag,
 			utils.MinerThreadsFlag,
-			utils.MiningGPUFlag,
 			utils.AutoDAGFlag,
 			utils.EtherbaseFlag,
 			utils.TargetGasLimitFlag,

+ 0 - 5
cmd/utils/flags.go

@@ -170,7 +170,6 @@ var (
 		Usage: "Updates the chain rules to oppose the DAO hard-fork",
 	}
 	// Miner settings
-	// TODO: refactor CPU vs GPU mining flags
 	MiningEnabledFlag = cli.BoolFlag{
 		Name:  "mine",
 		Usage: "Enable mining",
@@ -180,10 +179,6 @@ var (
 		Usage: "Number of CPU threads to use for mining",
 		Value: runtime.NumCPU(),
 	}
-	MiningGPUFlag = cli.StringFlag{
-		Name:  "minergpus",
-		Usage: "List of GPUs to use for mining (e.g. '0,1' will use the first two GPUs found)",
-	}
 	TargetGasLimitFlag = cli.StringFlag{
 		Name:  "targetgaslimit",
 		Usage: "Target gas limit sets the artificial target gas floor for the blocks to mine",

+ 0 - 262
common/natspec/natspec.go

@@ -1,262 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of the go-ethereum library.
-//
-// The go-ethereum library is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The go-ethereum library 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 Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
-
-// +build ignore
-
-package natspec
-
-import (
-	"bytes"
-	"encoding/json"
-	"fmt"
-	"strings"
-
-	"github.com/ethereum/go-ethereum/common"
-	"github.com/ethereum/go-ethereum/common/httpclient"
-	"github.com/ethereum/go-ethereum/common/registrar"
-	"github.com/ethereum/go-ethereum/crypto"
-	"github.com/ethereum/go-ethereum/xeth"
-	"github.com/robertkrimen/otto"
-)
-
-type abi2method map[[8]byte]*method
-
-type NatSpec struct {
-	jsvm       *otto.Otto
-	abiDocJson []byte
-	userDoc    userDoc
-	tx, data   string
-}
-
-// main entry point for to get natspec notice for a transaction
-// the implementation is frontend friendly in that it always gives back
-// a notice that is safe to display
-// :FIXME: the second return value is an error, which can be used to fine-tune bahaviour
-func GetNotice(xeth *xeth.XEth, tx string, http *httpclient.HTTPClient) (notice string) {
-	ns, err := New(xeth, tx, http)
-	if err != nil {
-		if ns == nil {
-			return getFallbackNotice(fmt.Sprintf("no NatSpec info found for contract: %v", err), tx)
-		} else {
-			return getFallbackNotice(fmt.Sprintf("invalid NatSpec info: %v", err), tx)
-		}
-	}
-
-	notice, err = ns.Notice()
-	if err != nil {
-		return getFallbackNotice(fmt.Sprintf("NatSpec notice error: %v", err), tx)
-	}
-
-	return
-}
-
-func getFallbackNotice(comment, tx string) string {
-	return fmt.Sprintf("About to submit transaction (%s): %s", comment, tx)
-}
-
-type transaction struct {
-	To   string `json:"to"`
-	Data string `json:"data"`
-}
-
-type jsonTx struct {
-	Params []transaction `json:"params"`
-}
-
-type contractInfo struct {
-	Source        string          `json:"source"`
-	Language      string          `json:"language"`
-	Version       string          `json:"compilerVersion"`
-	AbiDefinition json.RawMessage `json:"abiDefinition"`
-	UserDoc       userDoc         `json:"userDoc"`
-	DeveloperDoc  json.RawMessage `json:"developerDoc"`
-}
-
-func New(xeth *xeth.XEth, jsontx string, http *httpclient.HTTPClient) (self *NatSpec, err error) {
-
-	// extract contract address from tx
-	var tx jsonTx
-	err = json.Unmarshal([]byte(jsontx), &tx)
-	if err != nil {
-		return
-	}
-	t := tx.Params[0]
-	contractAddress := t.To
-
-	content, err := FetchDocsForContract(contractAddress, xeth, http)
-	if err != nil {
-		return
-	}
-
-	self, err = NewWithDocs(content, jsontx, t.Data)
-	return
-}
-
-// also called by admin.contractInfo.get
-func FetchDocsForContract(contractAddress string, xeth *xeth.XEth, client *httpclient.HTTPClient) (content []byte, err error) {
-	// retrieve contract hash from state
-	codehex := xeth.CodeAt(contractAddress)
-	codeb := xeth.CodeAtBytes(contractAddress)
-
-	if codehex == "0x" {
-		err = fmt.Errorf("contract (%v) not found", contractAddress)
-		return
-	}
-	codehash := common.BytesToHash(crypto.Keccak256(codeb))
-	// set up nameresolver with natspecreg + urlhint contract addresses
-	reg := registrar.New(xeth)
-
-	// resolve host via HashReg/UrlHint Resolver
-	hash, err := reg.HashToHash(codehash)
-	if err != nil {
-		return
-	}
-	if client.HasScheme("bzz") {
-		content, err = client.Get("bzz://"+hash.Hex()[2:], "")
-		if err == nil { // non-fatal
-			return
-		}
-		err = nil
-		//falling back to urlhint
-	}
-
-	uri, err := reg.HashToUrl(hash)
-	if err != nil {
-		return
-	}
-
-	// get content via http client and authenticate content using hash
-	content, err = client.GetAuthContent(uri, hash)
-	if err != nil {
-		return
-	}
-	return
-}
-
-func NewWithDocs(infoDoc []byte, tx string, data string) (self *NatSpec, err error) {
-
-	var contract contractInfo
-	err = json.Unmarshal(infoDoc, &contract)
-	if err != nil {
-		return
-	}
-
-	self = &NatSpec{
-		jsvm:       otto.New(),
-		abiDocJson: []byte(contract.AbiDefinition),
-		userDoc:    contract.UserDoc,
-		tx:         tx,
-		data:       data,
-	}
-
-	// load and require natspec js (but it is meant to be protected environment)
-	_, err = self.jsvm.Run(natspecJS)
-	if err != nil {
-		return
-	}
-	_, err = self.jsvm.Run("var natspec = require('natspec');")
-	return
-}
-
-// type abiDoc []method
-
-// type method struct {
-// 	Name   string  `json:name`
-// 	Inputs []input `json:inputs`
-// 	abiKey [8]byte
-// }
-
-// type input struct {
-// 	Name string `json:name`
-// 	Type string `json:type`
-// }
-
-// json skeleton for abi doc (contract method definitions)
-type method struct {
-	Notice string `json:notice`
-	name   string
-}
-
-type userDoc struct {
-	Methods map[string]*method `json:methods`
-}
-
-func (self *NatSpec) makeAbi2method(abiKey [8]byte) (meth *method) {
-	for signature, m := range self.userDoc.Methods {
-		name := strings.Split(signature, "(")[0]
-		hash := []byte(common.Bytes2Hex(crypto.Keccak256([]byte(signature))))
-		var key [8]byte
-		copy(key[:], hash[:8])
-		if bytes.Equal(key[:], abiKey[:]) {
-			meth = m
-			meth.name = name
-			return
-		}
-	}
-	return
-}
-
-func (self *NatSpec) Notice() (notice string, err error) {
-	var abiKey [8]byte
-	if len(self.data) < 10 {
-		err = fmt.Errorf("Invalid transaction data")
-		return
-	}
-	copy(abiKey[:], self.data[2:10])
-	meth := self.makeAbi2method(abiKey)
-
-	if meth == nil {
-		err = fmt.Errorf("abi key does not match any method")
-		return
-	}
-	notice, err = self.noticeForMethod(self.tx, meth.name, meth.Notice)
-	return
-}
-
-func (self *NatSpec) noticeForMethod(tx string, name, expression string) (notice string, err error) {
-
-	if _, err = self.jsvm.Run("var transaction = " + tx + ";"); err != nil {
-		return "", fmt.Errorf("natspec.js error setting transaction: %v", err)
-	}
-
-	if _, err = self.jsvm.Run("var abi = " + string(self.abiDocJson) + ";"); err != nil {
-		return "", fmt.Errorf("natspec.js error setting abi: %v", err)
-	}
-
-	if _, err = self.jsvm.Run("var method = '" + name + "';"); err != nil {
-		return "", fmt.Errorf("natspec.js error setting method: %v", err)
-	}
-
-	if _, err = self.jsvm.Run("var expression = \"" + expression + "\";"); err != nil {
-		return "", fmt.Errorf("natspec.js error setting expression: %v", err)
-	}
-
-	self.jsvm.Run("var call = {method: method,abi: abi,transaction: transaction};")
-	value, err := self.jsvm.Run("natspec.evaluateExpression(expression, call);")
-	if err != nil {
-		return "", fmt.Errorf("natspec.js error evaluating expression: %v", err)
-	}
-	evalError := "Natspec evaluation failed, wrong input params"
-	if value.String() == evalError {
-		return "", fmt.Errorf("natspec.js error evaluating expression: wrong input params in expression '%s'", expression)
-	}
-	if len(value.String()) == 0 {
-		return "", fmt.Errorf("natspec.js error evaluating expression")
-	}
-
-	return value.String(), nil
-
-}

+ 0 - 357
common/natspec/natspec_e2e_test.go

@@ -1,357 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of the go-ethereum library.
-//
-// The go-ethereum library is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The go-ethereum library 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 Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
-
-// +build ignore
-
-package natspec
-
-import (
-	"fmt"
-	"io/ioutil"
-	"math/big"
-	"os"
-	"path/filepath"
-	"runtime"
-	"testing"
-	"time"
-
-	"github.com/ethereum/go-ethereum/accounts"
-	"github.com/ethereum/go-ethereum/common"
-	"github.com/ethereum/go-ethereum/common/httpclient"
-	"github.com/ethereum/go-ethereum/common/registrar"
-	"github.com/ethereum/go-ethereum/core"
-	"github.com/ethereum/go-ethereum/crypto"
-	"github.com/ethereum/go-ethereum/eth"
-	"github.com/ethereum/go-ethereum/ethdb"
-	"github.com/ethereum/go-ethereum/event"
-	"github.com/ethereum/go-ethereum/node"
-	xe "github.com/ethereum/go-ethereum/xeth"
-)
-
-const (
-	testAddress = "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182"
-	testBalance = "10000000000000000000"
-	testKey     = "e6fab74a43941f82d89cb7faa408e227cdad3153c4720e540e855c19b15e6674"
-
-	testFileName = "long_file_name_for_testing_registration_of_URLs_longer_than_32_bytes.content"
-
-	testNotice = "Register key `utils.toHex(_key)` <- content `utils.toHex(_content)`"
-
-	testExpNotice = "Register key 0xadd1a7d961cff0242089674ec2ef6fca671ab15e1fe80e38859fc815b98d88ab <- content 0xb3a2dea218de5d8bbe6c4645aadbf67b5ab00ecb1a9ec95dbdad6a0eed3e41a7"
-
-	testExpNotice2 = `About to submit transaction (NatSpec notice error: abi key does not match any method): {"params":[{"to":"%s","data": "0x31e12c20"}]}`
-
-	testExpNotice3 = `About to submit transaction (no NatSpec info found for contract: HashToHash: content hash not found for '0x1392c62d05b2d149e22a339c531157ae06b44d39a674cce500064b12b9aeb019'): {"params":[{"to":"%s","data": "0x300a3bbfb3a2dea218de5d8bbe6c4645aadbf67b5ab00ecb1a9ec95dbdad6a0eed3e41a7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066696c653a2f2f2f746573742e636f6e74656e74"}]}`
-)
-
-const (
-	testUserDoc = `
-{
-  "methods": {
-    "register(uint256,uint256)": {
-      "notice":  "` + testNotice + `"
-    }
-  },
-  "invariants": [
-    { "notice": "" }
-  ],
-  "construction": [
-    { "notice": "" }
-  ]
-}
-`
-	testAbiDefinition = `
-[{
-  "name": "register",
-  "constant": false,
-  "type": "function",
-  "inputs": [{
-    "name": "_key",
-    "type": "uint256"
-  }, {
-    "name": "_content",
-    "type": "uint256"
-  }],
-  "outputs": []
-}]
-`
-
-	testContractInfo = `
-{
-	"userDoc": ` + testUserDoc + `,
-	"abiDefinition": ` + testAbiDefinition + `
-}
-`
-)
-
-type testFrontend struct {
-	t           *testing.T
-	ethereum    *eth.Ethereum
-	xeth        *xe.XEth
-	wait        chan *big.Int
-	lastConfirm string
-	wantNatSpec bool
-}
-
-func (self *testFrontend) AskPassword() (string, bool) {
-	return "", true
-}
-
-func (self *testFrontend) UnlockAccount(acc []byte) bool {
-	self.ethereum.AccountManager().Unlock(common.BytesToAddress(acc), "password")
-	return true
-}
-
-func (self *testFrontend) ConfirmTransaction(tx string) bool {
-	if self.wantNatSpec {
-		client := httpclient.New("/tmp/")
-		self.lastConfirm = GetNotice(self.xeth, tx, client)
-	}
-	return true
-}
-
-func testEth(t *testing.T) (ethereum *eth.Ethereum, err error) {
-
-	tmp, err := ioutil.TempDir("", "natspec-test")
-	if err != nil {
-		t.Fatal(err)
-	}
-	db, _ := ethdb.NewMemDatabase()
-	addr := common.HexToAddress(testAddress)
-	core.WriteGenesisBlockForTesting(db, core.GenesisAccount{addr, common.String2Big(testBalance)})
-	ks := crypto.NewKeyStorePassphrase(filepath.Join(tmp, "keystore"), crypto.LightScryptN, crypto.LightScryptP)
-	am := accounts.NewManager(ks)
-	keyb, err := crypto.HexToECDSA(testKey)
-	if err != nil {
-		t.Fatal(err)
-	}
-	key := crypto.NewKeyFromECDSA(keyb)
-	err = ks.StoreKey(key, "")
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	err = am.Unlock(key.Address, "")
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	// only use minimalistic stack with no networking
-	return eth.New(&node.ServiceContext{EventMux: new(event.TypeMux)}, &eth.Config{
-		AccountManager:          am,
-		Etherbase:               common.HexToAddress(testAddress),
-		PowTest:                 true,
-		TestGenesisState:        db,
-		GpoMinGasPrice:          common.Big1,
-		GpobaseCorrectionFactor: 1,
-		GpoMaxGasPrice:          common.Big1,
-	})
-}
-
-func testInit(t *testing.T) (self *testFrontend) {
-	// initialise and start minimal ethereum stack
-	ethereum, err := testEth(t)
-	if err != nil {
-		t.Errorf("error creating ethereum: %v", err)
-		return
-	}
-	err = ethereum.Start(nil)
-	if err != nil {
-		t.Errorf("error starting ethereum: %v", err)
-		return
-	}
-
-	// mock frontend
-	self = &testFrontend{t: t, ethereum: ethereum}
-	self.xeth = xe.New(nil, self)
-	self.wait = self.xeth.UpdateState()
-	addr, _ := self.ethereum.Etherbase()
-
-	// initialise the registry contracts
-	reg := registrar.New(self.xeth)
-	registrar.GlobalRegistrarAddr = "0x0"
-
-	var txG, txH, txU string
-	txG, err = reg.SetGlobalRegistrar("", addr)
-	if err != nil {
-		t.Fatalf("error creating GlobalRegistrar: %v", err)
-	}
-	if !processTxs(self, t, 1) {
-		t.Fatalf("error mining txs")
-	}
-	recG := self.xeth.GetTxReceipt(common.HexToHash(txG))
-	if recG == nil {
-		t.Fatalf("blockchain error creating GlobalRegistrar")
-	}
-	registrar.GlobalRegistrarAddr = recG.ContractAddress.Hex()
-
-	txH, err = reg.SetHashReg("", addr)
-	if err != nil {
-		t.Errorf("error creating HashReg: %v", err)
-	}
-	if !processTxs(self, t, 1) {
-		t.Errorf("error mining txs")
-	}
-	recH := self.xeth.GetTxReceipt(common.HexToHash(txH))
-	if recH == nil {
-		t.Fatalf("blockchain error creating HashReg")
-	}
-	registrar.HashRegAddr = recH.ContractAddress.Hex()
-
-	txU, err = reg.SetUrlHint("", addr)
-	if err != nil {
-		t.Errorf("error creating UrlHint: %v", err)
-	}
-	if !processTxs(self, t, 1) {
-		t.Errorf("error mining txs")
-	}
-	recU := self.xeth.GetTxReceipt(common.HexToHash(txU))
-	if recU == nil {
-		t.Fatalf("blockchain error creating UrlHint")
-	}
-	registrar.UrlHintAddr = recU.ContractAddress.Hex()
-
-	return
-}
-
-// end to end test
-func TestNatspecE2E(t *testing.T) {
-	t.Skip()
-
-	tf := testInit(t)
-	defer tf.ethereum.Stop()
-	addr, _ := tf.ethereum.Etherbase()
-
-	// create a contractInfo file (mock cloud-deployed contract metadocs)
-	// incidentally this is the info for the HashReg contract itself
-	ioutil.WriteFile("/tmp/"+testFileName, []byte(testContractInfo), os.ModePerm)
-	dochash := crypto.Keccak256Hash([]byte(testContractInfo))
-
-	// take the codehash for the contract we wanna test
-	codeb := tf.xeth.CodeAtBytes(registrar.HashRegAddr)
-	codehash := crypto.Keccak256Hash(codeb)
-
-	reg := registrar.New(tf.xeth)
-	_, err := reg.SetHashToHash(addr, codehash, dochash)
-	if err != nil {
-		t.Errorf("error registering: %v", err)
-	}
-	_, err = reg.SetUrlToHash(addr, dochash, "file:///"+testFileName)
-	if err != nil {
-		t.Errorf("error registering: %v", err)
-	}
-	if !processTxs(tf, t, 5) {
-		return
-	}
-
-	// NatSpec info for register method of HashReg contract installed
-	// now using the same transactions to check confirm messages
-
-	tf.wantNatSpec = true // this is set so now the backend uses natspec confirmation
-	_, err = reg.SetHashToHash(addr, codehash, dochash)
-	if err != nil {
-		t.Errorf("error calling contract registry: %v", err)
-	}
-
-	fmt.Printf("GlobalRegistrar: %v, HashReg: %v, UrlHint: %v\n", registrar.GlobalRegistrarAddr, registrar.HashRegAddr, registrar.UrlHintAddr)
-	if tf.lastConfirm != testExpNotice {
-		t.Errorf("Wrong confirm message. expected\n'%v', got\n'%v'", testExpNotice, tf.lastConfirm)
-	}
-
-	// test unknown method
-	exp := fmt.Sprintf(testExpNotice2, registrar.HashRegAddr)
-	_, err = reg.SetOwner(addr)
-	if err != nil {
-		t.Errorf("error setting owner: %v", err)
-	}
-
-	if tf.lastConfirm != exp {
-		t.Errorf("Wrong confirm message, expected\n'%v', got\n'%v'", exp, tf.lastConfirm)
-	}
-
-	// test unknown contract
-	exp = fmt.Sprintf(testExpNotice3, registrar.UrlHintAddr)
-
-	_, err = reg.SetUrlToHash(addr, dochash, "file:///test.content")
-	if err != nil {
-		t.Errorf("error registering: %v", err)
-	}
-
-	if tf.lastConfirm != exp {
-		t.Errorf("Wrong confirm message, expected '%v', got '%v'", exp, tf.lastConfirm)
-	}
-
-}
-
-func pendingTransactions(repl *testFrontend, t *testing.T) (txc int64, err error) {
-	txs := repl.ethereum.TxPool().GetTransactions()
-	return int64(len(txs)), nil
-}
-
-func processTxs(repl *testFrontend, t *testing.T, expTxc int) bool {
-	var txc int64
-	var err error
-	for i := 0; i < 50; i++ {
-		txc, err = pendingTransactions(repl, t)
-		if err != nil {
-			t.Errorf("unexpected error checking pending transactions: %v", err)
-			return false
-		}
-		if expTxc < int(txc) {
-			t.Errorf("too many pending transactions: expected %v, got %v", expTxc, txc)
-			return false
-		} else if expTxc == int(txc) {
-			break
-		}
-		time.Sleep(100 * time.Millisecond)
-	}
-	if int(txc) != expTxc {
-		t.Errorf("incorrect number of pending transactions, expected %v, got %v", expTxc, txc)
-		return false
-	}
-
-	err = repl.ethereum.StartMining(runtime.NumCPU(), "")
-	if err != nil {
-		t.Errorf("unexpected error mining: %v", err)
-		return false
-	}
-	defer repl.ethereum.StopMining()
-
-	timer := time.NewTimer(100 * time.Second)
-	height := new(big.Int).Add(repl.xeth.CurrentBlock().Number(), big.NewInt(1))
-	repl.wait <- height
-	select {
-	case <-timer.C:
-		// if times out make sure the xeth loop does not block
-		go func() {
-			select {
-			case repl.wait <- nil:
-			case <-repl.wait:
-			}
-		}()
-	case <-repl.wait:
-	}
-	txc, err = pendingTransactions(repl, t)
-	if err != nil {
-		t.Errorf("unexpected error checking pending transactions: %v", err)
-		return false
-	}
-	if txc != 0 {
-		t.Errorf("%d trasactions were not mined", txc)
-		return false
-	}
-	return true
-}

File diff suppressed because it is too large
+ 0 - 18
common/natspec/natspec_js.go


+ 0 - 160
common/natspec/natspec_test.go

@@ -1,160 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of the go-ethereum library.
-//
-// The go-ethereum library is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The go-ethereum library 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 Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
-
-// +build ignore
-
-package natspec
-
-import (
-	"testing"
-)
-
-func makeInfoDoc(desc string) []byte {
-	return []byte(`
-{
-  "source": "contract test { }",
-  "language": "Solidity",
-  "compilerVersion": "1",
-  "userDoc": {
-    "methods": {
-      "multiply(uint256)": {
-        "notice":  "` + desc + `"
-      },
-      "balance(address)": {
-        "notice": "` + "`(balanceInmGAV / 1000).fixed(0,3)`" + ` GAV is the total funds available to ` + "`who.address()`." + `"
-      }
-    },
-    "invariants": [
-      { "notice": "The sum total amount of GAV in the system is 1 million." }
-    ],
-    "construction": [
-      { "notice": "Endows ` + "`message.caller.address()`" + ` with 1m GAV." }
-    ]
-  },
-  "abiDefinition": [{
-    "name": "multiply",
-    "constant": false,
-    "type": "function",
-    "inputs": [{
-      "name": "a",
-      "type": "uint256"
-    }],
-    "outputs": [{
-      "name": "d",
-      "type": "uint256"
-    }]
-  }]
-}`)
-}
-
-var data = "0xc6888fa1000000000000000000000000000000000000000000000000000000000000007a"
-
-var tx = `
-{
-  "params": [{
-      "to": "0x8521742d3f456bd237e312d6e30724960f72517a",
-      "data": "0xc6888fa1000000000000000000000000000000000000000000000000000000000000007a"
-  }],
-}
-`
-
-func TestNotice(t *testing.T) {
-
-	desc := "Will multiply `a` by 7 and return `a * 7`."
-	expected := "Will multiply 122 by 7 and return 854."
-
-	infodoc := makeInfoDoc(desc)
-	ns, err := NewWithDocs(infodoc, tx, data)
-	if err != nil {
-		t.Errorf("New: error: %v", err)
-		return
-	}
-
-	notice, err := ns.Notice()
-
-	if err != nil {
-		t.Errorf("expected no error, got %v", err)
-	}
-
-	if notice != expected {
-		t.Errorf("incorrect notice. expected %v, got %v", expected, notice)
-	}
-}
-
-// test missing method
-func TestMissingMethod(t *testing.T) {
-
-	desc := "Will multiply `a` by 7 and return `a * 7`."
-	expected := "natspec.js error evaluating expression: Natspec evaluation failed, method does not exist"
-
-	infodoc := makeInfoDoc(desc)
-	ns, err := NewWithDocs(infodoc, tx, data)
-	if err != nil {
-		t.Errorf("New: error: %v", err)
-	}
-
-	notice, err := ns.noticeForMethod(tx, "missing_method", "")
-
-	if err == nil {
-		t.Errorf("expected error, got nothing (notice: '%v')", notice)
-	} else {
-		if err.Error() != expected {
-			t.Errorf("expected error '%s' got '%v' (notice: '%v')", expected, err, notice)
-		}
-	}
-}
-
-// test invalid desc
-
-func TestInvalidDesc(t *testing.T) {
-
-	desc := "Will multiply 122 by \"7\" and return 854."
-	expected := "invalid character '7' after object key:value pair"
-
-	infodoc := makeInfoDoc(desc)
-	_, err := NewWithDocs(infodoc, tx, data)
-	if err == nil {
-		t.Errorf("expected error, got nothing", err)
-	} else {
-		if err.Error() != expected {
-			t.Errorf("expected error '%s' got '%v'", expected, err)
-		}
-	}
-}
-
-// test wrong input params
-func TestWrongInputParams(t *testing.T) {
-
-	desc := "Will multiply `e` by 7 and return `a * 7`."
-	expected := "natspec.js error evaluating expression: Natspec evaluation failed, wrong input params"
-
-	infodoc := makeInfoDoc(desc)
-	ns, err := NewWithDocs(infodoc, tx, data)
-	if err != nil {
-		t.Errorf("New: error: %v", err)
-	}
-
-	notice, err := ns.Notice()
-
-	if err == nil {
-		t.Errorf("expected error, got nothing (notice: '%v')", notice)
-	} else {
-		if err.Error() != expected {
-			t.Errorf("expected error '%s' got '%v' (notice: '%v')", expected, err, notice)
-		}
-	}
-
-}

+ 2 - 2
eth/api.go

@@ -102,7 +102,7 @@ func (s *PublicMinerAPI) SubmitWork(nonce rpc.HexNumber, solution, digest common
 // result[2], 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty
 func (s *PublicMinerAPI) GetWork() (work [3]string, err error) {
 	if !s.e.IsMining() {
-		if err := s.e.StartMining(0, ""); err != nil {
+		if err := s.e.StartMining(0); err != nil {
 			return work, err
 		}
 	}
@@ -141,7 +141,7 @@ func (s *PrivateMinerAPI) Start(threads *rpc.HexNumber) (bool, error) {
 		threads = rpc.NewHexNumber(runtime.NumCPU())
 	}
 
-	err := s.e.StartMining(threads.Int(), "")
+	err := s.e.StartMining(threads.Int())
 	if err == nil {
 		return true, nil
 	}

+ 11 - 0
eth/backend.go

@@ -362,6 +362,17 @@ func (self *Ethereum) SetEtherbase(etherbase common.Address) {
 	self.miner.SetEtherbase(etherbase)
 }
 
+func (s *Ethereum) StartMining(threads int) error {
+	eb, err := s.Etherbase()
+	if err != nil {
+		err = fmt.Errorf("Cannot start mining without etherbase address: %v", err)
+		glog.V(logger.Error).Infoln(err)
+		return err
+	}
+	go s.miner.Start(eb, threads)
+	return nil
+}
+
 func (s *Ethereum) StopMining()         { s.miner.Stop() }
 func (s *Ethereum) IsMining() bool      { return s.miner.Mining() }
 func (s *Ethereum) Miner() *miner.Miner { return s.miner }

+ 0 - 54
eth/cpu_mining.go

@@ -1,54 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of the go-ethereum library.
-//
-// The go-ethereum library is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The go-ethereum library 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 Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
-
-// +build !opencl
-
-package eth
-
-import (
-	"errors"
-	"fmt"
-
-	"github.com/ethereum/go-ethereum/logger"
-	"github.com/ethereum/go-ethereum/logger/glog"
-)
-
-const disabledInfo = "Set GO_OPENCL and re-build to enable."
-
-func (s *Ethereum) StartMining(threads int, gpus string) error {
-	eb, err := s.Etherbase()
-	if err != nil {
-		err = fmt.Errorf("Cannot start mining without etherbase address: %v", err)
-		glog.V(logger.Error).Infoln(err)
-		return err
-	}
-
-	if gpus != "" {
-		return errors.New("GPU mining disabled. " + disabledInfo)
-	}
-
-	// CPU mining
-	go s.miner.Start(eb, threads)
-	return nil
-}
-
-func GPUBench(gpuid uint64) {
-	fmt.Println("GPU mining disabled. " + disabledInfo)
-}
-
-func PrintOpenCLDevices() {
-	fmt.Println("OpenCL disabled. " + disabledInfo)
-}

+ 0 - 102
eth/gpu_mining.go

@@ -1,102 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of the go-ethereum library.
-//
-// The go-ethereum library is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The go-ethereum library 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 Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
-
-// +build opencl
-
-package eth
-
-import (
-	"fmt"
-	"math/big"
-	"strconv"
-	"strings"
-	"time"
-
-	"github.com/ethereum/ethash"
-	"github.com/ethereum/go-ethereum/common"
-	"github.com/ethereum/go-ethereum/core/types"
-	"github.com/ethereum/go-ethereum/logger"
-	"github.com/ethereum/go-ethereum/logger/glog"
-	"github.com/ethereum/go-ethereum/miner"
-)
-
-func (s *Ethereum) StartMining(threads int, gpus string) error {
-	eb, err := s.Etherbase()
-	if err != nil {
-		err = fmt.Errorf("Cannot start mining without etherbase address: %v", err)
-		glog.V(logger.Error).Infoln(err)
-		return err
-	}
-
-	// GPU mining
-	if gpus != "" {
-		var ids []int
-		for _, s := range strings.Split(gpus, ",") {
-			i, err := strconv.Atoi(s)
-			if err != nil {
-				return fmt.Errorf("Invalid GPU id(s): %v", err)
-			}
-			if i < 0 {
-				return fmt.Errorf("Invalid GPU id: %v", i)
-			}
-			ids = append(ids, i)
-		}
-
-		// TODO: re-creating miner is a bit ugly
-		s.miner = miner.New(s, s.chainConfig, s.EventMux(), ethash.NewCL(ids))
-		go s.miner.Start(eb, len(ids))
-		return nil
-	}
-
-	// CPU mining
-	go s.miner.Start(eb, threads)
-	return nil
-}
-
-func GPUBench(gpuid uint64) {
-	e := ethash.NewCL([]int{int(gpuid)})
-
-	var h common.Hash
-	bogoHeader := &types.Header{
-		ParentHash: h,
-		Number:     big.NewInt(int64(42)),
-		Difficulty: big.NewInt(int64(999999999999999)),
-	}
-	bogoBlock := types.NewBlock(bogoHeader, nil, nil, nil)
-
-	err := ethash.InitCL(bogoBlock.NumberU64(), e)
-	if err != nil {
-		fmt.Println("OpenCL init error: ", err)
-		return
-	}
-
-	stopChan := make(chan struct{})
-	reportHashRate := func() {
-		for {
-			time.Sleep(3 * time.Second)
-			fmt.Printf("hashes/s : %v\n", e.GetHashrate())
-		}
-	}
-	fmt.Printf("Starting benchmark (%v seconds)\n", 60)
-	go reportHashRate()
-	go e.Search(bogoBlock, stopChan, 0)
-	time.Sleep(60 * time.Second)
-	fmt.Println("OK.")
-}
-
-func PrintOpenCLDevices() {
-	ethash.PrintDevices()
-}

+ 4 - 5
internal/build/util.go

@@ -55,15 +55,14 @@ func GOPATH() string {
 	if len(path) == 0 {
 		log.Fatal("GOPATH is not set")
 	}
-	// Ensure Godeps workspace is present in the path.
-	godeps, _ := filepath.Abs(filepath.Join("Godeps", "_workspace"))
+	// Ensure that our internal vendor folder in on GOPATH
+	vendor, _ := filepath.Abs(filepath.Join("build", "_vendor"))
 	for _, dir := range path {
-		if dir == godeps {
+		if dir == vendor {
 			return strings.Join(path, string(filepath.ListSeparator))
 		}
 	}
-	newpath := append(path[:1], godeps)
-	newpath = append(newpath, path[1:]...)
+	newpath := append(path[:1], append([]string{vendor}, path[1:]...)...)
 	return strings.Join(newpath, string(filepath.ListSeparator))
 }
 

+ 40 - 0
vendor.conf

@@ -0,0 +1,40 @@
+# package
+github.com/ethereum/go-ethereum
+
+# import
+github.com/cespare/cp	165db2f
+github.com/davecgh/go-spew	v1.0.0-3-g6d21280
+github.com/ethereum/ethash	v23.1-249-g214d4c0
+github.com/fatih/color	v1.1.0-4-gbf82308
+github.com/gizak/termui	d29684e
+github.com/golang/snappy	d9eb7a3
+github.com/hashicorp/golang-lru	0a025b7
+github.com/huin/goupnp	97f671e
+github.com/jackpal/go-nat-pmp	v1.0.1-4-g1fa385a
+github.com/mattn/go-colorable	v0.0.6-6-g6c903ff
+github.com/mattn/go-isatty	66b8e73
+github.com/mattn/go-runewidth	v0.0.1-10-g737072b
+github.com/mitchellh/go-wordwrap	ad45545
+github.com/nsf/termbox-go	b6acae5
+github.com/pborman/uuid	v1.0-17-g3d4f2ba
+github.com/peterh/liner	8975875
+github.com/rcrowley/go-metrics	ab2277b
+github.com/rjeczalik/notify	7e20c15
+github.com/robertkrimen/otto	bf1c379
+github.com/rs/cors	v1.0
+github.com/rs/xhandler	v1.0-1-ged27b6f
+github.com/syndtr/goleveldb	6b4daa5
+golang.org/x/crypto	ca7e7f1
+golang.org/x/net	b336a97
+golang.org/x/sys	c200b10
+golang.org/x/text	a8b3843
+golang.org/x/tools	0db92ca
+gopkg.in/check.v1	4f90aea
+gopkg.in/fatih/set.v0	v0.1.0-3-g27c4092
+gopkg.in/karalabe/cookiejar.v2	8dcd6a7
+gopkg.in/natefinch/npipe.v2	c1b8fa8
+gopkg.in/sourcemap.v1	v1.0.3
+gopkg.in/urfave/cli.v1	v1.18.1
+
+# exclude
+-golang.org/x/net/context

+ 0 - 0
Godeps/_workspace/src/github.com/cespare/cp/LICENSE.txt → vendor/github.com/cespare/cp/LICENSE.txt


+ 0 - 0
Godeps/_workspace/src/github.com/cespare/cp/README.md → vendor/github.com/cespare/cp/README.md


+ 0 - 0
Godeps/_workspace/src/github.com/cespare/cp/cp.go → vendor/github.com/cespare/cp/cp.go


+ 0 - 0
Godeps/_workspace/src/gopkg.in/natefinch/npipe.v2/.gitignore → vendor/github.com/davecgh/go-spew/.gitignore


+ 14 - 0
vendor/github.com/davecgh/go-spew/.travis.yml

@@ -0,0 +1,14 @@
+language: go
+go:
+    - 1.5.4
+    - 1.6.3
+    - 1.7
+install:
+    - go get -v golang.org/x/tools/cmd/cover
+script:
+    - go test -v -tags=safe ./spew
+    - go test -v -tags=testcgo ./spew -covermode=count -coverprofile=profile.cov
+after_success:
+    - go get -v github.com/mattn/goveralls
+    - export PATH=$PATH:$HOME/gopath/bin
+    - goveralls -coverprofile=profile.cov -service=travis-ci

+ 2 - 0
Godeps/_workspace/src/github.com/davecgh/go-spew/LICENSE → vendor/github.com/davecgh/go-spew/LICENSE

@@ -1,3 +1,5 @@
+ISC License
+
 Copyright (c) 2012-2013 Dave Collins <dave@davec.name>
 
 Permission to use, copy, modify, and distribute this software for any

+ 194 - 0
vendor/github.com/davecgh/go-spew/README.md

@@ -0,0 +1,194 @@
+go-spew
+=======
+
+[![Build Status](https://travis-ci.org/davecgh/go-spew.png?branch=master)]
+(https://travis-ci.org/davecgh/go-spew) [![Coverage Status]
+(https://coveralls.io/repos/davecgh/go-spew/badge.png?branch=master)]
+(https://coveralls.io/r/davecgh/go-spew?branch=master)
+
+Go-spew implements a deep pretty printer for Go data structures to aid in
+debugging.  A comprehensive suite of tests with 100% test coverage is provided
+to ensure proper functionality.  See `test_coverage.txt` for the gocov coverage
+report.  Go-spew is licensed under the liberal ISC license, so it may be used in
+open source or commercial projects.
+
+If you're interested in reading about how this package came to life and some
+of the challenges involved in providing a deep pretty printer, there is a blog
+post about it
+[here](https://web.archive.org/web/20160304013555/https://blog.cyphertite.com/go-spew-a-journey-into-dumping-go-data-structures/).
+
+## Documentation
+
+[![GoDoc](https://godoc.org/github.com/davecgh/go-spew/spew?status.png)]
+(http://godoc.org/github.com/davecgh/go-spew/spew)
+
+Full `go doc` style documentation for the project can be viewed online without
+installing this package by using the excellent GoDoc site here:
+http://godoc.org/github.com/davecgh/go-spew/spew
+
+You can also view the documentation locally once the package is installed with
+the `godoc` tool by running `godoc -http=":6060"` and pointing your browser to
+http://localhost:6060/pkg/github.com/davecgh/go-spew/spew
+
+## Installation
+
+```bash
+$ go get -u github.com/davecgh/go-spew/spew
+```
+
+## Quick Start
+
+Add this import line to the file you're working in:
+
+```Go
+import "github.com/davecgh/go-spew/spew"
+```
+
+To dump a variable with full newlines, indentation, type, and pointer
+information use Dump, Fdump, or Sdump:
+
+```Go
+spew.Dump(myVar1, myVar2, ...)
+spew.Fdump(someWriter, myVar1, myVar2, ...)
+str := spew.Sdump(myVar1, myVar2, ...)
+```
+
+Alternatively, if you would prefer to use format strings with a compacted inline
+printing style, use the convenience wrappers Printf, Fprintf, etc with %v (most
+compact), %+v (adds pointer addresses), %#v (adds types), or %#+v (adds types
+and pointer addresses): 
+
+```Go
+spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2)
+spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4)
+spew.Fprintf(someWriter, "myVar1: %v -- myVar2: %+v", myVar1, myVar2)
+spew.Fprintf(someWriter, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4)
+```
+
+## Debugging a Web Application Example
+
+Here is an example of how you can use `spew.Sdump()` to help debug a web application. Please be sure to wrap your output using the `html.EscapeString()` function for safety reasons. You should also only use this debugging technique in a development environment, never in production.
+
+```Go
+package main
+
+import (
+    "fmt"
+    "html"
+    "net/http"
+
+    "github.com/davecgh/go-spew/spew"
+)
+
+func handler(w http.ResponseWriter, r *http.Request) {
+    w.Header().Set("Content-Type", "text/html")
+    fmt.Fprintf(w, "Hi there, %s!", r.URL.Path[1:])
+    fmt.Fprintf(w, "<!--\n" + html.EscapeString(spew.Sdump(w)) + "\n-->")
+}
+
+func main() {
+    http.HandleFunc("/", handler)
+    http.ListenAndServe(":8080", nil)
+}
+```
+
+## Sample Dump Output
+
+```
+(main.Foo) {
+ unexportedField: (*main.Bar)(0xf84002e210)({
+  flag: (main.Flag) flagTwo,
+  data: (uintptr) <nil>
+ }),
+ ExportedField: (map[interface {}]interface {}) {
+  (string) "one": (bool) true
+ }
+}
+([]uint8) {
+ 00000000  11 12 13 14 15 16 17 18  19 1a 1b 1c 1d 1e 1f 20  |............... |
+ 00000010  21 22 23 24 25 26 27 28  29 2a 2b 2c 2d 2e 2f 30  |!"#$%&'()*+,-./0|
+ 00000020  31 32                                             |12|
+}
+```
+
+## Sample Formatter Output
+
+Double pointer to a uint8:
+```
+	  %v: <**>5
+	 %+v: <**>(0xf8400420d0->0xf8400420c8)5
+	 %#v: (**uint8)5
+	%#+v: (**uint8)(0xf8400420d0->0xf8400420c8)5
+```
+
+Pointer to circular struct with a uint8 field and a pointer to itself:
+```
+	  %v: <*>{1 <*><shown>}
+	 %+v: <*>(0xf84003e260){ui8:1 c:<*>(0xf84003e260)<shown>}
+	 %#v: (*main.circular){ui8:(uint8)1 c:(*main.circular)<shown>}
+	%#+v: (*main.circular)(0xf84003e260){ui8:(uint8)1 c:(*main.circular)(0xf84003e260)<shown>}
+```
+
+## Configuration Options
+
+Configuration of spew is handled by fields in the ConfigState type. For
+convenience, all of the top-level functions use a global state available via the
+spew.Config global.
+
+It is also possible to create a ConfigState instance that provides methods
+equivalent to the top-level functions. This allows concurrent configuration
+options. See the ConfigState documentation for more details.
+
+```
+* Indent
+	String to use for each indentation level for Dump functions.
+	It is a single space by default.  A popular alternative is "\t".
+
+* MaxDepth
+	Maximum number of levels to descend into nested data structures.
+	There is no limit by default.
+
+* DisableMethods
+	Disables invocation of error and Stringer interface methods.
+	Method invocation is enabled by default.
+
+* DisablePointerMethods
+	Disables invocation of error and Stringer interface methods on types
+	which only accept pointer receivers from non-pointer variables.  This option
+	relies on access to the unsafe package, so it will not have any effect when
+	running in environments without access to the unsafe package such as Google
+	App Engine or with the "safe" build tag specified.
+	Pointer method invocation is enabled by default.
+
+* ContinueOnMethod
+	Enables recursion into types after invoking error and Stringer interface
+	methods. Recursion after method invocation is disabled by default.
+
+* SortKeys
+	Specifies map keys should be sorted before being printed. Use
+	this to have a more deterministic, diffable output.  Note that
+	only native types (bool, int, uint, floats, uintptr and string)
+	and types which implement error or Stringer interfaces are supported,
+	with other types sorted according to the reflect.Value.String() output
+	which guarantees display stability.  Natural map order is used by
+	default.
+
+* SpewKeys
+	SpewKeys specifies that, as a last resort attempt, map keys should be
+	spewed to strings and sorted by those strings.  This is only considered
+	if SortKeys is true.
+
+```
+
+## Unsafe Package Dependency
+
+This package relies on the unsafe package to perform some of the more advanced
+features, however it also supports a "limited" mode which allows it to work in
+environments where the unsafe package is not available.  By default, it will
+operate in this mode on Google App Engine and when compiled with GopherJS.  The
+"safe" build tag may also be specified to force the package to build without
+using the unsafe package.
+
+## License
+
+Go-spew is licensed under the liberal ISC License.

+ 22 - 0
vendor/github.com/davecgh/go-spew/cov_report.sh

@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# This script uses gocov to generate a test coverage report.
+# The gocov tool my be obtained with the following command:
+#   go get github.com/axw/gocov/gocov
+#
+# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH.
+
+# Check for gocov.
+if ! type gocov >/dev/null 2>&1; then
+	echo >&2 "This script requires the gocov tool."
+	echo >&2 "You may obtain it with the following command:"
+	echo >&2 "go get github.com/axw/gocov/gocov"
+	exit 1
+fi
+
+# Only run the cgo tests if gcc is installed.
+if type gcc >/dev/null 2>&1; then
+	(cd spew && gocov test -tags testcgo | gocov report)
+else
+	(cd spew && gocov test | gocov report)
+fi

+ 4 - 3
Godeps/_workspace/src/github.com/davecgh/go-spew/spew/bypass.go → vendor/github.com/davecgh/go-spew/spew/bypass.go

@@ -13,9 +13,10 @@
 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 // NOTE: Due to the following build constraints, this file will only be compiled
-// when the code is not running on Google App Engine and "-tags disableunsafe"
-// is not added to the go build command line.
-// +build !appengine,!disableunsafe
+// when the code is not running on Google App Engine, compiled by GopherJS, and
+// "-tags safe" is not added to the go build command line.  The "disableunsafe"
+// tag is deprecated and thus should not be used.
+// +build !js,!appengine,!safe,!disableunsafe
 
 package spew
 

+ 4 - 3
Godeps/_workspace/src/github.com/davecgh/go-spew/spew/bypasssafe.go → vendor/github.com/davecgh/go-spew/spew/bypasssafe.go

@@ -13,9 +13,10 @@
 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 // NOTE: Due to the following build constraints, this file will only be compiled
-// when either the code is running on Google App Engine or "-tags disableunsafe"
-// is added to the go build command line.
-// +build appengine disableunsafe
+// when the code is running on Google App Engine, compiled by GopherJS, or
+// "-tags safe" is added to the go build command line.  The "disableunsafe"
+// tag is deprecated and thus should not be used.
+// +build js appengine safe disableunsafe
 
 package spew
 

+ 0 - 0
Godeps/_workspace/src/github.com/davecgh/go-spew/spew/common.go → vendor/github.com/davecgh/go-spew/spew/common.go


+ 1 - 1
Godeps/_workspace/src/github.com/davecgh/go-spew/spew/config.go → vendor/github.com/davecgh/go-spew/spew/config.go

@@ -64,7 +64,7 @@ type ConfigState struct {
 	// inside these interface methods.  As a result, this option relies on
 	// access to the unsafe package, so it will not have any effect when
 	// running in environments without access to the unsafe package such as
-	// Google App Engine or with the "disableunsafe" build tag specified.
+	// Google App Engine or with the "safe" build tag specified.
 	DisablePointerMethods bool
 
 	// ContinueOnMethod specifies whether or not recursion should continue once

Some files were not shown because too many files changed in this diff